Revit二次开发-通过过滤器设置构件可见性/图形替换

一、背景

Revit【视图】→【可见性/图形】中,可以通过自定义过滤器的方式获得具有相同特征的构件,并进一步设置构件在指定视图中表面、投影、截面的线和面的可见性、填充图案、填充颜色等属性。Revit二开应该如何实现此功能呢?

二、解决思路

实现上述功能主要用到Revit API中提供的OverrideGraphicSettings类,通过GetElementOverrides方法获得指定视图的OverrideGraphicSettings,该方法需要传入一个ElementId。

1.过滤器获得ElementId

a.ParameterFilterRuleFactory方法获得ElementId

ElementId elementId = new ElementId(BuiltInParameter.ALL_MODEL_FAMILY_NAME);//参数
IList<FilterRule> rules = new List<FilterRule>();
rules.Add(ParameterFilterRuleFactory.CreateContainsRule(elementId, "衬砌",true));//true,是否区分大小写
ElementParameterFilter elementParameterFilter = new ElementParameterFilter(rules);
FilteredElementCollector collector = new FilteredElementCollector(document).OfCategory(BuiltInCategory.OST_Mass).WherePasses(elementParameterFilter);

b.FilteredElementCollector方法获得ElementId

List<Element> collector = new FilteredElementCollector(document).OfCategory(BuiltInCategory.OST_Mass).OfClass(typeof(FamilyInstance)).Where<Element>(x => x.Name.Contains(inputData[7][i])).ToList();

这里的本质是通过一定规则获得ElementId,因此最简单常用的过滤器方法都是可行的。上述两种方法的区别在于,第一种更还原我们在Revit中的操作方式,同时可以设置多个规则的复杂组合,适用于需求较复杂的情况;第二种更直接,一般情况比较推荐。

2.参数设置

//获取填充方式(实体填充)
FilteredElementCollector fillPatternElementFilter = new FilteredElementCollector(document);
fillPatternElementFilter.OfClass(typeof(FillPatternElement));
FillPatternElement fillPatternElement = fillPatternElementFilter.First(f => (f as FillPatternElement).GetFillPattern().IsSolidFill) as FillPatternElement;
foreach (Element element in collector)
{
OverrideGraphicSettings overrideGraphicSettings = document.ActiveView.GetElementOverrides(element.Id);//GetElementOverrides GetCategoryOverrides
transaction.Start();
overrideGraphicSettings.SetSurfaceForegroundPatternId(fillPatternElement.Id);//前景填充图案
overrideGraphicSettings.SetSurfaceForegroundPatternColor(new Color(255,182,193));//前景填充颜色
overrideGraphicSettings.SetSurfaceTransparency(0);//设置透明度(0:不透明;1:透明)
//将设置应用到视图
document.ActiveView.SetElementOverrides(element.Id, overrideGraphicSettings);
transaction.Commit();
}

三、注意事项

1. 注意GetElementOverrides与GetCategoryOverrides,别用混了;

2. 注意SetProjectionFillPatternId与SetProjectionFillColor仅Revit 2019之前的版本可用,之后被废弃了;

3. 如果是修改参数,则必须将设置应用到视图,提取参数则不必,别问我怎么知道的~ ~;

4. 使用ParameterFilterRuleFactory时,如果发现过滤器中没有Element,可用去检查BuiltInParameter的枚举类型是否正确。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>