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

25/04/2015

Как задать виды для печати с помощью Revit API

Если вы хотим изменить настройки печати в Revit, то первое, с чего мы должны начать – это свойство Document.PrintManager. PrintManager.ViewSheetSetting используется для установки видов, которые вы хотите напечатать.

Однако, когда вы обращаетесь к методу PrintManager.ViewSheetSetting вы можете получить вот такое исключение: This property is only available when user choose Select of Print Range (Свойство доступно только когда пользователь выбрал ‘выбранные виды’ в настройках печати.)

Решение состоит в том, чтобы выбрать «Выбранные виды или листы» в группе Печатать диалога Печати.

 

После этого уже можно воспользоваться свойством ViewSheetSetting.InSession.Views для того, чтобы задать виды для печати.

Алгортим следующий:

  1. Создать новый набор видов ViewSet
  2. Получить все виды
  3. Проверить можно ли вид напечатать с помощью свойства View.CanBePrinted
  4. Добавить вид в набор
  5. Присвоить созданный набор видов свойству ViewSheetSetting.InSession.Views (не забываем про транзакцию)

Пример кода:

Код - C#: [Выделить]
  1. RevitDoc = commandData.Application.ActiveUIDocument.Document;
  2.  
  3. var pm = RevitDoc.PrintManager;
  4. try
  5. {
  6.     var vss = pm.ViewSheetSetting;
  7.     ViewSet set = new ViewSet();
  8.     var classFilter = new ElementClassFilter(typeof(View));
  9.     FilteredElementCollector views =
  10.         new FilteredElementCollector(RevitDoc);
  11.     views = views.WherePasses(classFilter);
  12.     foreach (View view in views)
  13.     {
  14.         if (view.CanBePrinted)
  15.         {
  16.             set.Insert(view);
  17.         }
  18.     }
  19.     using (Transaction transaction = new Transaction(RevitDoc))
  20.     {
  21.         transaction.Start("Задаем виды для печати");
  22.         vss.InSession.Views = set;
  23.         transaction.Commit();
  24.     }
  25. }
  26. catch (Exception ex)
  27. {
  28.     TaskDialog.Show("ERROR", ex.ToString());
  29. }

Примечание: На самом деле можно задать нужное свойство и без диалога печати, а сделать это с помощью API. Т.е. до того, как обращаться к свойству PrintManager.ViewSheetSetting нужно задать PrintManager.PrintRange = PrintRange.Select; и тогда исключение не возникнет.

Источник: http://adndevblog.typepad.com/aec/2015/04/set-views-to-print-with-revitapi.html

Автор перевода: Виктор Чекалин

Обсуждение: http://adn-cis.org/forum/index.php?topic=2664

Опубликовано 25.04.2015