PolygonModifier

PolygonModifier

Gói: aspose.threed.entities (aspose-3d-foss 26.1.0)

PolygonModifier là một lớp tiện ích tĩnh cung cấp các thao tác tessellation đa giác trên MeshScene các đối tượng. Tất cả các phương thức đều là phương thức lớp; PolygonModifier không bao giờ được khởi tạo trực tiếp.

from aspose.threed.entities import PolygonModifier

Hoạt động chính là tam giác hoá: chuyển các quad và n-gon thành tam giác bằng phương pháp ear-clipping. Điều này là bắt buộc trước khi xuất ra các định dạng chỉ chấp nhận hình học tam giác (STL, một số pipeline glTF).


Methods

triangulate(arg) — tạo tam giác cho một Mesh

Trả về một Mesh trong đó mọi đa giác đã được chuyển đổi thành tam giác. Lưới gốc không bị thay đổi. Các lớp phần tử đỉnh (normals, UVs, colours) được sao chép sang lưới mới.

@staticmethod
def triangulate(mesh: Mesh) -> Mesh
MethodsMethodsMethods
meshMeshLưới nguồn để phân tam giác.

Trả về: Mesh — một lưới mới chỉ chứa các đa giác tam giác.

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

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

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

triangulate(scene) — phân tam giác tất cả các lưới trong một Scene

Duyệt toàn bộ đồ thị cảnh và phân tam giác mọi Mesh thực thể tại chỗ. Sau lời gọi này, không còn đa giác nào không phải tam giác trong cảnh.

@staticmethod
def triangulate(scene: Scene) -> None
MethodsMethodsMethods
sceneSceneCảnh mà các thực thể lưới sẽ được phân tam giác.

Trả về: 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) — chia một đa giác thành các tam giác

Phiên bản cấp thấp: cho một danh sách các điểm điều khiển và một danh sách các chỉ số đỉnh tạo thành một đa giác, trả về danh sách các bộ ba chỉ số tam giác được tạo ra bằng phương pháp fan triangulation.

@staticmethod
def triangulate(
    control_points: list[Vector4],
    polygon: list[int],
) -> list[list[int]]
MethodsMethodsMethods
control_pointslist[Vector4]Mảng vị trí các đỉnh đầy đủ.
polygonlist[int]Các chỉ mục vào control_points định nghĩa đa giác cần tách.

Trả về: list[list[int]] — một danh sách các [i, j, k] bộ ba, mỗi bộ đại diện cho một tam giác đầu ra.

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) — phân tam giác hàng loạt với tùy chọn tạo pháp tuyến

Phân tam giác hàng loạt một danh sách các danh sách chỉ mục đa giác. Tùy chọn tính pháp tuyến mặt cho mỗi tam giác đầu ra và nối chúng vào 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]]
MethodsMethodsMethods
control_pointslist[Vector4]Mảng vị trí đỉnh.
polygonslist[list[int]]Một danh sách các định nghĩa đa giác, mỗi định nghĩa là một danh sách các chỉ mục đỉnh.
generate_normalsboolMethods True, tính một pháp tuyến mặt cho mỗi tam giác đầu ra.
normals_out`list[Vector3]None`

Trả về: list[list[int]] — tất cả các bộ ba tam giác đầu ra theo thứ tự.

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

Xem thêm

 Tiếng Việt