コード例 #1
0
def door_by_room_renumber():
    """Main renumbering routine for elements of given categories."""
    # all actions under one transaction
    with revit.TransactionGroup("Renumber Doors by Room"):
        # collect existing elements number:id data
        existing_doors_data = get_elements_dict("Doors")
        renumbered_door_ids = []
        # make sure target elements are easily selectable
        with EasilySelectableElements(revit.active_view, "Doors") \
                and EasilySelectableElements(revit.active_view, "Rooms"):
            while True:
                # pick door
                picked_door = \
                    revit.pick_element_by_category("Doors",
                                                   message="Select a door")
                if not picked_door:
                    # user cancelled
                    return _unmark_collected("Doors", renumbered_door_ids)
                # grab the associated rooms
                from_room, to_room = revit.query.get_door_rooms(picked_door)

                # if more than one option for room, ask to pick
                if all([from_room, to_room]) or not any([from_room, to_room]):
                    # pick room
                    picked_room = \
                        revit.pick_element_by_category("Rooms",
                                                       message="Select a room")
                    if not picked_room:
                        # user cancelled
                        return _unmark_collected("Doors", renumbered_door_ids)
                else:
                    picked_room = from_room or to_room

                # get data on doors associated with picked room
                room_doors = revit.query.get_doors(room_id=picked_room.Id)
                room_number = get_number(picked_room)
                with revit.Transaction("Renumber Door"):
                    door_count = len(room_doors)
                    if door_count == 1:
                        # match door number to room number
                        renumber_element(picked_door, room_number,
                                         existing_doors_data)
                        renumbered_door_ids.append(picked_door.Id)
                    elif door_count > 1:
                        # match door number to extended room number e.g. 100A
                        # check numbers of existing room doors and pick the next
                        room_door_numbers = [get_number(x) for x in room_doors]
                        new_number = coreutils.extend_counter(room_number)
                        # attempts = 1
                        # max_attempts = len([x for x in room_door_numbers if x])
                        while new_number in room_door_numbers:
                            new_number = increment(new_number)
                        renumber_element(picked_door, new_number,
                                         existing_doors_data)
                        renumbered_door_ids.append(picked_door.Id)
コード例 #2
0
ファイル: script.py プロジェクト: BimRoss/pyRevit
def pick_and_match_styles(src_style):
    with forms.WarningBar(title='Pick objects to match overrides:'):
        while True:
            dest_element = revit.pick_element()

            if not dest_element:
                break

            with revit.Transaction('Match Graphics Overrides'):
                revit.activeview.SetElementOverrides(dest_element.Id,
                                                     src_style)
コード例 #3
0
 def _change_kfile(self):
     kfile = forms.pick_file('txt')
     if kfile:
         logger.debug('Setting keynote file: %s' % kfile)
         try:
             with revit.Transaction("Set Keynote File"):
                 revit.update.set_keynote_file(kfile, doc=revit.doc)
             self._kfile = revit.query.get_keynote_file(doc=revit.doc)
         except Exception as skex:
             forms.alert(str(skex))
             return
コード例 #4
0
ファイル: script.py プロジェクト: m-harashima/pyRevit
def change_case(viewlist, upper=True, verbose=False):
    with revit.Transaction('Viewnames to Upper'):
        for el in viewlist:
            if isinstance(el, DB.Viewport):
                el = revit.doc.GetElement(el.ViewId)
            orig_name = el.ViewName
            el.ViewName = orig_name.upper() if upper else orig_name.lower()
            if verbose:
                print("VIEW: {0}\n"
                      "\tRENAMED TO:\n"
                      "\t{1}\n\n".format(orig_name, el.ViewName))
コード例 #5
0
    def make_tag_3dview(self, sender, args):
        if self.selected_tags:
            self.Close()
            try:
                with revit.Transaction('Create Tag 3D View', log_errors=False):
                    tag_view = \
                        tagsmgr.create_tag_3dview(self.selected_tags)

                revit.active_view = tag_view
            except Exception as e:
                forms.alert(getattr(e, 'msg', str(e)))
コード例 #6
0
def pick_and_match_types(src_props):
    """Match property values for selected types."""
    with forms.WarningBar(title="Pick objects to match type properties:"):
        while True:
            dest_element = revit.pick_element()
            if not dest_element:
                break

            dest_type = revit.query.get_type(dest_element)
            with revit.Transaction("Match Type Properties"):
                match_prop(dest_element, dest_type, src_props)
