问题描述
在 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
。