视图过滤器分为规则过滤器与选择过滤器:
选择过滤器:需要传入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&&<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#