예제 #1
0
파일: ScaleBar.py 프로젝트: robertsj/poropy
 def paint(self, p, opt, widget):
     UIGraphicsItem.paint(self, p, opt, widget)
     
     rect = self.boundingRect()
     unit = self.pixelSize()
     y = rect.bottom() + (rect.top()-rect.bottom()) * 0.02
     y1 = y + unit[1]*self._width
     x = rect.right() + (rect.left()-rect.right()) * 0.02
     x1 = x - self.size
     
     p.setPen(self.pen)
     p.setBrush(self.brush)
     rect = QtCore.QRectF(
         QtCore.QPointF(x1, y1), 
         QtCore.QPointF(x, y)
     )
     p.translate(x1, y1)
     p.scale(rect.width(), rect.height())
     p.drawRect(0, 0, 1, 1)
     
     alpha = np.clip(((self.size/unit[0]) - 40.) * 255. / 80., 0, 255)
     p.setPen(QtGui.QPen(QtGui.QColor(0, 0, 0, alpha)))
     for i in range(1, 10):
         #x2 = x + (x1-x) * 0.1 * i
         x2 = 0.1 * i
         p.drawLine(QtCore.QPointF(x2, 0), QtCore.QPointF(x2, 1))
예제 #2
0
    def __init__(self, clock):
        pg.ItemGroup.__init__(self)
        self.size = clock.size
        self.item = QtWidgets.QGraphicsEllipseItem(QtCore.QRectF(0, 0, self.size, self.size))
        self.item.moveBy(-self.size*0.5, -self.size*0.5)
        self.item.setPen(pg.mkPen(100,100,100))
        self.item.setBrush(clock.brush)
        self.hand = QtWidgets.QGraphicsLineItem(0, 0, 0, self.size*0.5)
        self.hand.setPen(pg.mkPen('w'))
        self.hand.setZValue(10)
        self.flare = QtWidgets.QGraphicsPolygonItem(QtGui.QPolygonF([
            QtCore.QPointF(0, -self.size*0.25),
            QtCore.QPointF(0, self.size*0.25),
            QtCore.QPointF(self.size*1.5, 0),
            QtCore.QPointF(0, -self.size*0.25),
            ]))
        self.flare.setPen(pg.mkPen('y'))
        self.flare.setBrush(pg.mkBrush(255,150,0))
        self.flare.setZValue(-10)
        self.addItem(self.hand)
        self.addItem(self.item)
        self.addItem(self.flare)
 
        self.clock = clock
        self.i = 1
        
        self._spaceline = None
예제 #3
0
    def render(self):
        #Convert data to QImage for display.
        
        #profile = debug.Profiler()
        if self.image is None or self.image.size == 0:
            return
        if isinstance(self.lut, collections.Callable):
            lut = self.lut(self.image)
        else:
            lut = self.lut

        if False:#self.autoDownsample:
            # reduce dimensions of image based on screen resolution
            o = self.mapToDevice(QtCore.QPointF(0,0))
            x = self.mapToDevice(QtCore.QPointF(1,0))
            y = self.mapToDevice(QtCore.QPointF(0,1))
            w = Point(x-o).length()
            h = Point(y-o).length()
            xds = int(1/max(1, w))
            yds = int(1/max(1, h))
            image = pg.downsample(self.image, xds, axis=0)
            image = pg.downsample(image, yds, axis=1)
        else:
            image = self.image


        
        imageRGBA = makeRGBAImage(image,self.cppLut)
        imageNew = imageRGBA
        argb, alpha =  pg.makeARGB(imageNew.transpose((1, 0, 2)[:imageNew.ndim]), lut=None, levels=None)
        self.qimage = pg.makeQImage(argb, alpha, transpose=False)
예제 #4
0
    def paint(self, p, *args):
        opts = self.opts
        if opts.get('antialias', True):
            p.setRenderHint(p.Antialiasing)

        if opts.get('fillLevel', None) is not None and opts.get(
                'fillBrush', None) is not None:
            p.setBrush(fn.mkBrush(opts['fillBrush']))
            p.setPen(fn.mkPen(None))
            p.drawPolygon(
                QtGui.QPolygonF([
                    QtCore.QPointF(2, 18),
                    QtCore.QPointF(18, 2),
                    QtCore.QPointF(18, 18)
                ]))

        if opts.get('pen', None) is not None:
            p.setPen(fn.mkPen(opts['pen']))
            p.drawLine(2, 18, 18, 2)

        symbol = opts.get('symbol', None)
        if symbol is not None:

            pen = fn.mkPen(opts.get('symbolPen', None))
            brush = fn.mkBrush(opts.get('symbolBrush', None))
            size = opts.get('symbolSize', 10)

            p.translate(10, 10)
            path = drawSymbol(p, symbol, size, pen, brush)
