浏览代码

Add one shape and fill when closed

Michael Pitidis 13 年之前
父节点
当前提交
795066e6e0
共有 1 个文件被更改,包括 19 次插入4 次删除
  1. 19 4
      labelme.py

+ 19 - 4
labelme.py

@@ -11,6 +11,7 @@ from collections import defaultdict
 from PyQt4.QtGui import *
 from PyQt4.QtCore import *
 
+from shape import shape
 
 __appname__ = 'labelme'
 
@@ -221,25 +222,39 @@ class Settings(object):
 
 class Label(QLabel):
     done = pyqtSignal()
-    epsilon = 0.1 # TODO
+    epsilon = 7**2 # TODO: Tune value
 
     def __init__(self, *args, **kwargs):
         super(Label, self).__init__(*args, **kwargs)
         self.points = []
+        self.shapes = [shape('one', QColor(0, 255, 0))]
 
     def mousePressEvent(self, ev):
         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.repaint()
 
     def isClosed(self):
-        return len(self.points) > 1 and self.closeEnough(self.points[0], self.points[1])
+        return len(self.points) > 1 and self.closeEnough(self.points[0], self.points[-1])
 
     def closeEnough(self, p1, p2):
-        return abs((p1.x()**2 + p1.y()**2) - (p2.x()**2 + p2.y()**2)) < self.epsilon
-
+        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):
+        for shape in self.shapes:
+            qp = QPainter()
+            qp.begin(self)
+            shape.drawShape(qp)
+            qp.end()
 
 
 def main(argv):