Ejemplo n.º 1
0
        protected override void TrySolveInstance(IGH_DataAccess DA)
        {
            var types = new List <DB.ElementType>();

            if (!DA.GetDataList("Types", types))
            {
                return;
            }

            var inverted = false;

            if (!DA.GetData("Inverted", ref inverted))
            {
                return;
            }

            if (types.Any())
            {
                var provider = new DB.ParameterValueProvider(new DB.ElementId(DB.BuiltInParameter.ELEM_TYPE_PARAM));

                var typeIds = types.Select(x => x?.Id ?? DB.ElementId.InvalidElementId).ToArray();
                if (typeIds.Length == 1)
                {
                    var rule   = new DB.FilterElementIdRule(provider, new DB.FilterNumericEquals(), typeIds[0]);
                    var filter = new DB.ElementParameterFilter(rule, inverted) as DB.ElementFilter;

                    if (typeIds[0] == DB.ElementId.InvalidElementId)
                    {
                        filter = new DB.LogicalAndFilter
                                 (
                            new DB.ElementClassFilter(typeof(DB.PropertySetElement), inverted),
                            filter
                                 );
                    }

                    DA.SetData("Filter", filter);
                }
                else
                {
                    if (inverted)
                    {
                        var rules = typeIds.Select(x => new DB.FilterInverseRule(new DB.FilterElementIdRule(provider, new DB.FilterNumericEquals(), x))).ToArray();
                        DA.SetData("Filter", new DB.ElementParameterFilter(rules));
                    }
                    else
                    {
                        var filters = typeIds.Select(x => new DB.FilterElementIdRule(provider, new DB.FilterNumericEquals(), x)).Select(x => new DB.ElementParameterFilter(x)).ToArray();
                        DA.SetData("Filter", new DB.LogicalOrFilter(filters));
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Given the name of the design option set, returns a list of set's design options.
        /// </summary>
        /// <param name="DesignOptionSetName">The name of the Design Option Set</param>
        /// <param name="document">A Autodesk.Revit.DB.Document object.  This does not work with Dynamo document objects.</param>
        /// <returns name="DesignOptions">A list of design options that belong to the DesignOptionSet</returns>
        public static IList <dynElem> GetDesignOptionsBySet(string DesignOptionSetName,
                                                            [DefaultArgument("Synthetic.Revit.Document.Current()")] revitDoc document)
        {
            revitDB.ElementCategoryFilter    catFilter   = new revitDB.ElementCategoryFilter(revitDB.BuiltInCategory.OST_DesignOptionSets);
            revitDB.FilteredElementCollector collectSets = new revitDB.FilteredElementCollector(document);
            IList <revitElem> sets = collectSets
                                     .WherePasses(catFilter)
                                     .Cast <revitDB.Element>()
                                     .Where(elem => elem.Name == DesignOptionSetName)
                                     .ToList();

            IList <revitDB.ElementFilter> paramFilters = new List <revitDB.ElementFilter>();

            foreach (revitElem set in sets)
            {
                revitDB.ElementId id = set.Id;
                revitDB.FilterNumericRuleEvaluator eval     = new revitDB.FilterNumericEquals();
                revitDB.ParameterValueProvider     provider = new revitDB.ParameterValueProvider(new revitDB.ElementId(revitDB.BuiltInParameter.OPTION_SET_ID));
                revitDB.FilterRule filterRule = new revitDB.FilterElementIdRule(provider, eval, id);

                paramFilters.Add(new revitDB.ElementParameterFilter(filterRule));
            }

            revitDB.ElementFilter orFilter = new revitDB.LogicalOrFilter(paramFilters);

            catFilter = new revitDB.ElementCategoryFilter(revitDB.BuiltInCategory.OST_DesignOptions);

            revitDB.LogicalAndFilter filter = new revitDB.LogicalAndFilter(new List <revitDB.ElementFilter> {
                orFilter, catFilter
            });


            revitDB.FilteredElementCollector collectOptions = new revitDB.FilteredElementCollector(document);
            IList <revitDB.Element>          elements       = collectOptions.WherePasses(filter).ToElements();

            IList <dynElem> dynamoElements = new List <dynElem>();

            foreach (revitDB.Element elem in elements)
            {
                try
                {
                    dynamoElements.Add(elem.ToDSType(true));
                }
                catch { }
            }

            return(dynamoElements);
        }
Ejemplo n.º 3
0
        //----------------Miscellaneous --------------------------

        //return list of all generic family instances in the current model
        public static List <FamilyInstance> getAllGenericFamilies(Document curDoc)
        {
            //create filters
            Autodesk.Revit.DB.ElementClassFilter    familyfilter = new Autodesk.Revit.DB.ElementClassFilter(typeof(Autodesk.Revit.DB.FamilyInstance));
            Autodesk.Revit.DB.ElementCategoryFilter typeFilter   = new Autodesk.Revit.DB.ElementCategoryFilter(BuiltInCategory.OST_GenericModel);
            Autodesk.Revit.DB.LogicalAndFilter      andFilter    = new Autodesk.Revit.DB.LogicalAndFilter(familyfilter, typeFilter);

            //create collector and filter
            Autodesk.Revit.DB.FilteredElementCollector collector = new Autodesk.Revit.DB.FilteredElementCollector(curDoc);
            collector.WherePasses(andFilter);

            //create list for family instances
            List <FamilyInstance> famList = new List <FamilyInstance>();

            //loop through collector and add to list
            foreach (FamilyInstance curFam in collector)
            {
                famList.Add(curFam);
            }

            return(famList);
        }