예제 #5
0
 def getGradient(self, p1=None, p2=None):
     """Return a QLinearGradient object spanning from QPoints p1 to p2."""
     if p1 == None:
         p1 = QtCore.QPointF(0,0)
     if p2 == None:
         p2 = QtCore.QPointF(self.pos.max()-self.pos.min(),0)
     g = QtGui.QLinearGradient(p1, p2)
     
     pos, color = self.getStops(mode=self.BYTE)
     color = [QtGui.QColor(*x) for x in color]
     g.setStops(zip(pos, color))
     
     #if self.colorMode == 'rgb':
         #ticks = self.listTicks()
         #g.setStops([(x, QtGui.QColor(t.color)) for t,x in ticks])
     #elif self.colorMode == 'hsv':  ## HSV mode is approximated for display by interpolating 10 points between each stop
         #ticks = self.listTicks()
         #stops = []
         #stops.append((ticks[0][1], ticks[0][0].color))
         #for i in range(1,len(ticks)):
             #x1 = ticks[i-1][1]
             #x2 = ticks[i][1]
             #dx = (x2-x1) / 10.
             #for j in range(1,10):
                 #x = x1 + dx*j
                 #stops.append((x, self.getColor(x)))
             #stops.append((x2, self.getColor(x2)))
         #g.setStops(stops)
     return g
예제 #6
0
 def __init__(self, pose, radius):
     pg.GraphicsObject.__init__(self)
     self.pose = QtCore.QPointF(*pose[:2])
     self.R = radius
     pt = pose[:2] + np.array([np.cos(pose[2]), np.sin(pose[2])]) * self.R
     self.pt = QtCore.QPointF(*(pose[:2] + pt))
     self.generatePicture()
예제 #7
0
 def copyROI(self, offset=0.0):
     """ Copy current ROI. Offset from original for visibility """
     if self.currentROIindex != None:
         osFract = 0.05
         roi = self.rois[self.currentROIindex]
         # For rectangular ROI, offset by a fraction of the rotated size
         if type(roi) == RectROIcustom:
             roiState = roi.getState()
             pos = roiState['pos']
             size = roiState['size']
             angle = roiState['angle']
             dx, dy = np.array(size) * osFract
             ang = np.radians(angle)
             cosa = np.cos(ang)
             sina = np.sin(ang)
             dxt = dx * cosa - dy * sina
             dyt = dx * sina + dy * cosa
             offset = QtCore.QPointF(dxt, dyt)
             self.addROI(pos + offset, size, angle)
         # For a polyline ROI, offset by a fraction of the bounding rectangle
         if type(roi) == PolyLineROIcustom:
             br = roi.shape().boundingRect()
             size = np.array([br.width(), br.height()])
             osx, osy = size * osFract
             offset = QtCore.QPointF(osx, osy)
             hps = [i[-1] for i in roi.getSceneHandlePositions(index=None)]
             hpsOffset = [self.mapSceneToView(hp) + offset for hp in hps]
             self.addPolyLineROI(hpsOffset)
예제 #8
0
 def setStyle(self, **opts):
     self.opts = opts
     
     if opts['style'] == 'tri':
         if opts['width'] is None:
             width = opts['size'] / 2.
         else:
             width = opts['width']
             
         points = [
             QtCore.QPointF(0,0),
             QtCore.QPointF(opts['size'],-width/2.),
             QtCore.QPointF(opts['size'],width/2.),
         ]
         poly = QtGui.QPolygonF(points)
         
     else:
         raise Exception("Unrecognized arrow style '%s'" % opts['style'])
     
     self.setPolygon(poly)
     
     if opts['pxMode']:
         self.setFlags(self.flags() | self.ItemIgnoresTransformations)
     else:
         self.setFlags(self.flags() & ~self.ItemIgnoresTransformations)
