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

23/09/2020

Получаем список связанных файлов с помощью Design Automation API для Inventor-а

Представьте ситуацию, Вы хотите отобразить модель Inventor-а, т.е. преобразовать её в формат SVF cпомощью сервиса  ModelDerivative. Для этого Вам также нужно будет загрузить все связанные файлы либо в zip-архиве, либо по одному. В последнем случае нужно будет установить зависимости вручную, как показано, например в этой статье.

У Вас есть множество файлов, как определить, какие именно нужно загрузить для конвертации?

В случае, если у Вас есть возможность использовать установленный локально Inventor, Вы можете найти все связанные файлы с помощью свойства Document.File.AllReferencedFiles, предоставляемым API Inventor-а. В качестве альтернативы Вы также можете использовать функцию Inventor-а "Pack and Go" для создания zip-архива со всеми необходимыми файлами.

Всё становится гораздо сложнее, если Вам потребуется реализовать подобный функционал на веб-сервере, в особенности, если Вы будете работать с многоуровневыми сборками.

В этом случае, на помощь придёт Design Automation API для Inventor-а. Вы можете создатьAppBundle, который будет возвращать список непосредственно связанных с переданной моделью. Вы не будете загружать в сервис Design Automation все файлы (иначе теряется весь смысл), соответственно, связанные документы не будут доступны, и список Document.File.AllReferencedFiles будет пустым, но свойство Document.File.ReferencedFileDescriptors вернёт перечень прямых ссылок, т.е. файлов, непосредственно связанных с загруженной в сервис моделью.

Дальше нам придется пройтись по списку связанных файлов, связанным файлам связанных файлов и т.д. до тех пор, пока мы не получим все зависимости главной сборки.

Определение нашей Activity для сервиса Design Automation:

(Примечание: кавычки вокруг $(args[InventorDoc].path) позволят нам обрабатывать файлы, даже если в имени файла есть пробелы)

Код - JavaScript: [Выделить]
  1. {
  2.   "commandLine": [
  3.     "$(engine.path)\\InventorCoreConsole.exe /al $(appbundles[FileReferencesDA].path) /i \"$(args[InventorDoc].path)\""
  4.   ],
  5.   "parameters": {
  6.     "InventorDoc": {
  7.       "verb": "get",
  8.       "description": "File to process"
  9.     },
  10.     "OutputJson": {
  11.       "verb": "put",
  12.       "description": "Json with with file references",
  13.       "localName": "references.json"
  14.     }
  15.   },
  16.   "engine": "Autodesk.Inventor+2021",
  17.   "appbundles": [
  18.     "rGm0mO9jVSsD2yBEDk9MRtXQTwsa61y0.FileReferencesDA+alpha"
  19.   ],
  20.   "description": "Gets list of referenced files"
  21. }

Основной код AppBundle-а для получения связанных документов:

Код - C#: [Выделить]
  1. public void Run(Document doc)
  2. {
  3.     try
  4.     {
  5.         using (new HeartBeat())
  6.         {
  7.             using (var file = new System.IO.StreamWriter(@"references.json"))
  8.             {
  9.                 var ja = new Newtonsoft.Json.Linq.JArray();
  10.                        
  11.                 foreach (Inventor.FileDescriptor fd in doc.File.ReferencedFileDescriptors)
  12.                 {
  13.                     ja.Add(fd.FullFileName);
  14.                 }
  15.                       
  16.                 file.Write(ja.ToString());
  17.             }
  18.         }
  19.     }
  20.     catch (Exception e)
  21.     {
  22.         LogError("Processing failed. " + e.ToString());
  23.     }
  24. }

При разработке с использованием сервиса Desing Automation мы рекомендуем использовать наш шаблон проекта Visual Studio.

Готовый проект Вы можете скачать здесь.

Источник: https://forge.autodesk.com/blog/get-list-referenced-files

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