RVTDocs.com
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.
Inheritance Hierarchy:
System.Object
  Autodesk.Revit.DB.Element
    Autodesk.Revit.DB.FilterElement
      Autodesk.Revit.DB.ParameterFilterElement
Syntax
public class ParameterFilterElement : FilterElement
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();
      }
  }