دعم الصيغ

يمكن لـ Aspose.3D FOSS for Python قراءة وكتابة سبعة صيغ ثلاثية الأبعاد باستخدام تمثيل مشهد واحد في الذاكرة. تقوم المكتبة بترجمة كل صيغة إلى كائن Scene مشترك عند التحميل وتسلسل ذلك الكائن مرة أخرى إلى الصيغة المستهدفة عند الحفظ. هذا يعني أن المشهد المحمَّل من OBJ يمكن حفظه مباشرةً إلى glTF دون أي خطوات تحويل وسيطة.


الصيغ المدعومة

الصيغةالامتداد:—-::—–:فئة الخياراتملاحظات
Wavefront OBJ.objYesYesObjLoadOptions.mtl دعم تحميل المواد
STL (binary).stlYesYesStlSaveOptionsقراءة ثنائية وASCII؛ الحفظ افتراضيًا إلى ثنائي
STL (ASCII).stlYesYesStlSaveOptionsتم التحقق من الجولة الكاملة
glTF 2.0.gltfYesYesGltfSaveOptionsتم الحفاظ على مخطط المشهد الكامل والمواد والرسوم المتحركة
GLB (binary glTF).glbYesYesGltfSaveOptionsحاوية ثنائية بملف واحد
COLLADA.daeYesYesColladaLoadOptions / ColladaSaveOptionsهرمية المشهد والمواد
3MF.3mfYesYesThreeMfSaveOptionsصيغة التصنيع الإضافي
FBX.fbxPartialNoN/Aالمحلل اللغوي يعمل؛ المحلل الكامل قيد التطوير (ليس جاهزًا للإنتاج)

تنسيق OBJ

Wavefront OBJ هو أكثر تنسيق تبادل مدعوم على نطاق واسع للشبكات الثابتة. يقوم Aspose.3D FOSS بتحميل الهندسة (الرؤوس، المتجهات العمودية، إحداثيات UV، والوجوه المتعددة الأضلاع) وبشكل اختياري ملف المادة المرافق .mtl.

ObjLoadOptions

الخاصيةالنوعالافتراضيالوصف
enable_materialsboolTrueتحليل ملف .mtl المشار إليه في رأس OBJ
flip_coordinate_systemboolFalseتحويل من Y-أعلى يميني إلى Z-أعلى يميني
normalize_normalboolTrueتطبيع جميع المتجهات العمودية المستوردة للسطوح إلى طول وحدة
scalefloat1.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() قبل الحفظ.
 العربية