1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
- from shape import Shape
- class Canvas(QLabel):
- done = pyqtSignal()
- epsilon = 7**2 # TODO: Tune value
- def __init__(self, *args, **kwargs):
- super(Canvas, self).__init__(*args, **kwargs)
- self.points = []
- self.shapes = [Shape('one', QColor(0, 255, 0))]
- self.current_line = Shape('line', QColor(255, 0, 0))
- def mousePressEvent(self, ev):
- if ev.button() != 1:
- return
- if not self.points:
- self.setMouseTracking(True)
- self.points.append(ev.pos())
- self.shapes[0].addPoint(ev.pos())
- if self.isClosed():
- self.done.emit()
- print "Points:", self.points
- self.points = []
- self.shapes[0].setFill(True)
- self.setMouseTracking(False)
- self.repaint()
- def isClosed(self):
- return len(self.points) > 1 and self.closeEnough(self.points[0], self.points[-1])
- def mouseMoveEvent(self, ev):
- self.current_line.points = [self.points[-1], self.pos()]
- self.repaint()
- #print "moving", ev.pos()
- def closeEnough(self, p1, p2):
- def dist(p):
- return p.x() * p.x() + p.y() * p.y()
- print p1, p2
- print abs(dist(p1) - dist(p2)), self.epsilon
- return abs(dist(p1) - dist(p2)) < self.epsilon
- def paintEvent(self, event):
- super(Canvas, self).paintEvent(event)
- for shape in self.shapes:
- qp = QPainter()
- qp.begin(self)
- shape.drawShape(qp)
- self.current_line.drawShape(qp)
- qp.end()
|