दृश्य ग्राफ के साथ काम करना
दृश्य ग्राफ के साथ काम करना
Java के लिए Aspose.3D में हर 3D दृश्य को एक पेड़ के रूप में व्यवस्थित किया जाता है। 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()केवल तथाकथित नोड का दौरा; iterategetChildNodes()फिर से पूरे पेड़ की तलाश करें।.
पूरे पेड़ के माध्यम से
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 operationssetVisible(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एपीआई जल्दी संदर्भ
| सदस्यों | विवरण |
|---|---|
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 इस नोड में |