示例#1
0
def Grouping():
    s = pysvg.Svg()

    # testing container
    myStyle = pysvg.StyleBuilder()
    myStyle.setStrokeWidth(2)
    myStyle.setStroke("green")

    group = pysvg.G()
    group.set_style(myStyle.getStyle())
    group.addElement(pysvg.Line(300, 300, 600, 600))
    group.addElement(pysvg.Circle(500, 500, 50))
    s.addElement(group)

    group = pysvg.G()
    group.set_style(myStyle.getStyle())
    style_dict = {
        "stroke": "#000000",
        "fill": "none",
        "stroke-width": "49",
        "stroke-opacity": "0.027276"
    }
    p = pysvg.Path(pathData="M 300 100 A 1,1 0 0 1 802,800")
    p.set_style(pysvg.StyleBuilder(style_dict).getStyle())
    p2 = pysvg.Path(pathData="M 100 300 A 1,1 0 0 1 802,800")
    p2.set_style(pysvg.StyleBuilder(style_dict).getStyle())
    group.addElement(p)
    group.addElement(p2)
    s.addElement(group)
    print s.getXML()
    s.save('./testoutput/7_Grouping.svg')
示例#2
0
def createPaths():
    elements = []
    sh = pysvg.StyleBuilder()
    sh.setFilling('#EEE')
    sh.setStroke('#00F')
    sh.setStrokeWidth('2px')
    path1 = pysvg.Path('M 40,530 L 100,560 L 60,520 Z', style=sh.getStyle())

    sh2 = pysvg.StyleBuilder()
    sh2.setFilling('#FFC')
    sh2.setStroke('#00F')
    sh2.setStrokeWidth('2px')
    path2 = pysvg.Path(style=sh2.getStyle())
    path2.appendMoveToPath(190, 520, False)
    # as you can see we can mix strings and ints without trouble
    path2.appendCubicCurveToPath('+0', '+0', 30, 30, -60, 30, True)
    path2.appendCloseCurve()

    sh3 = pysvg.StyleBuilder()
    sh3.setFilling('none')
    sh3.setStroke('#00F')
    sh3.setStrokeWidth('2px')
    path3 = pysvg.Path('M 230,530', style=sh3.getStyle())
    path3.appendQuadraticCurveToPath(0, 30, 30, 0)
    path3.appendQuadraticCurveToPath(30, -30, 30, 0)
    path3.appendQuadraticCurveToPath(-0, 30, 30, 0)
    path3.appendQuadraticCurveToPath(30, -20, 30, 0)
    elements.append(path1)
    elements.append(path2)
    elements.append(path3)
    return elements
示例#3
0
def ComplexShapes():
    oh = pysvg.ShapeBuilder()
    mySVG = pysvg.Svg("test")
    d = pysvg.Defs()
    d.addElement(MyDropShadow())
    mySVG.addElement(d)

    pl = oh.createPolyline(points="50,375 150,375 150,325 250,325 250,375 \
350,375 350,250 450,250 450,375 550,375 550,175 650,175 650,375 750,375 \
750,100 850,100 850,375 950,375 950,25 1050,25 1050,375 1150,375 ",
                           strokewidth=10,
                           stroke='blue')
    mySVG.addElement(pl)

    pointsAsTuples = [(350, 75), (379, 161), (469, 161), (397, 215),
                      (423, 301), (350, 250), (277, 301), (303, 215),
                      (231, 161), (321, 161)]
    pg = oh.createPolygon(points=oh.convertTupleArrayToPoints(pointsAsTuples),
                          strokewidth=10,
                          stroke='blue',
                          fill='red')
    pg.set_filter('url(#MyDropShadow)')
    mySVG.addElement(pg)

    sh = pysvg.StyleBuilder()
    sh.setFilling('#EEE')
    sh.setStroke('#00F')
    sh.setStrokeWidth('2px')
    path1 = pysvg.Path('M 40,530 L 100,560 L 60,520 Z', style=sh.getStyle())
    sh2 = pysvg.StyleBuilder()
    sh2.setFilling('#FFC')
    sh2.setStroke('#00F')
    sh2.setStrokeWidth('2px')
    path2 = pysvg.Path(style=sh2.getStyle())
    path2.appendMoveToPath(190, 520, False)
    # as you can see we can mix strings and ints without trouble
    path2.appendCubicCurveToPath('+0', '+0', 30, 30, -60, 30, True)
    path2.appendCloseCurve()
    sh3 = pysvg.StyleBuilder()
    sh3.setFilling('none')
    sh3.setStroke('#00F')
    sh3.setStrokeWidth('2px')
    path3 = pysvg.Path('M 230,530', style=sh3.getStyle())
    path3.appendQuadraticCurveToPath(0, 30, 30, 0)
    path3.appendQuadraticCurveToPath(30, -30, 30, 0)
    path3.appendQuadraticCurveToPath(-0, 30, 30, 0)
    path3.appendQuadraticCurveToPath(30, -20, 30, 0)
    mySVG.addElement(path1)
    mySVG.addElement(path2)
    mySVG.addElement(path3)
    mySVG.save('./testoutput/6_ComplexShapes.svg')