예제 #9
0
파일: ExLegendItem.py 프로젝트: kif/Py2DeX
    def paint(self, p, *args):
        #p.setRenderHint(p.Antialiasing)  # only if the data is antialiased.
        opts = self.item.opts

        if opts.get('fillLevel', None) is not None and opts.get(
                'fillBrush', None) is not None:
            p.setBrush(fn.mkBrush(opts['fillBrush']))
            p.setPen(fn.mkPen(None))
            p.drawPolygon(
                QtGui.QPolygonF([
                    QtCore.QPointF(2, 18),
                    QtCore.QPointF(18, 2),
                    QtCore.QPointF(18, 18)
                ]))

        if not isinstance(self.item, ScatterPlotItem):
            p.setPen(fn.mkPen(opts['pen']))
            p.drawLine(2, 18, 18, 2)

        symbol = opts.get('symbol', None)
        if symbol is not None:
            if isinstance(self.item, PlotDataItem):
                opts = self.item.scatter.opts

            pen = fn.mkPen(opts['pen'])
            brush = fn.mkBrush(opts['brush'])
            size = opts['size']

            p.translate(10, 10)
            path = drawSymbol(p, symbol, size, pen, brush)
예제 #10
0
    def __init__(self, clock, ref):
        pg.ItemGroup.__init__(self)
        self.size = 0.4
        self.item = QtGui.QGraphicsEllipseItem(
            QtCore.QRectF(0, 0, self.size, self.size))
        self.item.translate(-self.size * 0.5, -self.size * 0.5)
        self.item.setPen(clock.pen)
        self.item.setBrush(clock.brush)
        self.hand = QtGui.QGraphicsLineItem(0, 0, 0, self.size * 0.5)
        self.hand.setPen(pg.mkPen('w'))
        self.hand.setZValue(10)
        self.flare = QtGui.QGraphicsPolygonItem(
            QtGui.QPolygonF([
                QtCore.QPointF(0, -self.size * 0.25),
                QtCore.QPointF(0, self.size * 0.25),
                QtCore.QPointF(1, 0),
                QtCore.QPointF(0, -self.size * 0.25),
            ]))
        self.flare.setPen(pg.mkPen('y'))
        self.flare.setBrush(pg.mkBrush(100, 100, 0))
        self.flare.setZValue(-10)
        self.addItem(self.hand)
        self.addItem(self.item)
        self.addItem(self.flare)

        self.clock = clock
        self.ref = ref
        self.i = 1
예제 #11
0
파일: graphics.py 프로젝트: cdd1969/pygwa
    def paint(self, painter, option, widget=None):
        if (self.p1 == self.p2):
            return

        myPen = self.pen()
        myPen.setColor(self.myColor)
        arrowSize = self.myArrowHeadSize
        painter.setPen(myPen)
        painter.setBrush(self.myColor)

        line = QtCore.QLineF(self.p1, self.p2)

        angle = math.acos(line.dx() / line.length())
        if line.dy() >= 0:
            angle = (math.pi * 2.0) - angle

        arrowP1 = line.p2() - QtCore.QPointF(
            math.sin(angle + math.pi / 3.0) * arrowSize,
            math.cos(angle + math.pi / 3) * arrowSize)
        arrowP2 = line.p2() - QtCore.QPointF(
            math.sin(angle + math.pi - math.pi / 3.0) * arrowSize,
            math.cos(angle + math.pi - math.pi / 3.0) * arrowSize)

        self.arrowHead.clear()
        for point in [line.p2(), arrowP1, arrowP2]:
            self.arrowHead.append(point)

        painter.drawLine(line)
        painter.drawPolygon(self.arrowHead)
예제 #12
0
 def pixelHeight(self):
     vt = self.deviceTransform()
     if vt is None:
         return 0
     vt = vt.inverted()[0]
     return Point(
         vt.map(QtCore.QPointF(0, 1)) -
         vt.map(QtCore.QPointF(0, 0))).length()
예제 #13
0
 def __init__(self, origin, direction):
     pg.GraphicsObject.__init__(self)
     points = ArrowItem.pts(direction) + origin.reshape(2, 1)
     self.p1 = QtCore.QPointF(*points[:, 0])
     self.p2 = QtCore.QPointF(*points[:, 1])
     self.p3 = QtCore.QPointF(*points[:, 2])
     self.p4 = QtCore.QPointF(*points[:, 3])
     self.generatePicture()
