کار با صحنه گراف
کار با صحنه گراف
هر صحنه 3D در Aspose.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);نوزادان نوکیا
پیدا کردن یک کودک مستقیم با نام یا شاخص، و یا 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()به نام «نود» (Node) می باشد؛ ایتراتgetChildNodes()به طور مداوم در جستجوی کل درخت.
عبور از درخت کامل
node.accept(NodeVisitor) بازدید فقط به نام گره - آن را به کودکان نمی چرخد. برای عبور از درخت کامل، iterate 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 در جاوا 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 emptyAPI ارجاع سریع
| عضو | توصیف |
|---|---|
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 در این نوکیا |