Forge Viewer中如何保存绘制的标注区域并在重载同文件时自动加载
标记数据序列化(保存阶段)
核心是提取可复用的纯结构化数据,避免存储不可序列化的Viewer实例对象
- 给每个自定义标记图形分配唯一ID,同时绑定当前AutoCAD文件的唯一URN(Forge平台中每个转换后模型的唯一标识,用于后续匹配对应模型的标记)
- 逐个提取标记的核心可序列化参数:
- 矩形标记:存储世界坐标系下的两个对角点坐标、填充色、边框色、透明度、自定义备注
- 球体标记:存储世界坐标系下的球心坐标、半径、材质颜色、透明度、自定义备注
- 如果标记绑定了模型上的特定构件,额外存储对应构件的
dbId,后续加载时可跟随构件位置自动适配偏移
- 将所有参数整理为JSON结构,存储到你的业务数据库或本地存储即可,参考结构如下:
{ "modelUrn": "urn:adsk.objects:os.object:your_bucket/your_file.dwg", "marks": [ { "id": "mark_001", "type": "rectangle", "point1": [10.2, 20.5, 0], "point2": [30.1, 40.3, 0], "color": "#FF0000", "opacity": 0.5, "bindDbId": 123 }, { "id": "mark_002", "type": "sphere", "center": [25.3, 30.6, 5.2], "radius": 2.5, "color": "#00FF00", "opacity": 0.6, "bindDbId": 124 } ] }
如果需要同时还原当时的视图视角,可额外调用viewer.getState()获取视图状态数据,和标记数据一起存储。
标记恢复加载阶段
- 监听Viewer的
GEOMETRY_LOADED_EVENT事件,确保模型完全加载完成后再执行标记恢复逻辑,避免坐标适配出错 - 根据当前加载的模型URN,从存储位置拉取对应的标记JSON数据
- 遍历所有标记数据,复用你现有绘图工具的创建逻辑,逐个重新生成矩形、球体实例:
- 若标记绑定了
dbId,先通过viewer.model.getProperties(dbId)获取构件最新坐标,调整标记位置适配模型视图偏移 - 按照存储的样式参数还原标记的颜色、透明度等属性
- 若标记绑定了
- 如果存储了视图状态数据,调用
viewer.restoreState(stateData)即可直接还原当时的缩放、旋转、视角位置。
可选优化点
- 给标记增加分类标签,保存时同步存储标签信息,后续加载时可按需筛选显示对应分类的标记
- 对标记做版本管理,同一份模型的标记可存储多个版本,支持回溯历史标记状态
- 业务字段可直接加在标记的JSON结构中,不需要改动Viewer侧的核心逻辑
内容的提问来源于stack exchange,提问作者castro nelson
相关产品推荐
相关产品推荐