예제 #14
0
    def plotVolue(self,xAxis,yAxis):
        if self.xData:
            if int(round(xAxis)) <=len(self.xData)-1:
                 xValue =self.xData[int(round(xAxis))]
            elif int(xAxis)>len(self.xData)-1:
                xValue=self.xData[len(self.xData)-1]
            else:
                xValue = self.xData[int(xAxis)]
            if (isinstance(xValue, dt.datetime)):
                xValueText = dt.datetime.strftime(xValue, '%Y-%m-%d %H:%M:%S')
            elif (isinstance(xValue, (str))):
                xValueText = xValue
            elif (isinstance(xValue, (int))):
                xValueText = xValue
            else:
                xValueText = ""
        else:
             xValueText=xAxis
        self.__textDate.setHtml(
            '<div style="text-align: center">\
                <span style="color: yellow; font-size: 20px;">x=%s</span>\
            </div>' \
            % (xValueText))
        self.__textSig.setHtml(
            '<div style="text-align: right">\
                <span style="color: yellow; font-size: 20px;">y=%0.2f</span>\
            </div>' \
            % (yAxis))
        # y,右上角显示
        rightAxis = self.__view.getAxis('right')
        rightAxisWidth = rightAxis.width()
        rectTextsig = self.__textDate.boundingRect()
        rectTextsigwidth = rectTextsig.width()
        topRight = self.__view.vb.mapSceneToView(
            QtCore.QPointF(self.rects[0].width() - (rightAxisWidth+rectTextsigwidth), self.rects[0].top()))
        if yAxis<self.rects[0].top():
            self.__textSig.anchor=Point((1,1));
        else:
            self.__textSig.anchor = Point((1, 0));


        self.__textSig.setPos(topRight.x(), yAxis)
        # X坐标时间显示
        rectTextDate = self.__textDate.boundingRect()
        rectTextDateHeight = rectTextDate.height()
        bottomAxis = self.__view.getAxis('bottom')
        bottomAxisHeight = bottomAxis.height()
        bottomRight = self.__view.vb.mapSceneToView(QtCore.QPointF(self.rects[0].width(), \
                                                                   self.rects[0].bottom() - (
                                                                       bottomAxisHeight + rectTextDateHeight)))
        # # 修改对称方式防止遮挡
        if xAxis >self.rects[0].width():
            self.__textDate.anchor = Point((1, 0))
        else:
            self.__textDate.anchor = Point((0, 0))


        self.__textDate.setPos(xAxis, bottomRight.y())
예제 #15
0
 def generatePicture(self):
     self.picture = QtGui.QPicture()
     p = QtGui.QPainter(self.picture)
     p.setPen(pg.mkPen(self.color))
     for spike in self.spike_position_list:
         if spike != -1:
             p.drawLine(QtCore.QPointF(self.t[spike], self.start_point),
                        QtCore.QPointF(self.t[spike], self.end_point))
     p.end()
예제 #16
0
 def pixelVectors(self):
     """Return vectors in local coordinates representing the width and height of a view pixel."""
     vt = self.deviceTransform()
     if vt is None:
         return None
     vt = vt.inverted()[0]
     orig = vt.map(QtCore.QPointF(0, 0))
     return vt.map(QtCore.QPointF(1, 0)) - orig, vt.map(QtCore.QPointF(
         0, 1)) - orig
예제 #17
0
 def updateBar(self):
     view = self.parentItem()
     if view is None:
         return
     p1 = view.mapFromViewToItem(self, QtCore.QPointF(0, 0))
     p2 = view.mapFromViewToItem(self, QtCore.QPointF(0, self.size))
     w = (p2 - p1).y()
     self.bar.setRect(QtCore.QRectF(0, 0, self._width, w))
     self.text.setPos(0, w / 2.)
예제 #18
0
 def setDragPoint(self, dragPoint):
     topLeft = QtCore.QPointF(self.__mouseDownPos)
     bottomRight = QtCore.QPointF(dragPoint)
     if dragPoint.x() < self.__mouseDownPos.x():
         topLeft.setX(dragPoint.x())
         bottomRight.setX(self.__mouseDownPos.x())
     if dragPoint.y() < self.__mouseDownPos.y():
         topLeft.setY(dragPoint.y())
         bottomRight.setY(self.__mouseDownPos.y())
     self.setPos(topLeft)
     self.resize(max(bottomRight.x() - topLeft.x(), 100),
                 max(bottomRight.y() - topLeft.y(), 100))