コード例 #7
0
def override_dim_value():
    with revit.Transaction('Overrride dims value'):
        for el in revit.get_selection():
            if isinstance(el, DB.Dimension):
                if len(list(el.Segments)) > 0:
                    for seg in el.Segments:
                        exitingValue = seg.ValueString
                        seg.ValueOverride = u'\u200e' + exitingValue
                else:
                    exitingValue = el.ValueString
                    el.ValueOverride = u'\u200e' + exitingValue
コード例 #8
0
def set_to_vfrmfr():
    with revit.Transaction('VWM dimensions'):
        for el in revit.get_selection():
            if isinstance(el, DB.Dimension):
                if len(list(el.Segments)) > 0:
                    for seg in el.Segments:
                        seg.Suffix = 'R.O.'
                        seg.Below = 'VERIFY W/ MFR'
                else:
                    el.Suffix = 'R.O.'
                    el.Below = 'VERIFY W/ MFR'
コード例 #9
0
 def load_all(self):
     """ Loads family and all its symbols. """
     with revit.Transaction('Loaded {}'.format(self.name)):
         try:
             revit.doc.LoadFamily(self.path)
             logger.debug('Successfully loaded family: {}'.format(
                 self.name))
         except Exception as load_err:
             logger.error('Error loading family symbol from {} | {}'.format(
                 self.path, load_err))
             raise load_err
コード例 #10
0
ファイル: patmaker.py プロジェクト: eimhinr/pyRevit-ER-2021
def _make_filledregion(fillpattern_name, fillpattern_id):
    filledregion_types = DB.FilteredElementCollector(revit.doc)\
                           .OfClass(framework.get_type(DB.FilledRegionType))

    source_fr = filledregion_types.FirstElement()
    with revit.Transaction('Create Filled Region'):
        new_fr = source_fr.Duplicate(fillpattern_name)
        if HOST_APP.is_newer_than(2018):
            new_fr.ForegroundPatternId = fillpattern_id
        else:
            new_fr.FillPatternId = fillpattern_id
コード例 #11
0
 def paste(self):
     cr_data = script.load_data(slot_name=self.__class__.__name__)
     crv_loop = cr_data.cropregion_curveloop
     with revit.Transaction('Paste Crop Region'):
         for view in CropRegionAction.get_cropable_views():
             if isinstance(view, DB.View3D):
                 if cr_data.crop_bbox:
                     view.CropBox = cr_data.crop_bbox
             else:
                 revit.update.set_crop_region(view, crv_loop)
             view.CropBoxActive = cr_data.is_active
     revit.uidoc.RefreshActiveView()
コード例 #12
0
ファイル: script.py プロジェクト: BimRoss/pyRevit
def pick_and_match_dim_overrides(src_dim_id):
    with forms.WarningBar(title='Pick dimensions to match overrides:'):
        src_dim = revit.doc.GetElement(src_dim_id)
        while True:
            dest_dim = revit.pick_element()

            if not dest_dim:
                break

            if isinstance(dest_dim, DB.Dimension):
                with revit.Transaction('Match Dimension Overrides'):
                    setup_dim_overrides_per_config(src_dim, dest_dim)
コード例 #13
0
def RemoveViewTemplate(viewtype_id):
    view_type = doc.GetElement(viewtype_id)
    template_id = view_type.DefaultTemplateId
    if template_id.IntegerValue != -1:
        if forms.alert(
                "You are about to remove the ViewTempalte associated with this View Type. Is that cool with ya?",
                ok=False,
                yes=True,
                no=True,
                exitscript=True):
            with revit.Transaction("Remove ViewTemplate"):
                view_type.DefaultTemplateId = DB.ElementId(-1)
コード例 #14
0
def duplicate_views(viewlist, dupop):
    dup_view_ids = []
    with revit.Transaction('Duplicate selected views'):
        for el in viewlist:
            try:
                dup_view_ids.append(el.Duplicate(dupop))
            except Exception as duplerr:
                logger.error('Error duplicating view "{}" | {}'.format(
                    revit.query.get_name(el), duplerr))
        if dup_view_ids:
            revit.doc.Regenerate()
    return dup_view_ids
コード例 #15
0
ファイル: script.py プロジェクト: xulian070608/pyRevit
def clear_view_contents(dest_doc, dest_view):
    logger.debug('Removing view contents: {}'.format(dest_view.Name))
    elements_ids = get_view_contents(dest_doc, dest_view)

    with revit.Transaction('Delete View Contents', doc=dest_doc):
        for el_id in elements_ids:
            try:
                dest_doc.Delete(el_id)
            except Exception as err:
                continue

    return True
