PolygonModifier
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 quads i n‑gons en triangles mitjançant el mètode ear‑clipping. Això és necessari abans d’exportar a formats que accepten només geometria triangular (STL, algunes pipelines glTF).
Methods
triangulate(arg) — triangula un Mesh
Retorna un nou Mesh en què cada polígon s’ha 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 tessellar. |
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()
# 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) # 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 queden 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 de la qual 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 de fan.
@staticmethod
def triangulate(
control_points: list[Vector4],
polygon: list[int],
) -> list[list[int]]| Methods | Methods | Methods |
|---|---|---|
control_points | list[Vector4] | La matriu completa de posicions dels vèrtexs. |
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