PolygonModifier — Aspose.3D Python API Reference
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 Mesh và Scene đố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 PolygonModifierHoạt động chính là việc chia tam giác: 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).
triangulate(arg) — phân tam giác một Mesh
Trả về một Mesh trong đó mọi đa giác đã được chuyển đổi thành các 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) -> Meshmesh | Mesh | Lướ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()
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) # 2triangulate(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à triangulate mọi Mesh thực thể tại chỗ. Sau lời gọi này, không còn polygon non-triangle nào còn lại trong cảnh.
@staticmethod
def triangulate(scene: Scene) -> Nonescene | Scene | Cảnh mà các thực thể mesh sẽ được triangulate. |
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) — triangulate một polygon
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ề một 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]]control_points | list[Vector4] | Mảng vị trí vertex đầy đủ. |
polygon | list[int] | Chỉ mục vào control_points định nghĩa polygon cần tách. |
Trả về: list[list[int]] — một danh sách [i, j, k] triplet, mỗi cái đạ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) — batch triangulate với việc tạo normal tùy chọn
Thực hiện việc chia đa giác thành tam giác hàng loạt cho một danh sách các danh sách chỉ mục đa giác. Tùy chọn tính toán vector pháp tuyến mặt cho mỗi tam giác đầu ra và thêm 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]]control_points | list[Vector4] | Mảng vị trí đỉnh. |
polygons | list[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_normals | bool | True, tính một vector 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