如何基于Autodesk Forge获取指定dbId坐标及CAD List命令等效信息
获取Autodesk Forge中指定dbId的坐标及类似CAD「list」命令的信息
一、获取元素坐标信息
1. 快速获取包围盒中心点(世界坐标系)
直接通过元素的fragment计算整体包围盒,取中心点:
const fragList = viewer.model.getFragmentList(); const fragIds = fragList.fragments.dbId2fragIds[dbId]; let bbox = new THREE.Box3(); for (const fragId of fragIds) { fragList.getWorldBounds(fragId, bbox); } const center = bbox.getCenter(new THREE.Vector3()); // center就是元素在Viewer世界坐标系下的中心点坐标
2. 获取CAD原生本地坐标系坐标
如果需要CAD软件里显示的原始坐标,要把世界坐标转成元素本地坐标系:
// 先拿第一个fragment的变换矩阵(多fragment元素需统一处理) const matrix = fragList.getWorldMatrix(fragIds[0]); const localCenter = center.clone().applyMatrix4(new THREE.Matrix4().getInverse(matrix)); // localCenter就是CAD本地坐标系下的位置
二、获取类似CAD「list」命令的详细信息
1. 扩展Viewer的属性获取能力
默认viewer.getProperties()返回的信息不全,开启全属性加载:
- 加载模型时指定
propDbPath参数,确保拉取全部属性:
const loadOptions = { propDbPath: `https://developer.api.autodesk.com/modelderivative/v2/designdata/${urn}/metadata/${modelGuid}/properties` }; viewer.loadModel(urn, loadOptions);
- 调用
getProperties时传true获取完整属性:
viewer.getProperties(dbId, (props) => { console.log(props); // 包含更多CAD原生属性,接近list命令的内容 }, true);
2. 调用Model Derivative API直接获取原始属性
如果Viewer端还是拿不到足够信息,直接调用API:
- 发送GET请求到:
/modelderivative/v2/designdata/{urn}/metadata/{guid}/properties/{dbId} - 请求头带上
Authorization: Bearer {你的访问令牌} - 返回结果包含元素的几何参数、材质、所属图层等所有CAD原生属性,完全对应「list」命令的输出。
内容的提问来源于stack exchange,提问作者shyx32qqcom
相关产品推荐
相关产品推荐

