Mesh — Aspose.3D FOSS for Java
Paket: com.aspose.threed (aspose-3d-foss 26.1.0)
Mesh speichert Polygongeometrie als eine Liste von Kontrollpunkten (Scheitelpositionen) und eine Liste von Polygonflächen. Jede Polygonfläche ist eine Liste von nullbasierten Indizes in das Kontrollpunkte‑Array. Flächen können Dreiecke, Vierecke oder Polygone höherer Arität sein. Zusätzliche pro‑Scheitel‑Daten – Normalen, UV‑Koordinaten, Scheitel‑Farben – werden angehängt als VertexElement Schichten.
public class Mesh extends GeometryMethods
A3DObject -> SceneObject -> Entity -> Geometry -> Mesh
Methods
Erstelle ein einzelnes Dreiecks‑Mesh von Grund auf:
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");Erstelle ein Viereck‑Mesh (Hinweis: triangulate() ist ein Stub — siehe Warnung unten):
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-Positionsarray. Jeder Eintrag ist ein Vector4(x, y, z, w) wo w ist 1.0 für Positionsdaten. Füge Scheitelpunkte hinzu, indem du aufrufst add() auf der zurückgegebenen Liste. |
polygonCount | int | getPolygonCount() | – | Anzahl der auf diesem Mesh definierten Polygonflächen. |
polygons | List<int[]> | getPolygons() | – | Alle Flächendefinitionen als Liste von Index-Arrays. Jeder innere Array enthält die Scheitelpunktindizes (in controlPoints) für eine Fläche. |
edges | List<Integer> | getEdges() | – | Rohdaten der Kantindizes. Primär für den internen Gebrauch und erweiterte Topologie‑Abfragen. |
vertexElements | List<VertexElement> | getVertexElements() | – | Alle Vertex‑Element‑Layer, die derzeit an diesem Mesh angehängt sind (Normalen, UVs, Farben usw.). |
visible | boolean | getVisible() | setVisible(boolean) | Methods false, das Mesh ist in Viewern, die Sichtbarkeit respektieren, verborgen. |
castShadows | boolean | getCastShadows() | setCastShadows(boolean) | Ob dieses Mesh Schatten wirft in Renderern, die Schattenkarten unterstützen. |
receiveShadows | boolean | getReceiveShadows() | setReceiveShadows(boolean) | Ob dieses Mesh Schatten von anderer, Schatten erzeugender Geometrie empfängt. |
Methods
createPolygon(int... indices)
Definieren Sie eine neue Polygonfläche, indem Sie die Vertex‑Indizes in Reihenfolge angeben. Die Indizes verweisen auf Positionen in getControlPoints(). Akzeptiert drei oder mehr Indizes für Dreiecke, Vierecke und N‑Gons.
| Methods | Methods | Methods |
|---|---|---|
indices | int... | Vertex‑Index‑Argumente in Windungsreihenfolge (typischerweise gegen den Uhrzeigersinn, wenn von außen betrachtet). |
Rückgabe: 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: Gibt eine Kopie des ursprünglichen Mesh zurück. Vorgesehen, alle Polygone mittels Fächer‑Triangulation in Dreiecke zu zerlegen, aber die eigentliche Triangulationslogik ist noch nicht implementiert. Das ursprüngliche Mesh wird nicht verändert.
Rückgabe: Mesh – eine Kopie des ursprünglichen Mesh (Stub‑Verhalten).
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()
Gib dies zurück Mesh als ein Mesh Instanz. Für Mesh Objekte ist dies eine Identitätsoperation (gibt zurück this) Geometry Basisklasse, um eine einheitliche Konvertierungsschnittstelle beim Arbeiten mit generischen Geometry Referenzen.
Rückgabe: Mesh
import com.aspose.threed.*;
Mesh ensureMesh(Geometry geom) {
return geom.toMesh();
}createElement(VertexElementType elementType, MappingMode mappingMode, ReferenceMode referenceMode)
Füge ein neues VertexElement Layer des angegebenen Typs zum Mesh hinzufügen. Verwenden Sie dies, um Normalen, Tangenten, Binormalen, Vertex‑Farben und Glättungsgruppen anzuhängen.
| Methods | Methods | Methods |
|---|---|---|
elementType | VertexElementType | Die Art der Daten, die dieser Layer enthält (z. B., VertexElementType.NORMAL). |
mappingMode | MappingMode | Wie die Daten auf die Geometrie abgebildet werden: CONTROL_POINT, POLYGON_VERTEX, POLYGON, usw. |
referenceMode | ReferenceMode | Wie Indizes verwendet werden: DIRECT oder INDEX_TO_DIRECT. |
Rückgabe: 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)
Fügen Sie dem Mesh eine UV‑Koordinatenschicht hinzu. Dies ist die bevorzugte Methode, um Texturkoordinatendaten anzuhängen.
| Methods | Methods | Methods |
|---|---|---|
uvMapping | TextureMapping | Der Zweck des UV‑Kanals: DIFFUSE, SPECULAR, NORMAL, AMBIENT, usw. |
mappingMode | MappingMode | Wie UVs auf Geometrie‑Elemente abgebildet werden. |
referenceMode | ReferenceMode | Indexierungsmodus: DIRECT oder INDEX_TO_DIRECT. |
Rückgabe: 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
);Boolesche und Optimierungsmethoden (Stubs)
Die folgenden Methoden existieren auf Mesh sind jedoch Stubs die eine Kopie des ursprünglichen Mesh zurückgeben, ohne ihre beabsichtigte Operation auszuführen.
Wichtig: union, difference, intersect, und doBoolean sind statische Methoden, keine Instanzmethoden. Rufen Sie sie auf als Mesh.union(a, b), nicht a.union(b).
| Methods | Rückgabetyp | Methods |
|---|---|---|
static Mesh.union(Mesh a, Mesh b) | Mesh | Stub: gibt eine Kopie von a. Für CSG-Union vorgesehen. |
static Mesh.difference(Mesh a, Mesh b) | Mesh | Stub: gibt eine Kopie von zurück a. Für CSG-Subtraktion vorgesehen. |
static Mesh.intersect(Mesh a, Mesh b) | Mesh | Stub: gibt eine Kopie von zurück a. Für CSG-Intersection vorgesehen. |
static Mesh.doBoolean(BooleanOperation op, Mesh a, Matrix4 ma, Mesh b, Matrix4 mb) | Mesh | Stub: gibt eine Kopie von zurück a. Für allgemeines CSG mit Transformationen vorgesehen. |
optimize(boolean removeVertices) | Mesh | Stub: gibt eine Kopie zurück. Vier Parameter‑Überladungen: optimize(boolean), optimize(boolean, float), optimize(boolean, float, float), optimize(boolean, float, float, float). |
optimize2(boolean removeVertices) | Mesh | Stub: gibt eine Kopie zurück. Alternativer Optimierungs‑Einstiegspunkt. |