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). Определено на 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. |
static Mesh.difference(Mesh a, Mesh b) | Mesh | Заглушка: возвращает клон a. Предназначено для вычитания CSG. |
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 | Заглушка: возвращает клон. Альтернативная точка входа для оптимизации. |