Mesh — Aspose.3D FOSS for Java
Paket: com.aspose.threed (aspose-3d-foss 26.1.0)
Mesh čuva geometriju poligona kao listu kontrolnih tačaka (pozicije temena) i listu poligonskih površina. Svaka poligonska površina je lista nultog indeksiranja u niz kontrolnih tačaka. Površine mogu biti trouglovi, kvadrilateri ili poligoni veće arnosti. Dodatni podaci po temenu – normale, UV koordinate, boje temena – se prikače kao VertexElement slojevi.
public class Mesh extends GeometryA3DObject -> SceneObject -> Entity -> Geometry -> Mesh
Izgradite mrežu jednog trougla od nule:
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");Izgradite kvadratnu mrežu (napomena: triangulate() je stub — pogledajte upozorenje ispod):
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");controlPoints | List<Vector4> | getControlPoints() | – | Niz pozicija temena. Svaki unos je Vector4(x, y, z, w) gde w je 1.0 za podatke o poziciji. Dodajte temena pozivanjem add() na vraćenoj listi. |
polygonCount | int | getPolygonCount() | – | Broj poligonalnih lica definisanih na ovoj mreži. |
polygons | List<int[]> | getPolygons() | – | Sve definicije lica kao lista nizova indeksa. Svaki unutrašnji niz sadrži indekse vrhova (u controlPoints) za jedno lice. |
edges | List<Integer> | getEdges() | – | Sirovi podaci o indeksima ivica. Pretežno za internu upotrebu i napredna upita topologije. |
vertexElements | List<VertexElement> | getVertexElements() | – | Svi slojevi elemenata vrhova trenutno prikačeni na ovu mrežu (normale, UV‑koordinate, boje, itd.). |
visible | boolean | getVisible() | setVisible(boolean) | false, mreža je sakrivena u preglednicima koji poštuju vidljivost. |
castShadows | boolean | getCastShadows() | setCastShadows(boolean) | Da li ova mreža baca senke u rendererima koji podržavaju mape senki. |
receiveShadows | boolean | getReceiveShadows() | setReceiveShadows(boolean) | Da li ova mreža prima senke od druge geometrije koja baca senke. |
createPolygon(int... indices)
Definišite novo poligonalno lice tako što ćete navesti indekse vrhova redom. Indeksi referišu na pozicije u getControlPoints(). Prihvata tri ili više indeksa za trouglove, kvadrate i n-gone.
indices | int... | Argumenti indeksa vrhova u redosledu obrtanja (obično suprotno od smera kazaljke na satu kada se gleda spolja). |
Vraća: 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: Vraća klon originalne mreže. Namenjeno je da razdvoji sve poligone u trouglove koristeći fan triangulaciju, ali stvarna logika triangulacije još nije implementirana. Originalna mreža nije izmenjena.
Vraća: Mesh – klon originalne mreže (ponašanje 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()
Vrati ovo Mesh kao Mesh instancu. Za Mesh objekte ovo je identična operacija (vraća this). Definisano na Geometry bazna klasa koja pruža jedinstveni interfejs za konverziju prilikom rada sa generičkim Geometry referencama.
Vraća: Mesh
import com.aspose.threed.*;
Mesh ensureMesh(Geometry geom) {
return geom.toMesh();
}createElement(VertexElementType elementType, MappingMode mappingMode, ReferenceMode referenceMode)
Dodajte novi VertexElement sloj specificirane vrste na mesh. Koristite ovo da prikačite normale, tangente, binormale, boje vrhova i grupe zaglađivanja.
elementType | VertexElementType | Vrsta podataka koju ovaj sloj sadrži (npr., VertexElementType.NORMAL). |
mappingMode | MappingMode | Kako se podaci mapiraju na geometriju: CONTROL_POINT, POLYGON_VERTEX, POLYGON, itd. |
referenceMode | ReferenceMode | Kako se indeksi koriste: DIRECT ili INDEX_TO_DIRECT. |
Vraća: 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)
Dodajte UV koordinatni sloj mreži. Ovo je preferirani metod za povezivanje podataka o teksturnim koordinatama.
uvMapping | TextureMapping | Svrha UV kanala: DIFFUSE, SPECULAR, NORMAL, AMBIENT, itd. |
mappingMode | MappingMode | Kako se UV‑ovi mapiraju na elemente geometrije. |
referenceMode | ReferenceMode | Režim indeksiranja: DIRECT ili INDEX_TO_DIRECT. |
Vraća: 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
);Booleove i optimizacioni metodi (šabloni)
Sledeće metode postoje na Mesh ali su skeleti koje vraćaju klon originalne mreže bez izvršavanja njihove predviđene operacije.
Važno: union, difference, intersect, i doBoolean su statičke metode, a ne instance metode. Pozovite ih kao Mesh.union(a, b), ne a.union(b).
| Povratni tip | ||
|---|---|---|
static Mesh.union(Mesh a, Mesh b) | Mesh | Stub: vraća klon od a. Predviđeno za CSG uniju. |
static Mesh.difference(Mesh a, Mesh b) | Mesh | Stub: vraća klon od a. Predviđeno za CSG oduzimanje. |
static Mesh.intersect(Mesh a, Mesh b) | Mesh | Stub: vraća klon od a. Namijenjeno za CSG presjek. |
static Mesh.doBoolean(BooleanOperation op, Mesh a, Matrix4 ma, Mesh b, Matrix4 mb) | Mesh | Stub: vraća klon od a. Namijenjeno za opšti CSG sa transformacijama. |
optimize(boolean removeVertices) | Mesh | Stub: vraća klon. Četiri preopterećenja sa parametrima: optimize(boolean), optimize(boolean, float), optimize(boolean, float, float), optimize(boolean, float, float, float). |
optimize2(boolean removeVertices) | Mesh | Stub: vraća klon. Alternativna tačka ulaza za optimizaciju. |