Mesh

بسته: aspose.threed.entities (aspose-3d-foss 26.1.0)

Mesh هندسه چندضلعی را به‌صورت فهرستی از نقاط کنترل (موقعیت‌های راس) و فهرستی از سطوح چندضلعی ذخیره می‌کند. هر سطح چندضلعی فهرستی از ایندکس‌های صفر‑مبنا به‌سوی آرایهٔ نقاط کنترل است. سطوح می‌توانند مثلث، چهارضلعی یا چندضلعی‌های با آرگومان بالاتر باشند. داده‌های اضافی به‌ازای هر راس؛ نرمال‌ها، مختصات UV، رنگ‌های راس؛ به‌صورت VertexElement لایه‌ها.

class Mesh(Geometry):

Methods

A3DObjectSceneObjectEntityGeometryMesh


Methods

یک مش مثلثی تک‌تکه را از ابتدا بسازید:

from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.utilities import Vector4

# Create the mesh and add three vertex positions
# IMPORTANT: control_points returns a copy of the internal list.
# Append to _control_points directly — appending to control_points discards the vertex.
# This is a known library limitation; a public mutation API does not yet exist.
mesh = Mesh()
mesh._control_points.append(Vector4(0.0, 0.0, 0.0, 1.0))   # vertex 0
mesh._control_points.append(Vector4(1.0, 0.0, 0.0, 1.0))   # vertex 1
mesh._control_points.append(Vector4(0.5, 1.0, 0.0, 1.0))   # vertex 2

# Define one triangle face using vertex indices
mesh.create_polygon(0, 1, 2)

# Attach to a scene and save
scene = Scene()
scene.root_node.create_child_node("triangle", mesh)
scene.save("triangle.stl")

یک مش چهارضلعی بسازید و قبل از خروجی‌گیری آن را مثلث‌بندی کنید:

from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.utilities import Vector4

mesh = Mesh()
# Four corners of a unit square in the XZ plane
# Use _control_points to mutate the backing list (control_points returns a copy)
for x, z in [(0, 0), (1, 0), (1, 1), (0, 1)]:
    mesh._control_points.append(Vector4(float(x), 0.0, float(z), 1.0))

# One quad face
mesh.create_polygon(0, 1, 2, 3)
print(f"Polygons before triangulate: {mesh.polygon_count}")  # 1

triangulated = mesh.triangulate()
print(f"Polygons after triangulate: {triangulated.polygon_count}")  # 2

scene = Scene()
scene.root_node.create_child_node("quad", triangulated)
scene.save("quad.glb")

Methods

control_points, polygon_count, polygons, edges, و vertex_elements همهٔ ویژگی‌ها; بدون پرانتز به آن‌ها دسترسی پیدا کنید.

MethodsMethodsMethodsMethods
control_pointslist[Vector4]خواندنآرایهٔ موقعیت راس. هر ورودی یک Vector4(x, y, z, w) که w است 1.0 برای داده‌های موقعیت. یک کپی برمی‌گرداند — به لیست برگردانده‌شده اضافه نکنید. استفاده کنید mesh._control_points.append(v) برای افزودن رئوس (محدودیت شناخته‌شده؛ API تغییر عمومی هنوز در دسترس نیست).
polygon_countintخواندنتعداد سطوح چندضلعی تعریف‌شده در این مش.
polygonslist[list[int]]خواندنتمام تعاریف سطوح به‌صورت فهرستی از فهرست‌های ایندکس. هر فهرست داخلی ایندکس‌های رئوس (در control_points) برای یک وجه.
edgeslist[int]خواندنداده‌های خام شاخص لبه. عمدتاً برای استفاده داخلی و پرس‌و‌جوهای پیشرفته توپولوژی.
vertex_elementslist[VertexElement]خواندنتمام لایه‌های عنصر راس که در حال حاضر به این مش متصل هستند (نرمال‌ها، UVها، رنگ‌ها و غیره).
visibleboolخواندن/نوشتنMethods False,، مش در نمایشگرهایی که به قابلیت نمایش احترام می‌گذارند مخفی می‌شود.
cast_shadowsboolخواندن/نوشتناینکه آیا این مش در رندررهایی که نقشه‌های سایه را پشتیبانی می‌کنند، سایه می‌اندازد.
receive_shadowsboolخواندن/نوشتناین که آیا این مش سایه‌ها را از سایر هندسه‌های تولیدکننده سایه دریافت می‌کند.

Methods

create_polygon(*indices)

