Ejemplo n.º 1
0
        public static IList <Element> OfElementType(Type elementType)
        {
            if (elementType == null)
            {
                return(null);
            }

            /*
             * (Konrad) According to RevitAPI documentation the quick filter
             * ElementClassFilter() has certain limitations that prevent it
             * from working on certain derived classes. In that case we need
             * to collect elements from base class and then perform additional
             * filtering to get our intended element set.
             */

            if (ClassFilterExceptions.Contains(elementType))
            {
                return(new Autodesk.Revit.DB.FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument)
                       .OfClass(elementType.BaseType)
                       .Where(x => x.GetType() == elementType)
                       .Select(x => ElementSelector.ByElementId(x.Id.IntegerValue))
                       .ToList());
            }

            var classFilter = new Autodesk.Revit.DB.ElementClassFilter(elementType);

            return(new Autodesk.Revit.DB.FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument)
                   .WherePasses(classFilter)
                   .ToElementIds()
                   .Select(x => ElementSelector.ByElementId(x.IntegerValue))
                   .ToList());
        }
Ejemplo n.º 2
0
        public static IList <Element> OfFamilyType(FamilyType familyType)
        {
            if (familyType == null)
            {
                return(null);
            }

            var instanceFilter = new Autodesk.Revit.DB.ElementClassFilter(typeof(Autodesk.Revit.DB.FamilyInstance));
            var fec            = new Autodesk.Revit.DB.FilteredElementCollector(DocumentManager.Instance.CurrentDBDocument);

            var familyInstances = fec.WherePasses(instanceFilter)
                                  .WhereElementIsNotElementType()
                                  .ToElements()
                                  .Cast <Autodesk.Revit.DB.FamilyInstance>();

            var matches = familyInstances.Where(x => x.Symbol.Id == familyType.InternalFamilySymbol.Id);

            var instances = matches
                            .Select(x => ElementSelector.ByElementId(x.Id.IntegerValue)).ToList();

            return(instances);
        }