Beispiel #1
0
    def mouseMoveEvent(self, e):
        QGraphicsEllipseItem.mouseMoveEvent(self, e)
        #logger.debug('%s.mouseMoveEvent' % self.__class__.__name__)
        #print('%s.mouseMoveEvent, at point: ' % self.__class__.__name__, e.pos(), ' scenePos: ', e.scenePos())

        dp = e.scenePos() - e.lastScenePos()

        if self._drag_mode == MOVE and self.isSelected():
            self.moveBy(dp.x(), dp.y())
            #self.move_control_points()

        elif self._drag_mode == ADD:
            #print('%s.mouseMoveEvent _drag_mode=ADD' % self.__class__.__name__)
            rect = self.rect()
            rect.setBottomRight(rect.bottomRight() + dp)
            self.setRect(rect)

        elif self._drag_mode == EDIT:

            dp = self.rotate_point(dp)

            r = self.rect()
            i = self.child_item_sel()
            if   i == self.pbr:
                r.setBottomRight(r.bottomRight() + 0.5*dp)
                r.setTopRight   (r.topRight()    + 0.5*QPointF( dp.x(), -dp.y()))
                r.setTopLeft    (r.topLeft()     + 0.5*QPointF(-dp.x(), -dp.y()))
                r.setBottomLeft (r.bottomLeft()  + 0.5*QPointF(-dp.x(),  dp.y()))

            elif i == self.ptr:
                r.setTopRight   (r.topRight()    + 0.5*dp)
                r.setTopLeft    (r.topLeft()     + 0.5*QPointF(-dp.x(),  dp.y()))
                r.setBottomLeft (r.bottomLeft()  + 0.5*QPointF(-dp.x(), -dp.y()))
                r.setBottomRight(r.bottomRight() + 0.5*QPointF( dp.x(), -dp.y()))

            elif i == self.ptl:
                r.setTopLeft    (r.topLeft()     + 0.5*dp)
                r.setTopRight   (r.topRight()    + 0.5*QPointF(-dp.x(),  dp.y()))
                r.setBottomLeft (r.bottomLeft()  + 0.5*QPointF( dp.x(), -dp.y()))
                r.setBottomRight(r.bottomRight() + 0.5*QPointF(-dp.x(), -dp.y()))

            elif i == self.pbl:
                r.setBottomLeft (r.bottomLeft()  + 0.5*dp)
                r.setBottomRight(r.bottomRight() + 0.5*QPointF(-dp.x(),  dp.y()))
                r.setTopRight   (r.topRight()    + 0.5*QPointF(-dp.x(), -dp.y()))
                r.setTopLeft    (r.topLeft()     + 0.5*QPointF( dp.x(), -dp.y()))

            elif i == self.pct: r.setTop   (r.top()    + dp.y()); r.setBottom(r.bottom() - dp.y())
            elif i == self.pcl: r.setLeft  (r.left()   + dp.x()); r.setRight (r.right()  - dp.x())
            elif i == self.pcb: r.setBottom(r.bottom() + dp.y()); r.setTop   (r.top()    - dp.y())
            elif i == self.pcr: r.setRight (r.right()  + dp.x()); r.setLeft  (r.left()   - dp.x())

            elif i == self.pro:
                c = r.center()
                #print('=== rect center %6.1f %6.1f' % (c.x(), c.y()))
                v = e.scenePos() - self.mapToScene(c.x(), c.y()) # in scene coordinates
                angle = degrees(atan2(v.y(), v.x())) + 90
                self.setRotation(angle)

            elif i == self.peb:
                c = r.center()
                v = e.scenePos() - self.mapToScene(c.x(), c.y()) # in scene coordinates
                #angle0 = self.startAngle()/16
                angle = degrees(atan2(v.y(), v.x()))
                self.setStartAngle(-angle*16)

            elif i == self.pee:
                c = r.center()
                v = e.scenePos() - self.mapToScene(c.x(), c.y()) # in scene coordinates
                angle = degrees(atan2(v.y(), v.x())) + 180
                angle -= self.startAngle()/16
                self.setSpanAngle(-angle*16)

            r = r.normalized()
            self.setRect(r)

            if i != self.pro:
                self.setTransformOriginPoint(r.center())

            #self.redefine_rect()
            self.move_control_points()