我想更改观众隐藏的元素的材质(THREE.MeshPhongMaterial)。默认的隐藏元素仍然可见,但我想改变它们的透明度和颜色。
以下是示例代码。我试图改变主题颜色和材料,但没有成功:
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);
但是,更新隐藏元素的材料后没有任何改变。如何解决这个问题。我希望我的自定义隐藏元素具有不同的颜色和透明度。
答案 0 :(得分:1)
使用Forge Viewer,如果隐藏一个对象,就像Augusto所提到的那样,该对象似乎将被完全隐藏,您无法根据需要设置材质以查看它。但是,有一个技巧解决方法可能有助于实现你在http://app.netonapp.com/JavaScript/Three.js/select_inner_objects.html中使用Three.js所做的事情,你可以选择内部对象,并且仍然可以看到外部"隐藏"对象
我所做的很简单,在“mousedown"”的回调函数中。事件,我做的第一件事是设置API viewer.hideById(dbId)隐藏的外部对象,然后通过API viewer.impl.renderer()。idAtPixel选择对象。在这种情况下,它将忽略隐藏的对象,只需选择内部对象。在“SELECTION_CHANGED_EVENT”事件的功能中,我添加了代码viewer.show(dbid)来显示外部对象。
通过这种方式,您可以根据需要为外部对象设置材质,外部对象将显示为其他普通对象,但是当您尝试选择对象时,它将被隐藏一段时间。解决方案似乎在我身边,但我没有彻底测试,你可以试着看看它是否有效。