Revit二次开发在项目中给链接模型附加过滤器

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

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

#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&&

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#

你可能感兴趣的:(Revit二次开发,BIM,Revit二次开发)