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')
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')
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')
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')
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')
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')
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')
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 """
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
''' 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)
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
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
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)