Mesh — Aspose.3D FOSS for Java

بسته: com.aspose.threed (aspose-3d-foss 26.1.0)

Mesh هندسه چندضلعی را به‌صورت فهرستی از نقاط کنترل (موقعیت رئوس) و فهرستی از سطوح چندضلعی ذخیره می‌کند. هر سطح چندضلعی فهرستی از شاخص‌های صفر‑پایه در آرایه نقاط کنترل است. سطوح می‌توانند مثلث، چهارضلعی یا چندضلعی‌های با درجه بالاتر باشند. داده‌های اضافی به‌ازای هر راس — نرمال‌ها، مختصات UV، رنگ‌های راس — به‌صورت VertexElement لایه‌ها.

public class Mesh extends Geometry

Methods

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

MethodsMethodsMethodsMethodsMethods
controlPointsList<Vector4>getControlPoints()آرایه موقعیت رئوس. هر ورودی یک Vector4(x, y, z, w) که w است 1.0 برای داده‌های موقعیت. رئوس را با فراخوانی add() در فهرست بازگردانده شده.
polygonCountintgetPolygonCount()تعداد سطوح چندضلعی تعریف‌شده در این مش.
polygonsList<int[]>getPolygons()تمام تعاریف سطح به صورت فهرستی از آرایه‌های ایندکس. هر آرایه داخلی ایندکس‌های راس (به داخل controlPoints) برای یک سطح.
edgesList<Integer>getEdges()داده‌های خام ایندکس لبه. عمدتاً برای استفاده داخلی و پرس‌و‌جوهای پیشرفته توپولوژی.
vertexElementsList<VertexElement>getVertexElements()تمام لایه‌های عنصر راس که در حال حاضر به این مش متصل هستند (نرمال‌ها، UVها، رنگ‌ها و غیره).
visiblebooleangetVisible()setVisible(boolean)Methods false,، مش در نمایشگرهایی که به قابلیت مشاهده احترام می‌گذارند مخفی می‌شود.
castShadowsbooleangetCastShadows()setCastShadows(boolean)اینکه آیا این مش سایه‌ها را در رندررهایی که نقشه‌های سایه را پشتیبانی می‌کنند می‌اندازد.
receiveShadowsbooleangetReceiveShadows()setReceiveShadows(boolean)اینکه آیا این مش سایه‌ها را از هندسه‌های دیگر که سایه می‌اندازند دریافت می‌کند.

Methods

createPolygon(int... indices)

یک سطح چندضلعی جدید را با ارائه ایندکس‌های راس به ترتیب تعریف کنید. ایندکس‌ها به موقعیت‌ها در getControlPoints(). سه یا بیشتر ایندکس برای مثلث‌ها، چهارضلعی‌ها و n-گون‌ها پذیرفته می‌شود.

MethodsMethodsMethods
indicesint...آرگومان‌های ایندکس راس به ترتیب پیچش (معمولاً خلاف ساعت‌گرد وقتی از بیرون مشاهده می‌شود).

باز می‌گرداند: 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());   // 2

triangulate()

قالب: یک نسخهٔ کپی از مش اصلی را باز می‌گرداند. هدف این است که تمام چندضلعی‌ها را با استفاده از مثلث‌بندی فن (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). تعریف شده بر روی Geometry کلاس پایه برای فراهم کردن یک رابط تبدیل یکنواخت هنگام کار با عمومی Geometry ارجاع‌ها.

باز می‌گرداند: Mesh

import com.aspose.threed.*;

Mesh ensureMesh(Geometry geom) {
    return geom.toMesh();
}

createElement(VertexElementType elementType, MappingMode mappingMode, ReferenceMode referenceMode)

افزودن یک VertexElement لایه‌ای از نوع مشخص شده به مش اضافه کنید. از این برای پیوست کردن نرمال‌ها، تانژنت‌ها، باینورمال‌ها، رنگ‌های راس و گروه‌های صاف‌سازی استفاده کنید.

MethodsMethodsMethods
elementTypeVertexElementTypeنوع داده‌ای که این لایه نگه می‌دارد (مثلاً., VertexElementType.NORMAL).
mappingModeMappingModeنحوه نگاشت داده‌ها به هندسه: CONTROL_POINT, POLYGON_VERTEX, POLYGON,، و غیره.
referenceModeReferenceModeچگونه ایندکس‌ها استفاده می‌شوند: 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 به مش اضافه کنید. این روش ترجیحی برای اتصال داده‌های مختصات بافت است.

MethodsMethodsMethods
uvMappingTextureMappingهدف کانال UV: DIFFUSE, SPECULAR, NORMAL, AMBIENT,، و غیره.
mappingModeMappingModeچگونه UVها به عناصر هندسی نگاشت می‌شوند.
referenceModeReferenceModeحالت ایندکس‌گذاری: 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
);

متدهای بولی و بهینه‌سازی (Stubs)

متدهای زیر در Mesh اما قالب‌ها که یک کپی از مش اصلی را بازمی‌گردانند بدون اینکه عملیات مورد نظرشان را انجام دهند.

مهم: union, difference, intersect, و doBoolean هستند متدهای static, نه متدهای instance. آن‌ها را به صورت 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قالب: یک نسخهٔ کپی باز می‌گرداند. چهار overload پارامتری: optimize(boolean), optimize(boolean, float), optimize(boolean, float, float), optimize(boolean, float, float, float).
optimize2(boolean removeVertices)Meshقالب: یک نسخهٔ کپی باز می‌گرداند. نقطهٔ ورودی بهینه‌سازی جایگزین.

موارد مرتبط

 فارسی