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 Geometry

Methods

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

MethodsMethodsMethodsMethodsMethods
controlPointsList<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.
polygonCountintgetPolygonCount()Liczba ścian wielokątów zdefiniowanych w tej siatce.
polygonsList<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.
edgesList<Integer>getEdges()Surowe dane indeksów krawędzi. Przede wszystkim do użytku wewnętrznego i zaawansowanych zapytań topologicznych.
vertexElementsList<VertexElement>getVertexElements()Wszystkie warstwy elementów wierzchołków aktualnie dołączone do tej siatki (normale, UV, kolory itp.).
visiblebooleangetVisible()setVisible(boolean)Methods false, siatka jest ukryta w przeglądarkach respektujących widoczność.
castShadowsbooleangetCastShadows()setCastShadows(boolean)Czy ta siatka rzuca cienie w rendererach obsługujących mapy cieni.
receiveShadowsbooleangetReceiveShadows()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.

MethodsMethodsMethods
indicesint...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());   // 2

triangulate()

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.

MethodsMethodsMethods
elementTypeVertexElementTypeRodzaj danych, które ta warstwa przechowuje (np., VertexElementType.NORMAL).
mappingModeMappingModeJak dane są mapowane na geometrię: CONTROL_POINT, POLYGON_VERTEX, POLYGON, itp.
referenceModeReferenceModeJak 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.

MethodsMethodsMethods
uvMappingTextureMappingCel kanału UV: DIFFUSE, SPECULAR, NORMAL, AMBIENT, itd.
mappingModeMappingModeJak UV mapują się na elementy geometrii.
referenceModeReferenceModeTryb 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 doBooleanmetody statyczne, nie metody instancji. Wywołuj je jako Mesh.union(a, b), nie a.union(b).

MethodsTyp zwracanyMethods
static Mesh.union(Mesh a, Mesh b)MeshSzkielet: zwraca klon of a. Przeznaczone dla sumy CSG.
static Mesh.difference(Mesh a, Mesh b)MeshSzkielet: zwraca klon a. Przeznaczone dla różnicy CSG.
static Mesh.intersect(Mesh a, Mesh b)MeshSzkielet: zwraca klon a. Przeznaczone dla przecięcia CSG.
static Mesh.doBoolean(BooleanOperation op, Mesh a, Matrix4 ma, Mesh b, Matrix4 mb)MeshSzkielet: zwraca klon a. Przeznaczone dla ogólnego CSG z transformacjami.
optimize(boolean removeVertices)MeshSzkielet: zwraca klon. Cztery przeciążenia parametrów: optimize(boolean), optimize(boolean, float), optimize(boolean, float, float), optimize(boolean, float, float, float).
optimize2(boolean removeVertices)MeshStub: zwraca klon. Alternatywny punkt wejścia optymalizacji.

Zobacz także

 Polski