ADN Open CIS
Сообщество программистов Autodesk в СНГ

31/07/2020

Forge Viewer: получаем dbId по externalId

При написании расширений для Forge Viewer-а, Вы используете dbId при взаимодействии с объектами модели, например, метод getSelection() возвращает список dbId, getProperties() ожидает, что ему передадут dbId в качестве аргумента и т. д.

При этом есть нюанс в том, что в следующей версии той же самой модели значение dbId конкретного объекта может измениться, поэтому в тех случаях, когда Вы привязываете к объектам модели какие-либо данные и сохраняете их, например, в базе данных, использовать dbId для связи этих данных и элементов модели не стоит. Для этих целей предназначено другое свойство – externalId, значением которого будет идентификатор элемента из программы, в которой была создана исходная модель, например, об идентификаторах, используемых Revit Вы можете прочитать в: https://thebuildingcoder.typepad.com/blog/2019/07/element-identifiers-in-rvt-ifc-nw-and-forge.html

Если Вы знаете dbId элемента, то его externalId можно легко получить с помощью метода getProperties(). Выделите элемент и в консоли в инструментах разработчика браузера запустите код:

Код - JavaScript: [Выделить]
  1. NOP_VIEWER.getProperties(NOP_VIEWER.getSelection(), data => console.log(data))

В ответ будет выведено что-то вроде:

Код - JavaScript: [Выделить]
  1. {dbId: Array(1), properties: Array(0), externalId: "a6aa132d-ccd7-408f-b2f9-ed67350c8c3a-0003b64a"}

На эту тему есть неплохая статья, в показывается, как вывести dbIdи externalIdвыбранного объекта на панели свойств Viewer-а:
https://forge.autodesk.com/blog/adding-custom-properties-property-panel 

Вы, возможно, захотите, наоборот, по externalId найти dbId элемента.

Именно для этого предназначена функция getExternalIdMapping(). В версии v7 Viewer-а она принимает два callback-а в качестве аргумента, функция, переданная в первый из них возвращает связки externalId → dbId, которые нам и нужны:

Код - JavaScript: [Выделить]
  1. NOP_VIEWER.model.getExternalIdMapping(data => console.log(data))

Результатом выполнения будет что-то вроде:

Код - JavaScript: [Выделить]
  1. {doc_131133be-fca6-4a87-a6be-0bc0b1ff4d6d: 1, e3e052f9-0156-11d5-9301-0000863f27ad-00000137: 2,}

 

Источник: https://forge.autodesk.com/blog/get-dbid-externalid

Автор перевода: Александр Игнатович
Опубликовано 31.07.2020