كيفية حفظ المشاهد 3D في Python
Aspose.3D FOSS for Python يسمح لك بتخزين Scene إلى أي تنسيق إخراج مدعوم باستخدام واحد Scene.save() تحديد النموذج تلقائيًا عند عبور مسار الملف؛ بالنسبة للخيارات المتقدمة مثل الإصدار الثنائي أو إدراج النص، يمكنك توفير كائن خيارات التخزين محدد للنموذة.
خطوة بخطوة دليل
الخطوة 1: قم بتثبيت الحزمة
تثبيت Aspose.3D FOSS من PyPI. لا تتطلب المكتبات الأصلية.
asposefoss/3d is not yet published — build from source until it ships. See the project README for build instructions.
الإصدارات التي تدعمها Python: 3.7، 3.8، 39.9، 3.0، 3.11.
الخطوة 2: استيراد الدروس المطلوبة
على الأقل تحتاج إلى Scene.استيراد فئة المستورد أو الخيارات الخاصة بالشكل فقط عندما تحتاج إلى سلوك غير افتراضي.
from aspose.threed import Sceneلخيارات محددة للفرم:
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الخطوة الثالثة: تحميل المشهد
تحميل المشهد الحالي من القرص باستخدام Scene.from_file(). الكتب تكتشف تنسيق المصدر تلقائيًا من امتداد الملف.لإنشاء مشهد من التخفيض بدلاً من ذلك، انظر كيفية بناء شريط في Python.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")بدلاً من ذلك، افتح مشهدًا مع خيارات واضحة عبر Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")الخطوة 4: حفظ إلى STL
مكالمة Scene.save() مع A .stl الطريق.بشكل افتراضي، النتيجة هي ASCII STL. لكتب استراتيجية ثنائية (ملف أصغر، لا قراءة الإنسان) استخدام StlSaveOptions.
# 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)الخطوة 5: حفظ إلى GLTF أو GLB
يمكن تصدير ملفات GLTF 2.0 باستخدام GltfExporter و GltfSaveOptions.- Set binary_mode = True إنتاج حاوية ذاتية .glb الخصم الثنائي؛ مجموعة binary_mode = False على أساس JSON .gltf في شكل .
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())الخطوة 6: حفظ على FBX
غير تنفيذية:
FbxExporter.save()وFbxExporter.save_to_stream()الارتفاعNotImplementedErrorفي الإصدار الحالي. FBX تصدير غير متوفر في Aspose.3D FOSS لـ Python في الوقت الحالى.استخدم إصدارات GLB أو OBJ أو STL أو Collada (DAE) بدلاً من ذلك.انظر الخطوات 4 و 5 و 7 للخيارات الصادرة عن العمل.
# The following code raises NotImplementedError in the current release:
# from aspose.threed.formats.fbx import FbxExporter, FbxSaveOptions
# exporter = FbxExporter()
# exporter.save(scene, "output.fbx", options) # raises NotImplementedError
# Use a supported format instead:
scene.save("output.glb") # binary GLB — recommended
scene.save("output.obj") # Wavefront OBJ
scene.save("output.stl") # STLالخطوة 7: حفظ إلى OBJ أو Collada (DAE)
بالنسبة لـ OBJ و Collada، قم بمرور الملفات مباشرة إلى Scene.save().يكتشف المكتبة تنسيق التمديد.
# 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)مشكلات و تصحيحات مشتركة
ملف الخروج الفارغ بعد scene.save() هذا عادة ما يعني أن عقدة الجذر في المشهد لا تحتوي على عقدات الأطفال مع الهندسة الجيومترية.تحقق من أن كل عقد من النوافذ المرفقة إلى scene.root_node قبل أن يطلب save.- التحقق len(scene.root_node.child_nodes) بعد بناء المشهد.
AttributeError عند بناء الماس الهندسة وَالْمُتَّقِينَ Mesh تداول الفصول الدراسية في الأفق كقائمة من نقاط التحكم الداخلية.للمعاني التفصيلية لإنشاء الماسح الضوئي، ارجع إلى كيفية بناء شريط في Python المقال الذي يغطي إنشاء البوليجون، وعناصر الورك، وبيانات الأشعة فوق البنفسجية.
إنتاج GLB أكبر من المتوقع GLB الثنائي يدرج جميع البيانات الهندسة والمنسوجات.إذا GltfSaveOptions.flip_tex_coord_v تم تعيينها إلى True, إضافية مرسوم-فليب مرموق متضمنة. False إذا لم يكن لديك حاجة إلى V-axis النسيج التمرير.
FBX Export غير متوفر في الإصدار الحالي FbxExporter.save() الارتفاع NotImplementedError.إدخال FBX (تحميل) .fbx الملفات) تعمل بشكل طبيعي، ولكن التصدير إلى FBX لا يتم تنفيذها. تحويل إلى GLB، OBJ، STL، أو Collada بدلا من ذلك.
لا يحتوي ColdDate على مواد مجموعة ColladaSaveOptions.enable_materials = True (هذا هو False قبل التصدير (بعد التداول).
الأسئلة المتكررة
ما هي تنسيقات Aspose.3D FOSS لـ Python؟?
يدعم المكتبة تصديرها إلى: STL، glTF 2.0 (النص والبيان GLB)، OBJ، و Collada (DAE). Scene.save();يقرأ المكتبة التمديد لاختيار المستورد الصحيح.
ملاحظة: FBX التصدير هو غير تنفيذية في إصدارات اليوم -
FbxExporter.save()الارتفاعNotImplementedError.استخدم GLB أو OBJ أو STL أو Collada بدلاً من ذلك.
هل هناك API تصدير البث الذي يمنع الكتابة على القرص؟?
نعم . GltfExporter.export(scene, stream, options) يكتب لأي شخص io.BytesIO يمكنك نقل البوفر في الذاكرة مباشرة إلى استجابة ويب أو معالجة إضافية دون لمس نظام الملفات.
كيف يمكنني تحويل المشهد من شكل إلى آخر؟?
تحميل المشهد مع Scene.from_file("input.fbx") وخلصوا مع scene.save("output.gltf").يسيطر المكتبة على التحويل في الذاكرة؛ لا تحتاج إلى ملفات متوسطة.
هل يمكنني حفظ العديد من المشاهد الفرعية إلى ملفات منفصلة؟?
الوصول scene.sub_scenes لتتراكم على كل مشهد، وخلق جديد Scene موضوع، ورفع العقد ذات الصلة، ودعوة save() على كل واحد منهم.
يُفعل Scene.save() إعادة كتابة الملفات الموجودة بهدوء.?
نعم لا تظهر المكتبة خطأ إذا كان الملف المستهدف موجوداً بالفعل، فإنه يبالغ في الكتابة.إضافة فحص وجود المجلد إلى رمزك إذا كنت بحاجة إلى الحماية من النسخ المتجاوزة عن طريق الصدفة.