Autodesk forge 如何将唯一的数据库ID加载到MarkupCore扩展标记上?

Autodesk forge 如何将唯一的数据库ID加载到MarkupCore扩展标记上?,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,我正在使用MarkupsCore扩展构建一个基于云的注释系统。我能够成功地将标记单独存储在数据库中,并将它们作为一个完整的SVG字符串加载回来。然而,我对能够删除它们感到困惑。通常,我会在标记上附加一个数据库ID,然后删除它。但是,我不知道在这种情况下我会怎么做。是否有任何我可以存储的唯一属性是标记的一部分,用于标识它们以删除它们 另外,MarkupsCore扩展没有在创建标记时触发的事件是否有特殊原因?我自己能够解决这个问题,但我只是好奇。如果您想在MarkupCore扩展上使用generat

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


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

如果您想在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());
});

如何准确地提取数据进行存储?使用扩展的generateData方法?否。我使用一个模板重新创建svg,并适当地填充元数据。关于生成数据,这意味着如果您正在开发基于云的标记解决方案,您必须始终相信客户端是同步的,否则您将最终覆盖标记。单独保存它们可以解决这个问题,因为你不会得到任何覆盖,但这会让其他事情变得更困难,因为我认为这个工具不是想象中的那样使用的。谢谢你提供的信息。你是对的——使用GealDeATA和Load MulkUp存储和加载标记数据的标准方法不考虑多用户工作流。单独存储标记元素使多用户工作流成为可能,但这意味着您不能使用loadMarkups函数,因为它会清理标记并删除所有未知元数据。我将发布一个替代方法作为建议的答案。av.Extensions.Markups.Core似乎不存在。我已经在V6和V2上试过了。这段代码假定扩展已经加载。让我更新代码以确保这一点。这是我的想法,但我还没有机会尝试。非常感谢。不客气!如果您能够在场景中使用此方法,请告诉我。哦,还有一件事:请记住,当用户实际绘制标记时,扩展将根据其自己的内部计数器为每个元素分配一个数字ID,因此您需要确保与自定义的ID没有冲突。因此,当我使用以前的工作流添加文本标记时,并使用setText函数来设置文本,它可以工作,但存在一个问题。直到我单击查看器上的某个位置或将鼠标悬停在其上,标记才会显示出来。有什么建议吗?