def pick_and_renumber(rnopts, starting_index): """Main renumbering routine for elements of given category.""" # all actions under one transaction with revit.TransactionGroup("Renumber {}".format(rnopts.name)): # make sure target elements are easily selectable with EasilySelectableElements(revit.active_view, rnopts.bicat): index = starting_index # collect existing elements number:id data existing_elements_data = get_elements_dict(rnopts.bicat) # list to collect renumbered elements renumbered_element_ids = [] # ask user to pick elements and renumber them for picked_element in revit.get_picked_elements_by_category( rnopts.bicat, message="Select {} in order".format(rnopts.name.lower())): # need nested transactions to push revit to update view # on each renumber task with revit.Transaction("Renumber {}".format(rnopts.name)): # actual renumber task renumber_element(picked_element, index, existing_elements_data) # record the renumbered element renumbered_element_ids.append(picked_element.Id) index = increment(index) # unmark all renumbered elements _unmark_collected(rnopts.name, renumbered_element_ids)
def allign_X(tagType, starting_pt): """Main X allignment routine for elements of given category.""" # all actions under one transaction with revit.TransactionGroup("Allign tags vertically"): # make sure target elements are easily selectable # with EasilySelectableElements(revit.active_view, BIC.OST_Tags): # ask user to pick a tag and allign them for picked_element in revit.get_picked_elements_by_category( revit.query.get_category(tagType), message="Select a tag to allign"): # need nested transactions to push revit to update view # on each allignment with revit.Transaction("Allign tag \'{}\' by X".format( picked_element.Id)): # actual allignment if picked_element.GetType() == DB.IndependentTag: cPosition = picked_element.TagHeadPosition picked_element.TagHeadPosition = DB.XYZ( starting_pt.X, cPosition.Y, cPosition.Z) else: cPosition = picked_element.Location.Point delta = DB.XYZ(starting_pt.X - cPosition.X, 0, 0) picked_element.Location.Move( DB.XYZ(starting_pt.X - cPosition.X, 0, 0))
def match_orientation(tagType, starting_or): # all actions under one transaction with revit.TransactionGroup("Match tag orientation"): # make sure target elements are easily selectable # with EasilySelectableElements(revit.active_view, BIC.OST_Tags): # ask user to pick a tag and allign them for picked_element in revit.get_picked_elements_by_category( revit.query.get_category(tagType), message="Select a tag to match"): # need nested transactions to push revit to update view # on each allignment with revit.Transaction("Setting tag \'{}\' orientation".format( picked_element.Id)): picked_element.TagOrientation = starting_or
def allign_X(tagType, starting_pt): # all actions under one transaction with revit.TransactionGroup("Allign tags vertically"): # make sure target elements are easily selectable # with EasilySelectableElements(revit.active_view, BIC.OST_Tags): # ask user to pick a tag and allign them for picked_element in revit.get_picked_elements_by_category( revit.query.get_category(tagType), message="Select a tag to allign"): # need nested transactions to push revit to update view # on each allignment with revit.Transaction("Allign tag \'{}\' by X".format( picked_element.Id)): # actual allignment cPosition = picked_element.TagHeadPosition picked_element.TagHeadPosition = DB.XYZ( starting_pt.X, cPosition.Y, cPosition.Z)