0

我想更改被查看器隐藏的元素的材质 (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);

但是,更新隐藏元素的材质后没有任何变化。如何解决。我想要具有不同颜色和透明度的自定义隐藏元素。

4

1 回答 1

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) 来显示外部对象。

通过这种方式,您可以为外部对象设置您想要的材质,外部对象将显示为其他正常对象,但是当您尝试选择对象时它会隐藏一段时间。该解决方案似乎对我有用,但我没有彻底测试它,您可以尝试看看它是否有效。

于 2016-12-28T14:10:59.520 回答