def get_editable_lines(self): """Return list of lines for style convertping.""" mc_filter = \ DB.ElementMulticategoryFilter( List[DB.BuiltInCategory]( [ DB.BuiltInCategory.OST_Lines, DB.BuiltInCategory.OST_SketchLines ]) ) tline_cl = DB.FilteredElementCollector(revit.doc)\ .WherePasses(mc_filter)\ .WhereElementIsNotElementType()\ .ToElements() lines = [] conv_detlines = self.convert_detaillines conv_modlines = self.convert_modellines conv_skhlines = self.convert_sketchlines for tline in tline_cl: # skip grouped lines if tline.GroupId is None \ or tline.GroupId == DB.ElementId.InvalidElementId: # sketchlines could be detail or model so process first # but only detail sketchlines are editable if revit.query.is_detail_curve(tline): if revit.query.is_sketch_curve(tline): if not conv_skhlines: continue elif not conv_detlines: continue elif revit.query.is_model_curve(tline) and not conv_modlines: continue lines.append(tline) return lines
cl = DB.FilteredElementCollector(revit.doc).OfClass(DB.LinePatternElement) for i in cl: print(i.Name) elif selected_switch == 'Line Styles': c = revit.doc.Settings.Categories.get_Item(DB.BuiltInCategory.OST_Lines) subcats = c.SubCategories for lineStyle in subcats: print("STYLE NAME: {0} ID: {1}".format(lineStyle.Name.ljust(40), lineStyle.Id.ToString())) elif selected_switch == 'Model / Detail / Sketch Lines': cat_list = List[DB.BuiltInCategory]([DB.BuiltInCategory.OST_Lines, DB.BuiltInCategory.OST_SketchLines]) elfilter = DB.ElementMulticategoryFilter(cat_list) cl = DB.FilteredElementCollector(revit.doc) cllines = cl.WherePasses(elfilter)\ .WhereElementIsNotElementType().ToElements() for c in cllines: print('{0:<10} {1:<25}{2:<8} {3:<15} {4:<20}' .format(c.Id, c.GetType().Name, c.LineStyle.Id, c.LineStyle.Name, c.Category.Name)) elif selected_switch == 'Project Parameters': pm = revit.doc.ParameterBindings it = pm.ForwardIterator()
fromStyle = fromStyleLine.LineStyle toStyleLine = \ revit.pick_element('Pick a line with the interfacetypes style.') toStyle = toStyleLine.LineStyle return fromStyle, toStyle try: fromStyle, toStyle = get_styles() line_list = [] elfilter = DB.ElementMulticategoryFilter(List[DB.BuiltInCategory]( [DB.BuiltInCategory.OST_Lines, DB.BuiltInCategory.OST_SketchLines])) detail_lines = DB.FilteredElementCollector(revit.doc)\ .WherePasses(elfilter)\ .WhereElementIsNotElementType()\ .ToElements() for detail_line in detail_lines: if detail_line.LineStyle.Name == fromStyle.Name: line_list.append(detail_line) with revit.Transaction('Swap Line Styles'): for line in line_list: if line.Category.Name != '<Sketch>' \ and line.GroupId < DB.ElementId(0): line.LineStyle = toStyle
outputs.write(message) outputs.write('\n') # COLLECT CATS - METHOD 1 report('Finding Line Styles using Method 1...') linesCat = revit.doc.Settings.Categories.get_Item("Lines") for cat in linesCat.SubCategories: if 'SW' == cat.Name[:2]: catsToDelete.append(cat) # COLLECT CATS - METHOD 2 report('Finding Line Styles using Method 2...') emcfilter = \ DB.ElementMulticategoryFilter( List[DB.BuiltInCategory]([DB.BuiltInCategory.OST_Lines]) ) cllines = list( DB.FilteredElementCollector(revit.doc).WherePasses( emcfilter).WhereElementIsNotElementType().ToElements()) if cllines: styleIds = cllines[0].GetLineStyleIds() for styleId in styleIds: style = revit.doc.GetElement(styleId) cat = style.GraphicsStyleCategory if 'SW' == cat.Name[:2]: catsToDelete.append(cat)
forms.check_graphicalview(revit.active_view, exitscript=True) sel_cat_ids = set() # analyze selection selection = revit.get_selection() for el in selection: try: sel_cat_ids.add(el.Category.Id) except Exception: continue if not sel_cat_ids: forms.alert("No suitable elements selected", exitscript=True) mc_filter = DB.ElementMulticategoryFilter(List[DB.ElementId](sel_cat_ids)) # collect from whole model if __shiftclick__: cl = DB.FilteredElementCollector(revit.doc)\ .WhereElementIsNotElementType() # collect from a view else: cl = DB.FilteredElementCollector(revit.doc, revit.active_view.Id)\ .WhereElementIsNotElementType() match_list = cl.WherePasses(mc_filter).ToElementIds() selection.set_to(match_list) revit.uidoc.RefreshActiveView()