예제 #1
0
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)
예제 #2
0
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))
예제 #3
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
예제 #4
0
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)