دعم الصيغ
يمكن لـ Aspose.3D FOSS for Python قراءة وكتابة سبعة صيغ ثلاثية الأبعاد باستخدام تمثيل مشهد واحد في الذاكرة. تقوم المكتبة بترجمة كل صيغة إلى كائن Scene مشترك عند التحميل وتسلسل ذلك الكائن مرة أخرى إلى الصيغة المستهدفة عند الحفظ. هذا يعني أن المشهد المحمَّل من OBJ يمكن حفظه مباشرةً إلى glTF دون أي خطوات تحويل وسيطة.
الصيغ المدعومة
| الصيغة | الامتداد | :—-: | :—–: | فئة الخيارات | ملاحظات |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Yes | Yes | ObjLoadOptions | .mtl دعم تحميل المواد |
| STL (binary) | .stl | Yes | Yes | StlSaveOptions | قراءة ثنائية وASCII؛ الحفظ افتراضيًا إلى ثنائي |
| STL (ASCII) | .stl | Yes | Yes | StlSaveOptions | تم التحقق من الجولة الكاملة |
| glTF 2.0 | .gltf | Yes | Yes | GltfSaveOptions | تم الحفاظ على مخطط المشهد الكامل والمواد والرسوم المتحركة |
| GLB (binary glTF) | .glb | Yes | Yes | GltfSaveOptions | حاوية ثنائية بملف واحد |
| COLLADA | .dae | Yes | Yes | ColladaLoadOptions / ColladaSaveOptions | هرمية المشهد والمواد |
| 3MF | .3mf | Yes | Yes | ThreeMfSaveOptions | صيغة التصنيع الإضافي |
| FBX | .fbx | Partial | No | N/A | المحلل اللغوي يعمل؛ المحلل الكامل قيد التطوير (ليس جاهزًا للإنتاج) |
تنسيق OBJ
Wavefront OBJ هو أكثر تنسيق تبادل مدعوم على نطاق واسع للشبكات الثابتة. يقوم Aspose.3D FOSS بتحميل الهندسة (الرؤوس، المتجهات العمودية، إحداثيات UV، والوجوه المتعددة الأضلاع) وبشكل اختياري ملف المادة المرافق .mtl.
ObjLoadOptions
| الخاصية | النوع | الافتراضي | الوصف |
|---|---|---|---|
enable_materials | bool | True | تحليل ملف .mtl المشار إليه في رأس OBJ |
flip_coordinate_system | bool | False | تحويل من Y-أعلى يميني إلى Z-أعلى يميني |
normalize_normal | bool | True | تطبيع جميع المتجهات العمودية المستوردة للسطوح إلى طول وحدة |
scale | float | 1.0 | عامل مقياس موحد يُطبق على جميع مواضع الرؤوس |
تحميل ملف 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)}")حفظ إلى OBJ
scene.save("output.obj")يكتب تصدير OBJ مواضع الرؤوس ووجوه المضلعات. إذا كان المشهد يحتوي على كائنات LambertMaterial أو PhongMaterial، فإن المكتبة تكتب ملفًا مرفقًا .mtl تلقائيًا.
تنسيق STL
STL (STereoLithography) يخزن شبكات المثلثات كقائمة غير مفهرسة من الوجوه. يتم دعم كل من النسختين الثنائية وASCII للقراءة؛ المكتبة تستخدم الثنائية كإعداد افتراضي عند الحفظ.
StlSaveOptions
StlSaveOptions لا يحتوي على حقول إلزامية. أنشئ نسخة منه لتمريرها إلى scene.save():
from aspose.threed.formats import StlSaveOptions
opts = StlSaveOptions()
scene.save("output.stl", opts)مثال على الرحلة ذهابًا وإيابًا
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 فقط هندسة المثلثات، دون أي متجهات عادية بخلاف عادي السطح، ولا إحداثيات UV، ولا مواد، ولا هيكلية. إذا كان المشهد الخاص بك يحتوي على رباعيات أو مضلعات من رتبة أعلى، يتم تحويلها إلى مثلثات تلقائيًا عند الحفظ.
glTF / GLB تنسيق
glTF 2.0 هو التنسيق الموصى به لتبادل 3D الحديث. إنه يحافظ على مخطط المشهد الكامل (تسلسل العقد، العقد المسماة، التحويلات)، المواد (LambertMaterial، PhongMaterial → تحويل PBR)، ومقاطع الرسوم المتحركة. GLB هو نسخة الحاوية الثنائية ذات الملف الواحد.
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الدعم المادي
يتم تعيين مواد FOSS في Aspose.3D إلى glTF pbrMetallicRoughness عند التصدير:
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")التحقق من مخرجات 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', []))}")تنسيق COLLADA
COLLADA (.dae) هو تنسيق قائم على XML يدعم هياكل المشهد، المواد، قنوات UV المتعددة، والرسوم المتحركة الهيكلية. Aspose.3D FOSS يقرأ ويكتب شجرة العقد الكاملة وتعريفات المواد.
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 خيارًا جيدًا عندما تحتاج إلى نقل هياكل الشجرة ذات العقد المسماة والمواد دون أي فقدان للبيانات.
تنسيق 3MF
يستهدف 3MF (تنسيق التصنيع ثلاثي الأبعاد) عمليات التصنيع الإضافي (الطباعة ثلاثية الأبعاد). يخزن هندسة المثلثات واللون والبيانات الوصفية الخاصة بالطباعة في حاوية تعتمد على ZIP.
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 هو تنسيق التصدير الموصى به عند استهداف برامج القطع (Cura، PrusaSlicer، Bambu Studio، إلخ).
تنسيق FBX
الحالة: جارٍ التنفيذ (ليس جاهزًا للإنتاج).
دعم FBX (.fbx) في Aspose.3D FOSS حاليًا في مرحلة المُحلل اللغوي. يمكن لمحلل FBX الثنائي تحليل بنية الملف، لكن محلل العقدة الكامل، والشبكة، والمواد يحتوي على أخطاء معروفة ولم يكتمل بعد. يجب اعتبار نتائج قراءة FBX تجريبية.
لا تستخدم FBX في خطوط الإنتاج مع هذا الإصدار. إذا كانت بيانات المصدر الخاصة بك بصيغة FBX، قم بتحويلها إلى glTF أو OBJ أولاً باستخدام Blender أو FBX Review قبل التحميل باستخدام Aspose.3D FOSS.
الكتابة إلى FBX غير مدعومة.
اكتشاف الصيغة تلقائيًا
Scene.from_file() و scene.open() يكتشفان التنسيق تلقائيًا باستخدام امتداد الملف و، إذا كان متاحًا، البايتات السحرية في رأس الملف:
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")إذا كان الامتداد غير موجود أو غير واضح، فإن المكتبة تلجأ إلى فحص الرأس (البايتات السحرية). الملفات غير المدعومة أو غير المعروفة تثير IOError مع رسالة وصفية.
نصائح وأفضل الممارسات
- استخدم glTF أو GLB للخطوط الحديثة. يحافظ glTF على مخطط المشهد الكامل، والمواد، وبيانات الرسوم المتحركة. إنه أكثر تنسيق كامل للتبادل مع محركات الألعاب وعارضات الويب.
- استخدم OBJ لأقصى توافق. يدعم OBJ عمليًا كل أداة ثلاثية الأبعاد. يقتصر على الشبكات الثابتة لكنه قابل للنقل بشكل كبير.
- استخدم 3MF للطباعة. يحمل 3MF اللون، وتلميحات الاتجاه، وإعدادات الطباعة التي لا يستطيع STL التعبير عنها.
- تجنب FBX حتى يصبح جاهزًا للإنتاج. تحقق من ملاحظات الإصدار للنسخة التي اكتمل فيها تحليل FBX بالكامل.
- طابق امتداد الحفظ مع التنسيق. لا تمرر امتداد
.gltfعندما تريد GLB ثنائي؛ استخدم.glbصراحةً. يحدد الامتداد أي مُسلسل يُستخدم. - تحقق من توافق المضلعات. يتطلب STL و3MF مثلثات. يتم تحويل الأرباع وN-gons إلى مثلثات تلقائيًا عند الحفظ، لكن عدد الرؤوس سيزداد. إذا كنت بحاجة إلى التحكم في عملية التحويل إلى مثلثات، استدعِ
mesh.triangulate()قبل الحفظ.