Выбор листов для печати
Вопрос: Я работаю над разработкой надстройки, которая позволяет мне выбрать листы для последующей печати. Во вложении примеры файлов. Хотел бы услышать от экспертов предложения, как это можно реализовать.
В диспетчере проектов я выбрал два листа, но в набор ViewSet попадают все 3. Объясните мне что я делаю не так.
Ответ: На форуме вам уже предложили ответ. Создайте свою форму для добавления листов, которые вы хотите напечатать, добавив их во ViewSet.
Ответ разработчика: Те предложения верны, но мы пытаемся сделать это другим способом. Мы не хотим создавать отдельную форму. Мы хотим напечатать те листы, которые я выбрал в диспетчере проекта.
Ответ: Спасибо за пояснение. Вот функция, в которой создается ViewSet для последующей печати исходя из выбранных листов в диспетчере проекта.
Для использования выберите один или несколько листов с помощью Ctrl и запустите внешнюю команду. После того, как набор ViewSet создан, можете открыть диалог печати и убедиться, что выбранные листы включены в этот набор.
- public void SelectedSheetsToPrint
- (UIDocument uidoc, Document doc)
- {
- // Получаем выбранные листы
- Selection sel = uidoc.Selection;
- ICollection ids = sel.GetElementIds();
- FilteredElementCollector SSTP =
- new FilteredElementCollector(doc, ids);
- ElementClassFilter WantedElements =
- new ElementClassFilter(typeof(ViewSheet));
- SSTP.WherePasses(WantedElements);
- List PrintElem =
- SSTP.ToElements() as List;
- ViewSet myViewSet = new ViewSet();
- foreach (Element elements in PrintElem)
- {
- ViewSheet viewSheet = elements as ViewSheet;
- myViewSet.Insert(viewSheet);
- }
- // Получаем PrintManger для текущего документа
- PrintManager printManager = doc.PrintManager;
- // гооврим PrintManager чтобы использовались только
- // выбранные виды/листы
- printManager.PrintRange = PrintRange.Select;
- // Получаем настройки ViewSheetSetting, которые управляют
- // видами/листам в текущем документе.
- ViewSheetSetting viewSheetSetting =
- printManager.ViewSheetSetting;
- // Задаем набор видов
- viewSheetSetting.CurrentViewSheetSet.Views =
- myViewSet;
- if (myViewSet.Size == 0)
- {
- TaskDialog.Show("Error", "Не выбраны листы");
- return;
- }
- using (Transaction trans =
- new Transaction(doc, "Создание нового набора видов"))
- {
- trans.Start();
- string setName = "Jaime Test";
- try
- {
- // Сохраняем набор видов с нужным названием
- viewSheetSetting.SaveAs(setName);
- }
- // Обрабатываем исключение
- // в случае если такой набор уже существует
- catch (Autodesk.Revit.Exceptions.
- InvalidOperationException)
- {
- TaskDialog.Show("Error",
- setName + " уже существует");
- trans.RollBack();
- return;
- }
- trans.Commit();
- }
- TaskDialog.Show("View Set", myViewSet.Size +
- " листов было добавлено в набор");
- }
Обсуждение: http://adn-cis.org/forum/index.php?topic=3239
Опубликовано 27.11.2015