示例#4
0
def createMainBorderAndTexts():
    oh = pysvg.ShapeBuilder()
    sh = pysvg.StyleBuilder()
    elements = []
    r = oh.createRect("0",
                      "0",
                      "946",
                      "626",
                      strokewidth="2px",
                      stroke="#00C",
                      fill="#FFF")
    elements.append(r)
    sh.setFilling("#000")
    sh.setFontSize("24px")
    t = pysvg.Text("Objects and Effects in ...", 30, 40)
    t.set_style(sh.getStyle())
    elements.append(t)
    sh = pysvg.StyleBuilder()
    sh.setFontSize("13px")
    t = pysvg.Text(
        "[The red circle, explanation texts and textlinks WILL \
        (but are not yet) connected to JavaScript.]", 360, 35)
    t.set_style(sh.getStyle())
    elements.append(t)

    elements.append(createText("Rectangle", 230, 90))
    elements.append(createText("Circle", 230, 180))
    elements.append(createText("Ellipse", 230, 275))
    elements.append(createText("Polygon", 100, 350))
    elements.append(createText("Polyline", 270, 350))
    elements.append(createText("Line", 270, 470))
    elements.append(createText("Path", 190, 570))
    elements.append(createText("flowing Text", 800, 550))
    elements.append(createText("linear gradient", 600, 90))
    elements.append(createText("radial gradient", 600, 170))
    elements.append(createText("opacity", 600, 310))
    elements.append(createText("filter", 600, 440))
    elements.append(createText("animation", 800, 375))

    elements.append(createText("pattern", 600, 550))
    elements.append(createText("group + transformation", 780, 190))
    elements.append(createText("external Picture", 800, 310))
    elements.append(createText("Textlink", 800, 495))

    return elements
    """
示例#5
0
def HelloWorld2():
    s = pysvg.Svg()
    myStyle = pysvg.StyleBuilder()
    myStyle.setFontFamily(fontfamily="Verdana")
    myStyle.setFontSize('5em')  # no need for the keywords all the time
    myStyle.setFilling("blue")
    t1 = pysvg.Text("Hello World", 0, 100)
    t1.set_style(myStyle.getStyle())
    s.addElement(t1)
    s.save('./testoutput/2_HelloWorld2.svg')
示例#6
0
def TextFeatures():
    s = pysvg.Svg("test")
    myStyle = pysvg.StyleBuilder()
    myStyle.setFontFamily(fontfamily="Verdana")
    myStyle.setFontSize('5em')
    myStyle.setFilling(fill="blue")
    t1 = pysvg.Text("Verdana, blue, 5em", 0, 100)
    t1.set_style(myStyle.getStyle())
    t2 = pysvg.Text("pySVG simple", 0, 200)
    s.addElement(t1)
    s.addElement(t2)

    r = pysvg.Rect(350, 250, 100, 100, id="myRect")
    r.set_fill("green")
    s.addElement(r)

    myStyle = pysvg.StyleBuilder()
    myStyle.setFontFamily(fontfamily="Times")
    myStyle.setFontSize('2em')
    myStyle.setFontStyle('italic')
    myStyle.setFontWeight('bold')
    myStyle.setFilling(fill="red")
    myStyle.setFillOpacity('0.5')
    myStyle.setFillRule('evenodd')

    t3 = pysvg.Text("Times, italic, 2em, bold, opacity=0.5, fillrule=evenodd",
                    0, 300)
    t3.set_style(myStyle.getStyle())
    s.addElement(t3)

    myStyle = pysvg.StyleBuilder()
    myStyle.setFontFamily(fontfamily="Times")
    myStyle.setFontSize('2em')
    myStyle.setFontStyle('italic')
    myStyle.setFilling(fill="red")
    myStyle.setFillOpacity('0.5')
    # myStyle.fill="blue"
    t4 = pysvg.Text("Times, italic, 2em, non bold, opacity=0.5", 0, 400)
    t4.set_style(myStyle.getStyle())
    s.addElement(t4)
    s.save('./testoutput/3_TextFeatures.svg')
示例#7
0
def MyLine():
    s = pysvg.Svg("test")
    myStyle = pysvg.StyleBuilder()
    myStyle.setStrokeWidth(2)
    myStyle.setStroke('black')
    l = pysvg.Line(0, 0, 300, 300)
    l.set_style(myStyle.getStyle())
    s.addElement(l)
    # easier method with ShapeBuilder
    oh = pysvg.ShapeBuilder()
    s.addElement(oh.createLine(10, 0, 300, 300, strokewidth=2, stroke="blue"))
    s.save('./testoutput/5_Line.svg')
示例#8
0
def createShapes():
    oh = pysvg.ShapeBuilder()

    elements = []
    # rectangles
    r = oh.createRect(30, 70, 80, 30, strokewidth='0', fill='#090')
    elements.append(r)
    r = oh.createRect(120,
                      70,
                      80,
                      30,
                      strokewidth='2px',
                      stroke='#00C',
                      fill='#FFC')
    elements.append(r)

    # circles
    c = oh.createCircle(60, 170, 30, strokewidth='0', fill='#F00')
    # <circle id="kreis1" cx="60" cy="170" r="30" style="fill: #F00" onmouseover="FillHover('kreis1','#FF0','#00C','5px')" onmouseout="FillHover('kreis1','#F00','none','0px')"/>
    elements.append(c)
    c = oh.createCircle(150,
                        170,
                        30,
                        strokewidth='2px',
                        stroke='#000',
                        fill='#FF0')
    elements.append(c)

    # ellipse
    e = oh.createEllipse(60, 270, 30, 15, strokewidth='0', fill='#F00')
    # <circle id="kreis1" cx="60" cy="170" r="30" style="fill: #F00" onmouseover="FillHover('kreis1','#FF0','#00C','5px')" onmouseout="FillHover('kreis1','#F00','none','0px')"/>
    elements.append(e)
    e = oh.createEllipse(150,
                         270,
                         30,
                         15,
                         strokewidth='2px',
                         stroke='#000',
                         fill='#CCC')
    elements.append(e)

    # polygon
    p = oh.createPolygon('60,370, 70,360, 80,400, 50,440, 40,330',
                         strokewidth='2px',
                         stroke='#000',
                         fill='#FFF')
    elements.append(p)

    # line
    l = oh.createLine(60, 470, 180, 470, strokewidth='2px', stroke='#00C')
    elements.append(l)
    l = oh.createLine(200, 470, 260, 400, strokewidth='2px', stroke='#F00')
    elements.append(l)

    # path
    p = createPaths()
    for e in p:
        elements.append(e)

    # polyline
    p = oh.createPolyline('250,325 200,345 250,365',
                          strokewidth='2px',
                          stroke='#090')
    elements.append(p)

    # opacity
    sh = pysvg.StyleBuilder()
    sh.setFilling('#00C')
    sh.setFillOpacity(0.5)
    c = pysvg.Circle(450, 290, 50)
    c.set_style(sh.getStyle())
    elements.append(c)
    sh = pysvg.StyleBuilder()
    sh.setFilling('#00C')
    sh.setFillOpacity(0.2)
    sh.setStroke('#00C')
    sh.setStrokeOpacity(0.3)
    c = pysvg.Circle(475, 325, 50)
    c.set_style(sh.getStyle())
    elements.append(c)

    # group + transform
    th = pysvg.TransformBuilder()
    th.setRotation('-30')
    group = pysvg.G()
    group.set_transform(th.getTransform())
    r = oh.createRect(620,
                      500,
                      width='100',
                      height='50',
                      rx=10,
                      ry=10,
                      stroke='#F00',
                      strokewidth='2px',
                      fill='none')
    group.addElement(r)

    sh = pysvg.StyleBuilder()
    sh.setFilling('none')
    sh.setFontSize('36px')
    sh.setStrokeWidth('1px')
    sh.setStroke('#00C')
    t = pysvg.Text('Text', 635, 537)
    t.set_style(sh.getStyle())
    group.addElement(t)
    elements.append(group)

    return elements
示例#9
0
def createShapes():
    oh = pysvg.ShapeBuilder()
    elements = []

    # skewX
    th = pysvg.TransformBuilder()
    th.setSkewX('-40.0')
    group = pysvg.G()
    group.set_transform(th.getTransform())
    r = oh.createRect(620,
                      300,
                      width='100',
                      height='50',
                      rx=10,
                      ry=10,
                      stroke='#F00',
                      strokewidth='2px',
                      fill='none')
    group.addElement(r)

    sh = pysvg.StyleBuilder()
    sh.setFilling('none')
    sh.setFontSize('36px')
    sh.setStrokeWidth('1px')
    sh.setStroke('#00C')
    t = pysvg.Text('Text', 635, 337)
    t.set_style(sh.getStyle())
    group.addElement(t)
    elements.append(group)

    # scaling
    th = pysvg.TransformBuilder()
    th.setScaling('1.0', '0.5')
    group = pysvg.G()
    group.set_transform(th.getTransform())
    r = oh.createRect(620,
                      300,
                      width='100',
                      height='50',
                      rx=10,
                      ry=10,
                      stroke='#F00',
                      strokewidth='2px',
                      fill='none')
    group.addElement(r)

    sh = pysvg.StyleBuilder()
    sh.setFilling('none')
    sh.setFontSize('36px')
    sh.setStrokeWidth('1px')
    sh.setStroke('#00C')
    t = pysvg.Text('Text', 635, 337)
    t.set_style(sh.getStyle())
    group.addElement(t)
    elements.append(group)

    # matrix
    th = pysvg.TransformBuilder()
    th.setMatrix('0.866', '0.5', '-0.5', '0.866', '-300.0', '-200.0')
    group = pysvg.G()
    group.set_transform(th.getTransform())
    r = oh.createRect(620,
                      300,
                      width='100',
                      height='50',
                      rx=10,
                      ry=10,
                      stroke='#F00',
                      strokewidth='2px',
                      fill='none')
    group.addElement(r)

    sh = pysvg.StyleBuilder()
    sh.setFilling('none')
    sh.setFontSize('36px')
    sh.setStrokeWidth('1px')
    sh.setStroke('#00C')
    t = pysvg.Text('Text', 635, 337)
    t.set_style(sh.getStyle())
    group.addElement(t)
    elements.append(group)

    return elements
示例#10
0
    def saveSVG(self, path):
        """docstring for saveSVG"""
        NODE_RADIUS = 14
        dcSource = wx.PaintDC(self)
        
        import pysvg
        s = pysvg.svg()
        
        sb = pysvg.ShapeBuilder()
        
        for line in self.lines:
            element = sb.createLine(line[0].X, 
                                    line[0].Y, 
                                    line[1].X, 
                                    line[1].Y,
                                    strokewidth=2,
                                    stroke="black")
            s.addElement(element)
        
        h_step = self._font_size
        font_style = pysvg.StyleBuilder()
        font_style.setFontFamily(fontfamily="Verdana")
        font_style.setFontSize("{0}".format(self._font_size))
        font_style.setFilling("black")
        
        for node in self.nodes:
            s.addElement(sb.createCircle(node.X, node.Y, NODE_RADIUS,
                            strokewidth=2, fill='#436EEA'))
            if len(node._t_labels) != 0:
                # TODO:
                _t_labels = node._t_labels

                rect_width = 0
                for i in range(len(_t_labels)):
                    lwidth, lheight, ldescent, el = \
                                    dcSource.GetFullTextExtent(_t_labels[i])
                    if lwidth > rect_width:
                        rect_width = lwidth * self._font_size / self._base_size
                
                horizontal_offset = rect_width / 2
                    
                # element = sb.createRect(node.X - rect_width / 2 - 3, 
                #                         node.Y - h_step * len(_t_labels) - NODE_RADIUS, 
                #                         rect_width + 6, 
                #                         h_step * len(_t_labels) + 2,
                #                         strokewidth=1,
                #                         stroke="black",
                #                         fill="white")
                # s.addElement(element)
 
                for i in range(len(_t_labels)):
                    t = pysvg.text(_t_labels[i], node.X - horizontal_offset,
                            node.Y - NODE_RADIUS - h_step * i - 5)
                    t.set_style(font_style.getStyle())
                    s.addElement(t)

            if len(node._b_labels) != 0:
                # TODO:
                _b_labels = node._b_labels        

                rect_width = 0
                for i in range(len(_b_labels)):
                    lwidth, lheight, ldescent, el = \
                                        dcSource.GetFullTextExtent(_b_labels[i])
                    if lwidth > rect_width:
                        rect_width = lwidth * self._font_size / self._base_size
                
                horizontal_offset = rect_width / 2

                # element = sb.createRect(node.X - rect_width / 2 - 3, 
                #                         node.Y + NODE_RADIUS - 2, 
                #                         rect_width + 6, 
                #                         h_step * len(_b_labels) + 2,
                #                         strokewidth=1,
                #                         stroke="black",
                #                         fill="white")
                # s.addElement(element)

                for i in range(len(_b_labels)):
                    t = pysvg.text(unicode(_b_labels[i]), node.X - horizontal_offset,
                            node.Y + NODE_RADIUS + h_step * (i + 0.8) + 5)
                    t.set_style(font_style.getStyle())
                    s.addElement(t)          
                            
        s.save(path)