【问题标题】:maxtrixWorld property identical for all room objects when converted to THREE.Mesh转换为 THREE.Mesh 时,所有房间对象的 maxtrixWorld 属性相同
【发布时间】:2021-07-23 08:41:10
【问题描述】:

在 Autodesk Forge 查看器中,当获取“房间”对象的 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 中构建方式的限制,还是模型转换过程的结果?有没有办法为这些对象检索正确的矩阵信息?模型正在通过 Forge 处理,并将 generateMasterViews 标志设置为 true,从而可以生成房间数据。

【问题讨论】:

    标签: autodesk-forge autodesk-viewer forge autodesk-model-derivative


    【解决方案1】:

    我刚刚尝试在一个官方 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-19
      • 1970-01-01
      • 2019-06-15
      • 2023-04-07
      • 2018-10-09
      • 2018-12-10
      • 2019-01-31
      相关资源
      最近更新 更多