Autodesk forge 转换为3.Mesh时,所有房间对象的maxtrixWorld属性相同

Autodesk forge 转换为3.Mesh时,所有房间对象的maxtrixWorld属性相同,autodesk-forge,autodesk-viewer,forge,autodesk-model-derivative,Autodesk Forge,Autodesk Viewer,Forge,Autodesk Model Derivative,在Autodesk Forge Viewer中,当获取作为“房间”的对象的maxtrixWorld属性时,我发现模型中每个房间的属性都是相同的,无论对象实际位于模型中的什么位置。模型中的任何其他对象都不是这种情况(它们都具有唯一的maxtrixWorld属性,对应于它们在模型中的位置) 我根据构建房间对象的片段ID,通过多种方法检索了maxtrixWorld数据,所有这些都产生了相同的结果: 获取具有maxtrixWorld属性的3.Mesh对象 获取具有maxtrixWorld属性的3.Mes

在Autodesk Forge Viewer中,当获取作为“房间”的对象的
maxtrixWorld
属性时,我发现模型中每个房间的属性都是相同的,无论对象实际位于模型中的什么位置。模型中的任何其他对象都不是这种情况(它们都具有唯一的
maxtrixWorld
属性,对应于它们在模型中的位置)

我根据构建房间对象的片段ID,通过多种方法检索了
maxtrixWorld
数据,所有这些都产生了相同的结果:

获取具有
maxtrixWorld
属性的3.Mesh对象

获取具有
maxtrixWorld
属性的3.Mesh对象

通过fragList辅助函数getWorldMatrix()获取matrixWorld

房间确实显示在模型中的正确位置,这使我认为它们的几何体中烘焙了一个变换,因为它们的矩阵并不确定它们在模型中的位置


这是在Revit中构建房间的限制还是模型转换过程的结果?有没有办法检索这些对象的正确矩阵信息?正在通过Forge处理模型,并将
generateMasterViews
标志设置为true,从而可以生成房间数据。

我刚刚尝试在一个官方Revit示例()中使用以下代码获取两个房间的世界变换:

函数logWorldTransforms(查看器,dbid){ 让tree=viewer.model.getInstanceTree(); 让frags=viewer.model.getFragmentList(); 设mtx=new-THREE.Matrix4(); tree.enumNodeFragments(dbid,函数(fragid){ frags.getWorldMatrix(fragid,mtx); console.log(mtx.toArray()); },对); } 你是对的——无论我在哪个房间尝试,它们都有相同的矩阵(在我的例子中,常数偏移量为
(-140.60,0.50,-17.48)
)。使用
generateMasterViews
标志时,模型衍生工具服务很可能会将偏移烘焙到每个房间的几何图形中。尽管如此,您仍然可以获得每个房间的边界框,这将更好地指示房间的位置

如果您认为这是一个错误,请将其报告给autodesk(dot)com的
forge(dot)帮助(at)

const renderProxy = viewer.impl.getRenderProxy(viewer.model, fragId);
const meshObj = fragList.getVizmesh(fragId);
const matrix = new THREE.Matrix4(); fragList.getWorldMatrix(fragId, matrix);