diff --git a/sloth/gui/annotationscene.py b/sloth/gui/annotationscene.py index 7068719..5e5fe1d 100644 --- a/sloth/gui/annotationscene.py +++ b/sloth/gui/annotationscene.py @@ -74,16 +74,20 @@ class AnnotationScene(QGraphicsScene): displayed by the scene. This can be either the index to a frame in a video, or to an image. """ + self.image_item_ = None + self.image_ = None + self.pixmap_ = None + self.root_ = root self.clear() if not root.isValid(): return assert self.root_.model() == self.model_ - item = self.model_.itemFromIndex(root) - self.image_ = self.labeltool_.getImage(item) - self.pixmap_ = QPixmap(okapy.guiqt.toQImage(self.image_)) - item = QGraphicsPixmapItem(self.pixmap_) + self.image_item_ = self.model_.itemFromIndex(root) + self.image_ = self.labeltool_.getImage(self.image_item_) + self.pixmap_ = QPixmap(okapy.guiqt.toQImage(self.image_)) + item = QGraphicsPixmapItem(self.pixmap_) item.setZValue(-1) self.setSceneRect(0, 0, self.pixmap_.width(), self.pixmap_.height()) self.addItem(item) @@ -148,7 +152,7 @@ class AnnotationScene(QGraphicsScene): # ignore events outside the scene rect return # insert mode - self.inserter_.mousePressEvent(event, self.root_) + self.inserter_.mousePressEvent(event, self.image_item_) else: # selection mode QGraphicsScene.mousePressEvent(self, event) @@ -158,7 +162,7 @@ class AnnotationScene(QGraphicsScene): print "mouseReleaseEvent", self.sceneRect().contains(event.scenePos()), event.scenePos() if self.inserter_ is not None: # insert mode - self.inserter_.mouseReleaseEvent(event, self.root_) + self.inserter_.mouseReleaseEvent(event, self.image_item_) else: # selection mode QGraphicsScene.mouseReleaseEvent(self, event) @@ -168,7 +172,7 @@ class AnnotationScene(QGraphicsScene): # print "mouseMoveEvent", self.sceneRect().contains(event.scenePos()), event.scenePos() if self.inserter_ is not None: # insert mode - self.inserter_.mouseMoveEvent(event, self.root_) + self.inserter_.mouseMoveEvent(event, self.image_item_) else: # selection mode QGraphicsScene.mouseMoveEvent(self, event) @@ -217,7 +221,7 @@ class AnnotationScene(QGraphicsScene): if self.inserter_ is not None: # insert mode - self.inserter_.keyPressEvent(event, self.root_) + self.inserter_.keyPressEvent(event, self.image_item_) else: # selection mode if event.key() == Qt.Key_Delete: diff --git a/sloth/items/inserters.py b/sloth/items/inserters.py index a2592d1..1966e3d 100644 --- a/sloth/items/inserters.py +++ b/sloth/items/inserters.py @@ -17,27 +17,27 @@ class ItemInserter: def mode(self): return self.mode_ - def mousePressEvent(self, event, index): + def mousePressEvent(self, event, image_item): event.accept() - def mouseReleaseEvent(self, event, index): + def mouseReleaseEvent(self, event, image_item): event.accept() - def mouseMoveEvent(self, event, index): + def mouseMoveEvent(self, event, image_item): event.accept() - def keyPressEvent(self, event, index): + def keyPressEvent(self, event, image_item): event.ignore() def allowOutOfSceneEvents(self): return False class PointItemInserter(ItemInserter): - def mousePressEvent(self, event, index): + def mousePressEvent(self, event, image_item): pos = event.scenePos() ann = {'type': 'point', 'x': pos.x(), 'y': pos.y()} - index.model().addAnnotation(index, ann) + image_item.addAnnotation(ann) event.accept() class RectItemInserter(ItemInserter): @@ -46,7 +46,7 @@ class RectItemInserter(ItemInserter): self.current_item_ = None self.init_pos_ = None - def mousePressEvent(self, event, index): + def mousePressEvent(self, event, image_item): pos = event.scenePos() item = QGraphicsRectItem(QRectF(pos.x(), pos.y(), 0, 0)) item.setPen(Qt.red) @@ -55,7 +55,7 @@ class RectItemInserter(ItemInserter): self.scene().addItem(item) event.accept() - def mouseMoveEvent(self, event, index): + def mouseMoveEvent(self, event, image_item): if self.current_item_ is not None: assert self.init_pos_ is not None rect = QRectF(self.init_pos_, event.scenePos()).normalized() @@ -63,7 +63,7 @@ class RectItemInserter(ItemInserter): event.accept() - def mouseReleaseEvent(self, event, index): + def mouseReleaseEvent(self, event, image_item): if self.current_item_ is not None: if self.current_item_.rect().width() > 1 and \ self.current_item_.rect().height() > 1: @@ -72,7 +72,7 @@ class RectItemInserter(ItemInserter): 'x': rect.x(), 'y': rect.y(), 'width': rect.width(), 'height': rect.height()} ann.update(self.mode()) - index.model().addAnnotation(index, ann) + image_item.addAnnotation(ann) self.scene().removeItem(self.current_item_) self.current_item_ = None self.init_pos_ = None @@ -94,7 +94,7 @@ class FixedRatioRectItemInserter(RectItemInserter): self.ratio_ = float(mode.get('_ratio', 1)) RectItemInserter.setMode(self, mode) - def mouseMoveEvent(self, event, index): + def mouseMoveEvent(self, event, image_item): if self.current_item_ is not None: new_geometry = QRectF(self.current_item_.rect().topLeft(), event.scenePos()) dx = new_geometry.width() @@ -115,7 +115,7 @@ class PolygonItemInserter(ItemInserter): ItemInserter.__init__(self, scene, mode) self.current_item_ = None - def mousePressEvent(self, event, index): + def mousePressEvent(self, event, image_item): pos = event.scenePos() if self.current_item_ is None: item = QGraphicsPolygonItem(QPolygonF([pos])) @@ -128,7 +128,7 @@ class PolygonItemInserter(ItemInserter): event.accept() - def mouseMoveEvent(self, event, index): + def mouseMoveEvent(self, event, image_item): if self.current_item_ is not None: pos = event.scenePos() polygon = self.current_item_.polygon()