如何直接从MarkupEdit或MarkupView模式还原查看器状态?

时间:2019-05-07 12:27:55

标签: autodesk-forge autodesk-viewer markup-extensions

参考https://forge.autodesk.com/cloud_and_mobile/2016/02/playing-with-the-new-view-data-markup-api.html,我正在伪造查看器中实现2D标记功能。

我正在使用Autodesk.Viewing.MarkupsCore库在Forge Viewer中的模型上绘制注释。为此,我正在将Autodesk.Viewing.MarkupsCore扩展加载为_markupsExtension。

我尝试绘制一些标记注释并保存了查看器状态。当我尝试加载这些以前绘制的注释时,它无法恢复查看器状态,但是它正确地加载了注释数据。

// To draw and save markup 
viewer.loadExtension("Autodesk.Viewing.MarkupsCore").then(function(markupExt) {
    _markupsExtension = markupExt;
    _state = _markupsExtension.viewer.getState();

    _markupsExtension.hide();
    _markupsExtension.enterEditMode();

    //From now on, while in EditMode, the user will be drawing text boxes

    _data = _markupsExtension.generateData(); //Annotations data can be generated
    _state = _markupsExtension.viewer.getState(); //to store viewer state information
    _markupsExtension.leaveEditMode();

    viewer.unloadExtension("Autodesk.Viewing.MarkupsCore"); //User can navigate within model
});


// To load previously drawn markup
viewer.loadExtension("Autodesk.Viewing.MarkupsCore").then(function(markupExt) {
    _markupsExtension = markupExt;

    _markupsExtension.leaveEditMode();
    _markupsExtension.show();

    _markupsExtension.viewer.restoreState(_state); //it fails to restore state
    _markupsExtension.viewer.impl.invalidate(true);

    _markupsExtension.loadMarkups(_data, 'aaa'); //loads markup data while keeping viewerstate unchanged.
});
  • 为什么在标记查看模式下时,恢复状态失败?
  • _markupsExtension.viewer.restoreState (_ state)和 viewer.restoreState (_ state)
  • 有什么区别?

===============================已编辑============ ==================

有什么办法可以让我停留在编辑模式/观看模式下并更改观看者的状态?

我将所有会话中的所有标记保存在列表视图中,或者在每个会话中保存文件(请参考https://forge.autodesk.com/cloud_and_mobile/2016/02/playing-with-the-new-view-data-markup-api.html)。 例如1)我将模型移到顶部,并绘制了指向特定对象的箭头,并将其保存为名称“ MarkupA.json”。 2)我将模型移到最前面,并进行了缩放,以使其远离相机。然后,我绘制了Square标记并将其存储为名称“ MarkupB.json”。 3)然后我再次将模型保留为默认的iso(家庭)模式,并绘制了文本注释,并将其保存为名称“ MarkupC.json”。

所有这些标记都像一棵树一样在UI面板中列出。因此,当单击任何特定名称时,必须在不更改任何标记模式的情况下还原该标记及其模型查看器状态。

我已经在bim360中检查了此类似功能。当我在BIM360中存储不同的标记时,它会将所有标记存储在数据库中,并为相关的标记卡贴上小缩略图屏幕截图。我在标记面板或评论面板中查看了所有标记。 当我单击特定的缩略图时,每个标记都贴有适当的存储的查看器状态。

我正在尝试使用新的Markups核心扩展在伪造查看器中获得类似的功能,并自定义其标记代码以存储带有标记的状态。当我尝试加载每个标记时,似乎正在加载标记,但是无论在编辑模式还是在查看模式下都无法恢复其查看器状态。我了解,如果我们处于标记模式,则无法恢复状态。但是,如果我想在特定视图上显示以前存储的绘制标记怎么办?

我尝试在标记之间切换的解决方法如下, 点击另一个标记-

a)退出查看模式

b)恢复具有存储状态的模型

c)进入查看模式。

d)加载其标记svg。

  • 与此相关的问题是,花费大量时间花费大量时间来重新加载具有还原状态的标记。

能否请您告诉我是否还有其他解决方法或方法来同步实现加载和还原标记及其查看器状态?

1 个答案:

答案 0 :(得分:1)

  

为什么在标记查看模式下无法恢复状态?

在标记模式下,相机被锁定,因此您需要退出编辑模式才能恢复Viewer状态,然后返回。

  

_markupsExtension.viewer.restoreState(_state)和viewer.restoreState(_state)有什么区别

_markupsExtension.viewer只是插件对主Viewer对象的引用