PolygonModifier
Paket: aspose.threed.entities (aspose-3d-foss 26.1.0)
PolygonModifier ist eine statische Hilfsklasse, die Polygon‑Tessellationsoperationen auf Mesh und Scene Objekten bereitstellt. Alle Methoden sind Klassenmethoden; PolygonModifier wird nie direkt instanziiert.
from aspose.threed.entities import PolygonModifierDie Hauptoperation ist die Triangulation: Umwandlung von Vierecken und N‑Gons in Dreiecke mittels Ear‑Clipping. Dies ist erforderlich, bevor in Formate exportiert wird, die nur Dreiecksgeometrie akzeptieren (STL, einige glTF‑Pipelines).
Methods
triangulate(arg) — trianguliere ein Mesh
Gibt ein neues Mesh in dem jedes Polygon in Dreiecke umgewandelt wurde. Das ursprüngliche Mesh wird nicht verändert. Vertex‑Elementebenen (Normalen, UVs, Farben) werden in das neue Mesh kopiert.
@staticmethod
def triangulate(mesh: Mesh) -> Mesh| Methods | Methods | Methods |
|---|---|---|
mesh | Mesh | Das Quell‑Mesh, das trianguliert werden soll. |
Rückgabe: Mesh — ein neues Mesh, das nur Dreiecks-Polygone enthält.
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) — trianguliere alle Meshes in einem Scene
Durchlaufe den gesamten Szenengraphen und trianguliere jedes Mesh Entität an Ort und Stelle. Nach diesem Aufruf bleiben im Szenen keine Nicht‑Dreiecks‑Polygone mehr.
@staticmethod
def triangulate(scene: Scene) -> None| Methods | Methods | Methods |
|---|---|---|
scene | Scene | Die Szene, deren Mesh-Entitäten trianguliert werden. |
Rückgabe: 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) — trianguliere ein einzelnes Polygon
Low‑Level‑Überladung: Gibt eine Liste von Kontrollpunkten und eine Liste von Vertex‑Indizes, die ein Polygon bilden, zurück, liefert eine Liste von Dreieck‑Index‑Tripeln, die durch Fan‑Triangulation erzeugt werden.
@staticmethod
def triangulate(
control_points: list[Vector4],
polygon: list[int],
) -> list[list[int]]| Methods | Methods | Methods |
|---|---|---|
control_points | list[Vector4] | Das vollständige Vertex-Positions-Array. |
polygon | list[int] | Indizes in control_points Definieren des zu teilenden Polygons. |
Rückgabe: list[list[int]] — eine Liste von [i, j, k] Tripeln, von denen jedes ein Ausgabedreieck darstellt.
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 mit optionaler Normalenerzeugung
Batch-triangulate eine Liste von Polygon-Indexlisten. Optional Flächennormalen für jedes Ausgabedreieck berechnen und an 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] | das Vertex-Positionsarray anhängen. |
polygons | list[list[int]] | Eine Liste von Polygondefinitionen, jeweils eine Liste von Vertex-Indizes. |
generate_normals | bool | Methods True, berechne eine Flächennormale für jedes Ausgabedreieck. |
normals_out | `list[Vector3] | None` |
Rückgabe: list[list[int]] — alle ausgegebenen Dreieckstripletts in Reihenfolge.
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