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 отлично справляется с задачей. Вы спасли мне большое количество нервов, благодарю!
Навигация
Перейти к полной версии