Ejemplo n.º 1
0
    def onMouseClick(self, event):
        if event.button() == Qt.RightButton:
            if not self._started:
                self._surface.cancelTool()
                return
            self._started = False
            self._track = None
            self._invalidate()
            self._nodes = self._recalcPath()
            self._invalidate()
            return

        if self._surface.position() == self._lastPoint:
            return

        if event.button() == Qt.LeftButton:
            if not self._started:
                self._started = True
            else:
                if not self._track:
                    self._track = Track(QPointF(0, 0), self._nodes,
                                        self._width,
                                        self._surface.currentLayer())
                    self._surface.addItem(self._track)
                else:
                    self._track.addNodes(self._nodes)
            self._lastPoint = self._surface.position()
            self._recalcPath()
Ejemplo n.º 2
0
 def onMouseClick (self, event):
     if event.button () == Qt.RightButton:
         if not self._started:
             self._surface.cancelTool ()
             return
         self._started = False
         self._track = None
         self._invalidate ()
         self._nodes = self._recalcPath ()
         self._invalidate ()
         return
     
     if self._surface.position () == self._lastPoint:
         return
     
     if event.button () == Qt.LeftButton:
         if not self._started:
             self._started = True
         else:
             if not self._track:
                 self._track = Track (
                     QPointF (0, 0),
                     self._nodes,
                     self._width,
                     self._surface.currentLayer ()
                 )
                 self._surface.addItem (self._track)
             else:
                 self._track.addNodes (self._nodes)
         self._lastPoint = self._surface.position ()
         self._recalcPath ()
Ejemplo n.º 3
0
class DrawTrackTool(SurfaceTool):

    dmDiagonal1 = 0
    dmDiagonal2 = 1
    dmSquare1 = 2
    dmSquare2 = 3
    dmLine = 4

    def __init__(self, surface):
        super(DrawTrackTool, self).__init__(surface)
        self._lastPoint = QPointF()
        self._nodes = None
        self._started = False
        self._track = None
        self._drawMethod = self.dmDiagonal1
        self._surface.guides.show()

    def reloadSettings(self):
        super(DrawTrackTool, self).reloadSettings()
        self._width = settings.getFloat('Track/Width', 0.8)
        self._brush = settings.glob.selectionBrush()

    def _recalcPath(self):
        start = self._lastPoint
        finish = self._surface.position()

        rect = QRectF(start, finish)
        width = abs(rect.width())
        height = abs(rect.height())

        self._nodes = []
        self._nodes.append(start)

        if (width == height or width == 0 or height == 0 or self._drawMethod == self.dmLine) \
            and self._drawMethod not in (self.dmSquare1, self.dmSquare2):
            self._nodes.append(finish)
            return

        if self._drawMethod == self.dmDiagonal1:
            if width > height:
                self._nodes.append(
                    QPointF(finish.x() - copysign(height, rect.width()),
                            start.y()))
            else:
                self._nodes.append(
                    QPointF(start.x(),
                            finish.y() - copysign(width, rect.height())))

        elif self._drawMethod == self.dmDiagonal2:
            if width > height:
                self._nodes.append(
                    QPointF(start.x() + copysign(height, rect.width()),
                            finish.y()))
            else:
                self._nodes.append(
                    QPointF(finish.x(),
                            start.y() + copysign(width, rect.height())))

        elif self._drawMethod == self.dmSquare1:
            self._nodes.append(QPointF(finish.x() + start.y()))

        else:
            self._nodes.append(QPointF(start.x() + finish.y()))

        self._nodes.append(finish)
        print self._nodes

    def _invalidate(self):
        rect = QPolygonF(self._nodes if self._nodes else
                         [self._surface.position()]).boundingRect()
        rect.adjust(-self._width, -self._width, self._width, self._width)
        self._surface.invalidate(rect, QGraphicsScene.AllLayers)

    def draw(self, painter, rect):
        painter.setCompositionMode(settings.const.toolCompositionMode)
        if not self._started or (len(self._nodes) == 2
                                 and self._nodes[0] == self._nodes[1]):
            painter.setPen(Qt.NoPen)
            painter.setBrush(self._brush)
            painter.drawEllipse(self._surface.position(), self._width / 2,
                                self._width / 2)
            return
        painter.setPen(
            QPen(self._brush, self._width, Qt.SolidLine, Qt.RoundCap,
                 Qt.RoundJoin))
        painter.drawLines([
            QLineF(self._nodes[i - 1], self._nodes[i])
            for i in xrange(1, len(self._nodes))
        ])

    def onMouseMove(self, event):
        self._recalcPath()
        self._invalidate()

    def onMouseClick(self, event):
        if event.button() == Qt.RightButton:
            if not self._started:
                self._surface.cancelTool()
                return
            self._started = False
            self._track = None
            self._invalidate()
            self._nodes = self._recalcPath()
            self._invalidate()
            return

        if self._surface.position() == self._lastPoint:
            return

        if event.button() == Qt.LeftButton:
            if not self._started:
                self._started = True
            else:
                if not self._track:
                    self._track = Track(QPointF(0, 0), self._nodes,
                                        self._width,
                                        self._surface.currentLayer())
                    self._surface.addItem(self._track)
                else:
                    self._track.addNodes(self._nodes)
            self._lastPoint = self._surface.position()
            self._recalcPath()

    def cancel(self):
        self._surface.guides.hide()
