پشتیبانی از فرمتها
Aspose.3D FOSS برای Python میتواند هفت فرمت 3D را با استفاده از یک نمایه صحنه در حافظه بخواند و بنویسد. کتابخانه هر فرمت را به یک شیء مشترک تبدیل میکند Scene شیء هنگام بارگذاری و آن شیء را هنگام ذخیره به فرمت هدف سریالسازی میکند. این به این معنی است که صحنهای که از OBJ بارگذاری شده است میتواند مستقیماً به glTF ذخیره شود بدون هیچ مرحله تبدیل میانی.
فرمتهای پشتیبانیشده
| فرمت | پسوند | خواندن | نوشتن | کلاس Options | نکات |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | بله | بله | ObjLoadOptions | .mtl پشتیبانی از بارگذاری مواد |
| STL (دودویی) | .stl | بله | بله | StlSaveOptions | خواندن دودویی و ASCII؛ ذخیره بهصورت پیشفرض دودویی |
| STL (ASCII) | .stl | بله | بله | StlSaveOptions | سفر رفتوبرگشت تأیید شد |
| glTF 2.0 | .gltf | بله | بله | GltfSaveOptions | گراف کامل صحنه، مواد و انیمیشنها حفظ میشوند |
| GLB (دودویی 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 فرمت پیشنهادی برای تبادل مدرن سهبعدی است. این فرمت گراف کامل صحنه (سلسلهمراتبی گرهها، گرههای نامدار، تبدیلات)، مواد (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 است، ابتدا با استفاده از Blender یا FBX Review آن را به glTF یا OBJ تبدیل کنید قبل از بارگذاری با 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 توسط تقریباً تمام ابزارهای 3D پشتیبانی میشود. این قالب محدود به مشهای ثابت است اما بسیار قابل حمل است.
- از 3MF برای چاپ استفاده کنید. 3MF carries colour, orientation hints, and print settings that STL cannot express.
- از FBX تا زمانی که برای تولید آماده نشود، استفاده نکنید. یادداشتهای انتشار را برای نسخهای که تجزیه کامل FBX در آن تکمیل شده است، بررسی کنید.
- پسوند ذخیرهسازی را با فرمت مطابقت دهید. یک را پاس ندهید
.gltfپسوند وقتی که GLB باینری میخواهید؛ استفاده کنید.glbبهصورت صریح. پسوند تعیین میکند که کدام serialiser استفاده شود. - سازگاری چندضلعیها را بررسی کنید. STL و 3MF به triangles نیاز دارند. Quads و N-gons بهصورت خودکار هنگام ذخیرهسازی triangulated میشوند، اما تعداد vertex افزایش مییابد. اگر نیاز به کنترل triangulation دارید، call
mesh.triangulate()قبل از ذخیره.