def painterPath(self): p = QPainterPath() roundness = int(99 * float(self._alen) / 16 / 90) r = QtCore.QRectF(self._rect) r.moveTo(self.state['pos']) p.addRoundRect(r, roundness) return p
def setElements(self, elem): self.path = QPainterPath() if elem: self.path.moveTo(*elem[0]) for e in elem[1:]: self.path.lineTo(*e) self.update()
class _IsoCurve(pg.IsocurveItem): def __init__(self, *args, **kwargs): self.brush = kwargs.pop('brush', None) elements = None if 'elements' in kwargs: elements = kwargs.pop('elements') pg.IsocurveItem.__init__(self, *args, **kwargs) self.setElements(elements) def setData(self, data, level=None): if data is not None: if data.ndim > 2: raise Exception('cannot create iso lines on color image at the moment') pg.IsocurveItem.setData(self, data, level) def setElements(self, elem): self.path = QPainterPath() if elem: self.path.moveTo(*elem[0]) for e in elem[1:]: self.path.lineTo(*e) self.update() def elements(self): elem = [] for i in range(self.path.elementCount()-1): e = self.path.elementAt(i) elem.append((e.x,e.y)) return elem def painterPath(self): return QPainterPath(self.path) def paint(self, p, *args): if self.data is None: return if self.path is None: self.generatePath() p.setPen(self.pen) if self.brush: p.setBrush(self.brush) p.drawPath(self.path) def saveState(self): return {'elements': self.elements()}
class _IsoCurve(pg.IsocurveItem): def __init__(self, *args, **kwargs): self.brush = kwargs.pop('brush', None) elements = None if 'elements' in kwargs: elements = kwargs.pop('elements') pg.IsocurveItem.__init__(self, *args, **kwargs) self.setElements(elements) def setData(self, data, level=None): if data is not None: if data.ndim > 2: raise Exception( 'cannot create iso lines on color image at the moment') pg.IsocurveItem.setData(self, data, level) def setElements(self, elem): self.path = QPainterPath() if elem: self.path.moveTo(*elem[0]) for e in elem[1:]: self.path.lineTo(*e) self.update() def elements(self): elem = [] for i in range(self.path.elementCount() - 1): e = self.path.elementAt(i) elem.append((e.x, e.y)) return elem def painterPath(self): return QPainterPath(self.path) def paint(self, p, *args): if self.data is None: return if self.path is None: self.generatePath() p.setPen(self.pen) if self.brush: p.setBrush(self.brush) p.drawPath(self.path) def saveState(self): return {'elements': self.elements()}
def _measurePath(self): mask = None v = self.pMask.value() if v != '-': for i, ch in enumerate(self.pa.childs[3:]): if ch.name() == v: break mask = self.paths[i].painterPath() # TODO: mean + ... # mask area: ma = mask.calcArea() for n, p in enumerate(self.paths): a = p.painterPath() name = self.pa.childs[n + 3].name() if mask is None or i == n: print('%s. %s - Area:%s | Length: %s' % ( n + 1, name, a.calcArea(), a.length())) else: ia = QPainterPath(mask.intersected(a)).calcArea() print('%s. %s - Area:(%s, area intersection: %s, relative %s) \ | Length:%s' % (n + 1, name, a.calcArea(), ia, ia / ma, a.length()))
def painterPath(self): p = QPainterPath() a = self.boundingRect() a.moveTo(self.state['pos']) p.addEllipse(a) return p
class FreehandItem(GraphicsObject): """ **Bases:** :class:`GraphicsObject <pyqtgraph.GraphicsObject>` #TODO text Item displaying an isocurve of a 2D array.To align this item correctly with an ImageItem,call isocurve.setParentItem(image) """ def __init__(self, parentItem=None, pen='w', brush=None, elements=None, is_area=True): """ Create a new isocurve item. ============== =============================================================== **Arguments:** elements is_area Whether the drawn path is closed and can be filled ============== =============================================================== """ GraphicsObject.__init__(self) self.setElements(elements) self.isEmpty = self.path.isEmpty self.is_area = is_area self.pathEdit = None self.isModify = False self.setPen(pen) self.brush = brush if brush: self.setBrush(brush) if parentItem is not None: self.setParentItem(parentItem) def saveState(self): return {'elements': self.elements(), 'is_area': self.is_area} def setElements(self, elem): self.path = QPainterPath() if elem: self.path.moveTo(*elem[0]) for e in elem[1:]: self.path.lineTo(*e) self.update() def painterPath(self): return self.path def startPath(self, pos): self.path.moveTo(*pos) # self.prepareGeometryChange() self.update() def continuePath(self, pos): self.path.lineTo(*pos) self.update() def closePath(self): if self.is_area: self.path.closeSubpath() self.update() def setPen(self, *args, **kwargs): """Set the pen used to draw the isocurve. Arguments can be any that are valid for :func:`mkPen <pyqtgraph.mkPen>`""" self.pen = fn.mkPen(*args, **kwargs) self.update() def setBrush(self, *args, **kwargs): """Set the brush used to draw the isocurve. Arguments can be any that are valid for :func:`mkBrush <pyqtgraph.mkBrush>`""" self.brush = fn.mkBrush(*args, **kwargs) self.update() def elements(self): c = self.path.elementCount() - 1 elem = np.empty((c, 2)) for i in xrange(c): e = self.path.elementAt(i) elem[i] = e.x, e.y return elem def setModify(self, modify): self.isModify = modify if modify: self.hide() self.pathEdit = pg.PolyLineROI(self.elements(), closed=True, pen=self.pen, movable=False) self.getViewBox().addItem(self.pathEdit) elif self.pathEdit is not None: #x0,y0 = self.pathEdit.pos() for i, h in zip(range(self.path.elementCount() - 1), self.pathEdit.getHandles()): e = self.path.elementAt(i) x, y = h.pos() self.path.setElementPositionAt(i, x, y) #last element = first element: self.path.setElementPositionAt( i + 1, *self.pathEdit.getHandles()[0].pos()) self.getViewBox().removeItem(self.pathEdit) self.pathEdit = None self.show() def boundingRect(self): return self.path.boundingRect() def paint(self, p, *args): p.setPen(self.pen) if self.brush is not None and self.is_area: p.setBrush(self.brush) p.drawPath(self.path)
def painterPath(self): p = self.state['pos'] s = self.state['size'] path = QPainterPath() path.addRect(QtCore.QRectF(p[0], p[1], s[0], s[1])) return path
def painterPath(self): p = self.state['pos'] s = self.state['size'] path = QPainterPath() path.addEllipse(QtCore.QRectF(p[0], p[1], s[0], s[1])) return path
def painterPath(self): return QPainterPath(self.path)
class FreehandItem(GraphicsObject): """ **Bases:** :class:`GraphicsObject <pyqtgraph.GraphicsObject>` #TODO text Item displaying an isocurve of a 2D array.To align this item correctly with an ImageItem,call isocurve.setParentItem(image) """ def __init__(self, parentItem=None, pen='w', brush=None, elements=None, is_area=True): """ Create a new isocurve item. ============== =============================================================== **Arguments:** elements is_area Whether the drawn path is closed and can be filled ============== =============================================================== """ GraphicsObject.__init__(self) self.setElements(elements) self.isEmpty = self.path.isEmpty self.is_area = is_area self.pathEdit = None self.isModify = False self.setPen(pen) self.brush = brush if brush: self.setBrush(brush) if parentItem is not None: self.setParentItem(parentItem) def saveState(self): return {'elements': self.elements(), 'is_area':self.is_area} def setElements(self, elem): self.path = QPainterPath() if elem: self.path.moveTo(*elem[0]) for e in elem[1:]: self.path.lineTo(*e) self.update() def painterPath(self): return self.path def startPath(self, pos): self.path.moveTo(*pos) # self.prepareGeometryChange() self.update() def continuePath(self, pos): self.path.lineTo(*pos) self.update() def closePath(self): if self.is_area: self.path.closeSubpath() self.update() def setPen(self, *args, **kwargs): """Set the pen used to draw the isocurve. Arguments can be any that are valid for :func:`mkPen <pyqtgraph.mkPen>`""" self.pen = fn.mkPen(*args, **kwargs) self.update() def setBrush(self, *args, **kwargs): """Set the brush used to draw the isocurve. Arguments can be any that are valid for :func:`mkBrush <pyqtgraph.mkBrush>`""" self.brush = fn.mkBrush(*args, **kwargs) self.update() def elements(self): c = self.path.elementCount()-1 elem = np.empty( (c,2) ) for i in xrange(c): e = self.path.elementAt(i) elem[i] = e.x,e.y return elem def setModify(self, modify): self.isModify = modify if modify: self.hide() self.pathEdit = pg.PolyLineROI(self.elements(), closed=True, pen=self.pen, movable=False) self.getViewBox().addItem(self.pathEdit) elif self.pathEdit is not None: #x0,y0 = self.pathEdit.pos() for i,h in zip(range(self.path.elementCount()-1), self.pathEdit.getHandles()): e = self.path.elementAt(i) x,y = h.pos() self.path.setElementPositionAt(i, x,y) #last element = first element: self.path.setElementPositionAt(i+1, *self.pathEdit.getHandles()[0].pos()) self.getViewBox().removeItem(self.pathEdit) self.pathEdit = None self.show() def boundingRect(self): return self.path.boundingRect() def paint(self, p, *args): p.setPen(self.pen) if self.brush is not None and self.is_area: p.setBrush(self.brush) p.drawPath(self.path)