Package visgraph :: Package renderers :: Module svgrend
[hide private]
[frames] | no frames]

Source Code for Module visgraph.renderers.svgrend

 1   
 2  import visgraph.renderers as vg_render 
 3   
 4  example = ''' 
 5  <?xml version="1.0" standalone="no"?> 
 6  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"  
 7  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 
 8   
 9  <svg width="100%" height="100%" version="1.1" 
10  xmlns="http://www.w3.org/2000/svg"> 
11   
12  <rect x="20" y="20" rx="20" ry="20" width="250" height="100" 
13  style="fill:red;stroke:black;stroke-width:5;opacity:0.5"/> 
14  </svg> 
15  ''' 
16   
17 -class SvgGraphRenderer(vg_render.GraphRenderer):
18
19 - def __init__(self, graph, svgfile):
20 vg_render.GraphRenderer.__init__(self, graph) 21 self.svgfile = svgfile 22 self._node_xml = [] 23 self._edge_xml = []
24
25 - def renderNode(self, nid, ninfo, xpos, ypos):
26 rectstr = '<rect x="%d" y="%d" width="10" height="10" style="fill:red;stroke:black;stroke-width:5;opacity:0.5"/>' % (xpos,ypos) 27 self._node_xml.append(rectstr)
28
29 - def renderEdge(self, eid, einfo, points):
30 pointstr = ' '.join([ '%d,%d' % (x,y) for x,y in points ]) 31 edgestr = '<polyline points="%s" style="fill:white;stroke:red;stroke-width:2"/>' % pointstr 32 self._edge_xml.append(edgestr)
33
34 - def setNodeSizes(self, graph):
35 # Do the node sizing... 36 for nid,ninfo in graph.getNodes(): 37 ninfo['size'] = (10,10)
38
39 - def beginRender(self, xsize, ysize):
40 vg_render.GraphRenderer.beginRender(self, xsize, ysize)
41
42 - def endRender(self):
43 # Actually write out the file. 44 f = file(self.svgfile,'wb') 45 f.write('<?xml version="1.0" standalone="no"?>\n') 46 #f.write('<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >\n') 47 xsize = self._vg_canvas_width 48 ysize = self._vg_canvas_height 49 f.write('<svg width="%d" height="%d" version="1.1" xmlns="http://www.w3.org/2000/svg">\n' % (xsize,ysize)) 50 for x in self._node_xml: 51 f.write(x + '\n') 52 for x in self._edge_xml: 53 f.write(x + '\n') 54 f.write('</svg>\n') 55 f.close()
56 57 if __name__ == '__main__': 58 59 import visgraph.graphcore as vg_graphcore 60 import visgraph.layouts.dynadag as vg_dynadag 61 import visgraph.renderers.svgrend as vg_svgrend 62 63 g = vg_graphcore.HierarchicalGraph() 64 65 g.addNode('A', rootnode=True) 66 g.addNode('B') 67 g.addNode('C') 68 g.addNode('D') 69 70 g.addNode('E') 71 g.addNode('F') 72 g.addNode('G') 73 74 g.addEdge('A','B') 75 g.addEdge('A','C') 76 77 g.addEdge('B','D') 78 g.addEdge('B','E') 79 80 g.addEdge('C','F') 81 g.addEdge('C','G') 82 83 layout = vg_dynadag.DynadagLayout(g) 84 rend = vg_svgrend.SvgGraphRenderer(g, 'test.svg') 85 86 layout.renderGraph(rend) 87