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

27/01/2016

Работа с макросами. Пример макроса

Предыдущие статьи

Наш первый макрос был создан, когда мы показывали процесс создания макроса. Сейчас давайте же соберем воедино все что мы изучили и создадим более полезный макрос.  Следующий код удаляет все неиспользуемые виды в текущей модели. Если вид не является листом или не содержит слово «Рабочий», то он удаляется. Обратите внимание, макрос не работает с зависимыми видами.

Код - C#: [Выделить]
  1. // Здесь метод назван по-русски. Причина в том, что в диалоге запуска макросов единственное что видит пользователь 
  2. // - это название метода. Английское название для рускоязычных пользователей может быть неприемлемым.
  3. // Однако, я не рекомендую этим злоуопотреблять и тем более никогда не использвать в реальных проектах.
  4.  
  5. public void УдалитьНеиспользуемыеВиды()
  6. {
  7.                 // Определяем текущий документ
  8.                 var currentDoc = ActiveUIDocument.Document;
  9.                
  10.                 // Получаем все виды
  11.                 var viewCollector = new FilteredElementCollector(currentDoc);
  12.                 viewCollector.OfCategory(BuiltInCategory.OST_Views);
  13.                
  14.                 // Получаем все листы
  15.                 var sheetCollector = new FilteredElementCollector(currentDoc);
  16.                 sheetCollector.OfCategory(BuiltInCategory.OST_Sheets);
  17.                
  18.                 // создаем список листов, которые нужно удалить
  19.                 List<ElementId> viewsToDelete = new List<ElementId>();
  20.                
  21.                 // в цикле обрабатываем каждый вид и проеряем его
  22.                 foreach (View currentView in viewCollector)
  23.                 {
  24.                                // проверяем, является ли вид шаблоном
  25.                                if (!currentView.IsTemplate)
  26.                                {
  27.                                                // проверяем, может ли вид добавлен на лист
  28.                                                if (Viewport.CanAddViewToSheet(currentDoc, sheetCollector.FirstElementId(), currentView.Id))
  29.                                                {
  30.                                                                if (!currentView.Name.Contains("Рабочий"))
  31.                                                                               // добавляем вид в список для удаления
  32.                                                                               viewsToDelete.Add(currentView.Id);
  33.                                                }
  34.                                }
  35.                               
  36.                 }
  37.                
  38.                 // создаем транзакцию
  39.                 using (var curTrans = new Transaction(currentDoc))
  40.                 {
  41.                                curTrans.Start("Удаление неиспользуемых видов");
  42.                               
  43.                                // удаляем виды
  44.                                currentDoc.Delete(viewsToDelete);
  45.                               
  46.                                // Подтверждаем транзакцию
  47.                                curTrans.Commit();
  48.                 }
  49.                
  50.                 // выводим сообщение с количеством удаленных видов
  51.                 TaskDialog.Show("Удаленные виды", "Удалено " + viewsToDelete.Count + " видов.");
  52.                
  53. }

Источник: http://thebuildingcoder.typepad.com/blog/2015/10/rtc-classes-and-getting-started-with-revit-macros.html#24

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

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

Опубликовано 27.01.2016
Отредактировано 28.01.2016 в 15:39:54