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

Get THREE.Mesh elements in Autodesk Forge 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);

return 网格对象是一个 THREE.Mesh 对象,但具有 null Geometry 和 Material,因此它没有用。我怎样才能得到真正的 THREE.Mesh 对象?

谢谢。

这取决于你想用网格做什么:如果你想改变渲染风格,你需要获取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)
 })