Suport pentru formate
Aspose.3D FOSS pentru Python poate citi și scrie șapte formate 3D utilizând o singură reprezentare a scenei în memorie. Biblioteca traduce fiecare format într-un obiect comun Scene la încărcare și serializa acel obiect înapoi în formatul țintă la salvare. Aceasta înseamnă că o scenă încărcată din OBJ poate fi salvată direct în glTF fără niciun pas intermediar de conversie.
Formate suportate
| Format | Extensie | Citire | Scriere | Clasa Options | Note |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Da | Da | ObjLoadOptions | .mtl încărcarea materialului este suportată |
| STL (binar) | .stl | Da | Da | StlSaveOptions | Citire binară și ASCII; salvarea implicită este binară |
| STL (ASCII) | .stl | Da | Da | StlSaveOptions | Verificare round-trip |
| glTF 2.0 | .gltf | Da | Da | GltfSaveOptions | Grafic complet al scenei, materialele și animațiile păstrate |
| GLB (binary glTF) | .glb | Da | Da | GltfSaveOptions | Container binar cu un singur fișier |
| COLLADA | .dae | Da | Da | ColladaLoadOptions / ColladaSaveOptions | Ierarhia scenei și materialele |
| 3MF | .3mf | Da | Da | ThreeMfSaveOptions | Format de fabricație aditivă |
| FBX | .fbx | Parțial | Nu | N/A | Tokenizer funcționează; parserul complet este în curs de dezvoltare (nu este gata pentru producție) |
Format OBJ
Wavefront OBJ este cel mai larg susținut format de interschimb pentru rețele statice. Aspose.3D FOSS încarcă geometria (vârfuri, normale, coordonate UV și fețe poligonale) și opțional companion .mtl fișier de material.
ObjLoadOptions
| Proprietate | Tip | Implicit | Descriere |
|---|---|---|---|
enable_materials | bool | True | Parsează .mtl fișier referențiat de antetul OBJ |
flip_coordinate_system | bool | False | Convertește de la Y-up dreptaci la Z-up dreptaci |
normalize_normal | bool | True | Normalizează toate normalele de suprafață importate la lungime unitară |
scale | float | 1.0 | Factor de scară uniform aplicat tuturor pozițiilor vârfurilor |
Încărcarea unui fișier OBJ
from aspose.threed import Scene
from aspose.threed.formats import ObjLoadOptions
options = ObjLoadOptions()
options.enable_materials = True
options.flip_coordinate_system = False
options.scale = 1.0
scene = Scene()
scene.open("model.obj", options)
print(f"Top-level nodes: {len(scene.root_node.child_nodes)}")Salvare în OBJ
scene.save("output.obj")Exportul OBJ scrie pozițiile vârfurilor și fețele poligonale. Dacă scena conține LambertMaterial sau PhongMaterial obiecte, biblioteca scrie un fișier însoțitor .mtl fișier automat.
Format STL
STL (STereoLithography) stochează rețelele de triunghiuri ca o listă neindexată de fețe. Atât variantele binare, cât și cele ASCII sunt suportate pentru citire; biblioteca folosește implicit binar la salvare.
StlSaveOptions
StlSaveOptions nu are câmpuri obligatorii. Instanțiază-l pentru a-l transmite către scene.save():
from aspose.threed.formats import StlSaveOptions
opts = StlSaveOptions()
scene.save("output.stl", opts)Exemplu de ciclu complet
from aspose.threed import Scene
##Load
scene = Scene.from_file("model.stl")
##Inspect
for node in scene.root_node.child_nodes:
if node.entity:
print(f"{node.name}: {len(node.entity.control_points)} vertices")
##Save
scene.save("roundtrip.stl")STL stochează doar geometrie triunghiulară, fără normale în afara normalei feței, fără coordonate UV, fără materiale și fără ierarhie. Dacă scena ta conține cvadrate sau poligoane de ordin superior, acestea sunt triangulate automat la salvare.
Format glTF / GLB
glTF 2.0 este formatul recomandat pentru schimbul modern de 3D. Păstrează graficul complet al scenei (ierarhia nodurilor, noduri numite, transformări), materialele (LambertMaterial, PhongMaterial → conversie PBR), și clipuri de animație. GLB este varianta containerului binar cu un singur fișier.
GltfSaveOptions
from aspose.threed.formats import GltfSaveOptions
opts = GltfSaveOptions()
scene.save("output.gltf", opts) # JSON + external .bin
scene.save("output.glb", opts) # Self-contained binarySuport pentru materiale
Materialele Aspose.3D FOSS sunt mapate la glTF pbrMetallicRoughness la export:
from aspose.threed import Scene
from aspose.threed.shading import PhongMaterial
from aspose.threed.utilities import Vector3
scene = Scene()
node = scene.root_node.create_child_node("object")
mat = PhongMaterial()
mat.diffuse_color = Vector3(0.8, 0.2, 0.2) # red
mat.specular_color = Vector3(1.0, 1.0, 1.0)
mat.shininess = 50.0
node.material = mat
scene.save("colored.gltf")Verificarea ieșirii glTF
import json
with open("output.gltf") as f:
data = json.load(f)
print(f"Asset version : {data['asset']['version']}")
print(f"Nodes : {len(data.get('nodes', []))}")
print(f"Meshes : {len(data.get('meshes', []))}")Format COLLADA
COLLADA (.dae) este un format bazat pe XML care suportă ierarhii de scenă, materiale, canale UV multiple și animație scheletică. Aspose.3D FOSS citește și scrie arborele complet de noduri și definițiile materialelor.
from aspose.threed import Scene
##Load a COLLADA file
scene = Scene.from_file("model.dae")
##Inspect top-level nodes
for node in scene.root_node.child_nodes:
print(f" {node.name}")
##Save back to COLLADA
scene.save("output.dae")COLLADA este o alegere bună atunci când ai nevoie să faci round‑trip al ierarhiilor cu noduri și materiale denumite fără nicio pierdere de date.
3MF Format
3MF (3D Manufacturing Format) targets additive manufacturing (3D printing) workflows. It stores triangle geometry, colour, and print-specific metadata in a ZIP-based container.
from aspose.threed import Scene
from aspose.threed.formats import ThreeMfSaveOptions
scene = Scene.from_file("part.stl") # Load from STL
opts = ThreeMfSaveOptions()
scene.save("part.3mf", opts) # Write as 3MF3MF is the recommended export format when targeting slicer software (Cura, PrusaSlicer, Bambu Studio, etc.).
Format FBX
Stare: în desfășurare (nu este pregătit pentru producție).
FBX (.fbx) suportul în Aspose.3D FOSS este în prezent la etapa de tokenizer. Tokenizerul binar FBX poate analiza structura fișierului, dar parserul complet de noduri, mesh și materiale are bug-uri cunoscute și nu este complet. Rezultatele citirii FBX ar trebui tratate ca experimentale.
Nu utilizați FBX în fluxurile de producție cu această versiune. Dacă datele sursă sunt în FBX, convertiți-le mai întâi în glTF sau OBJ utilizând Blender sau FBX Review înainte de a le încărca cu Aspose.3D FOSS.
Scrierea FBX nu este suportată.
Detectare automată a formatului
Scene.from_file() și scene.open() detectează formatul automat utilizând extensia fișierului și, unde este disponibil, octeții magici din antetul fișierului:
from aspose.threed import Scene
##The library detects each format without being told explicitly
scene_obj = Scene.from_file("model.obj")
scene_glb = Scene.from_file("model.glb")
scene_stl = Scene.from_file("model.stl")
scene_dae = Scene.from_file("model.dae")
scene_3mf = Scene.from_file("model.3mf")Dacă extensia lipsește sau este ambiguă, biblioteca revine la inspectarea antetului (magic bytes). Fișierele nesuportate sau nerecunoscute ridică o IOError cu un mesaj descriptiv.
Sfaturi și bune practici
- Utilizați glTF sau GLB pentru fluxuri de lucru moderne. glTF păstrează graful complet al scenei, materialele și datele de animație. Este cel mai complet format pentru schimbul cu motoarele de jocuri și vizualizatoarele web.
- Folosește OBJ pentru compatibilitate maximă. OBJ este suportat de practic orice instrument 3D. Este limitat la plase statice, dar este extrem de portabil.
- Folosește 3MF pentru imprimare. 3MF carries colour, orientation hints, and print settings that STL cannot express.
- Evită FBX până când este gata pentru producție. Verifică notele de lansare pentru versiunea în care parsarea completă a FBX este finalizată.
- Potrivește extensia de salvare cu formatul. Nu trece un
.gltfextensie când doriți GLB binar; folosiți.glbîn mod explicit. Extensia determină ce serializator este utilizat. - Verificați compatibilitatea poligonului. STL și 3MF necesită triunghiuri. Quad-urile și N-gon-urile sunt triangulate automat la salvare, dar numărul de vârfuri va crește. Dacă trebuie să controlezi triangularea, apelează
mesh.triangulate()înainte de salvare.