如何解决转换为 THREE.Mesh
在 Autodesk Forge Viewer 中,当获取“房间”对象的 maxtrixWorld
属性时,我观察到模型中每个房间的属性都是相同的,无论对象实际位于何处位于模型中。模型中的任何其他对象都不是这种情况(它们都具有与其在模型中的位置相对应的唯一 maxtrixWorld
属性)。
我根据构建房间对象的片段 ID 通过多种方法检索了 maxtrixWorld
数据,所有结果都相同:
获取具有 maxtrixWorld
属性的 THREE.Mesh 对象
const renderProxy = viewer.impl.getRenderProxy(viewer.model,fragId);
获取具有 maxtrixWorld
属性的 THREE.Mesh 对象
const meshObj = fragList.getVizmesh(fragId);
通过fragList辅助函数getWorldMatrix()获取matrixWorld
const matrix = new THREE.Matrix4(); fragList.getWorldMatrix(fragId,matrix);
房间确实出现在模型中的正确位置,这让我认为它们在几何中进行了转换,因为它们的矩阵没有确定它们在模型中的位置。
这是在 Revit 中构建 Room 的方式的限制,还是模型转换过程的结果?有没有办法为这些对象检索正确的矩阵信息?模型正在通过 Forge 处理,generateMasterViews
标志设置为 true,从而可以生成房间数据。
解决方法
我刚刚尝试在一个官方 Revit 示例 (rac_advanced_sample_project.rvt) 中获得几个房间的世界变换,在查看器中使用以下代码:
function logWorldTransforms(viewer,dbid) {
let tree = viewer.model.getInstanceTree();
let frags = viewer.model.getFragmentList();
let mtx = new THREE.Matrix4();
tree.enumNodeFragments(dbid,function (fragid) {
frags.getWorldMatrix(fragid,mtx);
console.log(mtx.toArray());
},true);
}
你是对的 - 无论我试过哪个房间,它们都具有相同的矩阵(在我的例子中具有 (-140.60,0.50,-17.48)
的恒定偏移量)。使用 generateMasterViews
标志时,模型衍生服务很可能会将偏移量烘焙到每个房间的几何图形中。话虽如此,您仍然可以获得每个房间的边界框,这将使您更好地指示房间的位置。
如果您认为这是一个错误,请将其报告给 forge (dot) help (at) autodesk (dot) com
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。