Mesh
แพคเกจ: 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() เป็นสเตบ — ดูคำเตือนด้านล่าง):
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)`
กำหนดหน้าตัวหลายเหลี่ยมใหม่โดยระบุดัชนีเวอร์เท็กซ์ตามลำดับ ดัชนีเหล่านี้อ้างอิงตำแหน่งใน `getControlPoints()`. รองรับดัชนีสามตัวหรือมากกว่า สำหรับสามเหลี่ยม, สี่เหลี่ยม, และ n-gons.
| 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. |
**คืนค่า:** `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()
ส่วนจำลอง: คืนค่าการโคลนของเมชต้นฉบับ มีจุดประสงค์เพื่อแยกรูปหลายเหลี่ยมทั้งหมดเป็นสามเหลี่ยมโดยใช้ 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 objects นี้เป็นการดำเนินการอัตลักษณ์ (คืนค่า this) กำหนดบน the Geometry base class เพื่อให้มีอินเทอร์เฟซการแปลงที่สอดคล้องกันเมื่อทำงานกับ generic Geometry references.
คืนค่า: Mesh
Mesh ensureMesh(Geometry geom) { return geom.toMesh(); }
---
### `createElement(VertexElementType elementType, MappingMode mappingMode, ReferenceMode referenceMode)`
เพิ่มใหม่ `VertexElement` เพิ่มเลเยอร์ของประเภทที่ระบุไปยังเมช ใช้สิ่งนี้เพื่อแนบ normals, tangents, binormals, vertex colours, และ smoothing groups.
**คืนค่า:** `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)
เพิ่มชั้นพิกัด UV ให้กับ mesh วิธีนี้เป็นวิธีที่แนะนำสำหรับการแนบข้อมูลพิกัดเทกซ์เจอร์.
คืนค่า: VertexElementUV
Mesh mesh = new Mesh(); // … define control points and polygons … VertexElementUV uvElement = mesh.createElementUV( TextureMapping.DIFFUSE, MappingMode.POLYGON_VERTEX, ReferenceMode.INDEX_TO_DIRECT );
---
### เมธอดบูลีนและการเพิ่มประสิทธิภาพ (Stubs)
เมธอดต่อไปนี้มีอยู่บน `Mesh` แต่เป็น **สตับ** ซึ่งคืนค่าคลอนของเมชต้นฉบับโดยไม่ดำเนินการตามที่ตั้งใจไว้.
**สำคัญ:** `union`, `difference`, `intersect`, และ `doBoolean` เป็น **static methods**, ไม่ใช่ instance methods. เรียกใช้เป็น `Mesh.union(a, b)`, ไม่ใช่ `a.union(b)`.
---
## ดูเพิ่มเติม
- [อ้างอิงคลาส Entity](/3d/java/entity/)
- [อ้างอิงคลาส Node](/3d/java/node/)
- [อ้างอิงคลาส Scene](/3d/java/scene/)
- [อ้างอิงคลาส VertexElement](/3d/java/vertex-element/)