PolygonModifier — Aspose.3D Python API Reference
Package : aspose.threed.entities (aspose-3d-foss 26.1.0)
PolygonModifier est une classe utilitaire statique qui fournit des opérations de tessellation de polygones sur Mesh et Scene objets. Toutes les méthodes sont des méthodes de classe ; PolygonModifier n’est jamais instanciée directement.
from aspose.threed.entities import PolygonModifierL’opération principale est la triangulation : convertir les quadrilatères et les n‑gones en triangles à l’aide de la méthode du clip d’oreille. Cela est nécessaire avant d’exporter vers des formats qui n’acceptent que de la géométrie triangulaire (STL, certains pipelines glTF).
triangulate(arg) — trianguler un Mesh
Renvoie un nouveau Mesh dans lequel chaque polygone a été converti en triangles. Le maillage original n’est pas modifié. Les couches d’éléments de sommet (normales, UV, couleurs) sont copiées dans le nouveau maillage.
@staticmethod
def triangulate(mesh: Mesh) -> Meshmesh | Mesh | Le maillage source à trianguler. |
Renvoie : Mesh — un nouveau maillage contenant uniquement des polygones triangulaires.
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) — trianguler tous les maillages dans un Scene
Parcourir l’ensemble du graphe de scène et trianguler chaque Mesh entité sur place. Après cet appel, aucun polygone non triangulaire ne reste dans la scène.
@staticmethod
def triangulate(scene: Scene) -> Nonescene | Scene | La scène dont les entités de maillage seront triangulées. |
Renvoie : 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) — trianguler un seul polygone
Surcharge bas‑niveau : étant donné une liste de points de contrôle et une liste d’indices de sommets formant un polygone, renvoie une liste de triplets d’indices de triangles produits par la triangulation en éventail.
@staticmethod
def triangulate(
control_points: list[Vector4],
polygon: list[int],
) -> list[list[int]]control_points | list[Vector4] | Le tableau complet des positions des sommets. |
polygon | list[int] | Indices vers control_points définition du polygone à diviser. |
Renvoie : list[list[int]] — une liste de [i, j, k] triplets, chacun représentant un triangle de sortie.
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) — triangulation par lots avec génération optionnelle de normales
Trianguler par lots une liste de listes d’indices de polygones. Optionnellement calculer les normales de face pour chaque triangle de sortie et les ajouter à 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] | Le tableau des positions des sommets. |
polygons | list[list[int]] | Une liste de définitions de polygones, chacune étant une liste d’indices de sommets. |
generate_normals | bool | True, calculer une normale de face pour chaque triangle de sortie. |
normals_out | `list[Vector3] | None` |
Renvoie: list[list[int]] — tous les triplets de triangles en sortie dans l’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