Revit二次开发–获取视图可见性中过滤器颜色

来源:建筑界编辑:黄子俊发布时间:2020-03-22 19:39:24

[摘要] 在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:UsersAdministratorDesktopFilterColor.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文件内容如下:
Revit二次开发--获取视图可见性中过滤器颜色

这里有个问题需要注意一下:
获取文档中的过滤器时上面的代码中使用了两种方案
1、使用过滤器

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

2、直接获取

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

第一种方案,获取的是文档中所有的过滤器,不论是应用到视图中的,还是没应用到视图中的,都包含在内。
第二种方案,直接获取应用到该视图中的所有过滤器。
如果使用第一种方案,在代码段

OverrideGraphicSettings ogs2 = v.GetFilterOverrides(id);

中,可能会报“过滤器没有应用到视图中”的异常,因为第一种方案获取的过滤器中包含没应用到视图中的。

内容或有偏颇之处,还请指正,不胜感激!

视图,过滤器,获取

延展阅读

相关文章