Formatunderstøttelse

Aspose.3D FOSS for Python kan læse og skrive syv 3D-formater ved hjælp af en enkelt scenerepræsentation i hukommelsen. Biblioteket oversætter hvert format til et fælles Scene objekt ved indlæsning og serialiserer det objekt tilbage til målformatet ved lagring. Det betyder, at en scene indlæst fra OBJ kan gemmes direkte til glTF uden nogen mellemliggende konverteringstrin.


Understøttede formater

FormatFilendelseLæsSkrivOptions-klasseNoter
Wavefront OBJ.objJaJaObjLoadOptions.mtl materialindlæsning understøttet
STL (binær).stlJaJaStlSaveOptionsBinær og ASCII læsning; gemmer som standard i binær
STL (ASCII).stlJaJaStlSaveOptionsRundtur verificeret
glTF 2.0.gltfJaJaGltfSaveOptionsFuld scenegraf, materialer og animationer bevaret
GLB (binary glTF).glbJaJaGltfSaveOptionsEnkeltfil binær container
COLLADA.daeJaJaColladaLoadOptions / ColladaSaveOptionsScenhierarki og materialer
3MF.3mfJaJaThreeMfSaveOptionsAdditiv fremstillingsformat
FBX.fbxDelvisNejN/ATokenizer fungerer; fuld parser er under udvikling (ikke produktionsklar)

OBJ-format

Wavefront OBJ er det mest udbredte udvekslingsformat for statiske mesh’er. Aspose.3D FOSS indlæser geometri (vertexer, normaler, UV-koordinater og polygonale flader) og valgfrit den tilhørende .mtl materialefil.

ObjLoadOptions

EgenskabTypeStandardBeskrivelse
enable_materialsboolTrueFortolk .mtl fil refereret af OBJ-headeren
flip_coordinate_systemboolFalseKonverter fra Y-opad højrehåndet til Z-opad højrehåndet
normalize_normalboolTrueNormaliser alle importerede overfladenormale til enhedslængde
scalefloat1.0Ensartet skalafaktor anvendt på alle vertexpositioner

Indlæsning af en OBJ‑fil

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)}")

Gemmer til OBJ

scene.save("output.obj")

OBJ-eksport skriver vertexpositioner og polygonflader. Hvis scenen indeholder LambertMaterial eller PhongMaterial objekter, skriver biblioteket en ledsagende .mtl fil automatisk.


STL-format

STL (STereoLithography) gemmer trekantsnet som en ikke-indekseret liste af facetter. Både binære og ASCII-varianter understøttes ved læsning; biblioteket bruger som standard binær ved gemning.

StlSaveOptions

StlSaveOptions har ingen obligatoriske felter. Opret en instans af den for at videregive til scene.save():

from aspose.threed.formats import StlSaveOptions

opts = StlSaveOptions()
scene.save("output.stl", opts)

Eksempel på round‑trip

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 gemmer kun trekantsgeometri, uden normale udover facettenormallen, ingen UV‑koordinater, ingen materialer og ingen hierarki. Hvis din scene indeholder quads eller polygoner af højere orden, bliver de automatisk trianguleret ved gemning.


glTF / GLB-format

glTF 2.0 er det anbefalede format til moderne 3D-udveksling. Det bevarer den fulde scenegraph (nodehierarki, navngivne noder, transformationer), materialer (LambertMaterial, PhongMaterial → PBR-konvertering), og animationsklip. GLB er den enkeltfil‑binære container‑variant.

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

Materialestøtte

Aspose.3D FOSS-materialer er kortlagt til glTF pbrMetallicRoughness ved eksport:

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")

Verificering af glTF-output

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', []))}")

COLLADA-format

COLLADA (.dae) er et XML-baseret format, der understøtter scenehierarkier, materialer, flere UV-kanaler og skeletanimation. Aspose.3D FOSS læser og skriver det fulde nodetræ og materialdefinitioner.

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 er et godt valg, når du har brug for at round‑trip hierarkier med navngivne noder og materialer uden nogen datatab.


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.).


FBX-format

Status: under udvikling (ikke klar til produktion).

FBX (.fbx) support i Aspose.3D FOSS er i øjeblikket på tokenizer‑stadiet. Den binære FBX tokenizer kan parse filstrukturen, men den fulde node-, mesh- og materialparser har kendte fejl og er ikke færdig. FBX‑læseresultater bør betragtes som eksperimentelle.

Brug ikke FBX i produktions‑pipelines med denne udgivelse. Hvis dine kilde-data er i FBX, skal du først konvertere dem til glTF eller OBJ ved hjælp af Blender eller FBX Review, før du indlæser dem med Aspose.3D FOSS.

FBX-skrivning understøttes ikke.


Automatisk formatgenkendelse

Scene.from_file() og scene.open() detekter formatet automatisk ved hjælp af filendelsen og, hvor tilgængeligt, magic bytes i filhovedet:

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")

Hvis filendelsen er fraværende eller tvetydig, falder biblioteket tilbage på inspektion af headeren (magic bytes). Ikke-understøttede eller ukendte filer udløser en IOError med en beskrivende meddelelse.


Tips og bedste praksis

  • Brug glTF eller GLB til moderne pipelines. glTF bevarer den fulde scene graph, materialer og animationsdata. Det er det mest komplette format til udveksling med spilmotorer og web‑visere.
  • Brug OBJ for maksimal kompatibilitet. OBJ understøttes af stort set alle 3D‑værktøjer. Det er begrænset til statiske mesh’er, men er ekstremt bærbart.
  • Brug 3MF til udskrivning. 3MF carries colour, orientation hints, and print settings that STL cannot express.
  • Undgå FBX, indtil det er klar til produktion. Tjek udgivelsesnoterne for den version, hvori fuld FBX‑parsing er fuldført.
  • Match gemmeudvidelsen til formatet. Send ikke en .gltf udvidelse, når du vil have binær GLB; brug .glb eksplicit. Udvidelsen bestemmer, hvilken serialiser der bruges.
  • Tjek polygonkompatibilitet. STL og 3MF kræver trekanter. Quads og N-gons trianguleres automatisk ved lagring, men vertex count vil stige. Hvis du har brug for at styre trianguleringen, skal du kalde mesh.triangulate() før du gemmer.
 Dansk