Ejemplo n.º 4
0
class DrawTrackTool (SurfaceTool):
    
    dmDiagonal1 = 0
    dmDiagonal2 = 1
    dmSquare1 = 2
    dmSquare2 = 3
    dmLine = 4
    
    def __init__ (self, surface):
        super (DrawTrackTool, self).__init__ (surface)
        self._lastPoint = QPointF ()
        self._nodes = None
        self._started = False
        self._track = None
        self._drawMethod = self.dmDiagonal1
        self._surface.guides.show ()
    
    def reloadSettings (self):
        super (DrawTrackTool, self).reloadSettings ()
        self._width = settings.getFloat ('Track/Width', 0.8)
        self._brush = settings.glob.selectionBrush ()
    
    def _recalcPath (self):
        start = self._lastPoint
        finish = self._surface.position ()
        
        rect = QRectF (start, finish)
        width = abs (rect.width ())
        height = abs (rect.height ())
        
        self._nodes = []
        self._nodes.append (start)
        
        if (width == height or width == 0 or height == 0 or self._drawMethod == self.dmLine) \
            and self._drawMethod not in (self.dmSquare1, self.dmSquare2):
            self._nodes.append (finish)
            return
        
        if self._drawMethod == self.dmDiagonal1:
            if width > height:
                self._nodes.append (QPointF (finish.x () - copysign (height, rect.width ()), start.y ()))
            else:
                self._nodes.append (QPointF (start.x (), finish.y () - copysign (width, rect.height ())))

        elif self._drawMethod == self.dmDiagonal2:
            if width > height:
                self._nodes.append (QPointF (start.x () + copysign (height, rect.width ()), finish.y ()))
            else:
                self._nodes.append (QPointF (finish.x (), start.y () + copysign (width, rect.height ())))

        elif self._drawMethod == self.dmSquare1:
            self._nodes.append (QPointF (finish.x () + start.y ()))
        
        else:
            self._nodes.append (QPointF (start.x () + finish.y ()))
        
        self._nodes.append (finish)
        print self._nodes

    def _invalidate (self):
        rect = QPolygonF (self._nodes if self._nodes else [self._surface.position ()]).boundingRect ()
        rect.adjust (-self._width, -self._width, self._width, self._width)
        self._surface.invalidate (rect, QGraphicsScene.AllLayers)
    
    def draw (self, painter, rect):
        painter.setCompositionMode (settings.const.toolCompositionMode)
        if not self._started or (len (self._nodes) == 2 and self._nodes [0] == self._nodes [1]):
            painter.setPen (Qt.NoPen)
            painter.setBrush (self._brush)
            painter.drawEllipse (self._surface.position (), self._width / 2, self._width / 2)
            return
        painter.setPen (QPen (self._brush, self._width, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
        painter.drawLines ([QLineF (self._nodes [i - 1], self._nodes [i]) for i in xrange (1, len (self._nodes))])
    
    def onMouseMove (self, event):
        self._recalcPath ()
        self._invalidate ()
    
    def onMouseClick (self, event):
        if event.button () == Qt.RightButton:
            if not self._started:
                self._surface.cancelTool ()
                return
            self._started = False
            self._track = None
            self._invalidate ()
            self._nodes = self._recalcPath ()
            self._invalidate ()
            return
        
        if self._surface.position () == self._lastPoint:
            return
        
        if event.button () == Qt.LeftButton:
            if not self._started:
                self._started = True
            else:
                if not self._track:
                    self._track = Track (
                        QPointF (0, 0),
                        self._nodes,
                        self._width,
                        self._surface.currentLayer ()
                    )
                    self._surface.addItem (self._track)
                else:
                    self._track.addNodes (self._nodes)
            self._lastPoint = self._surface.position ()
            self._recalcPath ()

    def cancel (self):
        self._surface.guides.hide ()