Namespace:
Autodesk.Revit.DB
ParameterFilterElement
Class
Description:
Admits elements that satisfy two conditions: The element's category must be one of a certain set of allowed categories.The element must pass a series of filter rules.
Admits elements that satisfy two conditions: The element's category must be one of a certain set of allowed categories.The element must pass a series of filter rules.
Inheritance Hierarchy:
System.Object
Autodesk.Revit.DB.Element
Autodesk.Revit.DB.FilterElement
Autodesk.Revit.DB.ParameterFilterElement
System.Object
Autodesk.Revit.DB.Element
Autodesk.Revit.DB.FilterElement
Autodesk.Revit.DB.ParameterFilterElement
Examples
/// <summary>
/// Create an ElementFilter representing a conjunction ("ANDing together") of FilterRules.
/// </summary>
/// <param name="filterRules">A list of FilterRules</param>
/// <returns>The ElementFilter.</returns>
private static ElementFilter CreateElementFilterFromFilterRules(IList<FilterRule> filterRules)
{
// We use a LogicalAndFilter containing one ElementParameterFilter
// for each FilterRule. We could alternatively create a single
// ElementParameterFilter containing the entire list of FilterRules.
IList<ElementFilter> elemFilters = new List<ElementFilter>();
foreach (FilterRule filterRule in filterRules)
{
ElementParameterFilter elemParamFilter = new ElementParameterFilter(filterRule);
elemFilters.Add(elemParamFilter);
}
LogicalAndFilter elemFilter = new LogicalAndFilter(elemFilters);
return elemFilter;
}
/// <summary>
/// Creates a new view filter matching multiple criteria.
/// </summary>
/// <param name="doc"></param>
/// <param name="view"></param>
public static void CreateViewFilter(Document doc, View view)
{
List<ElementId> categories = new List<ElementId>();
categories.Add(new ElementId(BuiltInCategory.OST_Walls));
List<FilterRule> filterRules = new List<FilterRule>();
using (Transaction t = new Transaction(doc, "Add view filter"))
{
t.Start();
// Create filter element assocated to the input categories
ParameterFilterElement parameterFilterElement = ParameterFilterElement.Create(doc, "Example view filter", categories);
// Criterion 1 - wall type Function is "Exterior"
ElementId exteriorParamId = new ElementId(BuiltInParameter.FUNCTION_PARAM);
filterRules.Add(ParameterFilterRuleFactory.CreateEqualsRule(exteriorParamId, (int)WallFunction.Exterior));
// Criterion 2 - wall height > some number
ElementId lengthId = new ElementId(BuiltInParameter.CURVE_ELEM_LENGTH);
filterRules.Add(ParameterFilterRuleFactory.CreateGreaterOrEqualRule(lengthId, 28.0, 0.0001));
// Criterion 3 - custom shared parameter value matches string pattern
// Get the id for the shared parameter - the ElementId is not hardcoded, so we need to get an instance of this type to find it
Guid spGuid = new Guid("96b00b61-7f5a-4f36-a828-5cd07890a02a");
FilteredElementCollector collector = new FilteredElementCollector(doc);
collector.OfClass(typeof(Wall));
Wall wall = collector.FirstElement() as Wall;
if (wall != null)
{
Parameter sharedParam = wall.get_Parameter(spGuid);
ElementId sharedParamId = sharedParam.Id;
filterRules.Add(ParameterFilterRuleFactory.CreateBeginsWithRule(sharedParamId, "15."));
}
ElementFilter elemFilter = CreateElementFilterFromFilterRules(filterRules);
parameterFilterElement.SetElementFilter(elemFilter);
// Apply filter to view
view.AddFilter(parameterFilterElement.Id);
view.SetFilterVisibility(parameterFilterElement.Id, false);
t.Commit();
}
}