在Autodesk Forge Viewer中获取THREE.Mesh元素

时间:2016-12-19 22:44:59

标签: autodesk-forge autodesk-viewer

我想在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对象,但是没有Geometry和Material,所以它没用。我怎样才能得到真正的THREE.Mesh对象?

谢谢。

1 个答案:

答案 0 :(得分:2)

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

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

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

Viewing.Extension.Material

Viewing.Extension.Transform

您可以从选择事件中获取给定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)
 })