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()
Заглушка: Повертає клон оригінальної сітки. Призначено для розбиття всіх багатокутників на трикутники за допомогою фан‑тріангуляції, але фактична логіка триангуляції ще не реалізована. Оригінальна сітка не змінюється.
Повертає: 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 шар зазначеного типу до сітки. Використовуйте це для приєднання нормалей, тангенсів, бі-нормалей, кольорів вершин та груп згладжування.
| 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 | Заглушка: повертає клон a. Призначено для CSG union. |
static Mesh.difference(Mesh a, Mesh b) | Mesh | Заглушка: повертає клон a. Призначено для CSG subtraction. |
static Mesh.intersect(Mesh a, Mesh b) | Mesh | Заглушка: повертає клон 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 | Заглушка: повертає клон. Альтернативна точка входу для оптимізації. |