Mesh
Pacchetto: com.aspose.threed (aspose-3d-foss 26.1.0)
Mesh memorizza la geometria del poligono come un elenco di control points (vertex positions) e un elenco di polygon faces. Ogni polygon face è un elenco di zero-based indices nell’array dei control points. Le faces possono essere triangles, quads o polygon con arità più alta. Dati aggiuntivi per-vertex – normals, UV coordinates, vertex colours – sono collegati come VertexElement livelli.
public class Mesh extends GeometryMethods
A3DObject -> SceneObject -> Entity -> Geometry -> Mesh
Methods
Crea una mesh a triangolo singolo da zero:
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");Crea una mesh a quadrilatero (nota: triangulate() è un stub — vedi l’avviso sotto):
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
| Name | Type | Access | Description |
| ------------------- | ------------------------------- | ------ | ----------------------------- |
| `polygonCount` | `int` | Read | Gets the polygon count. |
| `polygons` | `List<int[]>` | Read | Gets the polygons. |
| `edges` | `List<Integer>` | Read | Gets the edges. |
| `manifold` | `boolean` | Read | Gets the manifold. |
| `visible` | `boolean` | Read | Gets the visible. |
| `castShadows` | `boolean` | Read | Gets the cast shadows. |
| `receiveShadows` | `boolean` | Read | Gets the receive shadows. |
| `controlPoints` | `java.util.List<Vector4>` | Read | Gets the control points. |
| `vertexElements` | `java.util.List<VertexElement>` | Read | Gets the vertex elements. |
| `deformers` | `java.util.List<Deformer>` | Read | Gets the deformers. |
| `deformers2` | `java.util.Collection<T>` | Read | Gets the deformers2. |
| `parentNode` | `Node` | Read | Gets the parent node. |
| `parentNodes` | `ArrayList<Node>` | Read | Gets the parent nodes. |
| `excluded` | `boolean` | Read | Gets the excluded. |
| `boundingBox` | `BoundingBox` | Read | Gets the bounding box. |
| `entityRendererKey` | `EntityRendererKey` | Read | Gets the entity renderer key. |
| `scene` | `Scene` | Read | Gets the scene. |
| `name` | `String` | Read | Gets the name. |
| `properties` | `PropertyCollection` | Read | Gets the properties. |
---
## Methods
### `createPolygon(int... indices)`
Definisci una nuova faccia poligonale fornendo gli indici dei vertici in ordine. Gli indici fanno riferimento alle posizioni in `getControlPoints()`. Accetta tre o più indici per triangoli, quadrilateri e n-gon.
| Signature | Description |
| --------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |
| `Mesh()` | Creates an empty mesh with default name |
| `Mesh(name: String)` | Calls Mesh(name) on this Mesh instance. |
| `addControlPoint(x: double, y: double, z: double)` | Adds a weighted 4D control point |
| `addControlPoint(x: double, y: double, z: double, w: double)` | Calls addControlPoint(x, y, z, w) on this Mesh instance. |
| `createPolygon(indices: int[])` | Creates a quadrilateral polygon from four vertex indices |
| `createPolygon(indices: int[], offset: int, length: int)` | Calls createPolygon(indices, offset, length) on this Mesh instance. |
| `createPolygon(v1: int, v2: int, v3: int)` | Calls createPolygon(v1, v2, v3) on this Mesh instance. |
| `createPolygon(v1: int, v2: int, v3: int, v4: int)` | Calls createPolygon(v1, v2, v3, v4) on this Mesh instance. |
| `getPolygonCount()` → `int` | Returns the polygon count. |
| `getPolygonSize(index: int)` → `int` | Returns the number of vertices of the polygon at the given index |
| `getPolygons()` → `List<int[]>` | Returns the polygons. |
| `getEdges()` → `List<Integer>` | Returns the edges. |
| `isManifold()` → `boolean` | Returns true if manifold is set. |
| `iterator()` → `Iterator<int[]>` | Provides an iterator over polygon index arrays |
| `toMesh()` → `Mesh` | Returns a copy of this mesh as a Mesh object |
| `clone()` → `Mesh` | Creates a deep copy of the mesh |
| `triangulate()` → `Mesh` | Converts all polygons to triangles and returns the new mesh |
| `optimize(removeVertices: boolean)` → `Mesh` | Simplifies geometry considering tolerance, threshold, and angle deviation |
| `optimize(removeVertices: boolean, tolerance: float)` → `Mesh` | Calls optimize(removeVertices, tolerance) on this Mesh instance. |
| `optimize(removeVertices: boolean, tolerance: float, threshold: float)` → `Mesh` | Calls optimize(removeVertices, tolerance, threshold) on this Mesh instance. |
| `optimize(removeVertices: boolean, tolerance: float, threshold: float, angleThreshold: float)` → `Mesh` | Calls optimize(removeVertices, tolerance, threshold, angleThreshold) on this Mesh instance. |
| `optimize2(removeVertices: boolean)` → `Mesh` | Performs an alternative optimization on the mesh |
| `union(a: Mesh, b: Mesh)` → `Mesh` | Returns a mesh representing the union of two meshes |
| `difference(a: Mesh, b: Mesh)` → `Mesh` | Calls difference(a, b) on this Mesh instance. |
| `intersect(a: Mesh, b: Mesh)` → `Mesh` | Calls intersect(a, b) on this Mesh instance. |
| `doBoolean(operation: BooleanOperation, a: Mesh, ma: Matrix4, b: Mesh, mb: Matrix4)` → `Mesh` | Performs the specified Boolean operation on two transformed meshes |
| `Geometry()` | Calls Geometry on this Mesh instance. |
| `getVisible()` → `boolean` | Returns the visible. |
| `setVisible(value: boolean)` | Sets the visible value. |
| `getCastShadows()` → `boolean` | Returns the cast shadows. |
| `setCastShadows(value: boolean)` | Sets the cast shadows value. |
| `getReceiveShadows()` → `boolean` | Returns the receive shadows. |
| `setReceiveShadows(value: boolean)` | Initializes a new instance of Sphere class. |
| `getControlPoints()` → `java.util.List<Vector4>` | Returns the control points. |
| `getVertexElements()` → `java.util.List<VertexElement>` | Returns the vertex elements. |
| `getDeformers()` → `java.util.List<Deformer>` | Returns the deformers. |
| `getElement(type: VertexElementType)` → `VertexElement` | Calls getElement(type) on this Mesh instance. |
| `createElement(type: VertexElementType)` → `VertexElement` | Gets or sets the height segments. |
| `addElement(element: VertexElement)` | Calls addElement(element) on this Mesh instance. |
| `addDeformer(deformer: Deformer)` | Adds a deformer to this geometry and sets the owner reference. |
| `getVertexElementOfUV(mapping: TextureMapping)` → `VertexElementUV` | Calls getVertexElementOfUV(mapping) on this Mesh instance. |
| `createElementUV(mapping: TextureMapping)` → `VertexElementUV` | Calls createElementUV(mapping) on this Mesh instance. |
| `getDeformers2()` → `java.util.Collection<T>` | Returns the deformers2. |
| `Entity(name: String)` | Constructor of BooleanOperator. |
| `getParentNode()` → `Node` | Constructor of instance. |
| `setParentNode(value: Node)` | The Boolean operator used in the operation to create the result mesh. |
| `getParentNodes()` → `ArrayList<Node>` | Protected constructor to allow derived classes to set name. |
| `getExcluded()` → `boolean` | The Boolean operator used in the operation to create the result mesh. |
| `setExcluded(value: boolean)` | Sets the excluded value. |
| `getBoundingBox()` → `BoundingBox` | The first operand of the Boolean operator. |
| `getEntityRendererKey()` → `EntityRendererKey` | Returns the entity renderer key. |
| `SceneObject()` | Boolean operator allows you to apply Boolean operation on two IMeshConvertible instances. |
| `getScene()` → `Scene` | Constructor of BooleanOperator. |
| `A3DObject()` | Parameterized Cylinder. It can also be used to represent a cone when one of radiusTop/radiusBottom is zero. |
| `getName()` → `String` | Height of the dish. |
| `setName(name: String)` | Constructs a CircleShape profile with specified radius. |
| `getProperties()` → `PropertyCollection` | Initializes a new instance of Cylinder class. |
| `findProperty(name: String)` → `Property` | Initializes a new instance of the Bone class. |
| `getProperty(name: String)` → `Object` | Gets the transform matrix of the node in current pose. |
| `setProperty(name: String, value: Object)` | Gets the width segments. |
| `removeProperty(name: String)` → `boolean` | Gets the entity renderer key for this entity. |
**Restituisce:** `void`
```java
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: Restituisce una copia della mesh originale. È destinata a suddividere tutti i poligoni in triangoli usando la triangolazione a ventaglio, ma la logica di triangolazione effettiva non è ancora implementata. La mesh originale non viene modificata.
Restituisce: Mesh – una copia della mesh originale (comportamento 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()
Restituisci questo Mesh come un Mesh istanza. Per Mesh gli oggetti questa è un’operazione di identità (restituisce this). Definito sulla Geometry classe base per fornire un’interfaccia di conversione uniforme quando si lavora con generici Geometry riferimenti.
Restituisce: Mesh
Mesh ensureMesh(Geometry geom) { return geom.toMesh(); }
---
### `createElement(VertexElementType elementType, MappingMode mappingMode, ReferenceMode referenceMode)`
Aggiungi un nuovo `VertexElement` livello del tipo specificato alla mesh. Usa questo per allegare normals, tangents, binormals, vertex colours e smoothing groups.
**Restituisce:** `VertexElement`
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)
Aggiungi un livello di coordinate UV alla mesh. Questo è il metodo consigliato per associare i dati delle coordinate di texture.
Restituisce: VertexElementUV
Mesh mesh = new Mesh(); // … define control points and polygons … VertexElementUV uvElement = mesh.createElementUV( TextureMapping.DIFFUSE, MappingMode.POLYGON_VERTEX, ReferenceMode.INDEX_TO_DIRECT );
---
### Metodi Booleani e di Ottimizzazione (Stub)
I seguenti metodi esistono su `Mesh` ma sono **stub** che restituiscono una copia della mesh originale senza eseguire l'operazione prevista.
**Importante:** `union`, `difference`, `intersect`, e `doBoolean` sono **metodi statici**, non metodi di istanza. Chiamali come `Mesh.union(a, b)`, non `a.union(b)`.
---
## Vedi anche
- [Riferimento alla classe Entity](/3d/java/entity/)
- [Riferimento della classe Node](/3d/java/node/)
- [Riferimento alla classe Scene](/3d/java/scene/)
- [Riferimento alla classe VertexElement](/3d/java/vertex-element/)