Autodesk.Revit.DB.ParameterFilterUtilities是一个用于创建参数过滤器的静态类。在Revit API中使用该类可以方便地创建用于选择构件、过滤构件列表的参数过滤器。以下是该类的具体使用方法:
用于创建基于实数数据类型的大于筛选器。
public static ParameterFilterElement FilterNumericGreaterParameterValue(Parameter p, double value)
p:参数对象。 value:设定的值。
用于创建基于实数数据类型的小于筛选器。
public static ParameterFilterElement FilterNumericLessParameterValue(Parameter p, double value)
p:参数对象。 value:设定的值。
用于创建包含给定字符串的筛选器。
public static ParameterFilterElement FilterStringContainsParameterValue(Parameter p, string value)
p:参数对象。 value:设定的字符串。
// 获取所有类型族为“门”的所有类型,并存入一个列表中
FilteredElementCollector elementCollector = new FilteredElementCollector(doc);
List<Element> doorTypes = elementCollector
.OfClass(typeof(FamilySymbol))
.OfCategory(BuiltInCategory.OST_Doors)
.OfType<FamilySymbol>()
.ToList();
// 使用筛选器过滤出宽度大于3米的门类型
foreach (Element doorType in doorTypes)
{
Parameter widthParameter = doorType.LookupParameter("宽度");
if (widthParameter != null)
{
ParameterFilterElement filter = ParameterFilterUtilities.FilterNumericGreaterParameterValue(widthParameter, 3.0);
ICollection<ElementId> filteredElements = new FilteredElementCollector(doc)
.OfClass(typeof(FamilySymbol))
.OfCategory(BuiltInCategory.OST_Doors)
.WherePasses(filter)
.ToElementIds();
if (filteredElements.Contains(doorType.Id))
{
// 条件符合的处理代码
// ......
}
}
}
这段代码通过以下步骤来实现对符合条件的门类型的筛选:
1.使用FilteredElementCollector类获取所有类型族为“门”的所有类型,并存入一个列表中。
2.使用ParameterLookup.LookupParameter方法获取“宽度”参数,如果找不到则跳过该门类型。
3.使用ParameterFilterUtilities.FilterNumericGreaterParameterValue方法创建宽度大于3米的参数过滤器。
4.使用FilteredElementCollector类判断在所有类型族为“门”、类别为“门”的构件中,符合宽度大于3米的门类型,并存入一个ElementId类型的集合中。
5.判断当前门类型是否属于ElementId集合中,如果是则继续进行处理。