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

Posted

技术标签:

【中文标题】更改 Autodesk Forge 查看器隐藏元素的材质【英文标题】:Change material of hidden elements of Autodesk Forge viewer 【发布时间】: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 元素来选择它的内部元素。 知道了,让我帮你研究一下。 【参考方案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) 来显示外部对象.

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

【讨论】:

这似乎是一个非常聪明的解决方案。谢谢钟武。我会测试它。 我得到了最终解决方案。我将把它包装成一个新的查看器扩展,稍后再发布答案。 完整的工作代码请看帖子***.com/questions/41265736/…

以上是关于更改 Autodesk Forge 查看器隐藏元素的材质的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用右键单击事件或如何隐藏 Autodesk Forge 查看器上的上下文菜单

如何在 Autodesk Forge 查看器中更改选择颜色?

在 Autodesk Forge 查看器中的元素下拾取

Forge 查看器:Autodesk.BoxSelection 扩展错误

Autodesk forge:经过身份验证的查看器请求现在返回 403

Autodesk Forge 查看器将选择颜色设置为默认值