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(). Выделите элемент и в консоли в инструментах разработчика браузера запустите код:
- NOP_VIEWER.getProperties(NOP_VIEWER.getSelection(), data => console.log(data))
В ответ будет выведено что-то вроде:
- {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, которые нам и нужны:
- NOP_VIEWER.model.getExternalIdMapping(data => console.log(data))
Результатом выполнения будет что-то вроде:
- {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