PolygonModifier

PolygonModifier — Aspose.3D Python API Reference

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

PolygonModifier یک کلاس ابزار ایستا است که عملیات تستسلیشن چندضلعی را بر روی Mesh و Scene اشیاء. تمام متدها متدهای کلاس هستند؛; PolygonModifier به‌صورت مستقیم هرگز نمونه‌سازی نمی‌شود.

from aspose.threed.entities import PolygonModifier

عملیات اصلی، مثلث‌بندی است: تبدیل چهارضلعی‌ها و n‑گون‌ها به مثلث‌ها با استفاده از روش برش گوشه. این کار پیش از خروجی گرفتن به فرمت‌هایی که فقط هندسهٔ مثلثی را می‌پذیرند (STL، برخی خطوط لولهٔ glTF) لازم است.


triangulate(arg) — مثلث‌بندی یک Mesh

یک مقدار جدید برگردان Mesh که در آن هر چندضلعی به مثلث تبدیل شده است. مش اصلی تغییر نمی‌کند. لایه‌های عناصر راس (نرمال‌ها، UVها، رنگ‌ها) به مش جدید کپی می‌شوند.

@staticmethod
def triangulate(mesh: Mesh) -> Mesh
meshMeshمش منبع برای مثلث‌بندی.

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

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

mesh = Mesh()
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))
mesh.create_polygon(0, 1, 2, 3)   # one quad

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

triangulate(scene) — تمام مش‌ها را در یک Scene

کل گراف صحنه را پیمایش کنید و هر Mesh موجودیت را در محل. پس از این فراخوانی، هیچ چندضلعی غیر‑مثلثی در صحنه باقی نمی‌ماند.

@staticmethod
def triangulate(scene: Scene) -> None
sceneSceneصحنه‌ای که موجودیت‌های mesh آن مثلث‌بندی خواهند شد.

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

from aspose.threed import Scene
from aspose.threed.entities import PolygonModifier

scene = Scene.from_file("model_with_quads.obj")
PolygonModifier.triangulate(scene)
scene.save("model_triangulated.stl")

triangulate(control_points, polygon) — مثلث‌بندی یک چندضلعی

بارگذاری سطح پایین: با دریافت لیستی از نقاط کنترل و لیستی از ایندکس‌های راس که یک چندضلعی را تشکیل می‌دهند، لیستی از سه‌تایی‌های ایندکس مثلثی که توسط مثلث‌بندی فن تولید می‌شوند، برمی‌گرداند.

@staticmethod
def triangulate(
    control_points: list[Vector4],
    polygon: list[int],
) -> list[list[int]]
control_pointslist[Vector4]آرایه کامل موقعیت رئوس.
polygonlist[int]اندیس‌ها به control_points تعریف چندضلعی برای تقسیم.

باز می‌گردد: list[list[int]] — یک لیست از [i, j, k] سه‌تایی‌ها، که هر کدام یک مثلث خروجی را نشان می‌دهند.

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

pts = [
    Vector4(0.0, 0.0, 0.0, 1.0),
    Vector4(1.0, 0.0, 0.0, 1.0),
    Vector4(1.0, 1.0, 0.0, 1.0),
    Vector4(0.0, 1.0, 0.0, 1.0),
]
quad_indices = [0, 1, 2, 3]
triangles = PolygonModifier.triangulate(pts, quad_indices)
print(triangles)   # e.g. [[0, 1, 2], [0, 2, 3]]

triangulate(control_points, polygons, generate_normals, normals_out) — دسته‌ای مثلث‌بندی با تولید نرمال اختیاری

Batch-triangulate یک فهرست از فهرست‌های شاخص چندضلعی. به‌صورت اختیاری نرمال‌های سطح را برای هر مثلث خروجی محاسبه کرده و به normals_out.

@staticmethod
def triangulate(
    control_points: list[Vector4],
    polygons: list[list[int]],
    generate_normals: bool = False,
    normals_out: list[Vector3] | None = None,
) -> list[list[int]]
control_pointslist[Vector4]آرایه موقعیت رئوس.
polygonslist[list[int]]یک فهرست از تعاریف چندضلعی، که هر کدام فهرستی از شاخص‌های رئوس هستند.
generate_normalsbool
True,، نرمال سطح را برای هر مثلث خروجی محاسبه کنید.
normals_out`list[Vector3]None`

باز می‌گرداند: list[list[int]] — تمام سه‌تایی‌های مثلث خروجی به ترتیب.

from aspose.threed.entities import PolygonModifier
from aspose.threed.utilities import Vector4, Vector3

pts = [
    Vector4(0, 0, 0, 1), Vector4(1, 0, 0, 1),
    Vector4(1, 1, 0, 1), Vector4(0, 1, 0, 1),
]
polys = [[0, 1, 2, 3]]
normals: list[Vector3] = []
tris = PolygonModifier.triangulate(pts, polys, True, normals)
print(len(tris))     # 2
print(len(normals))  # 2

همچنین ببینید

 فارسی