1

我想在 Autodesk Forge Viewer 中获取元素的 THREE.Mesh 对象。这是代码:

var dbId;   // geometry node Id of an element
var viewer; // GuiViewer3D
var mesh = viewer.impl.getRenderProxy(viewer.model, dbId);

返回的网格对象是一个 THREE.Mesh 对象,但几何和材质为空,因此无用。如何获得真正的 THREE.Mesh 对象?

谢谢你。

4

1 回答 1

2

这取决于您要对网格做什么:如果要更改渲染样式,则需要获取renderProxy,如果要转换组件的位置或旋转,则需要获取fragmentProxy。

这些方法将片段 ID 而非 dbId 作为输入。

在以下位置查找两者的示例:

查看.扩展.材料

查看.扩展.转换

您可以从选择事件中获取给定 dbId 的片段 Id,如上面的示例所示,或者使用 enumNodeFragments:

 var instanceTree = model.getData().instanceTree

 var fragIds = []

 instanceTree.enumNodeFragments(dbId, function(fragId){
     fragIds.push(fragId)
 })

 // to change material or transform, need to iterate all
 // fragments of a given dbId and apply same material/transform

 fragIds.forEach(function(fragId) {

     var renderProxy = viewer.impl.getRenderProxy(viewer.model, fragId)

     var fragmentproxy = viewer.impl.getFragmentProxy(viewer.model, fragId)
 })
于 2016-12-20T01:18:56.903 回答