internal void AddTriggerForUpdater(Document doc) { ElementParameterFilter familyNameFilter = new ElementParameterFilter(ParameterFilterRuleFactory .CreateEqualsRule(new ElementId (BuiltInParameter.ALL_MODEL_FAMILY_NAME), GetFamilyName, false)); UpdaterRegistry.AddTrigger(m_updaterId, doc, familyNameFilter, Element.GetChangeTypeElementAddition()); UpdaterRegistry.AddTrigger(m_updaterId, doc, familyNameFilter, Element.GetChangeTypeAny()); }
/// <summary> /// Parameter value filter. /// </summary> /// <param name="elementType"></param> /// <param name="parameterName"></param> /// <param name="evaluator"></param> /// <param name="value"></param> /// <param name="rule"></param> /// <returns name="Element">Element.</returns> public static List <Element> ByParameterValue( Type elementType, string parameterName, object evaluator, object value, [DefaultArgument("Selection.Select.GetNull()")] string rule) { var doc = DocumentManager.Instance.CurrentDBDocument; var numericRule = FilterNumericValueRule.DoubleRule; if (rule != null) { numericRule = (FilterNumericValueRule)Enum.Parse(typeof(FilterNumericValueRule), rule); } var e = new Autodesk.Revit.DB.FilteredElementCollector(doc) .OfClass(elementType) .WhereElementIsNotElementType() .First(); // get parameter value provider Autodesk.Revit.DB.ParameterValueProvider pvp; try { if (Enum.TryParse(parameterName, out Autodesk.Revit.DB.BuiltInParameter bip)) { // process as bip pvp = new Autodesk.Revit.DB.ParameterValueProvider(new Autodesk.Revit.DB.ElementId((int)bip)); } else { // process as regular param var p = e.LookupParameter(parameterName); pvp = new Autodesk.Revit.DB.ParameterValueProvider(p.Id); } } catch (Exception) { throw new ArgumentException("parameterName"); } // get filter rule Autodesk.Revit.DB.FilterRule filterRule; switch (Type.GetTypeCode(value.GetType())) { case TypeCode.String: var fsre = (Autodesk.Revit.DB.FilterStringRuleEvaluator)evaluator; filterRule = new Autodesk.Revit.DB.FilterStringRule(pvp, fsre, (string)value, true); break; default: var fnre = (Autodesk.Revit.DB.FilterNumericRuleEvaluator)evaluator; switch (numericRule) { case FilterNumericValueRule.DoubleRule: filterRule = new Autodesk.Revit.DB.FilterDoubleRule(pvp, fnre, (double)value, 0.001); break; case FilterNumericValueRule.ElementIdRule: var id = ((Element)value).InternalElement.Id; filterRule = new Autodesk.Revit.DB.FilterElementIdRule(pvp, fnre, id); break; case FilterNumericValueRule.IntegerRule: filterRule = new Autodesk.Revit.DB.FilterIntegerRule(pvp, fnre, (int)value); break; default: throw new ArgumentException("rule"); } break; } // create parameter filter var epf = new Autodesk.Revit.DB.ElementParameterFilter(filterRule); // return collection var output = new Autodesk.Revit.DB.FilteredElementCollector(doc).OfClass(elementType).WherePasses(epf).ToElements(); return(output.Any() ? output.Select(x => x.ToDSType(true)).ToList() : Enumerable.Empty <Element>().ToList()); }