Как восстановить состояние зрителя непосредственно из режима MarkupEdit или MarkupView? - PullRequest
0 голосов
/ 07 мая 2019

Со ссылкой https://forge.autodesk.com/cloud_and_mobile/2016/02/playing-with-the-new-view-data-markup-api.html, Я реализую функцию 2D-разметки в программе просмотра кузниц.

Я использую библиотеку Autodesk.Viewing.MarkupsCore для рисования аннотаций над моделью в программе просмотра кузницы. Для этого я загружаю расширение 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 (состояние _) и viewer.restoreState (состояние _)

================================ EDITED =========== ==================

Есть ли способ остаться в режиме редактирования / просмотра и изменить состояние зрителя?

Я сохраняю все пометки в виде списка в разных сеансах или в файле для каждого сеанса (см. https://forge.autodesk.com/cloud_and_mobile/2016/02/playing-with-the-new-view-data-markup-api.html). например 1) Я переместил модель вверх и нарисовал стрелку, указывающую на конкретный объект, и сохранил ее с именем «MarkupA.json». 2) Я переместил модель вперед и уменьшил ее, чтобы она была далеко от камеры. Затем я нарисовал квадратную разметку и сохранил ее с именем «MarkupB.json». 3) Затем я снова сохранил модель в режиме iso (home) по умолчанию, нарисовал текстовую аннотацию и сохранил ее с именем «MarkupC.json».

Все эти разметки перечислены на панели пользовательского интерфейса как дерево. Поэтому, когда я нажимаю на какое-либо конкретное имя, эта разметка и ее состояние просмотра модели должны быть восстановлены без изменений в любом режиме разметки.

Я проверил эту функциональность simillar в bim360. Когда я сохранял разные наценки в BIM360, он сохранял все наценки в своей базе данных, и для соответствующей карты разметки добавлялся небольшой скриншот. Я просмотрел все пометки на панели разметки или панели комментариев. Когда я нажимал на определенный эскиз, каждая разметка появлялась с соответствующим сохраненным состоянием средства просмотра.

Я пытаюсь получить аналогичную функциональность в средстве просмотра forge, используя новое расширение ядра Markups и настроил его код разметки для хранения состояний с разметками. Когда я пытался загрузить каждую разметку, кажется, что разметка загружается, но ее состояние просмотра не может быть восстановлено ни в режиме редактирования, ни в режиме просмотра. Я понял, что восстановление состояния невозможно, если мы находимся в режиме наценки. Но что, если я хочу показать ранее сохраненную размеченную разметку в определенном виде?

Обходной путь, который я пытался переключить между разметкой, следующий: При нажатии другой разметки -

а) выйти из режима просмотра

б) восстановить модель с сохраненным состоянием

в) войти в режим просмотра.

d) загрузить разметку svg.

  • Проблема в том, что это занимает слишком много времени и занимает слишком много времени для перезагрузки разметки с восстановленным состоянием.

Скажите, пожалуйста, есть ли у нас какой-либо другой способ или способ для синхронной загрузки и восстановления разметки и состояния ее средства просмотра?

1 Ответ

1 голос
/ 07 мая 2019

Почему не удается восстановить состояние в режиме просмотра разметки?

В режиме разметки камера заблокирована, поэтому вам необходимо выйти из режима редактирования, прежде чем восстанавливать состояния средства просмотра, а затем вернуться назад.

В чем разница между _markupsExtension.viewer.restoreState (_state) и viewer.restoreState (_state)

Без разницы, поскольку _markupsExtension.viewer является просто ссылкой плагина на главный объект Viewer

...