یک سطح چندضلعی جدید را با ارائهٔ ایندکس‌های راس به ترتیب تعریف کنید. ایندکس‌ها به موقعیت‌ها در control_points. برای مثلث‌ها، چهارضلعی‌ها و n‑گون‌ها سه یا بیشتر ایندکس را می‌پذیرد.

MethodsMethodsMethods
*indicesintآرگومان‌های ایندکس راس به ترتیب پیچش (معمولاً خلاف ساعت‌گرد هنگام مشاهده از بیرون).

بازمی‌گرداند: None

mesh = Mesh()
# ... populate control_points ...
mesh.create_polygon(0, 1, 2)       # triangle
mesh.create_polygon(0, 1, 2, 3)    # quad
print(mesh.polygon_count)          # 2

triangulate()

یک جدید برگردانید Mesh که در آن هر چندضلعی با استفاده از مثلث‌بندی فن به مثلث‌ها تقسیم شده است. مش اصلی تغییر نمی‌کند. قبل از خروجی به فرمت‌هایی که فقط هندسهٔ مثلثی را می‌طلبند (مانند STL یا برخی خطوط لولهٔ glTF) مفید است.

بازمی‌گرداند: Mesh; یک مش جدید که فقط شامل مثلث‌ها است.

from aspose.threed.entities import Mesh
from aspose.threed.utilities import Vector4

mesh = Mesh()
# Use _control_points to mutate the backing list (control_points returns a copy)
for v in [(0,0,0), (1,0,0), (1,1,0), (0,1,0)]:
    mesh._control_points.append(Vector4(*v, 1.0))
mesh.create_polygon(0, 1, 2, 3)   # one quad

tri_mesh = mesh.triangulate()
print(tri_mesh.polygon_count)      # 2

to_mesh()

این را برگردانید Mesh به عنوان یک Mesh نمونه. برای Mesh در اشیاء این یک عملیات هویت است (بازمی‌گرداند self). تعریف شده بر روی Geometry کلاس پایه برای فراهم کردن یک رابط تبدیل یکنواخت هنگام کار با عمومی Geometry مراجع.

بازمی‌گرداند: Mesh

from aspose.threed.entities import Geometry

def ensure_mesh(geom: Geometry):
    return geom.to_mesh()

create_element(element_type, mapping_mode, reference_mode)

افزودن جدید VertexElement لایه‌ای از نوع مشخص‌شده به مش اضافه کنید. از این برای پیوست نرمال‌ها، تانژانت‌ها، باینورمال‌ها، رنگ‌های راس و گروه‌های صاف‌سازی استفاده کنید.

MethodsMethodsMethods
element_typeVertexElementTypeنوع داده‌ای که این لایه نگه می‌دارد (مثلاً،., VertexElementType.NORMAL).
mapping_modeMappingModeنحوه نگاشت داده‌ها به هندسه: CONTROL_POINT, POLYGON_VERTEX, POLYGON,، و غیره.
reference_modeReferenceModeنحوه استفاده از ایندکس‌ها: DIRECT یا INDEX_TO_DIRECT.

بازمی‌گرداند: VertexElement

from aspose.threed.entities import Mesh, VertexElementType, MappingMode, ReferenceMode
from aspose.threed.utilities import Vector4

mesh = Mesh()
# Use _control_points to mutate the backing list (control_points returns a copy)
mesh._control_points.append(Vector4(0, 0, 0, 1))
mesh._control_points.append(Vector4(1, 0, 0, 1))
mesh._control_points.append(Vector4(0.5, 1, 0, 1))
mesh.create_polygon(0, 1, 2)

normal_element = mesh.create_element(
    VertexElementType.NORMAL,
    MappingMode.CONTROL_POINT,
    ReferenceMode.DIRECT,
)

create_element_uv(uv_mapping, mapping_mode, reference_mode)

یک لایه مختصات UV به مش اضافه کنید. این روش ترجیحی برای اتصال داده‌های مختصات بافت است.

MethodsMethodsMethods
uv_mappingTextureMappingهدف کانال UV: DIFFUSE, SPECULAR, NORMAL, AMBIENT, و غیره.
mapping_modeMappingModeچگونه UVها به عناصر هندسه نگاشت می‌شوند.
reference_modeReferenceModeحالت ایندکس‌گذاری: DIRECT یا INDEX_TO_DIRECT.

بازمی‌گرداند: VertexElementUV

from aspose.threed.entities import Mesh, TextureMapping, MappingMode, ReferenceMode

mesh = Mesh()
# ... define control_points and polygons ...
uv_element = mesh.create_element_uv(
    TextureMapping.DIFFUSE,
    MappingMode.POLYGON_VERTEX,
    ReferenceMode.INDEX_TO_DIRECT,
)

موارد مرتبط

 فارسی