コード例 #16
0
 def rename_tag(self, sender, args):
     if self.selected_tags:
         self.Close()
         new_tag = forms.ask_for_string(default=self.selected_tags[0].name,
                                        prompt='Enter new tag name:',
                                        title='Tag Manager')
         if new_tag:
             try:
                 with revit.Transaction('Rename Tag', log_errors=False):
                     tagsmgr.rename_tag(self.selected_tags[0], new_tag,
                                        self._target_elements)
             except Exception as e:
                 forms.alert(getattr(e, 'msg', str(e)))
コード例 #17
0
ファイル: script.py プロジェクト: eimhinr/pyRevit-ER-2021
def text_totitle():
    with revit.Transaction('to Sentence case'):
        for el in selection.elements:
            new_sentence = ''
            for word in unicode(el.Text).split():
                idx = get_first_alpha_index(word)
                if idx is not None:
                    new_sentence += ' ' \
                                    + word[:idx].lower() \
                                    + word[idx].upper() \
                                    + word[idx+1:].lower()

            el.Text = new_sentence
コード例 #18
0
def shake_filled_regions(view):
    fregions = DB.FilteredElementCollector(revit.doc)\
                 .OwnedByView(view.Id)\
                 .OfClass(framework.get_type(DB.FilledRegion))\
                 .WhereElementIsNotElementType()\
                 .ToElements()

    print('Shaking Filled Regions in: {}'.format(revit.query.get_name(view)))

    for i, fr in enumerate(fregions):
        with revit.Transaction('Shake Filled Region #{}'.format(i)):
            fr.Location.Move(DB.XYZ(0.01, 0, 0))
            fr.Location.Move(DB.XYZ(-0.01, 0, 0))
コード例 #19
0
ファイル: script.py プロジェクト: wangzhefeng2000/pyRevit
def duplicate_views(viewlist, with_detailing=True):
    with revit.Transaction('Duplicate selected views'):
        for el in viewlist:
            if with_detailing:
                dupop = DB.ViewDuplicateOption.WithDetailing
            else:
                dupop = DB.ViewDuplicateOption.Duplicate

            try:
                el.Duplicate(dupop)
            except Exception as duplerr:
                logger.error('Error duplicating view "{}" | {}'.format(
                    revit.query.get_name(el), duplerr))
コード例 #20
0
ファイル: script.py プロジェクト: eimhinr/pyRevit-ER-2021
def pick_and_match_styles(src_style):
    with forms.WarningBar(title='Pick objects to match overrides:'):
        while True:
            dest_element = revit.pick_element()

            if not dest_element:
                break

            dest_element_ids = [dest_element.Id]
            if hasattr(dest_element, 'GetSubComponentIds'):
                dest_element_ids.extend(dest_element.GetSubComponentIds())
            with revit.Transaction('Match Graphics Overrides'):
                for dest_elid in dest_element_ids:
                    revit.active_view.SetElementOverrides(dest_elid, src_style)
コード例 #21
0
ファイル: script.py プロジェクト: garrett514/pyRevit
def change_case(view_list, upper=True, verbose=False):
    with revit.Transaction('Viewnames to Upper'):
        for view in view_list:
            if isinstance(view, DB.Viewport):
                view = revit.doc.GetElement(view.ViewId)
            orig_name = revit.query.get_name(view)
            revit.update.set_name(
                view,
                orig_name.upper() if upper else orig_name.lower())
            if verbose:
                print("VIEW: {0}\n"
                      "\tRENAMED TO:\n"
                      "\t{1}\n\n".format(orig_name,
                                         revit.query.get_name(view)))
コード例 #22
0
def duplicate_sheet_contents(sheet, new_sheet):
    copy_element_ids = []

    elements_on_sheet = db.Collector(view=sheet.Id,
                                     is_not_type=True).get_elements()
    for element in elements_on_sheet:
        if not isinstance(element.unwrap(), DB.Viewport):
            copy_element_ids.append(element.Id)
    if copy_element_ids:
        with revit.Transaction('Copy View Contents'):
            new_contents = DB.ElementTransformUtils.CopyElements(
                sheet.unwrap(), List[DB.ElementId](copy_element_ids),
                new_sheet, None, None)
    return new_contents
コード例 #23
0
 def set_value(self):
     scolumn_els = (FilteredElementCollector(doc).OfCategory(
         BuiltInCategory.OST_StructuralColumns).
                    WhereElementIsNotElementType().ToElements())
     with revit.Transaction("set value"):
         for scolumn_el in scolumn_els:
             db.Element(
                 scolumn_el).parameters['Baseplate-Type'].value = 'A4'
             db.Element(
                 scolumn_el).parameters['Baseplate-Width'].value = 0.15
             db.Element(
                 scolumn_el).parameters['Baseplate-Height'].value = 0.15
             db.Element(
                 scolumn_el).parameters['Baseplate-Thickness'].value = 0.05
