如何从MarkupEdit或MarkupView模式直接恢复观众状态? [英] How to restore viewer state directly from MarkupEdit or MarkupView mode?

查看:20
本文介绍了如何从MarkupEdit或MarkupView模式直接恢复观众状态?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我正在使用Autodesk.Viewing.MarkupsCore库在Forge查看器中的模型上绘制注释。为此,我将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中存储不同的标记时,它将所有标记存储在数据库中,并为其相关的标记卡显示小的缩略图屏幕截图。我在标记面板或注释面板中查看了所有标记。

当我点击特定的缩略图时,每个标记都会显示相应的存储的查看器状态。

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

我尝试在标记之间切换的解决方法如下

点击另一个标记-

a)退出查看模式

b)使用存储的状态还原模型

c)进入查看模式。

d)加载其标记SVG。

  • 这样做的问题是重新加载具有已还原状态的标记需要太多时间。

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

推荐答案

处于标记查看模式时为什么无法恢复状态?

处于标记模式时,摄像机被锁定,因此您需要退出编辑模式,然后才能恢复查看器状态,然后再返回。

_markupsExtension.viewer.RestoreState(_State)和viewer.RestoreState(_State)有什么不同

没有区别,因为_markupsExtension.viewer只是插件对主查看器对象的引用

这篇关于如何从MarkupEdit或MarkupView模式直接恢复观众状态?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