Forge viewer: Ожидаем несколько событий Viewer-а
В жизни разработчика Forge viewer рано или поздно возникает необходимость работы с событиями Viewer-а, например, дождаться загрузки геометрии модели перед тем, как получить доступ к объекту instanceTree.
Иногда же возникает необходимость дождаться вызова нескольких событий перед тем, как запускать собственный код. Мы ранее уже обсуждали одну из возможных реализаций ожидания событий GEOMETRY_LOADED_EVENT и OBJECT_TREE_CREATED_EVENT в статье: Asynchronous viewer events notification
В этой статье мы покажем несколько полезных функций для ожидания нескольких событий при помощи javascript async.
Forge Viewer сам использует объекты Promise, чем мы можем воспользоваться следующим образом:
- function afterViewerEvents(viewer, events) {
- let promises = [];
- events.forEach(function (event) {
- promises.push(new Promise(function (resolve, reject) {
- let handler = function () {
- viewer.removeEventListener(event, handler);
- console.log(`Removed event listener for ${event}`)
- resolve();
- }
- viewer.addEventListener(event, handler);
- console.log(`Added event listener for ${event}`)
- }));
- });
- return Promise.all(promises)
- }
С помощью ключевого слова await перед вызовом этой функции ожидаем вызова всех перечисленных событий:
- viewer.loadDocumentNode(doc, items[0], {}).then(async function (model) {
- await afterViewerEvents(
- viewer,
- [
- Autodesk.Viewing.GEOMETRY_LOADED_EVENT,
- Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT
- ]
- );
- // полезная нагрузка метода
- });
Viewer также имеет специальные вспомогательные функции, которые можно использовать вместо кода, показанного выше, т.е., если Вы хотите дождаться вызова события GEOMETRY_LOADED_EVENT, Вы можете использовать функцию waitUntilGeometryLoaded:
- viewer.loadDocumentNode(doc, items[0], {}).then(async function (model) {
- await Autodesk.Viewing.EventUtils.waitUntilGeometryLoaded(viewer);
- // полезная нагрузка метода
- });
Теперь же добавилась еще одна полезная функция: waitForLoadDone(include)
Она позволяет указать модель (или модели), загрузку которой Вы хотите дождаться.
Также можно указать, загрузку какой именно информации Вы хотите дождаться перед исполнением собственного кода: геометрии, базы данных свойств, текстур.
Источник: https://forge.autodesk.com/blog/wait-events-viewer
Опубликовано 31.01.2021
Отредактировано 31.01.2021 в 19:53:00