def drawOutline(self, painter, xMap, yMap, from_, to): doAlign = QwtPainter.roundingAlignment(painter) if self.orientation() == Qt.Horizontal: v0 = xMap.transform(self.baseline()) else: v0 = yMap.transform(self.baseline()) if doAlign: v0 = round(v0) previous = QwtIntervalSample() polygon = QPolygonF() for i in range(from_, to + 1): sample = self.sample(i) if not sample.interval.isValid(): self.flushPolygon(painter, v0, polygon) previous = sample continue if previous.interval.isValid(): if not qwtIsCombinable(previous.interval, sample.interval): self.flushPolygon(painter, v0, polygon) if self.orientation() == Qt.Vertical: x1 = xMap.transform(sample.interval.minValue()) x2 = xMap.transform(sample.interval.maxValue()) y = yMap.transform(sample.value) if doAlign: x1 = round(x1) x2 = round(x2) y = round(y) if polygon.size() == 0: polygon += QPointF(x1, v0) polygon += QPointF(x1, y) polygon += QPointF(x2, y) else: y1 = yMap.transform(sample.interval.minValue()) y2 = yMap.transform(sample.interval.maxValue()) x = xMap.transform(sample.value) if doAlign: y1 = round(y1) y2 = round(y2) x = round(x) if polygon.size() == 0: polygon += QPointF(v0, y1) polygon += QPointF(x, y1) polygon += QPointF(x, y2) previous = sample self.flushPolygon(painter, v0, polygon)
def series_to_polyline(xMap, yMap, series, from_, to): """ Convert series data to QPolygon(F) polyline """ polyline = QPolygonF(to-from_+1) pointer = polyline.data() dtype, tinfo = np.float, np.finfo # integers: = np.int, np.iinfo pointer.setsize(2*polyline.size()*tinfo(dtype).dtype.itemsize) memory = np.frombuffer(pointer, dtype) memory[:(to-from_)*2+1:2] = xMap.transform(series.xData()[from_:to+1]) memory[1:(to-from_)*2+2:2] = yMap.transform(series.yData()[from_:to+1]) return polyline
def series_to_polyline(xMap, yMap, series, from_, to): """ Convert series data to QPolygon(F) polyline """ polyline = QPolygonF(to - from_ + 1) pointer = polyline.data() dtype, tinfo = np.float, np.finfo # integers: = np.int, np.iinfo pointer.setsize(2 * polyline.size() * tinfo(dtype).dtype.itemsize) memory = np.frombuffer(pointer, dtype) memory[:(to - from_) * 2 + 1:2] = xMap.transform(series.xData()[from_:to + 1]) memory[1:(to - from_) * 2 + 2:2] = yMap.transform(series.yData()[from_:to + 1]) return polyline
def drawPolyline(self, *args): if len(args) == 2: painter, polygon = args deviceClipping, clipRect = qwtIsClippingNeeded(painter) cpa = polygon if deviceClipping: if isinstance(polygon, QPolygonF): cpa = QwtClipper().clipPolygonF(clipRect, polygon) else: cpa = QwtClipper().clipPolygon(clipRect, polygon) qwtDrawPolyline(painter, cpa, cpa.size(), self.__polylineSplitting) elif len(args) == 3: painter, points, pointCount = args deviceClipping, clipRect = qwtIsClippingNeeded(painter) if deviceClipping: if isinstance(points[0], QPointF): polygon = QPolygonF(points) polygon = QwtClipper().clipPolygonF(clipRect, polygon) else: polygon = QPolygon(points) polygon = QwtClipper().clipPolygon(clipRect, polygon) qwtDrawPolyline(painter, polygon, polygon.size(), self.__polylineSplitting) # polygon = QPolygonF(pointCount) # pointer = polygon.data() # pointer.setsize(pointCount*2*np.finfo(float).dtype.itemsize) # memory = np.frombuffer(pointer, float) # memory[0::2] = xdata # memory[1::2] = ydata else: qwtDrawPolyline(painter, points, pointCount, self.__polylineSplitting) else: raise TypeError("QwtPainter.drawPolyline() takes 2 or 3 argument"\ "(s) (%s given)" % len(args))