دعم الصيغ
Aspose.3D FOSS لـ Python يمكنه قراءة وكتابة سبعة صيغ ثلاثية الأبعاد باستخدام تمثيل مشهد واحد في الذاكرة. المكتبة تُحوّل كل صيغة إلى كائن مشترك Scene كائن عند التحميل وتُسلسل ذلك الكائن مرة أخرى إلى الصيغة المستهدفة عند الحفظ. هذا يعني أن المشهد المحمّل من OBJ يمكن حفظه مباشرةً إلى glTF دون أي خطوات تحويل وسيطة.
الصيغ المدعومة
| الصيغة | الامتداد | قراءة | كتابة | فئة الخيارات | ملاحظات |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | نعم | نعم | ObjLoadOptions | .mtl دعم تحميل المواد |
| STL (binary) | .stl | نعم | نعم | StlSaveOptions | قراءة ثنائية وASCII؛ الحفظ افتراضيًا بصيغة ثنائية |
| STL (ASCII) | .stl | نعم | نعم | StlSaveOptions | تم التحقق من الرحلة ذهابًا وإيابًا |
| glTF 2.0 | .gltf | نعم | نعم | GltfSaveOptions | تم الحفاظ على مخطط المشهد الكامل والمواد والرسوم المتحركة |
| GLB (binary glTF) | .glb | نعم | نعم | GltfSaveOptions | حاوية ثنائية ملف واحد |
| COLLADA | .dae | نعم | نعم | ColladaLoadOptions / ColladaSaveOptions | تسلسل المشهد والمواد |
| 3MF | .3mf | نعم | نعم | ThreeMfSaveOptions | تنسيق التصنيع الإضافي |
| FBX | .fbx | جزئي | لا | N/A | المعالج اللغوي يعمل؛ المحلل الكامل قيد التطوير (غير جاهز للإنتاج) |
صيغة OBJ
Wavefront OBJ هو أكثر تنسيق تبادل مدعوم على نطاق واسع للشبكات الساكنة. Aspose.3D FOSS يحمل الهندسة (الرؤوس، المتجهات العمودية، إحداثيات UV، والوجوه المتعددة الأضلاع) وباختياري المرافق .mtl ملف المادة.
ObjLoadOptions
| خاصية | النوع | الافتراضي | الوصف |
|---|---|---|---|
enable_materials | bool | True | تحليل .mtl الملف المشار إليه برأس OBJ |
flip_coordinate_system | bool | False | تحويل من نظام Y‑up الأيمن إلى نظام Z‑up الأيمن |
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دعم المواد
Aspose.3D مواد FOSS يتم ربطها بـ 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 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 3MF3MF is the recommended export format when targeting slicer software (Cura, PrusaSlicer, Bambu Studio, etc.).
تنسيق 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")إذا كان الامتداد غير موجود أو غامض، فإن المكتبة تلجأ إلى فحص الرأس (بايتات السحر). الملفات غير المدعومة أو غير المعروفة تُثير an IOError مع رسالة وصفية.
نصائح وأفضل الممارسات
- استخدم glTF أو GLB للأنابيب الحديثة. يحافظ glTF على مخطط المشهد الكامل، والمواد، وبيانات الرسوم المتحركة. إنه أكثر تنسيق كامل للتبادل مع محركات الألعاب وعارضي الويب.
- استخدم OBJ لتحقيق أقصى توافق. يتم دعم OBJ من قبل كل أداة ثلاثية الأبعاد تقريبًا. هو محدود على الشبكات الثابتة لكنه قابل للنقل بشكل كبير.
- استخدم 3MF للطباعة. 3MF carries colour, orientation hints, and print settings that STL cannot express.
- تجنب FBX حتى يصبح جاهزًا للإنتاج. تحقق من ملاحظات الإصدار للنسخة التي يكتمل فيها تحليل FBX بالكامل.
- طابق امتداد الحفظ مع الصيغة. لا تمرّر a
.gltfامتدادًا عندما تريد GLB ثنائي؛ استخدم.glbبشكل صريح. يحدد الامتداد أي مُسلسِل يُستَخدم. - تحقق من توافق المضلعات. يتطلب STL و3MF مثلثات. يتم تحويل الأرباع وN‑gons إلى مثلثات تلقائيًا عند الحفظ، لكن عدد الرؤوس سيزداد. إذا كنت بحاجة إلى التحكم في عملية التحويل إلى مثلثات، استدعِ
mesh.triangulate()قبل الحفظ.