【问题标题】:Change material of hidden elements of Autodesk Forge viewer更改 Autodesk Forge 查看器隐藏元素的材质
【发布时间】:2017-05-06 06:37:43
【问题描述】:

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

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

【问题讨论】:

  • 当元素被隐藏时,你希望改变什么?属性?
  • 当元素被隐藏时,我可以将它排除在其他元素的选择之外。但是,我想要隐藏元素的不同颜色和透明度。它们在查看器上仍然可见,但根据其属性具有不同的颜色和透明度。
  • 你的意思是改变颜色 os 透明/幽灵元素?因为当你隐藏它们时,它会被完全隐藏(没有颜色/材质可见)
  • 你是对的。我想改变透明/鬼元素的颜色和不透明度。原因是将它们排除在选择集中之外,并根据它们的类别使它们看起来不同。然后我可以通过 ghost 元素来选择它的内部元素。
  • 知道了,让我帮你研究一下。

标签: autodesk-forge autodesk-viewer


【解决方案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) 来显示外部对象.

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

【讨论】:

  • 这似乎是一个非常聪明的解决方案。谢谢钟武。我会测试它。
  • 我得到了最终解决方案。我将把它包装成一个新的查看器扩展,稍后再发布答案。
  • 完整的工作代码请看帖子stackoverflow.com/questions/41265736/…
猜你喜欢
  • 2018-05-13
  • 2021-06-25
  • 2021-02-17
  • 2016-12-20
  • 2020-10-27
  • 2021-11-12
  • 1970-01-01
  • 2020-10-14
  • 2017-05-07
相关资源
最近更新 更多