العمل مع المسرحية الرسوم البيانية

العمل مع المسرحية الرسوم البيانية

العمل مع المسرحية الرسوم البيانية

كل مشهد 3D في Aspose.3D لـ Java يتم تنظيمه كشجرة من Node الأجسام . Scene يقدم جذور واحدة - getRootNode() - وكل قطعة من الهندسة، والمواد، وتحويل الحياة تحت هذا الجذر كطفل أو عقدة فرعية.


إنشاء المشهد والوصول إلى عقدة الجذر

Scene يبدأ تلقائيًا مع عقدة جذر تسمى "RootNode":

import com.aspose.threed.Scene;
import com.aspose.threed.Node;

Scene scene = new Scene();
Node root = scene.getRootNode(); // always "RootNode"

إضافة أظافر الأطفال

مكالمة createChildNode() على أي عقدة لإضافة طفل.الطريقة لديها ثلاثة شحنات شائعة الاستخدام:

import com.aspose.threed.*;

Scene scene = new Scene();
Node root = scene.getRootNode();

// 1. Named node with no entity — useful as a pivot or group container
Node pivot = root.createChildNode("pivot");

// 2. Named node with an entity
Mesh mesh = new Mesh("box");
mesh.getControlPoints().add(new Vector4(0, 0, 0));
mesh.getControlPoints().add(new Vector4(1, 0, 0));
mesh.getControlPoints().add(new Vector4(1, 1, 0));
mesh.getControlPoints().add(new Vector4(0, 1, 0));
mesh.createPolygon(0, 1, 2, 3);
Node meshNode = root.createChildNode("box", mesh);

// 3. Named node with entity and material
PbrMaterial mat = new PbrMaterial("red");
mat.setAlbedo(new Vector4(0.8f, 0.2f, 0.2f, 1.0f));
Node decorated = pivot.createChildNode("red_box", mesh, mat);

لرفع عقدة تم بناءها بشكل منفصل ، استخدم addChildNode():

Node detached = new Node("standalone");
root.addChildNode(detached);

طفل يطلب النود

العثور على طفل مباشر حسب الاسم أو المؤشر، أو إيتير جميع الأطفال المباشرين:

// By name — returns null if no direct child has that name
Node found = root.getChild("box");
if (found != null) {
    System.out.println("Found: " + found.getName());
}

// By index
Node first = root.getChild(0);

// Iterate all direct children
for (Node child : root.getChildNodes()) {
    System.out.println(child.getName());
}

getChild(String name) البحث فقط الأطفال المباشرين,لا تُعرف هذه المقالة كاملة، فالملاحظة هي: accept() يزور فقط ما يسمى النقطة؛ إيترايت getChildNodes() وَلِيُمْكِنُوا فِيهِ أَن يَسْتَغْفِرُوهُ كَمَا يُعْطِيكُ الشَّجَرَةُ.


عبر الشجرة الكاملة

node.accept(NodeVisitor) يزور فقط ما يسمى العقدة - لا يتراجع إلى الأطفال. getChildNodes() عودة الزائر إلى الوراء true الاستمرار أو false توقف في وقت مبكر:

import com.aspose.threed.NodeVisitor;

// Print every node name in the scene
scene.getRootNode().accept(n -> {
    System.out.println(n.getName());
    return true; // false would stop traversal
});

// Stop after finding the first node that has an entity
final Node[] found = {null};
scene.getRootNode().accept(n -> {
    if (n.getEntity() != null) {
        found[0] = n;
        return false; // stop walking
    }
    return true;
});

NodeVisitor هو واجهة طريقة واحدة، لذلك يقبل لامبدا في جاوا 8+.


التحقق من المرور والاستبعاد التصدير

يمكن إخفاء أو استبعاد النود من التصدير دون أن يتم إزالتها من الهرم:

Node ground = root.createChildNode("ground_plane", mesh);
ground.setVisible(false);       // hidden in viewport / renderer

Node helperNode = root.createChildNode("debug_arrow", mesh);
helperNode.setExcluded(true);   // omitted from all export operations

setVisible(false) هو عرض مؤشر. setExcluded(true) يمنع العقد من الظهور في الملفات المستوردة بغض النظر عن النموذج.


إدراج العديد من الكيانات في عقد واحد

وَالْمُرْسِلِينَ يَحْيَى بِأَنَّهُ الأساسية وحدة (getEntity() / setEntity()( ) ، ولكن يمكن أن تحمل كيانات إضافية من خلال addEntity().هذا مفيد عندما تشارك أجزاء مختلفة من الماس تحويل واحد:

Mesh body  = new Mesh("body");
Mesh wheel = new Mesh("wheel");

Node carNode = root.createChildNode("car");
carNode.addEntity(body);
carNode.addEntity(wheel);

// Retrieve all entities on this node
for (Entity ent : carNode.getEntities()) {
    System.out.println(ent.getName());
}

تكرار النود

merge() تحرك جميع الأطفال والكيانات والمواد من عقدة مصدر إلى عقدت الهدف.:

Node lod0 = root.createChildNode("lod0");
lod0.createChildNode("mesh_high", mesh);

Node lod1 = root.createChildNode("lod1");
lod1.createChildNode("mesh_low", mesh);

// Consolidate lod0 children into lod1
lod1.merge(lod0);
// lod1 now has both mesh_high and mesh_low; lod0 is empty


إشارة سريعة API

عضووصف
scene.getRootNode()الجذر من شجرة المسرح؛ دائما موجودة بعد new Scene()
node.createChildNode(name)إنشاء عقدة طفل مع اسم لا كيان
node.createChildNode(name, entity)إنشاء عقدة طفل مع كيان
node.createChildNode(name, entity, material)إنشاء عقدة طفل مع كيان ومادة
node.addChildNode(node)- إدراج مصنع منفصل Node
node.getChild(name)العثور على طفل مباشر حسب الاسم؛ يعود null إذا لم يتم العثور عليها
node.getChild(index)احصل على الطفل المباشر في مؤشر معين
node.getChildNodes()List<Node> من جميع الأطفال المباشرين
node.accept(visitor)زيارة هذا العقد فقط (لا يعود إلى الأطفال)
node.addEntity(entity)إضافة كيان إضافي إلى العقدة
node.getEntities()List<Entity> من جميع الكيانات في هذا العقد
node.setVisible(bool)عرض أو إخفاء العقدة
node.setExcluded(bool)إدراج أو استبعاد العقد من الصادرات
node.merge(other)تحريك جميع الأطفال والكيانات من other في هذا النود
 العربية