Ejemplo n.º 1
0
def MyRadialGradient():
    mySVG = pysvg.Svg()
    d = pysvg.Defs()

    lg = pysvg.RadialGradient()
    lg.set_id("grey_blue")
    s = pysvg.Stop(offset='0%')
    s.set_stop_color('rgb(200,200,200)')
    s.set_stop_opacity(1)
    lg.addElement(s)
    s = pysvg.Stop(offset='100%')
    s.set_stop_color('rgb(0,0,255)')
    s.set_stop_opacity(1)
    lg.addElement(s)
    d.addElement(lg)

    oh = pysvg.ShapeBuilder()
    e = oh.createEllipse(cx="230",
                         cy="200",
                         rx="110",
                         ry="100",
                         fill="url(#grey_blue)")

    mySVG.addElement(d)
    mySVG.addElement(e)
    print mySVG.getXML()
    mySVG.save('./testoutput/9_RadialGradient.svg')
Ejemplo n.º 2
0
def MyLinearGradient():
    mySVG = pysvg.Svg("test")
    d = pysvg.Defs()

    lg = pysvg.LinearGradient()
    lg.set_id("orange_red")
    s = pysvg.Stop(offset="0%")
    s.set_stop_color('rgb(255,255,0)')
    s.set_stop_opacity(1)
    lg.addElement(s)
    s = pysvg.Stop(offset="100%")
    s.set_stop_color('rgb(255,0,0)')
    s.set_stop_opacity(1)
    lg.addElement(s)
    d.addElement(lg)

    oh = pysvg.ShapeBuilder()
    e = oh.createEllipse(cx="200",
                         cy="190",
                         rx="85",
                         ry="55",
                         fill="url(#orange_red)")

    mySVG.addElement(d)
    mySVG.addElement(e)
    print mySVG.getXML()
    mySVG.save('./testoutput/8_LinearGradient.svg')
Ejemplo n.º 3
0
def Shapes():
    oh = pysvg.ShapeBuilder()
    s = pysvg.Svg("test")
    s.addElement(
        oh.createRect(0, 0, 400, 200, 12, 12, strokewidth=2, stroke='navy'))
    s.addElement(
        oh.createRect(100,
                      50,
                      200,
                      100,
                      strokewidth=2,
                      stroke='navy',
                      fill='yellow'))
    s.addElement(oh.createCircle(700, 500, 50, strokewidth=5, stroke='red'))
    s.addElement(
        oh.createCircle(810,
                        500,
                        50,
                        strokewidth=5,
                        stroke='yellow',
                        fill='#AAAAAA'))
    s.addElement(oh.createEllipse(600, 50, 50, 30, strokewidth=5,
                                  stroke='red'))
    s.addElement(
        oh.createEllipse(700,
                         50,
                         50,
                         30,
                         strokewidth=5,
                         stroke='yellow',
                         fill='#00AABB'))
    s.addElement(oh.createLine(0, 0, 300, 300, strokewidth=2, stroke="black"))
    s.save('./testoutput/4_Shapes.svg')
Ejemplo n.º 4
0
def testIterationsWithAttributesChange():
    s = pysvg.Svg()

    sb = pysvg.ShapeBuilder()
    coords = [(1, 1), (200, 200)]
    for (x, y) in coords:
        rectangle = sb.createRect(0, 0, 100, 200, fill='000')
        rectangle.set_x(x)
        rectangle.set_y(y)
        s.addElement(rectangle)

    s.save('./testoutput/iterationsWithAttributesChange.svg')
Ejemplo n.º 5
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')
Ejemplo n.º 6
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')
Ejemplo n.º 7
0
def testIterationsWithUse():
    s = pysvg.Svg()
    d = pysvg.Defs()
    sb = pysvg.ShapeBuilder()
    rectangle = sb.createRect(0, 0, 100, 200, fill='000')
    rectangle.set_id('baseRect')
    d.addElement(rectangle)
    s.addElement(d)
    coords = [(1, 1), (200, 200)]
    for (x, y) in coords:
        r = pysvg.Use()
        r.set_x(x)
        r.set_y(y)
        r.set_xlink_href('#baseRect')
        s.addElement(r)

    s.save('./testoutput/iterationsWithUse.svg')
Ejemplo n.º 8
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
    """
Ejemplo n.º 9
0
def createMainBorderAndTexts():
    oh = pysvg.ShapeBuilder()
    elements = []

    r = oh.createRect("0",
                      "0",
                      "946",
                      "626",
                      strokewidth="2px",
                      stroke="#00C",
                      fill="#FFF")
    elements.append(r)

    elements.append(createText("skewX(-40)", 320, 380))
    elements.append(createText("scaling(1.0 0.5)", 600, 210))
    elements.append(
        createText("matrix (0.866,0.5,-0.5,0.866,-300,-200)", 50, 480))

    return elements
Ejemplo n.º 10
0
'''
Created on 25.06.2010

@author: kerim
'''
import pysvg

sh = pysvg.ShapeBuilder()
c1 = sh.createCircle(cx=20, cy=20, r=15, fill="yellow")
c1.set_id("gesicht")
c2 = sh.createCircle(cx=15, cy=15, r=2, fill="black")
c2.set_id("auge-links")
c3 = sh.createCircle(cx=25, cy=15, r=2, fill="black")
c3.set_id("auge-rechts")
l1 = sh.createLine(x1=20, y1=18, x2=20, y2=23, strokewidth=2)
l1.set_id("nase")
p1 = pysvg.Path("M 13 26 A 5 3 0 0 0 27 26")
p1.set_id("mund")
p1.set_stroke("black")
p1.set_stroke_width("2")
p1.set_fill("none")

mySymbol = pysvg.Symbol()
mySymbol.set_id("smilie")
mySymbol.addElement(c1)
mySymbol.addElement(c2)
mySymbol.addElement(c3)
mySymbol.addElement(l1)
mySymbol.addElement(p1)

filter6 = pysvg.Filter(x="-.3", y="-.5", width=1.9, height=1.9)
Ejemplo n.º 11
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
Ejemplo n.º 12
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
Ejemplo n.º 13
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)