Browse Source

Forgot to add separate file for canvas class

Michael Pitidis 13 years ago
parent
commit
71591b0458
1 changed files with 53 additions and 0 deletions
  1. 53 0
      canvas.py

+ 53 - 0
canvas.py

@@ -0,0 +1,53 @@
+
+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))]
+
+    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):
+        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)
+            qp.end()
+