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

28/11/2015

Выбор листов для печати

Вопрос: Я работаю над разработкой надстройки, которая позволяет мне выбрать листы для последующей печати. Во вложении примеры файлов. Хотел бы услышать от экспертов предложения, как это можно реализовать.

 

В диспетчере проектов я выбрал два листа, но в набор ViewSet попадают все 3. Объясните мне что я делаю не так.

Ответ: На форуме вам уже предложили ответ. Создайте свою форму для добавления листов, которые вы хотите напечатать, добавив их во ViewSet.

Ответ разработчика: Те предложения верны, но мы пытаемся сделать это другим способом. Мы не хотим создавать отдельную форму. Мы хотим напечатать те листы, которые я выбрал в диспетчере проекта.

Ответ: Спасибо за пояснение. Вот функция, в которой создается ViewSet для последующей печати исходя из выбранных листов в диспетчере проекта.

Для использования выберите один или несколько листов с помощью Ctrl и запустите внешнюю команду. После того, как набор ViewSet создан, можете открыть диалог печати и убедиться, что выбранные листы включены в этот набор.

Код - C#: [Выделить]
  1. public void SelectedSheetsToPrint
  2.             (UIDocument uidoc, Document doc)
  3.         {
  4.             // Получаем выбранные листы
  5.             Selection sel = uidoc.Selection;
  6.             ICollection ids = sel.GetElementIds();
  7.             FilteredElementCollector SSTP = 
  8.                 new FilteredElementCollector(doc, ids);
  9.             ElementClassFilter WantedElements = 
  10.                 new ElementClassFilter(typeof(ViewSheet));
  11.             SSTP.WherePasses(WantedElements);
  12.             List PrintElem = 
  13.                 SSTP.ToElements() as List;
  14.             ViewSet myViewSet = new ViewSet();
  15.  
  16.             foreach (Element elements in PrintElem)
  17.              {
  18.                  ViewSheet viewSheet = elements as ViewSheet;
  19.                  myViewSet.Insert(viewSheet);
  20.              }
  21.              // Получаем PrintManger для текущего документа
  22.              PrintManager printManager = doc.PrintManager;
  23.  
  24.              // гооврим PrintManager чтобы использовались только
  25.              // выбранные виды/листы
  26.              printManager.PrintRange = PrintRange.Select;
  27.  
  28.               // Получаем настройки ViewSheetSetting, которые управляют
  29.                 // видами/листам в текущем документе.
  30.              ViewSheetSetting viewSheetSetting = 
  31.                  printManager.ViewSheetSetting;
  32.  
  33.              // Задаем набор видов 
  34.              viewSheetSetting.CurrentViewSheetSet.Views = 
  35.                  myViewSet;
  36.  
  37.              if (myViewSet.Size == 0)
  38.              {
  39.                  TaskDialog.Show("Error", "Не выбраны листы");
  40.                  return;
  41.              }
  42.  
  43.              using (Transaction trans = 
  44.                  new Transaction(doc, "Создание нового набора видов"))
  45.              {
  46.                  trans.Start();
  47.                  string setName = "Jaime Test";
  48.                  try
  49.                  {
  50.                      // Сохраняем набор видов с нужным названием
  51.                      viewSheetSetting.SaveAs(setName);
  52.                  }
  53.                  // Обрабатываем исключение
  54.                     // в случае если такой набор уже существует
  55.                  catch (Autodesk.Revit.Exceptions.
  56.                             InvalidOperationException)
  57.                  {
  58.                      TaskDialog.Show("Error"
  59.                          setName + " уже существует");
  60.                      trans.RollBack();
  61.                      return;
  62.                  }
  63.                  trans.Commit();
  64.              }
  65.              TaskDialog.Show("View Set", myViewSet.Size + 
  66.                  " листов было добавлено в набор");
  67.     }

Источник: http://adndevblog.typepad.com/aec/2015/11/halloween-weekend-and-select-sheets-to-print-revit-api.html

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

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

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