PolygonModifier — Aspose.3D Python API Reference
Paquet: aspose.threed.entities (aspose-3d-foss 26.1.0)
PolygonModifier és una classe d’utilitat estàtica que proporciona operacions de tessellació de polígons sobre Mesh i Scene objectes. Tots els mètodes són mètodes de classe; PolygonModifier mai s’instancia directament.
from aspose.threed.entities import PolygonModifierL’operació principal és la triangulació: convertir quàders i n‑gons en triangles mitjançant la tècnica d’ear‑clipping. Això és necessari abans d’exportar a formats que només accepten geometria de triangles (STL, alguns fluxos de treball glTF).
Methods
triangulate(arg) — triangula un Mesh
Retorna un nou Mesh en el qual cada polígon ha estat convertit en triangles. La malla original no es modifica. Les capes d’elements de vèrtex (normals, UVs, colors) es copien a la nova malla.
@staticmethod
def triangulate(mesh: Mesh) -> Mesh| Methods | Methods | Methods |
|---|---|---|
mesh | Mesh | La malla d’origen a triangular. |
Retorna: Mesh — una nova malla que conté només polígons triangulars.
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) — triangula totes les malles en una Scene
Recorre tot el graf de l’escena i triangula cada Mesh entitat in situ. Després d’aquesta crida, no quedaran polígons que no siguin triangles a l’escena.
@staticmethod
def triangulate(scene: Scene) -> None| Methods | Methods | Methods |
|---|---|---|
scene | Scene | L’escena les entitats de malla que seran triangulades. |
Retorna: 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) — triangula un únic polígon
Sobrecàrrega de baix nivell: donada una llista de punts de control i una llista d’índexs de vèrtex que formen un polígon, retorna una llista de tríades d’índexs de triangles produïda per la triangulació en forma d’ala.
@staticmethod
def triangulate(
control_points: list[Vector4],
polygon: list[int],
) -> list[list[int]]| Methods | Methods | Methods |
|---|---|---|
control_points | list[Vector4] | L’array complet de posicions de vèrtex. |
polygon | list[int] | Índexs a control_points definint el polígon a dividir. |
Retorna: list[list[int]] — una llista de [i, j, k] triplets, cadascuna representant un triangle de sortida.
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) — triangulació per lots amb generació opcional de normals
Triangula per lots una llista de llistes d’índexs de polígon. Opcionalment calcula les normals de cara per a cada triangle de sortida i les afegeix a 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]]| Methods | Methods | Methods |
|---|---|---|
control_points | list[Vector4] | L’array de posicions dels vèrtexs. |
polygons | list[list[int]] | Una llista de definicions de polígon, cada una una llista d’índexs de vèrtex. |
generate_normals | bool | Methods True, calcula una normal de cara per a cada triangle de sortida. |
normals_out | `list[Vector3] | None` |
Retorna: list[list[int]] — tots els triplets de triangle de sortida en ordre.
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