ADN Club > Revit API

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

(1/1)

Lis:
Здравствуйте. Дано следующее: Revit 2019, есть инструмент, который строит вентиляционные шахты (Duct). Есть задача: нужно, чтобы у вентиляционных шахт одна из сторон была определенного цвета (условного синего). Попытка решения: после построения пусть в команде будет изменен цвет стороны (пока не придумал как их различать, поэтому первой попавшейся -- в цикле break). Проблема: у Face нет доступного Id, решил через Reference зайти, но там хранится Duct Id, поэтому красится вся вентиляционная шахта, а не одна только сторона (правда, сама-то грань не красится почему-то, только ребра). Вопрос: кто-нибудь из тех, кто сталкивался с подобной задачей, подскажите, как с этим удалось справиться? Может в принципе подход не с той стороны выбрал? Код свой ниже привёл.

--- Код - C# [Выбрать] ---var duct = document.GetElement(ductId);var geometryElement = duct.get_Geometry(new Options { ComputeReferences = true }); foreach (var geometryObject in geometryElement){    if (!(geometryObject is Solid solid))        continue;     foreach (Face face in solid.Faces)    {        using (var transaction = new Transaction(document, "Подсветка"))        {            transaction.Start();             var color = new Color(0, 0, 255);            var overrideSettings = new OverrideGraphicSettings();            overrideSettings.SetProjectionLineColor(color);            overrideSettings.SetSurfaceBackgroundPatternColor(color);            overrideSettings.SetProjectionFillColor(color);            overrideSettings.SetSurfaceForegroundPatternColor(color);            overrideSettings.SetCutForegroundPatternColor(color);            overrideSettings.SetCutFillColor(color);            overrideSettings.SetCutBackgroundPatternColor(color);             document.ActiveView.SetElementOverrides(face.Reference.ElementId, overrideSettings);            document.Regenerate();             transaction.Commit();        }                                commandData.Application.ActiveUIDocument.RefreshActiveView();        break;    } } 

Александр Пекшев aka Modis:
Чет вы все напутали!
SetElementOverrides - это переопределение графики на виде для элемента! То же самое, что доступно в контекстном меню в самом Ревите. А покраска граней делается через присвоения им определенных материалов. Для этого существует метод Document.Paint

Lis:

--- Цитата: Александр Пекшев aka Modis от 24-05-2023, 14:44:44 ---Чет вы все напутали!
SetElementOverrides - это переопределение графики на виде для элемента! То же самое, что доступно в контекстном меню в самом Ревите. А покраска граней делается через присвоения им определенных материалов. Для этого существует метод Document.Paint

--- Конец цитаты ---
Действительно, метод Paint отлично справляется с задачей. Вы спасли мне большое количество нервов, благодарю!

Навигация

[0] Главная страница сообщений

Перейти к полной версии