def __init__(self, *args, **kwargs): KineticsDisplayItem.__init__(self, *args, **kwargs) points = [ QtCore.QPointF(ReacItem.defaultWidth / 4, 0), QtCore.QPointF(0, ReacItem.defaultHeight / 4), QtCore.QPointF(ReacItem.defaultWidth, ReacItem.defaultHeight / 4), QtCore.QPointF(3 * ReacItem.defaultWidth / 4, ReacItem.defaultHeight / 2) ] path = QtGui.QPainterPath() path.moveTo(points[0]) for p in points[1:]: path.lineTo(p) path.moveTo(p) self.gobj = QGraphicsPathItem(path, self) self.gobj.setPen( QtGui.QPen(QtCore.Qt.black, 2, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin)) self.gobj.mobj = self.mobj #classname = self.mobj.className # classname = 'ReacBase' # doc = moose.element('/classes/%s' % (classname)).docs # print "docs ",self.gobj.mobj, " ",doc # doc = doc.split('Description:')[-1].split('Name:')[0].strip() self._Kf = self.gobj.mobj.Kf self._Kb = self.gobj.mobj.Kb doc = "Kf\t: " + str(self._Kf) + "\nKb\t: " + str(self._Kb) self.gobj.setToolTip(doc)
def paintEvent(self, event): painter = QtGui.QPainter() painter.begin(self) painter.fillRect(self.rect(), QtCore.Qt.black) painter.setRenderHint(QtGui.QPainter.Antialiasing, True) if self.burst is not None: #painter.setPen(QtCore.Qt.green) path = QtGui.QPainterPath() path.moveTo(0, 0) for x in range(len(self._mag_spectrum)): y = self._mag_spectrum[x] path.lineTo(x, y) path.lineTo(len(self._mag_spectrum), 0) #if self._drag_x: painter.save() painter.translate(self.width(), self.height()) scale_y = float(self.height()) / self._burst_max painter.scale(-self.scale_x, -scale_y) brush = QtGui.QBrush(QtCore.Qt.red) painter.fillPath(path, brush) painter.restore() painter.save() painter.translate(0, self.height()) scale_y = float(self.height()) / self._burst_max painter.scale(self.scale_x, -scale_y) brush = QtGui.QBrush(QtCore.Qt.green) painter.fillPath(path, brush) painter.restore() painter.end()
def paintEvent(self, event): painter = QtGui.QPainter() painter.begin(self) painter.fillRect(self.rect(), QtCore.Qt.black) painter.setRenderHint(QtGui.QPainter.Antialiasing, True) if self.burst is not None: #painter.setPen(QtCore.Qt.green) path = QtGui.QPainterPath() path.moveTo(0, 0) for x in xrange(len(self._mag_spectrum)): y = self._mag_spectrum[x] path.lineTo(x, y) path.lineTo(len(self._mag_spectrum), 0) #if self._drag_x: painter.save() painter.translate(self.width(), self.height()) scale_y = float(self.height()) / self._burst_max painter.scale(-self.scale_x, -scale_y) brush = QtGui.QBrush(QtCore.Qt.red) painter.fillPath(path, brush) painter.restore() painter.save() painter.translate(0, self.height()) scale_y = float(self.height()) / self._burst_max painter.scale(self.scale_x, -scale_y) brush = QtGui.QBrush(QtCore.Qt.green) painter.fillPath(path, brush) painter.restore() painter.end()
def setPaintPath(self, bool=False): ## also used by waypts path = QPainterPath() for pt in self.pathMaker.pts: ## pts on the screen if not path.elementCount(): path.moveTo(QPointF(pt)) path.lineTo(QPointF(pt)) if bool: path.closeSubpath() return path
def _generate_path(self): path = QtGui.QPainterPath() if self.data is not None: histogram = numpy.histogram(self.data, bins=self.bin_count) path.moveTo(0, histogram[1][0]) for i in range(len(histogram[1]) - 1): x = histogram[0][i] y = (histogram[1][i] + histogram[1][i + 1]) / 2.0 path.lineTo(x, y) path.lineTo(0, histogram[1][-1]) return path
def __init__(self, settings, x1, y1, x2, y2): QGraphicsPathItem.__init__(self) self.__settings = settings path = QPainterPath() path.moveTo(x1, y1) path.lineTo(x2, y2) self.setPath(path) self.penStyle = None self.penColor = None self.penWidth = None
def _generate_path(self): path = QtGui.QPainterPath() if self.data is not None: sampling_interval = self.data.sampling_interval path.moveTo(0, 0) for i in xrange(self.data.sample_count): x = i * sampling_interval y = self.data.samples[i] path.lineTo(x, y) path.lineTo(self.data.duration, 0) return path
def _generate_path(self): path = QtGui.QPainterPath() if self.data is not None: histogram = numpy.histogram(self.data, bins=self.bin_count) path.moveTo(0, histogram[1][0]) for i in xrange(len(histogram[1]) - 1): x = histogram[0][i] y = (histogram[1][i] + histogram[1][i+1]) / 2.0 path.lineTo(x, y) path.lineTo(0, histogram[1][-1]) return path
def _generate_path(self): path = QtGui.QPainterPath() if self.data is not None: sampling_interval = self.data.sampling_interval path.moveTo(0, 0) for i in range(self.data.sample_count): x = i * sampling_interval y = self.data.samples[i] path.lineTo(x, y) path.lineTo(self.data.duration, 0) return path
def __init__( self, settings, x1, y1, x2, y2 ): QGraphicsPathItem.__init__( self ) self.__settings = settings path = QPainterPath() path.moveTo( x1, y1 ) path.lineTo( x2, y2 ) self.setPath( path ) self.penStyle = None self.penColor = None self.penWidth = None return
def curve(path, center, radius, tstart, tstop): '''add an arc to path tstart/tstop in degrees ''' center = array(center) if tstart > tstop: dt = -1. else: dt = 1. for t in arange(tstart, tstop, dt) * DEG: pt = center + [radius * cos(t), radius * sin(t)] path.lineTo(*pt) pt = center + [radius * cos(tstop * DEG), radius * sin(tstop * DEG)] path.lineTo(*pt) return path
def drawCurve(curve, path): assert len(curve) > 1 if len(curve) == 2: point = curve[-1] coordinates = (point.x, point.y) path.lineTo(coordinates) elif len(curve) == 3: onCurve0 = curve[0] offCurve = curve[1] onCurve1 = curve[2] x0 = onCurve0.x + (offCurve.x - onCurve0.x) * 1 / 1.3 y0 = onCurve0.y + (offCurve.y - onCurve0.y) * 1 / 1.3 offCurve0 = (x0, y0) x1 = onCurve1.x - (onCurve1.x - offCurve.x) * 1 / 1.3 y1 = onCurve1.y - (onCurve1.y - offCurve.y) * 1 / 1.3 offCurve1 = (x1, y1) #self.drawMarkerCircle(offCurve0, NSColor.yellowColor(), 4) #self.drawMarkerCircle(offCurve1, NSColor.yellowColor(), 4) #NSColor.blackColor().set() fill(0, 0, 0) onCurve = (onCurve1.x, onCurve1.y) path.curveTo(offCurve0, offCurve1, onCurve) else: offCurve0 = curve[1] offCurve1 = curve[2] curve0 = curve[:2] curve1 = curve[2:] # Implied point. x = offCurve0.x + (offCurve1.x - offCurve0.x) * 0.5 y = offCurve0.y + (offCurve1.y - offCurve0.y) * 0.5 newOnCurve = Point(x, y, 1) #drawMarkerCircle((x, y), NSColor.greenColor(), 4) curve0.append(newOnCurve) curve1.insert(0, newOnCurve) (curve0, path) # First part, length is three. drawCurve(curve1, path) # Second part, length >= 3.
def paint(self, painter, option, widget): r = self.radius if not self.captured and self.glow and settings.on_shadows: gr = settings.glow_radius img = QImage(gr * 2, gr * 2, 6) img.fill(0) ipainter = QPainter(img) grad = QRadialGradient(gr, gr, gr) alpha = int(self.radius / settings.max_planet_radius * 4 if self.bang else 1) * 50 grad.setColorAt(0, QColor(255, 166, 0, min(alpha, 255))) grad.setColorAt(1, QColor(0, 0, 0, 0)) brush = QBrush(grad) ipainter.setBrush(brush) ipainter.setPen(QColor(0, 0, 0, 0)) ipainter.drawEllipse(0, 0, gr * 2, gr * 2) ipainter.setCompositionMode(7) for fangle, sl, fp, sp in self.shadow_collection: path = QPainterPath(QPointF(*fp)) path.arcTo(0, 0, gr * 2, gr * 2, fangle, sl) path.lineTo(*sp) path.lineTo(*fp) ipainter.fillPath(path, QBrush(QColor(0, 0, 0, 0))) ipainter.end() painter.drawImage(r - gr, r - gr, img) self.shadow_collection = [] super(Planet, self).paint(painter, option, widget) if not self.glow: for rate, vect in self.glow_collection: r_vect = Vect(r, r) vect.len = r vect += r_vect x, y = vect.coord alpha = int(255 * rate) grad = QRadialGradient(x, y, r * 2) grad.setColorAt(0, QColor(255, 166, 0, alpha)) grad.setColorAt(0.7, QColor(0, 0, 0, 0)) brush = QBrush(grad) painter.setBrush(brush) painter.setPen(QColor(0, 0, 0, 0)) painter.drawEllipse(0, 0, r * 2, r * 2) self.glow_collection = [] self.draw_atmosphere(painter)
def refresh( self,scale): defaultWidth = ReacItem.defaultWidth*scale defaultHeight = ReacItem.defaultHeight*scale points = [QtCore.QPointF(defaultWidth/4, 0), QtCore.QPointF(0,defaultHeight/4), QtCore.QPointF(defaultWidth, defaultHeight/4), QtCore.QPointF(3*defaultWidth/4,defaultHeight/2)] path = QtGui.QPainterPath() path.moveTo(points[0]) for p in points[1:]: path.lineTo(p) path.moveTo(p) self.gobj.setPath(path) ReacPen = self.gobj.pen() defaultpenwidth = ReacItem.defaultPenWidth reacWidth = defaultpenwidth*scale ReacPen.setWidth(reacWidth) self.gobj.setPen(ReacPen)
def __path(self, width): line = QtCore.QLineF(self.sourcePoint, self.destPoint) #print "Source: (%s, %s)" % (self.sourcePoint.x(), self.sourcePoint.y()) #print "Dest: (%s, %s)" % (self.destPoint.x(), self.destPoint.y()) #print "Delta: (%s, %s)" % (line.dx(), line.dy()) if line.length() == 0: angle = 0.0 else: angle = math.asin(line.dx() / line.length()) if line.dy() <= 0: angle = 6.28 - angle #print "Angle: ", math.degrees(angle) cap_angle = math.radians(90) - angle #print "Cap angle: ", math.degrees(cap_angle) cap_deltax = math.sin(cap_angle) * (width/2) cap_deltay = math.cos(cap_angle) * (width/2) #print "Length: ", math.pow((math.pow(cap_deltax, 2.0)+math.pow(cap_deltay, 2.0)), 0.5) #print "Delta: (%f, %f)" % (cap_deltax, cap_deltay) sourceP1 = QtCore.QPointF(self.sourcePoint.x() - cap_deltax, self.sourcePoint.y() + cap_deltay) destP1 = QtCore.QPointF(self.destPoint.x() - cap_deltax, self.destPoint.y() + cap_deltay) destP2 = QtCore.QPointF(self.destPoint.x() + cap_deltax, self.destPoint.y() - cap_deltay) sourceP2 = QtCore.QPointF(self.sourcePoint.x() + cap_deltax, self.sourcePoint.y() - cap_deltay) path = QtGui.QPainterPath() path.moveTo(sourceP1) path.lineTo(destP1) path.lineTo(destP2) path.lineTo(sourceP2) return path
def __init__(self, *args, **kwargs): KineticsDisplayItem.__init__(self, *args, **kwargs) points = [ QtCore.QPointF(0, TableItem.defaultWidth / 2), QtCore.QPointF(TableItem.defaultHeight / 2 - 2, 0), QtCore.QPointF(TableItem.defaultWidth / 2 + 2, 0), QtCore.QPointF(TableItem.defaultWidth, TableItem.defaultHeight / 2), ] path = QtGui.QPainterPath() path.moveTo(points[0]) for p in points[1:]: path.lineTo(p) path.moveTo(p) path.moveTo(0, 0) path.lineTo(TableItem.defaultWidth, 0) path.moveTo(-(TableItem.defaultWidth / 3), TableItem.defaultHeight / 4) path.lineTo((TableItem.defaultWidth + 10), TableItem.defaultHeight / 4) self.gobj = QGraphicsPathItem(path, self) #self.gobj.setToolTip("Need to see what to show unlike conc/nint for pool") tabledoc = (element(self.mobj.path)).outputValue self.gobj.setToolTip(str(tabledoc)) self.gobj.setPen( QtGui.QPen(QtCore.Qt.black, 2, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin)) self.gobj.mobj = self.mobj
def __init__(self, diagramType, contextMenu, parent=None, scene=None): super(DiagramItem, self).__init__(parent, scene) self.arrows = [] self.diagramType = diagramType self.contextMenu = contextMenu path = QtGui.QPainterPath() if self.diagramType == self.StartEnd: path.moveTo(200, 50) path.arcTo(150, 0, 50, 50, 0, 90) path.arcTo(50, 0, 50, 50, 90, 90) path.arcTo(50, 50, 50, 50, 180, 90) path.arcTo(150, 50, 50, 50, 270, 90) path.lineTo(200, 25) self.myPolygon = path.toFillPolygon() elif self.diagramType == self.Conditional: self.myPolygon = QtGui.QPolygonF([ QtCore.QPointF(-25, 0), QtCore.QPointF(0, 25), QtCore.QPointF(25, 0), QtCore.QPointF(0, -25), QtCore.QPointF(-25, 0)]) elif self.diagramType == self.Step: self.myPolygon = QtGui.QPolygonF([ QtCore.QPointF(-25, -25), QtCore.QPointF(25, -25), QtCore.QPointF(25, 25), QtCore.QPointF(-25, 25), QtCore.QPointF(-25, -25)]) else: self.myPolygon = QtGui.QPolygonF([ QtCore.QPointF(-30, -20), QtCore.QPointF(-15, 20), QtCore.QPointF(30, 20), QtCore.QPointF(15, -20), QtCore.QPointF(-30, -20)]) self.setPolygon(self.myPolygon) self.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True) self.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True)
def polygonToCurvedPath(polygon, radius): path = QPainterPath() for i, pt in enumerate(polygon): #TODO: if two points are too close to draw the desired radius, either remove those points or draw at smaller radius px, py = polygon[i - 1] if i > 0 else polygon[-1] nx, ny = polygon[i + 1] if i < len(polygon) - 1 else polygon[0] x, y = pt if px == x: dy = y - py r = radius if dy < 0 else -radius p1 = QPointF(x, y + r) else: dx = x - px r = radius if dx < 0 else -radius p1 = QPointF(x + r, y) if x == nx: dy = y - ny r = radius if dy < 0 else -radius p2 = QPointF(x, y + r) else: dx = x - nx r = radius if dx < 0 else -radius p2 = QPointF(x + r, y) if i == 0: path.moveTo(p1) else: path.lineTo(p1) path.cubicTo(pt, pt, p2) path.closeSubpath() return path
def refresh( self,scale): defaultWidth = TableItem.defaultWidth*scale defaultHeight = TableItem.defaultHeight*scale points = [QtCore.QPointF(0,defaultWidth/2), QtCore.QPointF(defaultHeight/2-2,0), QtCore.QPointF(defaultWidth/2+2,0), QtCore.QPointF(defaultWidth,defaultHeight/2) ] path = QtGui.QPainterPath() path.moveTo(points[0]) for p in points[1:]: path.lineTo(p) path.moveTo(p) path.moveTo(0,0) path.lineTo(defaultWidth,0) path.moveTo(-(defaultWidth/3),defaultHeight/4) path.lineTo((defaultWidth+10),defaultHeight/4) self.gobj.setPath(path) TablePen = self.gobj.pen() defaultpenwidth = TableItem.defaultPenWidth tableWidth = TableItem.defaultPenWidth*scale TablePen.setWidth(tableWidth) self.gobj.setPen(TablePen)
def contourToPath(contour): path = BezierPath() p0prev = 0 p1prev = 0 cp2 = None for segment in contour: points = segment[1] if segment[0] == 'M': p0, p1 = points p0prev = p0 = float(p0) p1prev = p1 = float(p1) point = (p0, p1) path.moveTo(point) elif segment[0] == 'L': p0, p1 = points p0 = float(p0) p1 = float(p1) p0prev = p0 p1prev = p1 point = (p0, p1) path.lineTo(point) elif segment[0] == 'l': p0, p1 = points p0 = float(p0) + p0prev p1 = float(p1) + p1prev p0prev = p0 p1prev = p1 point = (p0, p1) path.lineTo(point) elif segment[0] == 'h': p0 = points[0] p0 = float(p0) + p0prev p1 = p1prev p0prev = p0 point = (p0, p1) path.lineTo(point) elif segment[0] == 'H': p0 = points[0] p0 = float(p0) p1 = p1prev p0prev = p0 point = (p0, p1) path.lineTo(point) elif segment[0] == 'v': p1 = points[0] p1 = float(p1) + p1prev p0 = p0prev p1prev = p1 point = (p0, p1) path.lineTo(point) elif segment[0] == 'V': p1 = points[0] p1 = float(p1) p0 = p0prev p1prev = p1 point = (p0, p1) path.lineTo(point) elif segment[0] == 'C': p0 = float(points.pop(0)) p1 = float(points.pop(0)) p2 = float(points.pop(0)) p3 = float(points.pop(0)) p4 = float(points.pop(0)) p5 = float(points.pop(0)) p0prev = p4 p1prev = p5 cp2 = reflect(p2, p3, p4, p5) # TODO: move to S, s path.curveTo((p0, p1), (p2, p3), (p4, p5)) elif segment[0] == 'c': p0 = float(points.pop(0)) + p0prev p1 = float(points.pop(0)) + p1prev p2 = float(points.pop(0)) + p0prev p3 = float(points.pop(0)) + p1prev p4 = float(points.pop(0)) + p0prev p5 = float(points.pop(0)) + p1prev p0prev = p4 p1prev = p5 path.curveTo((p0, p1), (p2, p3), (p4, p5)) cp2 = reflect(p2, p3, p4, p5) # TODO: move to S, s elif segment[0] == 's': p0 = float(points.pop(0)) + p0prev p1 = float(points.pop(0)) + p1prev p2 = float(points.pop(0)) + p0prev p3 = float(points.pop(0)) + p1prev p0prev = p2 p1prev = p3 path.curveTo(cp2, (p0, p1), (p2, p3)) elif segment[0] == 'S': p0 = float(points.pop(0)) p1 = float(points.pop(0)) p2 = float(points.pop(0)) p3 = float(points.pop(0)) p0prev = p2 p1prev = p3 path.curveTo(cp2, (p0, p1), (p2, p3)) #path.curveTo() path.closePath() return path
def contourToPath(contour): u"""Converts SVG contour to a path in DrawBot.""" path = BezierPath() pPrev = [0.0, 0.0] pPrev2 = None previousCommand = None for segment in contour: command = segment[0] points = segment[1] relative = False if command.islower(): relative = True command = command.lower() if command == 'm': if relative: points = getRelative(points, pPrev) path.moveTo(points[0]) elif command in ('l', 'h', 'v'): if command == 'l': if relative: points = getRelative(points, pPrev) elif command == 'h': if relative: points[0][0] += pPrev[0] points[0].append(pPrev[1]) elif command == 'v': points[0].insert(0, pPrev[0]) if relative: points[0][1] += pPrev[1] path.lineTo(points[0]) elif command == 'c': if relative: points = getRelative(points, pPrev) path.curveTo(*points) elif command == 's': if relative: points = getRelative(points, pPrev) # TODO: From the spec: # # If there is no previous command or if the previous command was # not an C, c, S or s, assume the first control point is coincident # with the current point if previousCommand in ('c', 's'): cp = reflect(pPrev2, pPrev) else: print('TODO: implement, test') #copyPoint(cp, points[0]) path.curveTo(cp, *points) elif command == 'z': continue copyPoint(pPrev, points[-1]) if command in ('c', 's'): pPrev2 = [0.0, 0.0] copyPoint(pPrev2, points[-2]) else: pPrev2 = None previousCommand = command path.closePath() return path
def GetLinePath(points: List[Tuple[int, int]]): """Returns a drawable line path representing. Points should be a list of tuples representing (x, y) pixel values.""" path = QPainterPath() path.moveTo(*points[0]) [path.lineTo(x, y) for x, y in points] return path
def contourToPath(contour): u"""Converts SVG contour to a path in DrawBot.""" path = BezierPath() pPrev = [0.0, 0.0] pPrev2 = None previousCommand = None for segment in contour: command = segment[0] points = segment[1] relative = False if command.islower(): relative = True command = command.lower() if command == 'm': if relative: points = getRelative(points, pPrev) path.moveTo(points[0]) elif command in ('l', 'h', 'v'): if command == 'l': if relative: points = getRelative(points, pPrev) elif command == 'h': if relative: points[0][0] += pPrev[0] points[0].append(pPrev[1]) elif command == 'v': points[0].insert(0, pPrev[0]) if relative: points[0][1] += pPrev[1] path.lineTo(points[0]) elif command == 'c': if relative: points = getRelative(points, pPrev) path.curveTo(*points) elif command == 's': if relative: points = getRelative(points, pPrev) # TODO: From the spec: # # If there is no previous command or if the previous command was # not an C, c, S or s, assume the first control point is coincident # with the current point if previousCommand in ('c', 's'): cp = reflect(pPrev2, pPrev) else: print 'TODO: implement, test' #copyPoint(cp, points[0]) path.curveTo(cp, *points) elif command == 'z': continue copyPoint(pPrev, points[-1]) if command in ('c', 's'): pPrev2 = [0.0, 0.0] copyPoint(pPrev2, points[-2]) else: pPrev2 = None previousCommand = command path.closePath() return path