def createMultiCategoryFilter(): listOfCategories = list() listOfCategories.append(db.BuiltInCategory.OST_Floors) listOfCategories.append(db.BuiltInCategory.OST_StructuralColumns) listOfCategories.append(db.BuiltInCategory.OST_StructuralFraming) listOfCategories.append(db.BuiltInCategory.OST_StructuralFoundation) listOfCategories.append(db.BuiltInCategory.OST_Walls) iCollectionOfCategoriesForMultiCategoryFIlter = List[db.BuiltInCategory]( listOfCategories) multiCategoryFilter = db.ElementMulticategoryFilter( iCollectionOfCategoriesForMultiCategoryFIlter) return multiCategoryFilter
ueWrapper = None wrappers = clr.GetClrType(Revit.Elements.ElementWrapper).GetMethods() for w in wrappers: if w.ToString().startswith("Revit.Elements.UnknownElement"): ueWrapper = w break for link in links: try: if RevitLinkType.IsLoaded(doc, link.GetTypeId()): linkDoc = link.GetLinkDocument() if isinstance(cats[0], DB.Category): catId = List[DB.ElementId](c.Id for c in cats) filter = DB.ElementMulticategoryFilter(catId) elif isinstance(cats[0], DB.ElementType): types = List[System.Type](t.GetType() for t in cats) filter = DB.ElementMulticlassFilter(types) else: types = List[System.Type](cats) filter = DB.ElementMulticlassFilter(types) fec = FilteredElementCollector( linkDoc).WhereElementIsNotElementType().WherePasses(filter) linkEls = [] for e in fec: try: linkEls.append(e.ToDSType(True)) except: if ueWrapper:
data = {} def get_parameter_storage_type(parameter): if isinstance(parameter, DB.Parameter): storage_type = parameter.StorageType if storage_type == DB.StorageType.Integer: return 'AsInteger()' elif storage_type == DB.StorageType.Double: return 'AsDouble()' elif storage_type == DB.StorageType.String: return 'AsString()' categories_typed = List[DB.BuiltInCategory](categories) multicategory_filter = DB.ElementMulticategoryFilter(categories_typed) elements = FEC(doc).WherePasses( multicategory_filter).WhereElementIsNotElementType().ToElements() for element in elements: element_id = element.Id.ToString() data[element_id] = {} for parameter_name in parameter_names: parameter = element.LookupParameter(parameter_name) storage_type = get_parameter_storage_type(parameter) exec 'value = element.LookupParameter(parameter_name).{}'.format( storage_type) if value: data[element_id][parameter_name] = value else: