我们在Forge查看器应用程序中访问父对象(TransNode)时遇到了一些问题。 TransNode是包含对象中使用的所有材料的对象/节点。
我们的研究发现,Forge Viewer不会将TransNodes识别为对象。我们仍然可以访问它的材料(Mat0,Mat1,Mat3等),但不能访问父材料(TransNode)。
是否可以将TransNodes定义为API中的对象,或者我们可以使用任何解决方法吗?非常感谢。
答案 0 :(得分:0)
如果在3ds Max场景中,对象在翻译时应用了多材质,则每个通道都会创建一个子组件。 当您想要创建网格的可选部分而不拆分网格时,这会变得很方便。
但是,如果要避免此子组件选择并在选择子组件时选择整个对象,则有两种方法:
let viewer = viewerApp.getCurrentViewer();
let tree = viewer.model.getData().instanceTree;
viewer.addEventListener(Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT,
(event) => {
if (event.selections[] != undefined) {
let selectedNode = event.selections[0].dbIdArray[0];
console.log("selected a node with id = ", selectedNode);
if (tree.nodeAccess.getNumChildren(selectedNode) == 0) {
let parentId = tree.nodeAccess.getParentId(selectedNode);
console.log("parent of the selected node is ", parentId)
viewer.select(parentId);
}
}
})
因此,任何选择的“叶子”都会自动选择该“叶子”的父亲以及父节点下的所有内容。
第二种方法源于我们的一篇博客论文讨论Controlling components selection in the Viewer的想法。