【问题标题】:Get THREE.Mesh elements in Autodesk Forge Viewer在 Autodesk Forge Viewer 中获取 THREE.Mesh 元素
【发布时间】:2017-05-05 01:44:24
【问题描述】:

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

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

返回的mesh对象是THREE.Mesh对象,但是Geometry和Material都是空的,所以没用。如何获取真正的 THREE.Mesh 对象?

谢谢。

【问题讨论】:

    标签: autodesk-forge autodesk-viewer


    【解决方案1】:

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

    【讨论】:

    • 能否请您解释一下节点元素(dbId)和片段(fragId)之间的区别。我知道一个 dbId 可以映射到多个 fragId,一个 fragId 可以映射到多个 dbId。它们在 Forge 查看器中的视觉效果是什么?
    • 确切地说,我想在 Forge 查看器中单击时获得具有对象 dbId 的完整几何形状和材质的真实 THREE.Mesh 对象。 renderProxy = viewer.impl.getRenderProxy(viewer.model, fragId) 没有真正的几何图形。即使在执行 THREE.BufferGeometry.computeBoundingBox() 或 .computeBoundingSphere() 之后,它也具有空或零边界框和球体
    • 由于 Forge 查看器 geometry.boundingBox 为空。我必须运行 fragmentList.getWorldBounds(fragId, fragBox) 来手动计算它。
    • 一个 dbId 表示单个组件的 id 可以在模型结构中看到(父或子)或者可以在查看器中直观地选择,因此一个 dbId 可以映射到 0 或多个 fragId,这个是正确的。但是一个fragId不能映射到多个dbId,一个fragId可以让你访问一个特定的fragment,分为renderProxy和fragmentProxy,所以它不是100%等价于THREE.mesh。如果你想变换fragment,你需要fragmentProxy,如果你想改变渲染风格,你需要renderProxy。我上面指出的例子说明了两者。
    • 关于边界框,我已经在这个线程stackoverflow.com/questions/41248260/… 中回复了您的请求。组合方法应该允许您访问或修改查看器中的任何元素。
    猜你喜欢
    • 1970-01-01
    • 2021-02-21
    • 2017-01-29
    • 2021-01-13
    • 2020-05-06
    • 2021-05-13
    • 2021-02-22
    • 2018-05-06
    • 2020-01-16
    相关资源
    最近更新 更多