예제 #19
0
파일: overlays.py 프로젝트: mdsmith/PRmm
    def generatePicture(self):
        self.picture = QtGui.QPicture()
        p = QtGui.QPainter(self.picture)

        # Make this a checkbox in GUI
        regionTypesOfInterest = (Region.ALIGNMENT_REGION,
                                 Region.ADAPTER_REGION)

        for region in self.traceRegions:
            if region.regionType in regionTypesOfInterest:
                p.setPen(self.pens[region.regionType])
                y = self.regionOverlayY(region.regionType)
                p.drawLine(QtCore.QPointF(region.start, y),
                           QtCore.QPointF(region.end, y))
예제 #20
0
파일: pyqtplot.py 프로젝트: Bhumbra/Pyclamp
 def setRB(self, ev = None, pen = None, brush = None):
   if pen is not None and brush is not None:
     if self.RB is not None:
       self.RB.hide()
       self.RB = None
   if self.RB is None:
     if pen is None: pen = self.defRbPen
     if brush is None: brush = self.defRbBrush 
     self.RB = QtGui.QGraphicsRectItem(0, 0, 1, 1)
     self.RB.setPen(pen)
     self.RB.setBrush(brush)
     self.RB.hide()    
     if ev is None: self.view.addItem(self.RB, ignoreBounds=True)
     return
   elif ev is None: # release mouse button  
       self.RB.hide()
       return
   if type(ev) is QtGuiQGraphicsMouseEvent:  
     self.XY1 = ev.pos()
   self.keymod = ev.keymod
   x0, y0 = self.XY0.x(), self.XY0.y()
   x1, y1 = self.XY1.x(), self.XY1.y()
   xY, yX = False, False
   xr, yr = x0 > x1, y0 > y1 # Note: y are pixel values from top(left)
   if self.keymod not in self.keyMod:
     xY, yX = xr, yr
   else:
     xY = self.keymod == self.xyKeyMod[0]
     yX = self.keymod == self.xyKeyMod[1]
   if xY:
     x0 = 0.
     x1 = self.width()
   if yX:
     y0 = 0.
     y1 = self.height()
   X0, Y0 = self.mapxy(x0, y0, False) # bypasses axis
   X1, Y1 = self.mapxy(x1, y1, False) # transformation
   XY0 = QtCore.QPoint(X0, Y0)
   XY1 = QtCore.QPoint(X1, Y1)
   try: # to cope with old Qt4 versions.
     rb = QtCore.QRectF(XY0, XY1)
   except TypeError:
     XY0 = QtCore.QPointF(X0, Y0)
     XY1 = QtCore.QPointF(X1, Y1)
     rb = QtCore.QRectF(XY0, XY1)
   rb = self.childGroup.mapRectFromParent(rb)
   self.RB.setPos(rb.topLeft())
   self.RB.resetTransform()
   self.RB.scale(rb.width(), rb.height())
   self.RB.show()
