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)
Exemple #2
0
    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()
Exemple #3
0
	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()
Exemple #4
0
 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
Exemple #5
0
    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
Exemple #6
0
    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
Exemple #7
0
	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
Exemple #8
0
	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
Exemple #9
0
    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
Exemple #10
0
    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 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.
Exemple #14
0
    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)
Exemple #16
0
   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
Exemple #18
0
    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)
Exemple #19
0
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
Exemple #20
0
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)
Exemple #22
0
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
Exemple #23
0
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
Exemple #24
0
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
Exemple #25
0
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