Динамическое количество результирующих файлов из Design Automation для Revit
Мы часто слышали от наших партнёров вопрос, как определить выходные параметры для сервиса Design Automation для Revit динамически, т.е., когда мы не знаем, сколько результирующих файлов мы получим в результате обработки. Например, мы ходим экспортировать все листы из модели Revit. В этом примере мы разберём, как это сделать.
На самом деле, решение этой проблемы очень простое. Нужно определить activity с выходным параметром resultrvt с указанием "zip=true":
- {
- "id": "ExportToDwgsActivity",
- "commandLine": [ "$(engine.path)\\\\revitcoreconsole.exe /i $(args[rvtFile].path) /al $(appbundles[ExportToDwgsApp].path)" ],
- "parameters": {
- "rvtFile": {
- "zip": false,
- "ondemand": false,
- "verb": "get",
- "description": "Input Revit model",
- "required": true
- },
- "resultrvt": {
- "zip": true,
- "ondemand": false,
- "verb": "put",
- "description": "Exported Dwg files",
- "required": true,
- "localName": "exportedDwgs"
- }
- },
- "engine": "Autodesk.Revit+2019",
- "appbundles": [ "{{dasNickName}}.ExportToDwgsApp+dev" ],
- "description": "Export 2D sheet from Revit model to Dwgs."
- }
Что на самом деле означает "zip=true"? Для заархивированного файла на входе activity это хорошо описано в https://forge.autodesk.com/en/docs/design-automation/v3/tutorials/revit/step6-post-workitem/ (см. перевод на нашем сайте), но для выходного параметра это может быть не столь ясно. Ключевым здесь является значение localName как показано выше. Фактически, после выполенения workitem, вместо загрузки файла по указанному Url, Design Automation для Revit возьмёт папку exportedDwgs, заархивирует её содержимое в файл exportedDwgs.zip и загрузит этот файл по указанному Url. Всё, что требуется от Вашего plugin-а - это экспортировать файлы в указанную папку exportedDwgs. Код этого примера будет выглядеть следующим образом:
- protected void RevitExportToDwgs( DesignAutomationData data )
- {
- if (data == null)
- throw new ArgumentNullException(nameof(data));
- Application rvtApp = data.RevitApp;
- if (rvtApp == null)
- throw new InvalidDataException(nameof(rvtApp));
- string modelPath = data.FilePath;
- if (String.IsNullOrWhiteSpace(modelPath))
- throw new InvalidDataException(nameof(modelPath));
- Document doc = data.RevitDoc;
- if (doc == null)
- throw new InvalidOperationException("Could not open document.");
- using (Autodesk.Revit.DB.Transaction trans = new Transaction(doc, "ExportToDwgs"))
- {
- try
- {
- trans.Start();
- List<View> views = new FilteredElementCollector(doc)
- .OfClass(typeof(View))
- .Cast<View>()
- .Where(vw =>
- vw.ViewType == ViewType.DrawingSheet && !vw.IsTemplate
- ).ToList();
- List<ElementId> viewIds = new List<ElementId>();
- foreach (View view in views)
- {
- ViewSheet viewSheet = view as ViewSheet;
- viewIds.Add(viewSheet.Id);
- }
- DWGExportOptions options = new DWGExportOptions();
- ExportDWGSettings dwgSettings = ExportDWGSettings.Create(doc, "mySetting");
- options = dwgSettings.GetDWGExportOptions();
- options.MergedViews = true;
- if (RuntimeValue.RunOnCloud)
- {
- doc.Export( Directory.GetCurrentDirectory()+ "\\exportedDwgs", "rvt", viewIds, options);
- }
- else
- {
- // For local test
- doc.Export(Path.GetDirectoryName(modelPath)+ "\\exportedDwgs", "rvt", viewIds, options);
- }
- trans.Commit();
- }
- catch (Exception ee)
- {
- System.Diagnostics.Debug.WriteLine(ee.Message);
- System.Diagnostics.Debug.WriteLine(ee.StackTrace);
- return;
- }
- finally
- {
- if (trans.HasStarted())
- trans.RollBack();
- }
- }
- }
Теперь можно запустить workitem для выполнения activity с указанными параметрами. После его выполнения, вы получите заархивированный файл по указанному "{{exportToDwgsResultSignedUrl}}":
- {
- "activityId":"{{dasNickName}}.ExportToDwgsActivity+dev",
- "arguments":{
- "rvtFile":{
- "url":"https://developer.api.autodesk.com/oss/v2/buckets/{{bucketKey}}/objects/revitModel.rvt",
- "Headers":{
- "Authorization":"Bearer {{dataApiToken}}"
- }
- },
- "resultrvt":{
- "verb":"put",
- "url":"{{exportToDwgsResultSignedUrl}}"
- }
- }
- }
Источник: https://forge.autodesk.com/blog/how-generate-dynamic-number-output-design-automation-revit-v3
Обсуждение: http://adn-cis.org/forum/index.php?topic=
Опубликовано 28.03.2019