Mesh

Balíček: aspose.threed.entities (aspose-3d-foss 26.1.0)

Mesh ukládá geometrii polygonů jako seznam řídicích bodů (pozic vrcholů) a seznam polygonových ploch. Každá polygonová plocha je seznam nulových indexů do pole řídicích bodů. Plochy mohou být trojúhelníky, čtyřúhelníky nebo polygony vyšší arity. Další data na vrchol; normály, UV souřadnice, barvy vrcholů; jsou připojeny jako VertexElement vrstvy.

class Mesh(Geometry):

Methods

A3DObjectSceneObjectEntityGeometryMesh


Methods

Vytvořte jedinou trojúhelníkovou síť od nuly:

from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.utilities import Vector4

# Create the mesh and add three vertex positions
# IMPORTANT: control_points returns a copy of the internal list.
# Append to _control_points directly — appending to control_points discards the vertex.
# This is a known library limitation; a public mutation API does not yet exist.
mesh = Mesh()
mesh._control_points.append(Vector4(0.0, 0.0, 0.0, 1.0))   # vertex 0
mesh._control_points.append(Vector4(1.0, 0.0, 0.0, 1.0))   # vertex 1
mesh._control_points.append(Vector4(0.5, 1.0, 0.0, 1.0))   # vertex 2

# Define one triangle face using vertex indices
mesh.create_polygon(0, 1, 2)

# Attach to a scene and save
scene = Scene()
scene.root_node.create_child_node("triangle", mesh)
scene.save("triangle.stl")

Vytvořte čtyřúhelníkovou síť a před exportem ji triangulujte:

from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.utilities import Vector4

mesh = Mesh()
# Four corners of a unit square in the XZ plane
# 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))

# One quad face
mesh.create_polygon(0, 1, 2, 3)
print(f"Polygons before triangulate: {mesh.polygon_count}")  # 1

triangulated = mesh.triangulate()
print(f"Polygons after triangulate: {triangulated.polygon_count}")  # 2

scene = Scene()
scene.root_node.create_child_node("quad", triangulated)
scene.save("quad.glb")

Methods

control_points, polygon_count, polygons, edges, a vertex_elements jsou všechny vlastnosti; přistupujte k nim bez závorek.

MethodsMethodsMethodsMethods
control_pointslist[Vector4]čístPole pozic vrcholů. Každý záznam je Vector4(x, y, z, w) kde w je 1.0 pro data o pozicích. Vrací kopii — nepřidávejte do vráceného seznamu. Použijte mesh._control_points.append(v) pro přidání vrcholů (známé omezení; veřejné API pro mutaci zatím není k dispozici).
polygon_countintčístPočet polygonových ploch definovaných v této síti.
polygonslist[list[int]]čístVšechny definice ploch jako seznam seznamů indexů. Každý vnitřní seznam obsahuje indexy vrcholů (do control_points) pro jednu plochu.
edgeslist[int]čístSurová data indexů hran. Primárně pro interní použití a pokročilé dotazy na topologii.
vertex_elementslist[VertexElement]čístVšechny vrstvy vrcholových elementů aktuálně připojené k tomuto meshu (normály, UV, barvy atd.).
visibleboolčíst/zapisovatMethods False, mesh je skryt v prohlížečích, které respektují viditelnost.
cast_shadowsboolčíst/zapisovatZda tento mesh vrhá stíny v rendererech, které podporují stínové mapy.
receive_shadowsboolčíst/zapisovatZda tento mesh přijímá stíny od jiné geometrie vrhající stíny.

Methods

create_polygon(*indices)

Definujte novou polygonální plochu zadáním indexů vrcholů v pořadí. Indexy odkazují na pozice v control_points. Přijímá tři nebo více indexů pro trojúhelníky, čtyřúhelníky a n‑gony.

MethodsMethodsMethods
*indicesintArgumenty indexů vrcholů ve směru vinutí (obvykle proti směru hodinových ručiček při pohledu zvenku).

Vrací: None

mesh = Mesh()
# ... populate control_points ...
mesh.create_polygon(0, 1, 2)       # triangle
mesh.create_polygon(0, 1, 2, 3)    # quad
print(mesh.polygon_count)          # 2

triangulate()

Vraťte nový Mesh kde byl každý polygon rozdělen na trojúhelníky pomocí fan triangulace. Původní síť není upravena. Užitečné před exportem do formátů, které vyžadují pouze trojúhelníkovou geometrii (např. STL nebo některé glTF pipeline).

Vrací: Mesh; nová síť obsahující pouze trojúhelníky.

from aspose.threed.entities import Mesh
from aspose.threed.utilities import Vector4

mesh = Mesh()
# Use _control_points to mutate the backing list (control_points returns a copy)
for v in [(0,0,0), (1,0,0), (1,1,0), (0,1,0)]:
    mesh._control_points.append(Vector4(*v, 1.0))
mesh.create_polygon(0, 1, 2, 3)   # one quad

tri_mesh = mesh.triangulate()
print(tri_mesh.polygon_count)      # 2

to_mesh()

Vraťte to Mesh jako Mesh instanci. Pro Mesh objektů je to identická operace (vrací self). Definováno na Geometry základní třídě, aby poskytla jednotné rozhraní pro konverzi při práci s obecnými Geometry referencemi.

Vrací: Mesh

from aspose.threed.entities import Geometry

def ensure_mesh(geom: Geometry):
    return geom.to_mesh()

create_element(element_type, mapping_mode, reference_mode)

Přidejte novou VertexElement vrstvu zadaného typu do sítě. Použijte to k připojení normál, tečen, binormál, barev vrcholů a skupin vyhlazování.

MethodsMethodsMethods
element_typeVertexElementTypeTyp dat, která tato vrstva obsahuje (např., VertexElementType.NORMAL).
mapping_modeMappingModeJak data mapují na geometrii: CONTROL_POINT, POLYGON_VERTEX, POLYGON, atd.
reference_modeReferenceModeJak jsou indexy používány: DIRECT nebo INDEX_TO_DIRECT.

Vrací: VertexElement

from aspose.threed.entities import Mesh, VertexElementType, MappingMode, ReferenceMode
from aspose.threed.utilities import Vector4

mesh = Mesh()
# Use _control_points to mutate the backing list (control_points returns a copy)
mesh._control_points.append(Vector4(0, 0, 0, 1))
mesh._control_points.append(Vector4(1, 0, 0, 1))
mesh._control_points.append(Vector4(0.5, 1, 0, 1))
mesh.create_polygon(0, 1, 2)

normal_element = mesh.create_element(
    VertexElementType.NORMAL,
    MappingMode.CONTROL_POINT,
    ReferenceMode.DIRECT,
)

create_element_uv(uv_mapping, mapping_mode, reference_mode)

Přidejte vrstvu UV souřadnic do sítě. Toto je preferovaný způsob, jak připojit data texturovacích souřadnic.

MethodsMethodsMethods
uv_mappingTextureMappingÚčel kanálu UV: DIFFUSE, SPECULAR, NORMAL, AMBIENT, atd.
mapping_modeMappingModeJak UV mapují geometrické prvky.
reference_modeReferenceModeRežim indexování: DIRECT nebo INDEX_TO_DIRECT.

Vrací: VertexElementUV

from aspose.threed.entities import Mesh, TextureMapping, MappingMode, ReferenceMode

mesh = Mesh()
# ... define control_points and polygons ...
uv_element = mesh.create_element_uv(
    TextureMapping.DIFFUSE,
    MappingMode.POLYGON_VERTEX,
    ReferenceMode.INDEX_TO_DIRECT,
)

Viz také

 Čeština