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-fossPython-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 SceneFö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, ColladaSaveOptionsSteg 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.