コード例 #24
0
ファイル: script.py プロジェクト: xulian070608/pyRevit
def shake_filled_regions(target_view):
    filled_regions = \
        DB.FilteredElementCollector(target_view.Document, target_view.Id)\
          .OfClass(DB.FilledRegion)\
          .WhereElementIsNotElementType()\
          .ToElements()

    print('Shaking Filled Regions in: {}'.format(
        revit.query.get_name(target_view)))

    for fregion in filled_regions:
        with revit.Transaction('Shake Filled Region'):
            fregion.Location.Move(DB.XYZ(0.1, 0, 0))
            fregion.Location.Move(DB.XYZ(-0.1, 0, 0))
コード例 #25
0
ファイル: script.py プロジェクト: xulian070608/pyRevit
def copy_sheet_revisions(activedoc, source_sheet, dest_doc, dest_sheet):
    all_src_revs = query.get_revisions(doc=activedoc)
    all_dest_revs = query.get_revisions(doc=dest_doc)
    revisions_to_set = []

    with revit.Transaction('Copy and Set Revisions', doc=dest_doc):
        for src_revid in source_sheet.GetAdditionalRevisionIds():
            set_rev = ensure_dest_revision(activedoc.GetElement(src_revid),
                                           all_dest_revs, dest_doc)
            revisions_to_set.append(set_rev)

        if revisions_to_set:
            revit.update.update_sheet_revisions(revisions_to_set, [dest_sheet],
                                                state=True,
                                                doc=dest_doc)
コード例 #26
0
def DeleteExistingView(views, worksets):
    with revit.Transaction("Delete existing views"):
        for view in views:
            for workset in worksets:
                name = "WORKSET VIEW - " + workset.Name
                if view.Name == name:
                    try:
                        doc.Delete(view.Id)
                        break
                    except:
                        forms.alert(
                            'Current view was cannot be deleted. Close view and try again.'
                        )
                        return False
    return True
コード例 #27
0
def main():
    source_vp_reference = uidoc.Selection.PickObject(
        UI.Selection.ObjectType.Element, CustomISelectionFilter(DB.Viewport),
        "Select Source Viewport")
    target_vps_reference = uidoc.Selection.PickObjects(
        UI.Selection.ObjectType.Element, CustomISelectionFilter(DB.Viewport),
        "Select Target Viewport(s)")
    source_vp = doc.GetElement(source_vp_reference.ElementId)
    source_vp_xyz = source_vp.GetBoxCenter()
    with revit.Transaction("Aign ViewPort - Vertical"):
        for target_vp_reference in target_vps_reference:
            target_vp = doc.GetElement(target_vp_reference.ElementId)
            delta = DB.XYZ(0.0, source_vp_xyz.Y - target_vp.GetBoxCenter().Y,
                           0.0)
            target_vp.Location.Move(delta)
コード例 #28
0
ファイル: script.py プロジェクト: eimhinr/pyRevit-ER-2021
def merge_texts():
    with revit.Transaction('Merge Text Notes'):
        tnotes = sorted(selection, key=lambda txnote: 0 - txnote.Coord.Y)

        if len(tnotes) > 1:
            mtxt = tnotes[0]
            mtxtwidth = mtxt.Width
            for txt in tnotes[1:]:
                if txt.Text[0] == ' ':
                    mtxt.Text = mtxt.Text + txt.Text
                else:
                    mtxt.Text = mtxt.Text + ' ' + txt.Text
                revit.doc.Delete(txt.Id)

            mtxt.Width = mtxtwidth
コード例 #29
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
コード例 #30
0
ファイル: script.py プロジェクト: xulian070608/pyRevit
def apply_viewport_type(activedoc, vport_id, dest_doc, newvport_id):
    with revit.Transaction('Apply Viewport Type', doc=dest_doc):
        vport = activedoc.GetElement(vport_id)
        vport_type = activedoc.GetElement(vport.GetTypeId())
        vport_typename = DBElement.Name.GetValue(vport_type)

        newvport = dest_doc.GetElement(newvport_id)

        copy_viewport_types(activedoc, vport_type, vport_typename, dest_doc,
                            newvport)

        for vtype_id in newvport.GetValidTypes():
            vtype = dest_doc.GetElement(vtype_id)
            if DBElement.Name.GetValue(vtype) == vport_typename:
                newvport.ChangeTypeId(vtype_id)