Mesh — Aspose.3D FOSS for Java
Pakiet: com.aspose.threed (aspose-3d-foss 26.1.0)
Mesh przechowuje geometrię wielokątów jako listę punktów kontrolnych (pozycji wierzchołków) oraz listę ścian wielokątów. Każda ściana wielokąta jest listą indeksów zerobazowych do tablicy punktów kontrolnych. Ściany mogą być trójkątami, czworokątami lub wielokątami o wyższej arności. Dodatkowe dane per‑wierzchołkowe — normalne, współrzędne UV, kolory wierzchołków — są dołączane jako VertexElement warstwy.
public class Mesh extends GeometryMethods
A3DObject -> SceneObject -> Entity -> Geometry -> Mesh
Methods
Zbuduj siatkę pojedynczego trójkąta od podstaw:
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");Zbuduj siatkę czworokąta (uwaga: triangulate() jest szkieletem — zobacz ostrzeżenie poniżej):
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() | – | Tablica pozycji wierzchołków. Każdy element jest Vector4(x, y, z, w) gdzie w jest 1.0 dla danych pozycji. Dodaj wierzchołki wywołując add() na zwróconej liście. |
polygonCount | int | getPolygonCount() | – | Liczba ścian wielokątów zdefiniowanych w tej siatce. |
polygons | List<int[]> | getPolygons() | – | Wszystkie definicje ścian jako lista tablic indeksów. Każda wewnętrzna tablica zawiera indeksy wierzchołków (do controlPoints) dla jednej ściany. |
edges | List<Integer> | getEdges() | – | Surowe dane indeksów krawędzi. Przede wszystkim do użytku wewnętrznego i zaawansowanych zapytań topologicznych. |
vertexElements | List<VertexElement> | getVertexElements() | – | Wszystkie warstwy elementów wierzchołków aktualnie dołączone do tej siatki (normale, UV, kolory itp.). |
visible | boolean | getVisible() | setVisible(boolean) | Methods false, siatka jest ukryta w przeglądarkach respektujących widoczność. |
castShadows | boolean | getCastShadows() | setCastShadows(boolean) | Czy ta siatka rzuca cienie w rendererach obsługujących mapy cieni. |
receiveShadows | boolean | getReceiveShadows() | setReceiveShadows(boolean) | Czy ta siatka odbiera cienie od innej geometrii rzucającej cienie. |
Methods
createPolygon(int... indices)
Zdefiniuj nową ścianę wielokąta, podając indeksy wierzchołków w kolejności. Indeksy odwołują się do pozycji w getControlPoints(). Akceptuje trzy lub więcej indeksów dla trójkątów, czworokątów i n‑kątów.
| Methods | Methods | Methods |
|---|---|---|
indices | int... | Argumenty indeksów wierzchołków w kolejności wirowania (zazwyczaj przeciwnie do ruchu wskazówek zegara, gdy patrzy się z zewnątrz). |
Zwraca: 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()
Szablon: Zwraca klon oryginalnej siatki. Przeznaczony do podzielenia wszystkich wielokątów na trójkąty przy użyciu triangulacji wachlarzowej, ale rzeczywista logika triangulacji nie została jeszcze zaimplementowana. Oryginalna siatka nie jest modyfikowana.
Zwraca: Mesh – klon oryginalnej siatki (zachowanie szablonu).
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()
Zwróć to Mesh jako Mesh instancję. Dla Mesh obiektów jest to operacja tożsamościowa (zwraca this) Geometry klasy bazowej, aby zapewnić jednolity interfejs konwersji przy pracy z ogólnymi Geometry odniesienia.
Zwraca: Mesh
import com.aspose.threed.*;
Mesh ensureMesh(Geometry geom) {
return geom.toMesh();
}createElement(VertexElementType elementType, MappingMode mappingMode, ReferenceMode referenceMode)
Dodaj nowy VertexElement warstwę określonego typu do siatki. Użyj tego, aby dołączyć wektory normalne, styczne, binormale, kolory wierzchołków oraz grupy wygładzania.
| Methods | Methods | Methods |
|---|---|---|
elementType | VertexElementType | Rodzaj danych, które ta warstwa przechowuje (np., VertexElementType.NORMAL). |
mappingMode | MappingMode | Jak dane są mapowane na geometrię: CONTROL_POINT, POLYGON_VERTEX, POLYGON, itp. |
referenceMode | ReferenceMode | Jak używane są indeksy: DIRECT lub INDEX_TO_DIRECT. |
Zwraca: 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)
Dodaj warstwę współrzędnych UV do siatki. Jest to preferowana metoda dołączania danych współrzędnych tekstury.
| Methods | Methods | Methods |
|---|---|---|
uvMapping | TextureMapping | Cel kanału UV: DIFFUSE, SPECULAR, NORMAL, AMBIENT, itd. |
mappingMode | MappingMode | Jak UV mapują się na elementy geometrii. |
referenceMode | ReferenceMode | Tryb indeksowania: DIRECT lub INDEX_TO_DIRECT. |
Zwraca: 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
);Metody Boolean i Optymalizacji (Stubs)
Następujące metody istnieją w Mesh ale są szkieletowe które zwracają klon oryginalnej siatki bez wykonywania ich zamierzonej operacji.
Ważne: union, difference, intersect, oraz doBoolean są metody statyczne, nie metody instancji. Wywołuj je jako Mesh.union(a, b), nie a.union(b).
| Methods | Typ zwracany | Methods |
|---|---|---|
static Mesh.union(Mesh a, Mesh b) | Mesh | Szkielet: zwraca klon of a. Przeznaczone dla sumy CSG. |
static Mesh.difference(Mesh a, Mesh b) | Mesh | Szkielet: zwraca klon a. Przeznaczone dla różnicy CSG. |
static Mesh.intersect(Mesh a, Mesh b) | Mesh | Szkielet: zwraca klon a. Przeznaczone dla przecięcia CSG. |
static Mesh.doBoolean(BooleanOperation op, Mesh a, Matrix4 ma, Mesh b, Matrix4 mb) | Mesh | Szkielet: zwraca klon a. Przeznaczone dla ogólnego CSG z transformacjami. |
optimize(boolean removeVertices) | Mesh | Szkielet: zwraca klon. Cztery przeciążenia parametrów: optimize(boolean), optimize(boolean, float), optimize(boolean, float, float), optimize(boolean, float, float, float). |
optimize2(boolean removeVertices) | Mesh | Stub: zwraca klon. Alternatywny punkt wejścia optymalizacji. |