עבודה עם הסצנה גרף

עבודה עם הסצנה גרף

עבודה עם הסצנה גרף

כל סצנה 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);

מחפשים ילדים נוטים

מצא ילד ישיר על פי שם או על ידי אינדיקטור, או iterate כל הילדים הישירים:

// 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() מבקר רק את נקודת הנקודה; iterate 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 הוא ממשק שיטה אחת, ולכן הוא מקבל lambda ב- Java 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)יצירת נוט ילדים בשם עם 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 בנקודה זו
 עברית