예제 #1
0
    def mouseReleaseEvent(self, e):
        #logger.debug('%s.mouseReleaseEvent pos: %s' % (self.__class__.__name__, str(e.pos())))
        FWViewImage.mouseReleaseEvent(self, e)

        if self.add_request is not None:
            self.setShapesEnabled()
            self.add_request = None
예제 #2
0
    def __init__(self, **kwargs):

        parent = kwargs.get('parent', None)
        image = kwargs.get('image', test_image(shape=(16, 16)))
        ctab = kwargs.get('ctab', ct.color_table_interpolated())
        signal_fast = kwargs.get('signal_fast', True)

        QWidget.__init__(self, parent)
        cp.ivimageaxes = self

        self.wimg = FWViewImage(self,
                                image,
                                coltab=ctab,
                                origin='UL',
                                scale_ctl='HV',
                                signal_fast=signal_fast)

        self.rs_old = None
        r = self.wimg.sceneRect()
        rscx = QRectF(r.x(), 0, r.width(), 1)
        rscy = QRectF(0, r.y(), 1, r.height())

        self.wax = FWViewAxis(None,
                              rscx,
                              side='U',
                              origin='UL',
                              scale_ctl=True,
                              wwidth=30,
                              wlength=200,
                              signal_fast=signal_fast)
        self.way = FWViewAxis(None,
                              rscy,
                              side='R',
                              origin='UR',
                              scale_ctl=True,
                              wwidth=60,
                              wlength=200,
                              signal_fast=signal_fast)

        self.but_reset = QPushButton('Reset')
        self.edi_info = QTextEdit('Info')

        self.box = QGridLayout()
        self.box.setSpacing(0)
        self.box.setVerticalSpacing(0)
        self.box.setHorizontalSpacing(0)
        self.box.addWidget(self.edi_info, 0, 0, 1, 11)
        self.box.addWidget(self.way, 1, 0, 9, 1)
        self.box.addWidget(self.wimg, 1, 1, 9, 10)
        self.box.addWidget(self.wax, 10, 1, 1, 10)
        self.box.addWidget(self.but_reset, 10, 0, alignment=Qt.AlignCenter)
        self.setLayout(self.box)

        self.set_tool_tips()
        self.set_style()

        self.connect_scene_rect_changed()
        self.but_reset.clicked.connect(self.on_but_reset)
        self.set_info_visible(True)
예제 #3
0
    def __init__(self, parent=None, arr=None,\
                 coltab=ct.color_table_rainbow(ncolors=1000, hang1=250, hang2=-20),\
                 origin='UL', scale_ctl='HV'):

        FWViewImage.__init__(self, parent, arr, coltab, origin, scale_ctl)

        self.add_request = None
        self.lst_drag_items = []
        self.scale_ctl_normal = scale_ctl

        self.connect_scene_rect_changed(self.on_scene_rect_changed)
예제 #4
0
    def mousePressEvent(self, e):
        scpoint = self.mapToScene(e.pos())
        print('==== click')
        logger.debug('FWViewImageShapes.mousePressEvent but=%d %s scene x=%.1f y=%.1f'%\
                     (e.button(), str(e.pos()), scpoint.x(), scpoint.y())) # self.__class__.__name__

        #print('XXX DragPoly.mousePressEvent button L/R/M = 1/2/4: ', e.button())
        #print('XXX DragPoly.mousePressEvent Left: ', e.button()==Qt.LeftButton)

        FWViewImage.mousePressEvent(self, e)  # to select/deselect items

        if self.add_request is not None:
            self.set_scale_control('')

            logger.debug('process request to add %s' %
                         dic_drag_type_to_name[self.add_request])
            parent = None if self.add_request in (POINT, LINE, CIRC, WEDG,
                                                  POLY) else self
            #parent = None if self.add_request == RECT else self
            item = add_item(self.add_request,
                            scpoint,
                            parent,
                            scene=self.scene())
            item.setZValue(100 if self.add_request == POINT else 30)
            item.setSelected(True)
            self.lst_drag_items.append(item)
            return

        item_del = self.item_marked_to_delete()
        #print('item_marked_to_delete', item_del)
        if item_del is not None:
            self.delete_item(item_del)
            return

        if self.selected_item() is None:
            self.set_scale_control(scale_ctl=self.scale_ctl_normal)
            #FWViewImage.mousePressEvent(self, e) # to move pixmap on click
        else:
            self.set_scale_control(scale_ctl='')
예제 #5
0
 def closeEvent(self, e):
     FWViewImage.closeEvent(self, e)
