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);

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


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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值