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

如何获取Scene Builder自定义模型位置 能否替换Autodesk.gltf模型dbId

问题1:自定义模型位置获取方案

getPlacementTransform() 方法用于获取Forge加载的整模型的全局偏移矩阵,不适用于自行插入的Three.js网格对象,你可以按如下方式获取正确坐标:

  • 首先修正你当前的矩阵赋值错误:你当前直接将角度值传入Quaternion构造参数的写法不符合Three.js逻辑,会导致矩阵计算错误,修正后代码如下:
this.cubeSetup = {
  id: "AB0014",
  position: [4, -5, 2],
  rotation: [0, 135, 0],
};

const { position, rotation } = this.cubeSetup
// 角度转弧度,生成正确四元数
const quaternion = new THREE.Quaternion().setFromEuler(
  new THREE.Euler(
    THREE.MathUtils.degToRad(rotation[0]),
    THREE.MathUtils.degToRad(rotation[1]),
    THREE.MathUtils.degToRad(rotation[2])
  )
)
this.cube1.matrix = new THREE.Matrix4().compose(
  new THREE.Vector3(...position),
  quaternion,
  new THREE.Vector3(1, 1, 1)
)
// 禁止Three.js自动覆写自定义矩阵
this.cube1.matrixAutoUpdate = false
  • 点击事件触发后直接分解网格的世界矩阵获取实际坐标:
const pos = new THREE.Vector3()
const quat = new THREE.Quaternion()
const scale = new THREE.Vector3()
// 分解世界矩阵获取全局坐标
cube1.matrixWorld.decompose(pos, quat, scale)
console.log('模型实际坐标:', pos.x, pos.y, pos.z)
问题2:自定义模型标识绑定方案

不能直接替换Forge Viewer内置的dbId,该字段是Viewer内部维护的唯一索引,强行修改会破坏内部逻辑。你可以通过如下两种方案实现自定义ID绑定:

  • 方案一:维护dbId与自定义ID的映射表
    在gltf模型加载完成、对象树生成后,遍历所有节点的dbId,和你的自定义API ID做映射绑定,点击时通过选中的dbId查表获取自定义ID即可,示例代码:
const customIdMap = {}
// 监听gltf模型的对象树生成事件
viewer.addEventListener(Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT, (e) => {
  const currentModel = e.model
  currentModel.getObjectTree((tree) => {
    // 遍历模型所有节点dbId
    tree.enumNodeChildren(tree.getRootId(), (dbId) => {
      // 可根据节点名称、属性匹配对应自定义ID,这里按实际业务逻辑实现即可
      const nodeName = tree.getNodeName(dbId)
      customIdMap[dbId] = 对应自定义API ID
    })
  })
})

// 点击事件中获取自定义ID
viewer.addEventListener(Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT, (e) => {
  if (!e.selections?.length) return
  const selectedDbId = e.selections[0].dbIdArray[0]
  const targetCustomId = customIdMap[selectedDbId]
  // 后续根据targetCustomId拉取展示对应信息即可
})
  • 方案二:直接给网格对象挂载自定义ID
    加载完gltf模型后遍历所有内部网格,给每个网格的userData属性挂载自定义ID,点击时通过射线检测结果直接取网格的自定义ID即可,不依赖内置dbId。

内容的提问来源于stack exchange,提问作者surya kumara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:36:00