我想在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对象?
谢谢。
答案 0 :(得分: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)
})