پشتیبانی از فرمت‌ها

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_materialsboolTrueتجزیهٔ .mtl فایلی که توسط هدر OBJ ارجاع شده است
flip_coordinate_systemboolFalseتبدیل از راست‌دست Y‑up به راست‌دست Z‑up
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 فرمت پیشنهادی برای تبادل مدرن سه‌بعدی است. این فرمت گراف کامل صحنه (سلسله‌مراتبی گره‌ها، گره‌های نام‌دار، تبدیلات)، مواد (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 3MF

3MF 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() قبل از ذخیره.
 فارسی