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