Со ссылкой 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.
- Проблема в том, что это занимает слишком много времени и занимает слишком много времени для перезагрузки разметки с восстановленным состоянием.
Скажите, пожалуйста, есть ли у нас какой-либо другой способ или способ для синхронной загрузки и восстановления разметки и состояния ее средства просмотра?