1

在 Autodesk Forge 查看器中,当获取maxtrixWorld“房间”对象的属性时,我观察到模型中每个房间的属性都是相同的,无论对象实际位于模型中的什么位置。模型中的任何其他对象都不是这种情况(它们都具有maxtrixWorld与它们在模型中的位置相对应的独特属性)。

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

获取一个带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,从而可以生成房间数据。

4

1 回答 1

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.

于 2021-05-05T11:29:14.127 回答