#autodesk-forge #autodesk-model-derivative
Вопрос:
Я разработал приложение, которое получает дерево объектов JSON представления модели BIM 360 revit, используя конечную точку производной модели Forge, а затем загружает базу данных свойств SQLite для запроса свойств нескольких объектов дерева объектов. До сих пор это работало нормально. В последнее время у меня возникли проблемы с некоторыми моделями, в которых идентификаторы производных объектов дерева объектов не совпадают с идентификаторами объектов базы данных свойств.
Я видел это временное обходное решение для сопоставления идентификаторов SVF1 и SVF2, но в моем случае этот метод недействителен, потому что мое приложение работает на стороне сервера и вообще не использует API просмотра.
Мой вопрос заключается в следующем: существует ли обходной путь с использованием API со стороны сервера и планируется ли в ближайшее время устранить это несоответствие между API.
Ответ №1:
К сожалению, такое поведение ожидается при вашем подходе. SVF и SVF2 не имеют одинаковых идентификаторов, идентификаторы SVF2 оптимизированы для более быстрой обработки данных и обеспечения их идентичности в разных версиях. Статья, на которую вы ссылаетесь, работает только в контексте средства просмотра, для обработки на стороне сервера вам необходимо получить файл dbid.idx для сопоставления идентификаторов. Эта утилита содержит команду, которая поможет вам загрузить файл. Попробуй:
./forge.js version-svf2-idmap project_id version_id output_dbid.idx
Этот файл представляет собой сжатый файл gzip массива uint32.
Что произошло, так это то, что вы загрузили базу данных SVF SQLLite, используя идентификаторы SVF. Но при использовании конечных точек MD вы фактически используете идентификаторы SVF2, потому что целевой формат-SVF2. Если вы запросили целевой формат SVF, конечная точка MD будет работать с идентификаторами SVF. К сожалению, вы не контролируете целевой формат BIM360, который может быть SVF или SVF2 в зависимости от формата исходного файла. Например, IFC, RVT, NWD, DWG являются SVF2, а другие-нет. Вы можете определить, какой формат используется, прочитав тип OutputType и переопределив тип OutputType. Если overrideOutputType говорит «svf2», то вам следует выполнить сопоставление.
Соответствующий код для версии-svf2-idmap находится здесь
С другой стороны, если у вас есть база данных SQLite, зачем вам нужно вызывать конечные точки MD, у вас есть все, что вам нужно, и вы можете извлекать оттуда информацию намного быстрее. Смотрите мой пример здесь. В нем есть функции для извлечения свойств и/или построения дерева иерархии.
Комментарии:
1. Большое вам спасибо @cyrille, этот код-ценный ресурс, он мне очень помогает. Я знаю, что база данных свойств содержит иерархию объектов, но вызов конечной точки Производной модели кажется мне более простым и быстрым способом получить точно такое же дерево объектов, которое отображается в окне просмотра.
2. Извините, @cyrille: Я пытаюсь распаковать файл output_db.idx, но безуспешно, потому что он, похоже, не в формате gzip. Не могли бы вы дать мне несколько советов, как получить доступ к содержимому файла?
3. @migueaguilera — я приношу свои извинения за это, у меня был дефект в коде d/l — я запустил исправление в Интернете, поэтому, пожалуйста, повторите попытку. Я также добавил новую команду для декодирования файла idx(.gz) — попробуйте ./forge.js декодирование-svf2-idmap output_dbid.idx.gz или /forge.js декодировать-svf2-idmap output_dbid.idx
4. Спасибо @cyrille, я протестировал ваш код, и теперь он отлично работает. Еще один вопрос: все модели, которые я тестирую, имеют «OutputType»: «svf» и «Переопределенный тип»: «svf2» в манифесте, но я заметил, что сопоставление идентификаторов svf2 требуется только в некоторых из них (я думаю, что это те модели, которые были недавно загружены в BIM 360 Docs). Есть ли какое-либо другое значение поля для проверки в манифесте JSON, чтобы определить, в каких случаях требуется сопоставление идентификаторов?
5. это странно, но вы правы — эти модели могут быть теми, которые использовались во время альфа-версии OTG. Можете ли вы связаться со мной по кириллу по адресу autodeslk.com — Я бы хотел обсудить это с вами.