Получаем список связанных файлов с помощью 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) позволят нам обрабатывать файлы, даже если в имени файла есть пробелы)
- {
- "commandLine": [
- "$(engine.path)\\InventorCoreConsole.exe /al $(appbundles[FileReferencesDA].path) /i \"$(args[InventorDoc].path)\""
- ],
- "parameters": {
- "InventorDoc": {
- "verb": "get",
- "description": "File to process"
- },
- "OutputJson": {
- "verb": "put",
- "description": "Json with with file references",
- "localName": "references.json"
- }
- },
- "engine": "Autodesk.Inventor+2021",
- "appbundles": [
- "rGm0mO9jVSsD2yBEDk9MRtXQTwsa61y0.FileReferencesDA+alpha"
- ],
- "description": "Gets list of referenced files"
- }
Основной код AppBundle-а для получения связанных документов:
- public void Run(Document doc)
- {
- try
- {
- using (new HeartBeat())
- {
- using (var file = new System.IO.StreamWriter(@"references.json"))
- {
- var ja = new Newtonsoft.Json.Linq.JArray();
- foreach (Inventor.FileDescriptor fd in doc.File.ReferencedFileDescriptors)
- {
- ja.Add(fd.FullFileName);
- }
- file.Write(ja.ToString());
- }
- }
- }
- catch (Exception e)
- {
- LogError("Processing failed. " + e.ToString());
- }
- }
При разработке с использованием сервиса Desing Automation мы рекомендуем использовать наш шаблон проекта Visual Studio.
Готовый проект Вы можете скачать здесь.
Источник: https://forge.autodesk.com/blog/get-list-referenced-files
Опубликовано 23.09.2020