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

FormatExtensieCitireScriereClasa OptionsNote
Wavefront OBJ.objDaDaObjLoadOptions.mtl încărcarea materialului este suportată
STL (binar).stlDaDaStlSaveOptionsCitire binară și ASCII; salvarea implicită este binară
STL (ASCII).stlDaDaStlSaveOptionsVerificare round-trip
glTF 2.0.gltfDaDaGltfSaveOptionsGrafic complet al scenei, materialele și animațiile păstrate
GLB (binary glTF).glbDaDaGltfSaveOptionsContainer binar cu un singur fișier
COLLADA.daeDaDaColladaLoadOptions / ColladaSaveOptionsIerarhia scenei și materialele
3MF.3mfDaDaThreeMfSaveOptionsFormat de fabricație aditivă
FBX.fbxParțialNuN/ATokenizer 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

ProprietateTipImplicitDescriere
enable_materialsboolTrueParsează .mtl fișier referențiat de antetul OBJ
flip_coordinate_systemboolFalseConvertește de la Y-up dreptaci la Z-up dreptaci
normalize_normalboolTrueNormalizează toate normalele de suprafață importate la lungime unitară
scalefloat1.0Factor 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 binary

Suport 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 3MF

3MF 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 .gltf extensie 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.
 Română