예제 #6
0
class IVImageAxes(QWidget):
    """QWidget for Image Viewer"""
    image_scene_rect_changed = pyqtSignal('QRectF')

    def __init__(self, **kwargs):

        parent = kwargs.get('parent', None)
        image = kwargs.get('image', test_image(shape=(16, 16)))
        ctab = kwargs.get('ctab', ct.color_table_interpolated())
        signal_fast = kwargs.get('signal_fast', True)

        QWidget.__init__(self, parent)
        cp.ivimageaxes = self

        self.wimg = FWViewImage(self,
                                image,
                                coltab=ctab,
                                origin='UL',
                                scale_ctl='HV',
                                signal_fast=signal_fast)

        self.rs_old = None
        r = self.wimg.sceneRect()
        rscx = QRectF(r.x(), 0, r.width(), 1)
        rscy = QRectF(0, r.y(), 1, r.height())

        self.wax = FWViewAxis(None,
                              rscx,
                              side='U',
                              origin='UL',
                              scale_ctl=True,
                              wwidth=30,
                              wlength=200,
                              signal_fast=signal_fast)
        self.way = FWViewAxis(None,
                              rscy,
                              side='R',
                              origin='UR',
                              scale_ctl=True,
                              wwidth=60,
                              wlength=200,
                              signal_fast=signal_fast)

        self.but_reset = QPushButton('Reset')
        self.edi_info = QTextEdit('Info')

        self.box = QGridLayout()
        self.box.setSpacing(0)
        self.box.setVerticalSpacing(0)
        self.box.setHorizontalSpacing(0)
        self.box.addWidget(self.edi_info, 0, 0, 1, 11)
        self.box.addWidget(self.way, 1, 0, 9, 1)
        self.box.addWidget(self.wimg, 1, 1, 9, 10)
        self.box.addWidget(self.wax, 10, 1, 1, 10)
        self.box.addWidget(self.but_reset, 10, 0, alignment=Qt.AlignCenter)
        self.setLayout(self.box)

        self.set_tool_tips()
        self.set_style()

        self.connect_scene_rect_changed()
        self.but_reset.clicked.connect(self.on_but_reset)
        self.set_info_visible(True)

    def set_signal_fast(self, is_fast=True):
        self.wimg.signal_fast = is_fast
        self.wax.signal_fast = is_fast
        self.way.signal_fast = is_fast

    def set_info_visible(self, is_visible=True):
        self.edi_info.setVisible(is_visible)
        if self.edi_info.isVisible() and is_visible or\
           (not self.edi_info.isVisible()) and (not is_visible):
            return
        elif is_visible:
            self.wimg.connect_mouse_move_event(self.on_mouse_move_event)
        else:
            self.wimg.disconnect_mouse_move_event(self.on_mouse_move_event)

    def connect_scene_rect_changed(self):
        self.wimg.connect_scene_rect_changed(self.on_wimg_scene_rect_changed)
        self.wax.connect_scene_rect_changed(self.on_wax_scene_rect_changed)
        self.way.connect_scene_rect_changed(self.on_way_scene_rect_changed)

    def disconnect_scene_rect_changed(self):
        self.wimg.disconnect_scene_rect_changed(
            self.on_wimg_scene_rect_changed)
        self.wax.disconnect_scene_rect_changed(self.on_wax_scene_rect_changed)
        self.way.disconnect_scene_rect_changed(self.on_way_scene_rect_changed)

    def on_but_reset(self):
        logger.debug('on_but_reset')
        self.wimg.reset_original_size()
        self.wax.reset_original_size()
        self.way.reset_original_size()

    def on_wimg_scene_rect_changed(self, r):
        #logger.debug('on_wimg_scene_rect_changed: %s'%str(r))
        self.wax.set_view(rs=QRectF(r.x(), 0, r.width(), 1))
        self.way.set_view(rs=QRectF(0, r.y(), 1, r.height()))
        self.emit_signal_if_image_scene_rect_changed()

    def on_wax_scene_rect_changed(self, r):
        #logger.debug('on_wax_scene_rect_changed: %s'%str(r))
        rs = self.wimg.scene().sceneRect()
        self.wimg.set_view(rs=QRectF(r.x(), rs.y(), r.width(), rs.height()))
        self.emit_signal_if_image_scene_rect_changed()

    def on_way_scene_rect_changed(self, r):
        #logger.debug('on_way_scene_rect_changed: %s'%str(r))
        rs = self.wimg.scene().sceneRect()
        self.wimg.set_view(rs=QRectF(rs.x(), r.y(), rs.width(), r.height()))
        self.emit_signal_if_image_scene_rect_changed()

    def emit_signal_if_image_scene_rect_changed(self):
        """Checks if scene rect have changed and submits signal with new rect.
        """
        rs = self.wimg.scene().sceneRect()
        if rs != self.rs_old:
            self.rs_old = rs
            self.image_scene_rect_changed.emit(rs)

    def connect_image_scene_rect_changed(self, recip):
        self.image_scene_rect_changed.connect(recip)

    def disconnect_image_scene_rect_changed(self, recip):
        self.image_scene_rect_changed.disconnect(recip)

    def set_tool_tips(self):
        self.wimg.setToolTip('Image\npixel map')
        self.wax.setToolTip('Image columns\nH-scale')
        self.way.setToolTip('Image rows\nV-scale')
        self.edi_info.setToolTip('Information field')

    def set_style(self):
        self.layout().setContentsMargins(0, 0, 0, 0)
        self.but_reset.setFixedSize(60, 30)
        self.edi_info.setMaximumHeight(30)

    def set_pixmap_from_arr(self,
                            arr,
                            set_def=True,
                            amin=None,
                            amax=None,
                            frmin=0.001,
                            frmax=0.999):
        """shortcut to image"""
        self.wimg.set_pixmap_from_arr(arr, set_def, amin, amax, frmin, frmax)

    def reset_original_size(self):
        """shortcut to image"""
        self.wimg.reset_original_size()

    def on_mouse_move_event(self, e):
        """Overrides method from FWView"""
        wimg = self.wimg
        p = wimg.mapToScene(e.pos())
        ix, iy, v = wimg.cursor_on_image_pixcoords_and_value(p)
        fv = 0 if v is None else v
        s = 'x:%d y:%d v:%s%s' % (ix, iy, '%.3f' % fv, 25 * ' ')
        #self.setWindowTitle('FWViewImage %s'%s)
        self.edi_info.setText(s)

    def closeEvent(self, e):
        logger.debug('closeEvent')
        QWidget.closeEvent(self, e)
        cp.ivimageaxes = None