PolygonModifier — Aspose.3D Python API Reference
Pakke: aspose.threed.entities (aspose-3d-foss 26.1.0)
PolygonModifier er en statisk verktøyklasse som gir polygon-tessellasjonsoperasjoner på Mesh og Scene objekter. Alle metoder er klassemetoder; PolygonModifier instansieres aldri direkte.
from aspose.threed.entities import PolygonModifierHovedoperasjonen er triangulering: konvertering av firkanter og n‑goner til trekanter ved hjelp av ear‑clipping. Dette er nødvendig før eksport til formater som kun godtar trekantgeometri (STL, noen glTF‑pipelines).
triangulate(arg) — trianguler en Mesh
Returner en ny Mesh hvor hver polygon er konvertert til trekanter. Det opprinnelige mesh er ikke endret. Vertex element layers (normals, UVs, colours) kopieres til det nye mesh.
@staticmethod
def triangulate(mesh: Mesh) -> Meshmesh | Mesh | Kildemeshen som skal trianguleres. |
Returnerer: Mesh — et nytt mesh som kun inneholder trekantpolygoner.
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 alle mesh i en Scene
Traverser hele scenegrafen og trianguler hver Mesh entitet på stedet. Etter dette kallet er det ingen ikke-trekant-polygoner igjen i scenen.
@staticmethod
def triangulate(scene: Scene) -> Nonescene | Scene | Scenen hvis mesh-entiteter vil bli triangulert. |
Returnerer: 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 en enkelt polygon
Lavnivå‑overlasting: gitt en liste med kontrollpunkter og en liste med vertex‑indekser som danner én polygon, returneres en liste med trekant‑indeks‑tripletter produsert ved fan‑triangulering.
@staticmethod
def triangulate(
control_points: list[Vector4],
polygon: list[int],
) -> list[list[int]]control_points | list[Vector4] | Den fullstendige vertex‑posisjonsarrayen. |
polygon | list[int] | Indekser til control_points som definerer polygonet som skal splittes. |
Returnerer: list[list[int]] — en liste over [i, j, k] tripletter, hver som representerer en utdata‑triangel.
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‑triangulering med valgfri normalgenerering
Batch-trianguler en liste med polygon‑indeks‑lister. Beregn eventuelt flate‑normaler for hver utdata‑triangel og legg dem til 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] | Vertex‑posisjonsarrayen. |
polygons | list[list[int]] | En liste med polygon‑definisjoner, hver en liste med vertex‑indekser. |
generate_normals | bool | True, beregn en flate‑normal for hver utdata‑triangel. |
normals_out | `list[Vector3] | None` |
Returnerer: list[list[int]] — alle utdata‑triangeltripletter i rekkefølge.
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