Mesh — Aspose.3D FOSS for Java
Pakke: com.aspose.threed (aspose-3d-foss 26.1.0)
Mesh lagrer polygongeometri som en liste over kontrollpunkter (vertex‑posisjoner) og en liste over polygonflater. Hver polygonflate er en liste med null‑baserte indekser inn i kontrollpunkts‑arrayen. Flater kan være trekanter, firkanter eller polygoner med høyere aritet. Ekstra per‑vertex‑data – normaler, UV‑koordinater, vertex‑farger – festes som VertexElement lag.
public class Mesh extends GeometryMethods
A3DObject -> SceneObject -> Entity -> Geometry -> Mesh
Methods
Bygg et enkelt trekant‑mesh fra bunnen av:
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");Bygg et kvadrat‑mesh (merk: triangulate() er en stub — se advarselen nedenfor):
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
| Methods | Methods | Methods | Methods | Methods |
|---|---|---|---|---|
controlPoints | List<Vector4> | getControlPoints() | – | Vertex‑posisjonsarray. Hvert element er en Vector4(x, y, z, w) hvor w er 1.0 for posisjonsdata. Legg til vertexer ved å kalle add() på den returnerte listen. |
polygonCount | int | getPolygonCount() | – | Antall polygonflater definert på dette nettet. |
polygons | List<int[]> | getPolygons() | – | Alle flatedefinisjoner som en liste av indeks‑arrayer. Hver indre array inneholder vertex‑indeksene (inn i controlPoints) for en flate. |
edges | List<Integer> | getEdges() | – | Rå kant‑indeksdata. Primært for intern bruk og avanserte topologi‑spørringer. |
vertexElements | List<VertexElement> | getVertexElements() | – | Alle vertex‑elementlag som for øyeblikket er festet til dette nettet (normaler, UV‑er, farger, osv.). |
visible | boolean | getVisible() | setVisible(boolean) | Methods false, nettet er skjult i visningsprogrammer som respekterer synlighet. |
castShadows | boolean | getCastShadows() | setCastShadows(boolean) | Om dette nettet kaster skygger i renderere som støtter skyggekart. |
receiveShadows | boolean | getReceiveShadows() | setReceiveShadows(boolean) | Om dette mesh-et mottar skygger fra annen skyggekastende geometri. |
Methods
createPolygon(int... indices)
Definer et nytt polygon‑flatede ved å oppgi vertex‑indeksene i rekkefølge. Indeksene refererer til posisjoner i getControlPoints(). Aksepterer tre eller flere indekser for trekanter, firkanter og n‑gons.
| Methods | Methods | Methods |
|---|---|---|
indices | int... | Vertex‑indeksargumenter i winding order (vanligvis mot klokken når de ses fra utsiden). |
Returnerer: 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()); // 2triangulate()
Stub: Returnerer en klone av den opprinnelige mesh-en. Tenkt å splitte alle polygoner i trekanter ved hjelp av fan-triangulering, men den faktiske trianguleringslogikken er ennå ikke implementert. Den opprinnelige mesh-en blir ikke endret.
Returnerer: Mesh – en klone av den opprinnelige mesh-en (stub-oppførsel).
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()
Returner dette Mesh som en Mesh instans. For Mesh objekter er dette en identitetsoperasjon (returnerer this) Geometry Definert på den Geometry basisklasse for å tilby et ensartet konverteringsgrensesnitt når man arbeider med generiske referanser.
Returnerer: Mesh
import com.aspose.threed.*;
Mesh ensureMesh(Geometry geom) {
return geom.toMesh();
}createElement(VertexElementType elementType, MappingMode mappingMode, ReferenceMode referenceMode)
Legg til en ny VertexElement lag av den angitte typen til mesh-en. Bruk dette for å legge til normaler, tangenter, binormaler, vertex-farger og glatthetsgrupper.
| Methods | Methods | Methods |
|---|---|---|
elementType | VertexElementType | Typen data dette laget inneholder (f.eks.,)., VertexElementType.NORMAL). |
mappingMode | MappingMode | Hvordan dataene kartlegges til geometri: CONTROL_POINT, POLYGON_VERTEX, POLYGON, osv. |
referenceMode | ReferenceMode | Hvordan indekser brukes: DIRECT eller INDEX_TO_DIRECT. |
Returnerer: 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)
Legg til et UV-koordinatlag i mesh-en. Dette er den foretrukne metoden for å knytte teksturkoordinatdata.
| Methods | Methods | Methods |
|---|---|---|
uvMapping | TextureMapping | Formålet med UV-kanalen: DIFFUSE, SPECULAR, NORMAL, AMBIENT, osv. |
mappingMode | MappingMode | Hvordan UV-er kartlegges til geometrielementer. |
referenceMode | ReferenceMode | Indekseringsmodus: DIRECT eller INDEX_TO_DIRECT. |
Returnerer: 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
);Boolske og optimaliseringsmetoder (stubber)
Følgende metoder finnes på Mesh men er stubber som returnerer en klone av den opprinnelige mesh-en uten å utføre den tiltenkte operasjonen.
Viktig: union, difference, intersect, og doBoolean er statiske metoder, ikke instansmetoder. Kall dem som Mesh.union(a, b), ikke a.union(b).
| Methods | Returtype | Methods |
|---|---|---|
static Mesh.union(Mesh a, Mesh b) | Mesh | Stub: returnerer en klone av a. Beregnet for CSG-union. |
static Mesh.difference(Mesh a, Mesh b) | Mesh | Stub: returnerer en klone av a. Beregnet for CSG-subtraksjon. |
static Mesh.intersect(Mesh a, Mesh b) | Mesh | Stub: returnerer en klone av a. Beregnet for CSG-interseksjon. |
static Mesh.doBoolean(BooleanOperation op, Mesh a, Matrix4 ma, Mesh b, Matrix4 mb) | Mesh | Stub: returnerer en klone av a. Beregnet for generell CSG med transformasjoner. |
optimize(boolean removeVertices) | Mesh | Stub: returnerer en klone. Fire parameteroverbelastninger: optimize(boolean), optimize(boolean, float), optimize(boolean, float, float), optimize(boolean, float, float, float). |
optimize2(boolean removeVertices) | Mesh | Stub: returnerer en klone. Alternativ optimaliseringsinngangspunkt. |