Покрасить сторону Duct

Автор Тема: Покрасить сторону Duct  (Прочитано 6158 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн LisАвтор темы

  • ADN OPEN
  • Сообщений: 27
  • Карма: 1
Покрасить сторону Duct
« : 24-05-2023, 14:35:31 »
Здравствуйте. Дано следующее: Revit 2019, есть инструмент, который строит вентиляционные шахты (Duct). Есть задача: нужно, чтобы у вентиляционных шахт одна из сторон была определенного цвета (условного синего). Попытка решения: после построения пусть в команде будет изменен цвет стороны (пока не придумал как их различать, поэтому первой попавшейся -- в цикле break). Проблема: у Face нет доступного Id, решил через Reference зайти, но там хранится Duct Id, поэтому красится вся вентиляционная шахта, а не одна только сторона (правда, сама-то грань не красится почему-то, только ребра). Вопрос: кто-нибудь из тех, кто сталкивался с подобной задачей, подскажите, как с этим удалось справиться? Может в принципе подход не с той стороны выбрал? Код свой ниже привёл.
Код - C# [Выбрать]
  1. var duct = document.GetElement(ductId);
  2. var geometryElement = duct.get_Geometry(new Options { ComputeReferences = true });
  3.  
  4. foreach (var geometryObject in geometryElement)
  5. {
  6.     if (!(geometryObject is Solid solid))
  7.         continue;
  8.  
  9.     foreach (Face face in solid.Faces)
  10.     {
  11.         using (var transaction = new Transaction(document, "Подсветка"))
  12.         {
  13.             transaction.Start();
  14.  
  15.             var color = new Color(0, 0, 255);
  16.             var overrideSettings = new OverrideGraphicSettings();
  17.             overrideSettings.SetProjectionLineColor(color);
  18.             overrideSettings.SetSurfaceBackgroundPatternColor(color);
  19.             overrideSettings.SetProjectionFillColor(color);
  20.             overrideSettings.SetSurfaceForegroundPatternColor(color);
  21.             overrideSettings.SetCutForegroundPatternColor(color);
  22.             overrideSettings.SetCutFillColor(color);
  23.             overrideSettings.SetCutBackgroundPatternColor(color);
  24.  
  25.             document.ActiveView.SetElementOverrides(face.Reference.ElementId, overrideSettings);
  26.             document.Regenerate();
  27.  
  28.             transaction.Commit();
  29.         }
  30.                        
  31.         commandData.Application.ActiveUIDocument.RefreshActiveView();
  32.         break;
  33.     }
  34.  }
  35.  

Отмечено как Решение Lis 24-05-2023, 15:21:52

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Покрасить сторону Duct
« Ответ #1 : 24-05-2023, 14:44:44 »
Чет вы все напутали!
SetElementOverrides - это переопределение графики на виде для элемента! То же самое, что доступно в контекстном меню в самом Ревите. А покраска граней делается через присвоения им определенных материалов. Для этого существует метод Document.Paint

Оффлайн LisАвтор темы

  • ADN OPEN
  • Сообщений: 27
  • Карма: 1
Re: Покрасить сторону Duct
« Ответ #2 : 24-05-2023, 15:21:50 »
Чет вы все напутали!
SetElementOverrides - это переопределение графики на виде для элемента! То же самое, что доступно в контекстном меню в самом Ревите. А покраска граней делается через присвоения им определенных материалов. Для этого существует метод Document.Paint
Действительно, метод Paint отлично справляется с задачей. Вы спасли мне большое количество нервов, благодарю!