【问题标题】:How can I load a unique database ID onto a MarkupCore extension markup?如何将唯一的数据库 ID 加载到 MarkupCore 扩展标记上?
【发布时间】:2019-01-30 00:52:37
【问题描述】:

我正在使用 MarkupsCore 扩展来构建基于云的注释系统。我能够成功地将标记单独存储在数据库中,并将它们作为一个完整的 SVG 字符串加载回来。但是,我对能够删除它们感到困惑。通常,我会在标记上附加一个数据库 ID,然后将其删除。但是,我不知道在这种情况下我会怎么做。是否有任何我可以存储的独特属性作为标记的一部分,用于识别它们以删除它们?

另外,MarkupsCore 扩展在创建标记时没有触发事件是否有特殊原因?我自己能够解决这个问题,但我只是好奇。

【问题讨论】:

  • 您究竟是如何提取数据进行存储的?使用扩展的generateData()方法?
  • 不。我使用模板重新创建了 svg,并适当地填写了元数据。
  • 生成数据意味着,如果您正在开发基于云的标记解决方案,您必须始终相信客户端是同步的,否则您最终会覆盖标记.单独保存它们可以解决这个问题,因为您不会得到任何覆盖,但这会使其他一切变得更加困难,因为我不认为该工具被想象为以这种方式使用。
  • 感谢您的信息。你是对的——存储和加载标记数据的标准方式(使用generateData()loadMarkups())不考虑多用户工作流程。单独存储标记元素使多用户工作流程成为可能,但这意味着您不能使用 loadMarkups() 函数,因为它会清理标记并删除所有未知元数据。我将发布另一种方法作为建议的答案。

标签: autodesk-forge autodesk-viewer


【解决方案1】:

如果您想绕过标准存储机制(使用 MarkupCore 扩展上的 generateData()loadMarkups() 方法),您可以单独存储数据,并使用以下方法重新创建标记:

viewer.loadExtension('Autodesk.Viewing.MarkupsCore').then((extension) => {
    const CoreNS = Autodesk.Viewing.Extensions.Markups.Core;
    extension.clear();
    extension.enterEditMode();
    let rect = new CoreNS.MarkupRectangle(123 /* your custom ID */, extension);
    extension.addMarkup(rect);
    rect.setSize({ x: 10, y: 10 }, 100 /* width */, 100 /* height */);
    extension.leaveEditMode();
    console.log('markup data', extension.generateData());
});

【讨论】:

  • av.Extensions.Markups.Core 似乎不存在。我已经尝试过 V6 和 V2。
  • 这个sn-p代码假定扩展已经加载。让我更新代码以确保这一点。
  • 我是这么想的,但我还没有机会尝试。谢谢!
  • 不客气!让我知道您是否能够在您的场景中使用这种方法。哦,还有一件事:请记住,当用户实际绘制标记时,扩展程序将根据其自己的内部计数器为每个元素分配一个数字 ID,因此您需要确保不会与您的自定义冲突-定义的 ID。
  • 所以,当我使用之前的工作流程添加文本标记,并使用 setText 函数设置文本时,它可以工作,但是有一个问题。在我单击查看器上的某个位置或将鼠标悬停在它上面之前,标记不会显示,然后它就会出现。有什么建议吗?
猜你喜欢
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多