Beispiel #1
0
 def _on_point_list_contents_changed(self):
     if not self._points:
         return
     if len(self._points) == 1:
         # Delete only point's line segment
         try:
             edge_item = self.point_items[self._points[0]].edge_item
         except AttributeError:
             return
         if edge_item.scene():
             edge_item.scene().removeItem(edge_item)
         del self.point_items[self._points[0]].edge_item
         return
     # Make and update edges (line segments) as needed
     pis = [(point, self.point_items[point]) for point in self._points]
     for (point1, point_item1), (point2, point_item2) in zip(pis, pis[1:]):
         line = Qt.QLineF(point1.x, point1.y, point2.x, point2.y)
         if not hasattr(point_item1, 'edge_item'):
             point_item1.edge_item = Qt.QGraphicsLineItem(
                 line, self.parentItem())
             point_item1.edge_item.setPen(self.line_pen)
             point_item1.edge_item.installSceneEventFilter(self)
             point_item1.edge_item.setZValue(-1)
         elif point_item1.edge_item.line() != line:
             point_item1.edge_item.setLine(line)
     # Delete last point's line segment
     try:
         edge_item = self.point_items[self._points[-1]].edge_item
     except AttributeError:
         return
     if edge_item.scene():
         edge_item.scene().removeItem(edge_item)
     del self.point_items[self._points[-1]].edge_item
Beispiel #2
0
 def _on_point_item_list_content_reset(self):
     for line_item in self.line_items:
         self.view.scene().removeItem(line_item)
     self.line_items = []
     if len(self.point_items) > 1:
         for point_item1, point_item2 in zip(self.point_items,
                                             self.point_items[1:]):
             line_item = Qt.QGraphicsLineItem(
                 Qt.QLineF(point_item1.pos(), point_item2.pos()),
                 self.parentItem())
             line_item.setPen(self.line_pen)
             line_item.installSceneEventFilter(self)
             line_item.setZValue(-1)
             self.line_items.append(line_item)
Beispiel #3
0
 def make_and_store_point_item(self, pos):
     self._ignore_point_item_position_changed = True
     try:
         super().make_and_store_point_item(pos)
     finally:
         self._ignore_point_item_position_changed = False
     if len(self.point_items) > 1:
         p1 = self.point_items[-2].pos()
         line_item = Qt.QGraphicsLineItem(Qt.QLineF(p1, pos),
                                          self.parentItem())
         line_item.setPen(self.line_pen)
         line_item.installSceneEventFilter(self)
         line_item.setZValue(-1)
         self.line_items.append(line_item)