在 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。
在以下位置查找两者的示例:
您可以从选择事件中获取给定 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)
})
我想在 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。
在以下位置查找两者的示例:
您可以从选择事件中获取给定 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)
})