1. 程式人生 > >Revit二次開發--獲取檢視可見性中過濾器顏色

Revit二次開發--獲取檢視可見性中過濾器顏色

在Revit【檢視】→【可見性/圖形】中,我們可以通過設定過濾器來設定一類構件的顏色,如下圖所示:
這裡寫圖片描述
如果我們想通過程式碼來取得或設定這些過濾器的顏色,該怎麼做呢?
Revit API中提供了一個GetFilterOverrides()方法,該方法需要傳遞一個ElementId,返回OverrideGraphicSettings型別的值,通過該值我們可以獲取或設定過濾器的顏色等。

using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using System.Collections
.Generic; using System.IO; namespace SettingFillPatternByCate { [Transaction(TransactionMode.Manual)] class Command : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { Document doc = commandData.Application
.ActiveUIDocument.Document; View v = doc.ActiveView; StreamWriter sw = new StreamWriter(@"C:\Users\Administrator\Desktop\FilterColor.txt", false); string names = null; FilteredElementCollector filters = new FilteredElementCollector(doc); filters.OfClass
(typeof(ParameterFilterElement)); ICollection<ElementId> filterIds = v.GetFilters(); Color c = new Color(255, 255, 255); foreach (ElementId id in filterIds) { Element filter = doc.GetElement(id); OverrideGraphicSettings ogs2 = v.GetFilterOverrides(id); c = ogs2.ProjectionFillColor; if (c.IsValid) { names += filter.Name + " " + id.ToString() + "(" + c.Red + "," + c.Green + "," + c.Blue + ")" + "\n"; } } sw.Write(names); sw.Close(); return Result.Succeeded; } } }

輸出的顏色資訊FilterColor.txt檔案內容如下:
這裡寫圖片描述

這裡有個問題需要注意一下:
獲取文件中的過濾器時上面的程式碼中使用了兩種方案
1、使用過濾器

FilteredElementCollector filters = new FilteredElementCollector(doc);
filters.OfClass(typeof(ParameterFilterElement));

2、直接獲取

ICollection<ElementId> filterIds = v.GetFilters();

第一種方案,獲取的是文件中所有的過濾器,不論是應用到檢視中的,還是沒應用到檢視中的,都包含在內。
第二種方案,直接獲取應用到該檢視中的所有過濾器。
如果使用第一種方案,在程式碼段

OverrideGraphicSettings ogs2 = v.GetFilterOverrides(id);

中,可能會報“過濾器沒有應用到檢視中”的異常,因為第一種方案獲取的過濾器中包含沒應用到檢視中的。

內容或有偏頗之處,還請指正,不勝感激!