Hur man sparar 3D-scener i Python

Hur man sparar 3D-scener i Python

Aspose.3D FOSS för Python låter dig spara en Scene till vilket som helst utdataformat som stöds med ett enda Scene.save()-anrop. Formatdetektering sker automatiskt när du skickar en filsökväg; för avancerade alternativ som binär utdata eller texturinfogning anger du ett formatspecifikt save-options-objekt.

Steg-för-steg-guide

Steg 1: Installera paketet

Installera Aspose.3D FOSS från PyPI. Inga nativa bibliotek krävs.

pip install aspose-3d-foss

Python-versioner som stöds: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.


Steg 2: Importera nödvändiga klasser

Du behöver minst Scene. Importera den formatspecifika exportören eller save-options-klassen bara när du behöver icke-standardbeteende.

from aspose.threed import Scene

För formatspecifika alternativ:

from aspose.threed.formats.gltf import GltfSaveOptions, GltfExporter
from aspose.threed.formats.stl import StlFormat, StlSaveOptions
from aspose.threed.formats.fbx import FbxExporter, FbxSaveOptions
from aspose.threed.formats.collada import ColladaExporter, ColladaSaveOptions

Steg 3: Läs in en scen

Läs in en befintlig scen från disk med Scene.from_file(). Biblioteket identifierar källformatet automatiskt utifrån filtillägget. Se Hur man bygger ett mesh i Python om du vill bygga en scen från grunden.

# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")

Alternativt kan du öppna en scen med explicita alternativ via Scene.open():

from aspose.threed import Scene

scene = Scene()
scene.open("input.fbx")

Steg 4: Spara som STL

Anropa Scene.save() med en .stl-sökväg. Som standard är utdata ASCII STL. Använd StlSaveOptions för att skriva en binär STL (mindre fil, ingen läsbar header).

# ASCII STL — format detected from the .stl extension
scene.save("output.stl")

# Binary STL — smaller file size
from aspose.threed.formats.stl import StlFormat, StlSaveOptions

stl_format = StlFormat()
options = stl_format.create_save_options()
options.binary_mode = True
scene.save("output_binary.stl", options)

Steg 5: Spara som glTF eller GLB

GLTF 2.0-filer kan exporteras med GltfExporter och GltfSaveOptions. Ange binary_mode = True för att producera ett fristående .glb-binärpaket; ange binary_mode = False för det JSON-baserade .gltf-formatet.

import io
from aspose.threed.formats.gltf import GltfExporter, GltfSaveOptions

# Text glTF
options = GltfSaveOptions()
options.binary_mode = False
options.file_name = "output.gltf"

exporter = GltfExporter()
with open("output.gltf", "wb") as f:
    stream = io.BytesIO()
    exporter.export(scene, stream, options)
    f.write(stream.getvalue())

# Binary GLB
options_glb = GltfSaveOptions()
options_glb.binary_mode = True
options_glb.file_name = "output.glb"

stream_glb = io.BytesIO()
exporter.export(scene, stream_glb, options_glb)
with open("output.glb", "wb") as f:
    f.write(stream_glb.getvalue())

Steg 6: Spara som FBX

FBX-scener exporteras via FbxExporter. Använd FbxSaveOptions för att aktivera komprimering eller bädda in texturer i utdatafilen.

from aspose.threed.formats.fbx import FbxExporter, FbxSaveOptions

options = FbxSaveOptions()
options.enable_compression = True
options.embed_textures = False  # keep textures as separate files

exporter = FbxExporter()
exporter.save(scene, "output.fbx", options)

Steg 7: Spara som OBJ eller Collada (DAE)

För OBJ och Collada skickar du filsökvägen direkt till Scene.save(). Biblioteket identifierar formatet utifrån tillägget.

# OBJ — format auto-detected from .obj extension
scene.save("output.obj")

# Collada DAE — with material and coordinate-system options
from aspose.threed.formats.collada import ColladaExporter, ColladaSaveOptions

options = ColladaSaveOptions()
options.enable_materials = True
options.flip_coordinate_system = False
options.indented = True

exporter = ColladaExporter()
exporter.export(scene, open("output.dae", "wb"), options)

Vanliga problem och lösningar

Tom utdatafil efter scene.save() Det här betyder vanligtvis att scenens rotnod inte har några underknutar med geometri. Kontrollera att varje mesh-knut kopplades till scene.root_node innan save anropades. Kontrollera len(scene.root_node.child_nodes) efter att scenen byggdes.

AttributeError vid skapande av mesh-geometri Klassen Mesh lagrar hörn som en intern lista med kontrollpunkter. För detaljerade mönster för mesh-konstruktion, se artikeln Hur man bygger ett mesh i Python, som täcker polygonskapande, hörnselement och UV-data.

GLB-utdata är större än förväntat Binär GLB bäddar in all geometri- och texturdata. Om GltfSaveOptions.flip_tex_coord_v är inställt på True inkluderas ett extra koordinat-flip-genomlopp. Sätt det till False om du inte behöver V-axelns texturspegling.

FBX import/export rundtur förlorar material FBX-materialexport styrs av FbxSaveOptions.export_legacy_material_properties. Sätt detta till True för att skriva standard FBX-materialblock som tredjepartsverktyg kan läsa.

Collada DAE inkluderar inte material Sätt ColladaSaveOptions.enable_materials = True (standardvärdet är False) innan export.

Vanliga frågor

Vilka format kan Aspose.3D FOSS för Python exportera?

Biblioteket stöder export till: STL, glTF 2.0 (text och binär GLB), FBX, OBJ, Collada (DAE) och 3MF. Formatdetektering är automatisk när du skickar en filsökväg-sträng till Scene.save(); biblioteket läser tillägget för att välja rätt exportör.

Finns det ett strömmande export-API som undviker att skriva till disk?

Ja. GltfExporter.export(scene, stream, options) skriver till vilket io.BytesIO- eller filliknande objekt som helst. Du kan skicka minnesbufferten direkt till ett webbsvar eller vidare bearbetning utan att röra filsystemet.

Hur konverterar jag en scen från ett format till ett annat?

Läs in scenen med Scene.from_file("input.fbx") och spara med scene.save("output.gltf"). Biblioteket hanterar konverteringen i minnet; inga mellanliggande filer behövs.

Kan jag spara flera delscener i separata filer?

Använd scene.sub_scenes för att iterera över varje delscen, skapa ett nytt Scene-objekt, koppla de relevanta knutarna och anropa save() på var och en.

Skriver Scene.save() över befintliga filer utan varning?

Ja. Biblioteket ger inget fel om målfilen redan finns; det skriver över den. Lägg till en filexistenskontroll i din kod om du behöver skydda mot oavsiktliga överskrivningar.

Se även

 Svenska