Revit二次開發--獲取檢視可見性中過濾器顏色
阿新 • • 發佈:2019-02-07
在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);
中,可能會報“過濾器沒有應用到檢視中”的異常,因為第一種方案獲取的過濾器中包含沒應用到檢視中的。
內容或有偏頗之處,還請指正,不勝感激!