You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Autodesk Forge Viewer获取对象绝对坐标及refPointTransformation数组含义

关于Autodesk Forge Viewer获取对象绝对坐标及refPointTransformation数组的说明

1. 能否获取对象绝对坐标?

可以。你当前的代码获取的是Viewer局部坐标系下的坐标,要得到项目的绝对坐标(对应Revit等建模软件中的项目基点坐标系),需要结合模型的AEC转换矩阵进行转换。

修改后的代码可直接获取绝对坐标:

const viewer = NOP_VIEWER;
const dbId = viewer.getSelection()[0];
if (!dbId) return;

const model = viewer.model;
const instanceTree = model.getData().instanceTree;
const fragList = model.getFragmentList();

let bounds = new THREE.Box3();

instanceTree.enumNodeFragments(dbId, (fragId) => {
    let box = new THREE.Box3();
    fragList.getWorldBounds(fragId, box);
    bounds.union(box);
}, true);

// 获取Viewer坐标系下的中心坐标
const viewerPosition = bounds.center();

// 转换为项目绝对坐标
const aecData = model.getAecModelData();
if (aecData && aecData.refPointTransformation) {
    const transformMatrix = new THREE.Matrix4().fromArray(aecData.refPointTransformation);
    const absolutePosition = viewerPosition.clone().applyMatrix4(transformMatrix);
    console.log("对象绝对坐标:", absolutePosition);
}

2. refPointTransformation数组的含义

这个数组是列优先存储的4x4齐次变换矩阵,作用是将Viewer局部坐标系的坐标转换为项目的绝对坐标系坐标。数组共16个元素,对应矩阵结构如下:

[
    m00, m10, m20, m30,  // 矩阵第一列
    m01, m11, m21, m31,  // 矩阵第二列
    m02, m12, m22, m32,  // 矩阵第三列
    m03, m13, m23, m33   // 矩阵第四列
]

各部分具体作用:

  • 前9个元素(m00至m22):组成3x3子矩阵,负责旋转和缩放,定义两个坐标系之间的方向映射与比例关系
  • 第四列前三个元素(m30、m31、m32):是平移向量,代表Viewer坐标系原点在绝对坐标系中的位置
  • 最后一个元素m33:固定为1,是齐次坐标的标识位,用于三维空间的统一变换计算

内容的提问来源于stack exchange,提问作者Alder Moriggi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:11:16