Mesh — Aspose.3D FOSS for Java
Пакет: com.aspose.threed (aspose-3d-foss 26.1.0)
Mesh съхранява геометрията на полигоните като списък от контролни точки (позиции на върховете) и списък от полигонни лица. Всяко полигонно лице е списък от индекси, започващи от нула, към масива с контролни точки. Лицата могат да бъдат триъгълници, четириъгълници или полигони с по-голям брой върхове. Допълнителни данни за всеки връх – нормали, UV координати, цветове на върховете – се прикачват като VertexElement слоеве.
public class Mesh extends GeometryMethods
A3DObject -> SceneObject -> Entity -> Geometry -> Mesh
Methods
Създайте мрежа от един триъгълник от нулата:
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");Създайте мрежа от четириъгълник (забележка: triangulate() е шаблон — вижте предупреждението по-долу):
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() | – | Масив с позиции на върховете. Всеки елемент е Vector4(x, y, z, w) където w е 1.0 за данни за позиция. Добавете върхове, като извикате add() в върнатия списък. |
polygonCount | int | getPolygonCount() | – | Брой полигонални лица, дефинирани върху тази мрежа. |
polygons | List<int[]> | getPolygons() | – | Всички дефиниции на лица като списък от масиви с индекси. Всеки вътрешен масив съдържа индексите на върховете (в controlPoints) за едно лице. |
edges | List<Integer> | getEdges() | – | Сурови данни за индекси на ръбове. Предимно за вътрешна употреба и напреднали заявки за топология. |
vertexElements | List<VertexElement> | getVertexElements() | – | Всички слоеве на елементите на върховете, в момента прикрепени към тази мрежа (нормали, UV, цветове и др.). |
visible | boolean | getVisible() | setVisible(boolean) | Methods false, мрежата е скрита в прегледи, които уважават видимостта. |
castShadows | boolean | getCastShadows() | setCastShadows(boolean) | Дали тази мрежа хвърля сенки в рендеръри, които поддържат карти на сенките. |
receiveShadows | boolean | getReceiveShadows() | setReceiveShadows(boolean) | Дали тази мрежа получава сенки от друга геометрия, която хвърля сенки. |
Methods
createPolygon(int... indices)
Определете ново полигонално лице, като предоставите индексите на върховете подред. Индексите се отнасят до позиции в getControlPoints(). Приема три или повече индекса за триъгълници, четириъгълници и n‑гони.
| Methods | Methods | Methods |
|---|---|---|
indices | int... | Аргументи за индексите на върховете в ред на навиване (обикновено обратно на часовниковата стрелка, когато се гледа от външната страна). |
Връща: 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()
Шаблон: Връща clone на оригиналната мрежа. Предназначен е да раздели всички полигони на триъгълници, използвайки fan triangulation, но реалната логика за триангулация все още не е реализирана. Оригиналната мрежа не се променя.
Връща: Mesh – копие на оригиналната мрежа (поведение на заглушка).
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()
Върни това Mesh като Mesh инстанция. За Mesh обекти това е операция за идентичност (връща this). Дефинирано върху the Geometry базов клас, който предоставя унифициран интерфейс за конвертиране при работа с общи Geometry референции.
Връща: Mesh
import com.aspose.threed.*;
Mesh ensureMesh(Geometry geom) {
return geom.toMesh();
}createElement(VertexElementType elementType, MappingMode mappingMode, ReferenceMode referenceMode)
Добавете нов VertexElement слой от указания тип към мрежата. Използвайте това, за да прикрепите normals, tangents, binormals, vertex colours и smoothing groups.
| Methods | Methods | Methods |
|---|---|---|
elementType | VertexElementType | Видът данни, които този слой съдържа (например,., VertexElementType.NORMAL). |
mappingMode | MappingMode | Как данните се съпоставят с геометрията: CONTROL_POINT, POLYGON_VERTEX, POLYGON, и т.н. |
referenceMode | ReferenceMode | Как се използват индексите: DIRECT или INDEX_TO_DIRECT. |
Връща: 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)
Добавете слой с UV координати към мрежата. Това е предпочитаният метод за прикачване на данни за текстурни координати.
| Methods | Methods | Methods |
|---|---|---|
uvMapping | TextureMapping | Целта на UV канала: DIFFUSE, SPECULAR, NORMAL, AMBIENT, и т.н. |
mappingMode | MappingMode | Как UV‑тата се съпоставят с елементите на геометрията. |
referenceMode | ReferenceMode | Режим на индексиране: DIRECT или INDEX_TO_DIRECT. |
Връща: 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
);Булеви и оптимизационни методи (шаблони)
Следните методи съществуват в Mesh но са заглавки които връщат копие на оригиналната мрежа, без да изпълнят предвидената им операция.
Важно: union, difference, intersect, и doBoolean са статични методи, не инстанционни методи. Извикайте ги като Mesh.union(a, b), не a.union(b).
| Methods | Тип на връщане | Methods |
|---|---|---|
static Mesh.union(Mesh a, Mesh b) | Mesh | Stub: връща копие на a. Предназначено за CSG обединение. |
static Mesh.difference(Mesh a, Mesh b) | Mesh | Stub: връща копие на a. Предназначено за CSG изваждане. |
static Mesh.intersect(Mesh a, Mesh b) | Mesh | Stub: връща копие на a. Предназначено за CSG пресичане. |
static Mesh.doBoolean(BooleanOperation op, Mesh a, Matrix4 ma, Mesh b, Matrix4 mb) | Mesh | Заглушка: връща клон на a. Предназначено за общ CSG с трансформации. |
optimize(boolean removeVertices) | Mesh | Заглушка: връща клон. Четири варианта с параметри: optimize(boolean), optimize(boolean, float), optimize(boolean, float, float), optimize(boolean, float, float, float). |
optimize2(boolean removeVertices) | Mesh | Заглушка: връща клон. Алтернативна точка за оптимизация. |