Beispiel #1
0
        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());
        }
Beispiel #2
0
        /// <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());
        }