예제 #21
0
    def paint(self, p, opt, widget):
        super(GradientLegend, self).paint(p, opt, widget)
        pen = QtGui.QPen(QtGui.QColor(0, 0, 0))
        rect = self.boundingRect()
        unit = self.pixelSize()

        offset = 10, 10
        size = widget.width() / 10, widget.height() / 3
        padding = 10

        x1 = rect.left() + unit[0] * offset[0]
        x2 = x1 + unit[0] * size[0]
        y1 = rect.bottom() - unit[1] * offset[1]
        y2 = y1 - unit[1] * size[1]

        # Draw background
        p.setPen(pen)
        p.setBrush(QtGui.QBrush(QtGui.QColor(255, 255, 255, 100)))
        rect = QtCore.QRectF(
            QtCore.QPointF(x1 - padding * unit[0], y1 + padding * unit[1]),
            QtCore.QPointF(x2 + padding * unit[0], y2 - padding * unit[1]))
        p.drawRect(rect)

        p.scale(unit[0], unit[1])

        # Draw color bar
        gradient = QtGui.QLinearGradient()
        i = 0.0
        while i < 1:
            color = plt.get_cmap(self.cm_type)(i)
            color = [x * 255 for x in color]
            gradient.setColorAt(i, QtGui.QColor(*color))
            i += 0.1
        gradient.setStart(0, y1 / unit[1])
        gradient.setFinalStop(0, y2 / unit[1])
        p.setBrush(gradient)
        rect = QtCore.QRectF(QtCore.QPointF(x1 / unit[0], y1 / unit[1]),
                             QtCore.QPointF(x2 / unit[0], y2 / unit[1]))
        p.drawRect(rect)

        # Draw labels
        self.labelsize = self.maximumLabelSize(p)
        lh = self.labelsize.height()
        p.setPen(QtGui.QPen(QtGui.QColor(0, 0, 0)))
        for label in self.labels:
            y = y1 + self.labels[label] * (y2 - y1)
            p.drawText(
                QtCore.QRectF(x1 + widget.width() / 20, y - lh / 2.0, 1000,
                              lh), QtCore.Qt.AlignVCenter, str(label))
 def generatePicture(self):
     ''' pre-computing a QPicture object allows paint() to run
     much more quickly, rather than re-drawing the shapes every time.'''
     self.picture = QtGui.QPicture()
     p = QtGui.QPainter(self.picture)
     p.setPen(pg.mkPen('w'))
     w = (self.data[1][0] - self.data[0][0]) / 3.
     for (t, opn, high, low, close) in self.data:
         p.drawLine(QtCore.QPointF(t, low), QtCore.QPointF(t, high))
         if opn > close:
             p.setBrush(pg.mkBrush('r'))
         else:
             p.setBrush(pg.mkBrush('g'))
         p.drawRect(QtCore.QRectF(t - w, opn, w * 2, close - opn))
     p.end()
예제 #23
0
    def __init__(self, data: RegularDataArray, parent=None, layout=0):
        """data is the RegularSpacedData to examine
        layout is an integer. 0 is a simple layout, 1 is a complete layout, and 2 is a special layout for 4D data"""
        super().__init__(parent)

        self.data: RegularDataArray = data
        self.parent = parent
        self.tool_layout: int = layout

        self.cursor: Cursor = Cursor(data)
        self.lineplots: Dict[str, Tuple[pg.PlotItem, str]] = {}  # dict of (PlotItem, orient), orient = 'h' or 'v'
        self.lineplots_data: Dict[str, Tuple[pg.PlotDataItem, str]] = {}  # dict of PlotDataItems, orient = 'h' or 'v'
        self.cursor_lines: Dict[str, List[InfiniteLineBinning]] = {}  # dict of cursor lines for 'x', 'y', 'z', etc.
        # self.bin_widths: List[SingleValueModel] = \
        #     [SingleValueModel(1.0) for i in range(data.ndim)]  # each dimension has a bin width
        self.imgs: Dict[str, ImageSlice] = {}  # a dictionary of ImageItems
        self.img_tr: Dict[str, QtGui.QTransform] = {}  # a dictionary of transforms going from index to coordinates
        self.img_tr_inv: Dict[str, QtGui.QTransform] = {}  # a dictionary of transforms going from coordinates to index
        self._signal_proxies: List[pg.SignalProxy] = []  # a list of created signal proxies to be held in memory
        # Properties for color map
        self.ct: np.array = np.array([])
        self.ct_name: str = 'viridis'
        # Properties for tracking the mouse
        self.mouse_pos: QtCore.QPointF = QtCore.QPointF(0, 0)
        self.mouse_panel: str = ''
        # Keyboard
        self.shift_down = False

        self.status_bar: str = ''  # string representing current mouse location

        self.load_ct(self.ct_name)
        self.build_layout()  # add plots according to chosen layout which populates self.lineplots and self.img_axes
        self.create_items()  # now that axes are ready, make ImageItems, PlotDataItems, and Cursor lines
        self.init_data()  # set data for each ImageItem, PlotDataItem, and connect cursors to data
