Mesh
Пакет: @aspose/3d (v24.12.0)
Mesh также доступен через импорт по подпути @aspose/3d/entities.
Mesh является основной сущностью полигональной геометрии в @aspose/3d. Он хранит позиции вершин как контрольные точки, определяет грани полигонов списками индексов вершин и поддерживает несколько слоёв данных элементов вершин, таких как нормали и UV‑координаты.
export class Mesh extends GeometryImageRenderOptions
A3DObject ← SceneObject ← Entity ← Geometry ← Mesh
ImageRenderOptions
Создайте единственную треугольную сетку, присоедините её к сцене и сохраните в формате GLB.
import { Scene, Vector4 } from '@aspose/3d';
import { Mesh } from '@aspose/3d/entities';
// Create the mesh and define three control points (vertices)
const mesh = new Mesh();
mesh.controlPoints.push(
new Vector4(0, 1, 0, 1), // apex
new Vector4(-1, 0, 0, 1), // bottom-left
new Vector4(1, 0, 0, 1), // bottom-right
);
// Define one triangular polygon using vertex indices
mesh.createPolygon(0, 1, 2);
// Attach the mesh to the scene and save (extension infers GLB format)
const scene = new Scene();
scene.rootNode.createChildNode('triangle', mesh);
scene.save('triangle.glb');
console.log(`Polygon count: ${mesh.polygonCount}`); // 1
ImageRenderOptions
| Name | Type | Access | Description |
|---|---|---|---|
edges | number[] | Read | Gets the edges. |
polygonCount | number | Read | Gets the polygon count. |
polygons | number[][] | Read | Gets the polygons. |
deformers | any[] | Read | Gets the deformers. |
| Signature | Description |
|---|---|
| `constructor(name: string | null, _heightMap: any, _transform: any, _triMesh: boolean |
createPolygon() | Adds a new polygon to the mesh |
getPolygonSize(index: number) → number | Returns the number of vertices in the polygon at the given index |
toMesh() → Mesh | Returns a Mesh instance representing the current object (identity conversion) |
optimize(_vertexElements: boolean, _toleranceControlPoint: number, _toleranceNormal: number, _toleranceUV: number) → Mesh | Not implemented in the FOSS edition — throws at runtime. Reduces mesh complexity using vertex element flag and tolerance values for control points, normals, and UVs |
doBoolean(_op: any, _a: Mesh, _transformA: any, _b: Mesh, _transformB: any) → Mesh | Not implemented in the FOSS edition — throws at runtime. Performs a boolean operation defined by _op on meshes _a and _b with respective transforms |
isManifold() → boolean | Not implemented in the FOSS edition — throws at runtime. Returns true if manifold is set. |
union(_a: Mesh, _b: Mesh) → Mesh | Not implemented in the FOSS edition — throws at runtime. Returns a new Mesh that is the union of meshes _a and _b |
difference(_a: Mesh, _b: Mesh) → Mesh | Not implemented in the FOSS edition — throws at runtime. Returns a new Mesh that is the difference of mesh _a minus mesh _b |
intersect(_a: Mesh, _b: Mesh) → Mesh | Not implemented in the FOSS edition — throws at runtime. |
triangulate() → Mesh | Converts all polygons in the mesh to triangles and returns the mesh |
getBoundingBox() → any | Returns the bounding box. |
getEntityRendererKey() → any | Not implemented in the FOSS edition — throws at runtime. Returns the entity renderer key. |
ImageRenderOptions
createPolygon(…indices)
Определяет новую полигональную грань, используя предоставленные индексы контрольных точек. Индексы должны ссылаться на допустимые позиции в controlPoints.
createPolygon(...indices: number[]): voidImageRenderOptions
...indices number[]
Три или более индексов, начинающихся с нуля, в controlPoints массиве, в порядке обхода против часовой стрелки.
ImageRenderOptions
void
ImageRenderOptions
import { Vector4 } from '@aspose/3d';
import { Mesh } from '@aspose/3d/entities';
const mesh = new Mesh();
mesh.controlPoints.push(
new Vector4(0, 0, 0, 1),
new Vector4(1, 0, 0, 1),
new Vector4(1, 1, 0, 1),
new Vector4(0, 1, 0, 1),
);
// Define a quad as two triangles, or a single quad polygon:
mesh.createPolygon(0, 1, 2, 3);
console.log(`Polygons: ${mesh.polygonCount}`); // 1
triangulate()
Преобразует все не треугольные полигоны в этой сетке в треугольники. Возвращает триангулированную сетку (может быть тем же экземпляром или новым).
triangulate(): MeshImageRenderOptions
Mesh
Триангулированная сетка.
ImageRenderOptions
const mesh = new Mesh();
mesh.controlPoints.push(
new Vector4(0, 0, 0, 1),
new Vector4(1, 0, 0, 1),
new Vector4(1, 1, 0, 1),
new Vector4(0, 1, 0, 1),
);
mesh.createPolygon(0, 1, 2, 3); // quad
const triangulated = mesh.triangulate();
console.log(Polygons after triangulation: ${triangulated.polygonCount}); // 2
---
### toMesh()
Возвращает сетку как `Mesh` экземпляр. Для `Mesh` объектов это операция тождественности; метод более значим для примитивных геометрических типов, наследующих от `Geometry`.
```typescript
toMesh(): MeshImageRenderOptions
Mesh
Этот объект Mesh.
static union(a, b)
NOT IMPLEMENTED. Этот метод определён в API, но бросает Error('union is not implemented') во время выполнения. Не вызывайте его в продакшн‑коде.
Выполняет булево объединение двух сеток. Результат содержит объединённый объём обоих входов.
static union(a: Mesh, b: Mesh): MeshImageRenderOptions
a Mesh
Первый операнд сетки.
b Mesh
Второй операнд сетки.
ImageRenderOptions
Mesh
Новая mesh, представляющая объединение a и b.
ImageRenderOptions
import { Mesh } from '@aspose/3d/entities';
// Assumes meshA and meshB are already populated Mesh instances
const combined = Mesh.union(meshA, meshB);
console.log(`Union polygon count: ${combined.polygonCount}`);static difference(a, b)
NOT IMPLEMENTED. Этот метод определён в API surface, но бросает Error('difference is not implemented') в runtime. Не вызывайте его в production code.
Выполняет Boolean difference, вычитая объём mesh b из mesh a.
static difference(a: Mesh, b: Mesh): MeshImageRenderOptions
a Mesh
Базовая сетка.
b Mesh
Сетка, из которой вычитается a.
ImageRenderOptions
Mesh
Новая mesh, представляющая a минус b.
ImageRenderOptions
const result = Mesh.difference(meshA, meshB);
console.log(Difference polygon count: ${result.polygonCount});
---
### static intersect(a, b)
**NOT IMPLEMENTED.** Этот метод определён в API, но бросает `Error('intersect is not implemented')` во время выполнения. Не вызывайте его в продакшн‑коде.
Выполняет булево пересечение двух сеток. Результат содержит только пересекающийся объём.
```typescript
static intersect(a: Mesh, b: Mesh): MeshImageRenderOptions
a Mesh
Первый операнд сетки.
b Mesh
Второй операнд сетки.
ImageRenderOptions
Mesh
Новая сетка, представляющая пересечение a и b.
ImageRenderOptions
const overlap = Mesh.intersect(meshA, meshB);
console.log(Intersection polygon count: ${overlap.polygonCount});
---
### createElement(type, mapping?, reference?)
Создаёт новую `VertexElement` слой данных на этой сетке для пользовательских атрибутов вершин.
```typescript
createElement(
type: VertexElementType,
mapping?: MappingMode,
reference?: ReferenceMode
): VertexElementImageRenderOptions
type VertexElementType
Тип атрибута вершины, который нужно создать (например, VertexElementType.Normal).
mapping MappingMode (необязательно)
Как данные элементов отображаются на топологию сетки. По умолчанию MappingMode.ControlPoint.
reference ReferenceMode (необязательно)
Как индексы элементов ссылаются на массив данных. По умолчанию ReferenceMode.Direct.
ImageRenderOptions
VertexElement
Новосозданный слой вершинного элемента.
createElementUV(mapping, mappingMode?, referenceMode?)
Создаёт слой UV‑координат в этой сетке.
createElementUV(
mapping: TextureMapping,
mappingMode?: MappingMode,
referenceMode?: ReferenceMode
): VertexElementUVImageRenderOptions
mapping TextureMapping
UV-канал, который нужно создать (например, TextureMapping.Diffuse).
mappingMode MappingMode (необязательно)
Как UV‑координаты сопоставляются с вершинами.
referenceMode ReferenceMode (необязательно)
Как данные индексов UV ссылаются на массив UV.
ImageRenderOptions
VertexElementUV
Новосозданный слой UV‑элементов.
ImageRenderOptions
import { Mesh } from '@aspose/3d/entities';
import { TextureMapping } from '@aspose/3d';
const mesh = new Mesh();
// ... define control points and polygons ...
const uvLayer = mesh.createElementUV(TextureMapping.Diffuse);
console.log(`UV element created: ${uvLayer !== undefined}`);