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

如何在Autodesk Forge Viewer中添加与上传模型属性一致的对象?

在Autodesk Forge Viewer中添加可交互的自定义对象

核心结论

可以实现,但不能仅通过Three.js直接添加到场景——必须对接Forge Viewer的模型数据库和交互系统,让自定义对象被Viewer识别为原生模型的一部分,才能拥有选中、属性编辑等能力。

可行实现方案

1. 基于Viewer的Fragment系统创建可交互对象

Forge Viewer通过Fragment管理所有模型的几何与属性,手动创建Fragment并注册到Viewer的核心系统,就能让自定义对象获得原生模型的能力:

  • 用Three.js生成自定义几何与材质
  • 创建Fragment实例,分配唯一dbId(需避开现有模型的ID),绑定几何材质
  • 将Fragment添加到模型的FragmentList,更新场景
  • 注册到Viewer的选择、高亮系统,确保能被选中

示例代码片段:

// 创建Three.js自定义几何
const geometry = new THREE.BoxGeometry(10, 10, 10);
const material = new THREE.MeshPhongMaterial({ color: 0xff0000 });
const mesh = new THREE.Mesh(geometry, material);

// 转换为Viewer的Fragment
const fragId = viewer.model.getFragmentList().getNextAvailableFragmentId();
const frag = new Autodesk.Viewing.Private.Fragment(fragId);
frag.setMesh(mesh);
frag.dbId = 9999; // 自定义唯一dbId

// 注册到模型系统
viewer.model.getFragmentList().addFragment(frag);
viewer.impl.sceneUpdated(true);

// 绑定选择交互
viewer.selector.addSelectionListener((dbIds) => {
  if (dbIds.includes(9999)) {
    // 处理自定义对象的选中逻辑
  }
});

2. 改造Draw Tool Extension增强交互

如果已经在用Draw Tool Extension,可修改其逻辑补全交互能力:

  • 为绘制的对象分配唯一dbId
  • 将对象数据存入Viewer的模型数据库
  • 扩展getProperties方法,让属性面板能读取自定义对象的参数
  • 绑定修改事件,支持调整对象的位置、尺寸等参数

关键注意事项

  • 自定义对象的dbId必须唯一,避免与现有模型冲突
  • 需要同步更新Viewer的Model实例属性,确保属性面板正常显示参数
  • Viewer仅在前端场景中添加对象,若要永久保存,需将自定义对象数据导出后重新上传到Forge服务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:07:34