Mesh
Paquete: aspose.threed.entities (aspose-3d-foss 26.1.0)
Mesh almacena la geometría del polígono como una lista de puntos de control (posiciones de vértices) y una lista de caras del polígono. Cada cara del polígono es una lista de índices basados en cero en el arreglo de puntos de control. Las caras pueden ser triángulos, cuádruples o polígonos de aridad superior. Los datos adicionales por vértice; normales, coordenadas UV, colores de vértice; se adjuntan como VertexElement capas.
class Mesh(Geometry):Methods
A3DObject → SceneObject → Entity → Geometry → Mesh
Methods
Construye una malla de triángulo único desde cero:
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")Construye una malla de cuadrilátero y triangúlala antes de exportar:
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, y vertex_elements son todos propiedades; acceda a ellos sin paréntesis.
| Methods | Methods | Methods | Methods |
|---|---|---|---|
control_points | list[Vector4] | leer | Matriz de posiciones de vértices. Cada entrada es una Vector4(x, y, z, w) donde w es 1.0 para datos de posición. Devuelve una copia — no añadas a la lista devuelta. Usa mesh._control_points.append(v) para añadir vértices (limitación conocida; la API pública de mutación aún no está disponible). |
polygon_count | int | lectura | Número de caras de polígono definidas en esta malla. |
polygons | list[list[int]] | lectura | Todas las definiciones de caras como una lista de listas de índices. Cada lista interna contiene los índices de los vértices (en control_points) para una cara. |
edges | list[int] | lectura | Datos de índices de aristas sin procesar. Principalmente para uso interno y consultas avanzadas de topología. |
vertex_elements | list[VertexElement] | lectura | Todas las capas de elementos de vértices actualmente adjuntas a esta malla (normales, UVs, colores, etc.). |
visible | bool | lectura/escritura | Methods False, la malla está oculta en visores que respetan la visibilidad. |
cast_shadows | bool | lectura/escritura | Si esta malla proyecta sombras en renderizadores que admiten mapas de sombras. |
receive_shadows | bool | lectura/escritura | Si esta malla recibe sombras de otra geometría que proyecta sombras. |
Methods
create_polygon(*indices)
Define una nueva cara poligonal proporcionando los índices de vértices en orden. Los índices hacen referencia a posiciones en control_points. Acepta tres o más índices para triángulos, cuádruples y n-gonos.
| Methods | Methods | Methods |
|---|---|---|
*indices | int | Argumentos de índice de vértice en orden de enrollado (normalmente en sentido antihorario cuando se ve desde el exterior). |
Devuelve: 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) # 2triangulate()
Devuelve un nuevo Mesh donde cada polígono ha sido dividido en triángulos usando triangulación en abanico. La malla original no se modifica. Útil antes de exportar a formatos que requieren geometría solo de triángulos (como STL o algunas canalizaciones glTF).
Devuelve: Mesh; una nueva malla que contiene solo triángulos.
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) # 2to_mesh()
Devuelve esto Mesh como un Mesh instancia. Para Mesh objetos esta es una operación de identidad (devuelve self). Definido en el Geometry clase base para proporcionar una interfaz de conversión uniforme al trabajar con genéricos Geometry referencias.
Devuelve: Mesh
from aspose.threed.entities import Geometry
def ensure_mesh(geom: Geometry):
return geom.to_mesh()create_element(element_type, mapping_mode, reference_mode)
Añadir un nuevo VertexElement capa del tipo especificado a la malla. Use esto para adjuntar normales, tangentes, binormales, colores de vértice y grupos de suavizado.
| Methods | Methods | Methods |
|---|---|---|
element_type | VertexElementType | El tipo de datos que contiene esta capa (p.ej., VertexElementType.NORMAL). |
mapping_mode | MappingMode | Cómo se asignan los datos a la geometría: CONTROL_POINT, POLYGON_VERTEX, POLYGON, etc. |
reference_mode | ReferenceMode | Cómo se utilizan los índices: DIRECT o INDEX_TO_DIRECT. |
Devuelve: 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)
Añade una capa de coordenadas UV a la malla. Este es el método preferido para adjuntar datos de coordenadas de textura.
| Methods | Methods | Methods |
|---|---|---|
uv_mapping | TextureMapping | El propósito del canal UV: DIFFUSE, SPECULAR, NORMAL, AMBIENT, etc. |
mapping_mode | MappingMode | Cómo se asignan los UV a los elementos de geometría. |
reference_mode | ReferenceMode | Modo de indexado: DIRECT o INDEX_TO_DIRECT. |
Devuelve: 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,
)