Autodesk Forge Viewer 获取片段位置
Posted
技术标签:
【中文标题】Autodesk Forge Viewer 获取片段位置【英文标题】:Autodesk Forge Viewer getting fragment position 【发布时间】:2021-02-21 06:25:45 【问题描述】:我正在尝试获取模型中单独网格的位置(从 revit 文件转换而来)。 我正在做的是获取fragmentProxy,然后使用getOriginalWorldMatrix() 来获取THREE.Matrix4()。然后从 Matrix4 调用 getPosition() 来获取片段的 THREE.Vector3 世界位置。 但是,每个网格都返回相同的位置值。那是因为模型最初是如何构建的吗?或者我必须使用其他方法获取片段位置?
【问题讨论】:
【参考方案1】:您检索片段转换的过程是正确的。或者,您可以使用以下内容:
function getFragmentTransform(model, fragid)
const frags = model.getFragmentList();
let xform = new THREE.Matrix4();
frags.getOriginalWorldMatrix(fragid, xform);
return xform;
恐怕你是对的,在某些情况下,变换可能会直接烘焙到网格顶点中。
【讨论】:
非常感谢。所以我猜测位置是相同的,因为 Revit 如何处理位置,所有片段都将具有相同的枢轴位置,并且它们的位置是枢轴?有什么方法可以获取模型世界空间中每个片段的位置?也许将 Matrix4 世界位置转换为每个片段的本地位置? 我对 Revit 不太熟悉,所以我无法确认是否是这种情况,但看起来确实如此。如果世界位置已经烘焙到片段的顶点中(而不是在片段变换矩阵中指定),您可以获得片段的“世界边界框”(fragList.getWorldBounds(fragid, bbox)
)并将其中心点用作世界位置.以上是关于Autodesk Forge Viewer 获取片段位置的主要内容,如果未能解决你的问题,请参考以下文章
Autodesk Forge 查看器 - 从“viewer.model.search”和“viewer.getSelection()”获取不同的值 dbId
Autodesk Forge Viewer 和 React 组件
将模型从 Autodesk Viewer 加载到 Forge Viewer