예제 #24
0
    def drawObjects(self, view_manager):
        geom = view_manager._geometry

        for view in view_manager.getViewPorts():
            #   # get the showers from the process:
            self._drawnObjects.append([])
            tracks = self._process.getDataByPlane(view.plane())
            offset = geom.offset(view.plane()) / geom.time2cm()

            for i in xrange(len(tracks)):
                track = tracks[i]
                # construct a polygon for this track:
                points = []
                # Remeber - everything is in cm, but the display is in
                # wire/time!
                for pair in track.track():
                    x = pair.first / geom.wire2cm()
                    y = pair.second / geom.time2cm() + offset
                    points.append(QtCore.QPointF(x, y))

                # self._drawnObjects[view.plane()].append(thisPoly)

                thisPoly = polyLine(points)
                pen = pg.mkPen((130, 0, 0), width=2)
                thisPoly.setPen(pen)
                # polyLine.draw(view._view)

                view._view.addItem(thisPoly)

                self._drawnObjects[view.plane()].append(thisPoly)
예제 #25
0
    def paintEvent(self, ev):
        if self.opts is None:
            return
        if self.image is None:
            argb, alpha = fn.makeARGB(self.opts[0], *self.opts[1],
                                      **self.opts[2])
            self.image = fn.makeQImage(argb, alpha)
            self.opts = ()
        #if self.pixmap is None:
        #self.pixmap = QtGui.QPixmap.fromImage(self.image)
        p = QtGui.QPainter(self)
        if self.scaled:
            rect = self.rect()
            ar = rect.width() / float(rect.height())
            imar = self.image.width() / float(self.image.height())
            if ar > imar:
                rect.setWidth(int(rect.width() * imar / ar))
            else:
                rect.setHeight(int(rect.height() * ar / imar))

            p.drawImage(rect, self.image)
        else:
            p.drawImage(QtCore.QPointF(), self.image)
        #p.drawPixmap(self.rect(), self.pixmap)
        p.end()
예제 #26
0
파일: xmaze.py 프로젝트: cdoolin/rat-apps
    def Summary(self):
        self.distance = 0
        self.raw_time_open = 0
        self.raw_time_close = 0

        roiShape = self.roi.mapToView(self.roi.shape())
        roi_2Shape = self.roi.mapToView(self.roi_2.shape())
        roi_3Shape = self.roi.mapToView(self.roi_3.shape())
        roi_4Shape = self.roi.mapToView(self.roi_4.shape())

        pt = QtCore.QPointF()
        for i, v in enumerate(self.valueNframe):
            if i < len(self.valueNframe) - 1:
                dist = math.sqrt((self.valueX[i + 1] - self.valueX[i])**2 +
                                 (self.valueY[i + 1] - self.valueY[i])**2)
                self.distance = self.distance + dist
                pt.setX(self.valueX[i])
                pt.setY(self.valueY[i])
                if roiShape.contains(pt) or roi_3Shape.contains(pt):
                    self.raw_time_close = self.raw_time_close + 10
                if roi_2Shape.contains(pt) or roi_4Shape.contains(pt):
                    self.raw_time_open = self.raw_time_open + 10

        print(f"raw_open: {self.raw_time_open}")
        print(f"raw_close: {self.raw_time_close}")
        print(f"fps: {self.fps}")

        self.time_open = self.raw_time_open / self.fps
        self.time_close = self.raw_time_close / self.fps
예제 #27
0
 def resizeEvent(self, ev):
     #c1 = self.boundingRect().center()
     #c2 = self.item.mapToParent(self.item.boundingRect().center()) # + self.item.pos()
     #dif = c1 - c2
     #self.item.moveBy(dif.x(), dif.y())
     #print c1, c2, dif, self.item.pos()
     self.item.setPos(0,0)
     bounds = self.itemRect()
     left = self.mapFromItem(self.item, QtCore.QPointF(0,0)) - self.mapFromItem(self.item, QtCore.QPointF(1,0))
     rect = self.rect()
     
     if self.opts['justify'] == 'left':
         if left.x() != 0:
             bounds.moveLeft(rect.left())
         if left.y() < 0:
             bounds.moveTop(rect.top())
         elif left.y() > 0:
             bounds.moveBottom(rect.bottom())
             
     elif self.opts['justify'] == 'center':
         bounds.moveCenter(rect.center())
         #bounds = self.itemRect()
         #self.item.setPos(self.width()/2. - bounds.width()/2., 0)
     elif self.opts['justify'] == 'right':
         if left.x() != 0:
             bounds.moveRight(rect.right())
         if left.y() < 0:
             bounds.moveBottom(rect.bottom())
         elif left.y() > 0:
             bounds.moveTop(rect.top())
         #bounds = self.itemRect()
         #self.item.setPos(self.width() - bounds.width(), 0)
         
     self.item.setPos(bounds.topLeft() - self.itemRect().topLeft())
     self.updateMin()
