视图过滤器分为规则过滤器与选择过滤器:
选择过滤器:需要传入elementId列表对指定的Element进行操作
规则过滤器:通过对指定参数的规则描述,传入categeorys的Id进行操作
具体可参照API

—update—
2019 API删除掉SET*命令与模型颜色指定方法,颜色附加未实验,需要自己验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#if Revit2016
var filterElement = ParameterFilterElement.Create(document, name, categeorys);
filterElement.SetRules(filterRules);
view.AddFilter(filterElement.Id);
document.Regenerate();
var overrideSettings = view.GetFilterOverrides(filterElement.Id);
//加入打断节点,判断净高值并进行颜色附加
overrideSettings.SetProjectionFillColor(GetDBColorFromMediaColor(dictionary.Values.ElementAt(i)));
overrideSettings.SetProjectionFillPatternId(PatternId(document));
view.SetFilterOverrides(filterElement.Id, overrideSettings);
view.SetFilterVisibility(filterElement.Id, true);
filterRules.Clear();
#elif Revit2019
var elemParamFilter = new ElementParameterFilter(filterRules);
var parameterFilter = ParameterFilterElement.Create(document, name, categeorys);
parameterFilter.SetElementFilter(elemParamFilter);
view.AddFilter(parameterFilter.Id);
document.Regenerate();
var overrideSettings = view.GetFilterOverrides(parameterFilter.Id);
//加入打断节点,判断净高值并进行颜色附加
overrideSettings.SetSurfaceForegroundPatternColor(GetDBColorFromMediaColor(dictionary.Values.ElementAt(i)));
overrideSettings.SetSurfaceForegroundPatternId(PatternId(document));
view.SetFilterOverrides(parameterFilter.Id, overrideSettings);
view.SetFilterVisibility(parameterFilter.Id, true);
filterRules.Clear();
#endif

一般的项目中,如果添加过滤器只需要使用SelectionFilterElement这个命令就可以添加成功,当我们对链接模型进行操作的时候,由于提取出的List的值是链接模型中的ID值,对主项目文档没有作用。这个时候我们需要利用规则过滤器ParameterFilterElement进行添加,通过对参数的规则描述进行附加过滤器。

下面的例子,是对链接模型中的自定义值在>=Value&&<Value的时候的案例

if (!maxValue.Equals(minValue))
                    {
                        filterRules.Add(
                            ParameterFilterRuleFactory.CreateGreaterOrEqualRule(id, minValue, false));
                        filterRules.Add(ParameterFilterRuleFactory.CreateLessRule(id, maxValue, false));
                    }
                    else
                    {
                        filterRules.Add(
                            ParameterFilterRuleFactory.CreateEqualsRule(id, maxValue, false));
                    }
                    ParameterFilterElement filterElement = ParameterFilterElement.Create(document, name, categeorys);
                    filterElement.SetRules(filterRules);
                    view.AddFilter(filterElement.Id);
                    document.Regenerate();
                    OverrideGraphicSettings overrideSettings = view.GetFilterOverrides(filterElement.Id);
                    overrideSettings.SetProjectionFillColor(GetDBColorFromMediaColor(dictionary.Values.ElementAt(i)));
                    overrideSettings.SetProjectionFillPatternId(PatternId(document));
                    view.SetFilterOverrides(filterElement.Id, overrideSettings);
                    view.SetFilterVisibility(filterElement.Id, true);
                    filterRules.Clear();

这样的话我们就可以对链接模型进行附加过滤器操作。

转载请注明地址:https://mp.csdn.net/mdeditor/89888384#