예제 #1
0
    def copy(self):
        views = revit.get_selection().only_views()
        if views:
            view = views[0]
            view_filters = revit.query.get_view_filters(view)
            if not view_filters:
                raise PyRevitException('Active view has no fitlers applied')

            selected_filters = forms.SelectFromList.show(
                view_filters,
                name_attr='Name',
                title='Select filters to copy',
                button_name='Select filters',
                multiselect=True
            )

            if not selected_filters:
                raise PyRevitException('No filters selected. Cancelled.')

            script.store_data(
                slot_name=self.__class__.__name__,
                data=FilterOverridesData(
                    source_viewid=view.Id,
                    filter_ids=[f.Id for f in view_filters]
                )
            )
예제 #2
0
 def copy(self):
     script.store_data(
         slot_name=self.__class__.__name__,
         data=VisibilityGraphicsData(
             source_viewid=revit.active_view.Id,
         )
     )
예제 #3
0
    def copy(self):
        section_box = revit.active_view.GetSectionBox()
        view_orientation = revit.active_view.GetOrientation()

        script.store_data(slot_name=self.__class__.__name__,
                          data=SectionBox3DStateData(
                              section_box=section_box,
                              view_orientation=view_orientation),
                          this_project=False)
예제 #4
0
    def copy(self):
        active_view = revit.active_view
        active_ui_view = revit.uidoc.GetOpenUIViews()[0]

        dir_orient = None
        if isinstance(revit.active_view, DB.View3D):
            dir_orient = revit.active_view.GetOrientation()
        elif isinstance(revit.active_view, DB.ViewSection):
            dir_orient = revit.active_view.ViewDirection

        script.store_data(slot_name=self.__class__.__name__,
                          data=ViewZoomPanStateData(
                              view_type=active_view.ViewType,
                              corner_pts=active_ui_view.GetZoomCorners(),
                              dir_orient=dir_orient),
                          this_project=False)
예제 #5
0
    def copy(self):
        viewports = revit.get_selection().include(DB.Viewport)
        if len(viewports) != 1:
            raise Exception('Exactly one viewport must be selected')
        viewport = viewports[0]
        view = revit.doc.GetElement(viewport.ViewId)

        title_block_pt = \
            ViewportPlacementAction.get_title_block_placement(viewport)

        if view.ViewType in [DB.ViewType.DraftingView, DB.ViewType.Legend]:
            alignment = ALIGNMENT_CROPBOX
        else:
            alignment = forms.CommandSwitchWindow.show(
                ALIGNMENT_OPTIONS_COPY,
                message='Select Alignment Option')

        if not alignment:
            return

        with revit.DryTransaction('Activate & Read Cropbox, Copy Center'):
            if alignment == ALIGNMENT_BASEPOINT:
                revit.update.set_crop_region(
                    view,
                    ViewportPlacementAction.zero_cropbox(view)
                    )
            # use cropbox as alignment if it active
            if alignment == ALIGNMENT_BASEPOINT or view.CropBoxActive:
                ViewportPlacementAction.activate_cropbox(view)
                ViewportPlacementAction.hide_all_elements(view)
                revit.doc.Regenerate()

            if alignment == ALIGNMENT_CROPBOX:
                outline = view.Outline
                offset_uv = (outline.Max - outline.Min) / 2
            center = viewport.GetBoxCenter() - title_block_pt

        script.store_data(
            slot_name=self.__class__.__name__,
            data=ViewportPlacementData(
                alignment=alignment,
                center=center,
                offset_uv=offset_uv if alignment == ALIGNMENT_CROPBOX else None
            )
        )
예제 #6
0
    def copy(self):
        view = CropRegionAction.get_first_cropable_view()

        crop_bbox = cropregion_curve_loop = None
        if isinstance(view, DB.View3D):
            crop_bbox = view.CropBox
        else:
            cropregion_curve_loops = revit.query.get_crop_region(view)
            if cropregion_curve_loops:
                cropregion_curve_loop = cropregion_curve_loops[0]

        if crop_bbox or cropregion_curve_loop:
            script.store_data(slot_name=self.__class__.__name__,
                              data=CropRegionData(
                                  cropregion_curveloop=cropregion_curve_loop,
                                  crop_bbox=crop_bbox,
                                  is_active=view.CropBoxActive),
                              this_project=False)
        else:
            raise PyRevitException('Cannot read crop region of selected view')