예제 #1
0
 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
예제 #2
0
 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
예제 #3
0
 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()
예제 #4
0
 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()
예제 #5
0
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()}
예제 #6
0
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()}
예제 #7
0
    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()))
예제 #8
0
 def painterPath(self):
     p = QPainterPath()
     a = self.boundingRect()
     a.moveTo(self.state['pos'])
     p.addEllipse(a)
     return p
예제 #9
0
 def painterPath(self):
     p = QPainterPath()
     a = self.boundingRect()
     a.moveTo(self.state['pos'])
     p.addEllipse(a)
     return p
예제 #10
0
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)
예제 #11
0
 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
예제 #12
0
 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
예제 #13
0
 def painterPath(self):
     return QPainterPath(self.path)
예제 #14
0
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)