예제 #28
0
    def pasteSelectedNodes(self):
        # TODO figure out right positions and preserve topology?
        pos = self.mapToView(self.paste_pos)

        for node in self.selected_nodes:
            self.widget.chart.createNode(type(node).__name__, pos=pos, prompt=False)
            pos += QtCore.QPointF(200, 0)
예제 #29
0
    def resizeEvent(self, ev=None):
        #s = self.size()

        ## Set the position of the label
        nudge = 5
        br = self.label.boundingRect()
        p = QtCore.QPointF(0, 0)
        if self.orientation == 'left':
            p.setY(int(self.size().height() / 2 + br.width() / 2))
            p.setX(-nudge)
            #s.setWidth(10)
        elif self.orientation == 'right':
            #s.setWidth(10)
            p.setY(int(self.size().height() / 2 + br.width() / 2))
            p.setX(int(self.size().width() - br.height() + nudge))
        elif self.orientation == 'top':
            #s.setHeight(10)
            p.setY(-nudge)
            p.setX(int(self.size().width() / 2. - br.width() / 2.))
        elif self.orientation == 'bottom':
            p.setX(int(self.size().width() / 2. - br.width() / 2.))
            #s.setHeight(10)
            p.setY(int(self.size().height() - br.height() + nudge))
        #self.label.resize(s)
        self.label.setPos(p)
        self.picture = None
예제 #30
0
def test_mouseInteraction():
    # disable delay of mouse move events because events is called immediately in test
    pg.setConfigOption('mouseRateLimit', -1)

    plt = pg.plot()
    plt.scene().minDragTime = 0  # let us simulate mouse drags very quickly.
    vline = plt.addLine(x=0, movable=True)
    hline = plt.addLine(y=0, movable=True)
    hline2 = plt.addLine(y=-1, movable=False)
    plt.setXRange(-10, 10)
    plt.setYRange(-10, 10)

    # test horizontal drag
    pos = plt.plotItem.vb.mapViewToScene(pg.Point(0, 5))
    pos2 = pos - QtCore.QPointF(200, 200)
    mouseMove(plt, pos)
    assert vline.mouseHovering is True and hline.mouseHovering is False
    mouseDrag(plt, pos, pos2, QtCore.Qt.MouseButton.LeftButton)
    px = vline.pixelLength(pg.Point(1, 0), ortho=True)
    assert abs(vline.value() - plt.plotItem.vb.mapSceneToView(pos2).x()) <= px

    # test missed drag
    pos = plt.plotItem.vb.mapViewToScene(pg.Point(5, 0))
    pos = pos + QtCore.QPointF(0, 6)
    pos2 = pos + QtCore.QPointF(-20, -20)
    mouseMove(plt, pos)
    assert vline.mouseHovering is False and hline.mouseHovering is False
    mouseDrag(plt, pos, pos2, QtCore.Qt.MouseButton.LeftButton)
    assert hline.value() == 0

    # test vertical drag
    pos = plt.plotItem.vb.mapViewToScene(pg.Point(5, 0))
    pos2 = pos - QtCore.QPointF(50, 50)
    mouseMove(plt, pos)
    assert vline.mouseHovering is False and hline.mouseHovering is True
    mouseDrag(plt, pos, pos2, QtCore.Qt.MouseButton.LeftButton)
    px = hline.pixelLength(pg.Point(1, 0), ortho=True)
    assert abs(hline.value() - plt.plotItem.vb.mapSceneToView(pos2).y()) <= px

    # test non-interactive line
    pos = plt.plotItem.vb.mapViewToScene(pg.Point(5, -1))
    pos2 = pos - QtCore.QPointF(50, 50)
    mouseMove(plt, pos)
    assert hline2.mouseHovering == False
    mouseDrag(plt, pos, pos2, QtCore.Qt.MouseButton.LeftButton)
    assert hline2.value() == -1
    plt.close()