def get_elements_by_workset(w, doc=revit.doc): # quickly collect element belonging to a Workset # quick filter w_filter = DB.ElementWorksetFilter(w.Id) # collect with Design Option filter w_el_list = DB.FilteredElementCollector(doc) \ .WherePasses(w_filter) \ .WhereElementIsNotElementType() \ .ToElements() return w_el_list
def template_workset_remover(workset_name=None): workset_list = DB.FilteredWorksetCollector(revit.doc)\ .OfKind(DB.WorksetKind.UserWorkset) workset_dict = {workset.Name: workset.Id for workset in workset_list} element_workset_filter = \ DB.ElementWorksetFilter(workset_dict[workset_name], False) workset_elements = DB.FilteredElementCollector(revit.doc)\ .WherePasses(element_workset_filter)\ .ToElements() print_header('REMOVING ALL ELEMENTS ON WORKSET "{}"'.format(workset_name)) remove_action('Remove All on WS: {}'.format(workset_name), 'Workset Element', workset_elements)
# Collect all worksets in model with Filtered Workset Collector coll_worksets = DB.FilteredWorksetCollector(revit.doc).OfKind( DB.WorksetKind.UserWorkset) # Iterate through categories in dictionary for keyword in cat_dict: with revit.Transaction(keyword, revit.doc): for ws in coll_worksets: # check for keyword in workset name if keyword in ws.Name or keyword.upper( ) in ws.Name or keyword.lower() in ws.Name: # inverted workset filter - pick up elements that are not in workset ws_filter = DB.ElementWorksetFilter(ws.Id, True) # collect all elements of category coll_elements = DB.FilteredElementCollector(revit.doc) \ .OfCategory(cat_dict[keyword]) \ .WherePasses(ws_filter) \ .WhereElementIsNotElementType() \ .ToElements() counter = 0 for w in coll_elements: # for each element get workset parameter w_param = w.get_Parameter( DB.BuiltInParameter.ELEM_PARTITION_PARAM) if not w_param.IsReadOnly: # don't touch elements with read-only parameter try: w_param.Set(