Mesh — Aspose.3D FOSS for Java

Pacote: com.aspose.threed (aspose-3d-foss 26.1.0)

Mesh armazena a geometria do polígono como uma lista de pontos de controle (posições dos vértices) e uma lista de faces do polígono. Cada face do polígono é uma lista de índices baseados em zero no array de pontos de controle. As faces podem ser triângulos, quads ou polígonos de aridade superior. Dados adicionais por vértice – normais, coordenadas UV, cores dos vértices – são anexados como VertexElement camadas.

public class Mesh extends Geometry

Methods

A3DObject -> SceneObject -> Entity -> Geometry -> Mesh


Methods

Construa uma malha de triângulo único do zero:

import com.aspose.threed.Scene;
import com.aspose.threed.*;


// Create the mesh and add three vertex positions
Mesh mesh = new Mesh();
mesh.getControlPoints().add(new Vector4(0.0, 0.0, 0.0, 1.0));   // vertex 0
mesh.getControlPoints().add(new Vector4(1.0, 0.0, 0.0, 1.0));   // vertex 1
mesh.getControlPoints().add(new Vector4(0.5, 1.0, 0.0, 1.0));   // vertex 2

// Define one triangle face using vertex indices
mesh.createPolygon(0, 1, 2);

// Attach to a scene and save
Scene scene = new Scene();
scene.getRootNode().createChildNode("triangle", mesh);
scene.save("triangle.stl");

Construa uma malha de quadrado (nota: triangulate() é um stub — veja o aviso abaixo):

import com.aspose.threed.Scene;
import com.aspose.threed.*;


Mesh mesh = new Mesh();
// Four corners of a unit square in the XZ plane
mesh.getControlPoints().add(new Vector4(0, 0, 0, 1.0));
mesh.getControlPoints().add(new Vector4(1, 0, 0, 1.0));
mesh.getControlPoints().add(new Vector4(1, 0, 1, 1.0));
mesh.getControlPoints().add(new Vector4(0, 0, 1, 1.0));

// One quad face
mesh.createPolygon(0, 1, 2, 3);
System.out.println("Polygons before triangulate: " + mesh.getPolygonCount());  // 1

// WARNING: triangulate() is a stub — it returns a clone, NOT a triangulated mesh.
// The polygon count will remain 1 (not 2).
Mesh triangulated = mesh.triangulate();
System.out.println("Polygons after triangulate: " + triangulated.getPolygonCount());  // still 1

Scene scene = new Scene();
scene.getRootNode().createChildNode("quad", triangulated);
// When saving to STL, pass triangle-only meshes to avoid vertex loss or malformed output.
scene.save("quad.glb");

Methods

MethodsMethodsMethodsMethodsMethods
controlPointsList<Vector4>getControlPoints()Vetor de posições dos vértices. Cada entrada é um Vector4(x, y, z, w) onde w é 1.0 para dados de posição. Adicione vértices chamando add() na lista retornada.
polygonCountintgetPolygonCount()Número de faces de polígonos definidas nesta malha.
polygonsList<int[]>getPolygons()Todas as definições de faces como uma lista de arrays de índices. Cada array interno contém os índices dos vértices (em controlPoints) para uma face.
edgesList<Integer>getEdges()Dados brutos de índices de arestas. Principalmente para uso interno e consultas avançadas de topologia.
vertexElementsList<VertexElement>getVertexElements()Todas as camadas de elementos de vértice atualmente anexadas a esta malha (normais, UVs, cores, etc.).
visiblebooleangetVisible()setVisible(boolean)Methods false, a malha está oculta em visualizadores que respeitam a visibilidade.
castShadowsbooleangetCastShadows()setCastShadows(boolean)Se esta malha projeta sombras em renderizadores que suportam mapas de sombras.
receiveShadowsbooleangetReceiveShadows()setReceiveShadows(boolean)Se esta malha recebe sombras de outra geometria que projeta sombras.

Methods

createPolygon(int... indices)

Defina uma nova face poligonal fornecendo os índices dos vértices em ordem. Os índices referenciam posições em getControlPoints(). Aceita três ou mais índices para triângulos, quadriláteros e n-gonos.

MethodsMethodsMethods
indicesint...Argumentos de índice de vértice em ordem de enrolamento (tipicamente no sentido anti-horário quando vistos de fora).

Retorna: void

Mesh mesh = new Mesh();
// ... populate control points ...
mesh.createPolygon(0, 1, 2);       // triangle
mesh.createPolygon(0, 1, 2, 3);    // quad
System.out.println(mesh.getPolygonCount());   // 2

triangulate()

Stub: Retorna uma cópia da malha original. Destinado a dividir todos os polígonos em triângulos usando triangulação em leque, mas a lógica real de triangulação ainda não foi implementada. A malha original não é modificada.

Retorna: Mesh – uma cópia da malha original (comportamento stub).

import com.aspose.threed.*;

Mesh mesh = new Mesh();
mesh.getControlPoints().add(new Vector4(0, 0, 0, 1.0));
mesh.getControlPoints().add(new Vector4(1, 0, 0, 1.0));
mesh.getControlPoints().add(new Vector4(1, 1, 0, 1.0));
mesh.getControlPoints().add(new Vector4(0, 1, 0, 1.0));
mesh.createPolygon(0, 1, 2, 3);   // one quad

Mesh triMesh = mesh.triangulate();
// Note: currently returns a clone, not a triangulated mesh
System.out.println(triMesh.getPolygonCount());

toMesh()

Retorne isto Mesh como um Mesh instância. Para Mesh objetos, isso é uma operação identidade (retorna this) Geometry classe base para fornecer uma interface de conversão uniforme ao trabalhar com genéricos Geometry referências.

Retorna: Mesh

import com.aspose.threed.*;

Mesh ensureMesh(Geometry geom) {
    return geom.toMesh();
}

createElement(VertexElementType elementType, MappingMode mappingMode, ReferenceMode referenceMode)

Adicionar um novo VertexElement camada do tipo especificado à malha. Use isso para anexar normais, tangentes, binormais, cores de vértice e grupos de suavização.

MethodsMethodsMethods
elementTypeVertexElementTypeO tipo de dados que esta camada contém (por exemplo,., VertexElementType.NORMAL).
mappingModeMappingModeComo os dados são mapeados para a geometria: CONTROL_POINT, POLYGON_VERTEX, POLYGON, etc.
referenceModeReferenceModeComo os índices são usados: DIRECT ou INDEX_TO_DIRECT.

Retorna: VertexElement

import com.aspose.threed.*;





Mesh mesh = new Mesh();
mesh.getControlPoints().add(new Vector4(0, 0, 0, 1));
mesh.getControlPoints().add(new Vector4(1, 0, 0, 1));
mesh.getControlPoints().add(new Vector4(0.5, 1, 0, 1));
mesh.createPolygon(0, 1, 2);

VertexElement normalElement = mesh.createElement(
    VertexElementType.NORMAL,
    MappingMode.CONTROL_POINT,
    ReferenceMode.DIRECT
);

createElementUV(TextureMapping uvMapping, MappingMode mappingMode, ReferenceMode referenceMode)

Adicione uma camada de coordenadas UV à malha. Este é o método preferido para anexar dados de coordenadas de textura.

MethodsMethodsMethods
uvMappingTextureMappingA finalidade do canal UV: DIFFUSE, SPECULAR, NORMAL, AMBIENT, etc.
mappingModeMappingModeComo os UVs mapeiam para os elementos da geometria.
referenceModeReferenceModeModo de indexação: DIRECT ou INDEX_TO_DIRECT.

Retorna: VertexElementUV

import com.aspose.threed.*;




Mesh mesh = new Mesh();
// ... define control points and polygons ...
VertexElementUV uvElement = mesh.createElementUV(
    TextureMapping.DIFFUSE,
    MappingMode.POLYGON_VERTEX,
    ReferenceMode.INDEX_TO_DIRECT
);

Métodos Booleanos e de Otimização (Stubs)

Os seguintes métodos existem em Mesh mas são stubs que retornam uma cópia do mesh original sem executar a operação pretendida.

Importante: union, difference, intersect, e doBoolean são métodos estáticos, não métodos de instância. Chame-os como Mesh.union(a, b), não a.union(b).

MethodsTipo de RetornoMethods
static Mesh.union(Mesh a, Mesh b)MeshStub: retorna uma cópia de a. Destinado à união CSG.
static Mesh.difference(Mesh a, Mesh b)MeshStub: retorna uma cópia de a. Destinado à subtração CSG.
static Mesh.intersect(Mesh a, Mesh b)MeshStub: retorna uma cópia de a. Destinado à interseção CSG.
static Mesh.doBoolean(BooleanOperation op, Mesh a, Matrix4 ma, Mesh b, Matrix4 mb)MeshStub: retorna uma cópia de a. Destinado a CSG geral com transformações.
optimize(boolean removeVertices)MeshStub: retorna um clone. Sobrecargas de quatro parâmetros: optimize(boolean), optimize(boolean, float), optimize(boolean, float, float), optimize(boolean, float, float, float).
optimize2(boolean removeVertices)MeshStub: retorna um clone. Ponto de entrada de otimização alternativa.

Veja Também

 Português