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

一、背景

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

二、解决思路

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

1.过滤器获得ElementId

a.ParameterFilterRuleFactory方法获得ElementId

ElementId elementId = new ElementId(BuiltInParameter.ALL_MODEL_FAMILY_NAME);//参数
IList rules = new List();
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 collector = new FilteredElementCollector(document).OfCategory(BuiltInCategory.OST_Mass).OfClass(typeof(FamilyInstance)).Where(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的枚举类型是否正确。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部