更改 material Autodesk Forge 查看器的隐藏元素

Change material of hidden elements of Autodesk Forge viewer

我想更改 material (THREE.MeshPhongMaterial) 个被查看器隐藏的元素。默认的隐藏元素仍然可见,但我想更改它们的透明度和颜色。

这是示例代码。我尝试更改主题颜色和 material 但没有成功:

viewer.hideById(dbId);

var color = 0x0000ff; // blue color
viewer.setThemingColor(dbId, color, viewer.model);

var instanceTree = viewer.model.getData().instanceTree;
var fragmentList = viewer.model.getFragmentList();

instanceTree.enumNodeFragments(dbId, function (fragId) {
    fragmentList.setMaterial(fragId, new THREE.MeshPhongMaterial( { opacity: 0.5 } ));
});

viewer.impl.invalidate(true);

然而,更新 material 的隐藏元素后没有任何变化。如何解决这个问题。我想要我的自定义隐藏元素具有不同的颜色和透明度。

使用 Forge Viewer,如果你隐藏一个对象,就像 Augusto 提到的那样,对象似乎将被完全隐藏,你不能设置 material 来查看它。但是,有一个技巧解决方法可能有助于实现您在 http://app.netonapp.com/JavaScript/Three.js/select_inner_objects.html 中使用 Three.js 所做的事情,您可以 select 内部对象,并且仍然可以看到外部 "hidden" 对象.

我做的很简单,在“mousedown”事件的回调函数中,我做的第一件事就是设置隐藏的外部对象 API viewer.hideById(dbId),然后select 你的 API viewer.impl.renderer().idAtPixel 对象。在这种情况下,它将忽略隐藏对象,只 select 内部对象。在函数中“SELECTION_CHANGED_EVENT”事件,我添加了代码viewer.show(dbid)来显示外部对象。

通过这种方式,你可以为外部对象设置你想要的material,外部对象将显示为其他普通对象,但是当你尝试时它会隐藏一段时间select 对象。这个解决方案在我这边似乎有效,但我没有彻底测试它,你可以试试看是否有效。