#format python #!/usr/bin/env python """\ SVG.py - Construct/display SVG scenes. The following code is a lightweight wrapper around SVG files. The metaphor is to construct a scene, add objects to it, and then write it to a file to display it. This program uses ImageMagick to display the SVG files. ImageMagick also does a remarkable job of converting SVG files into other formats. """ import os display_prog = 'start' # Command to execute to display images. class Scene: def __init__(self,name="svg",height=400,width=400): self.name = name self.items = [] self.height = height self.width = width return def add(self,item): self.items.append(item) def strarray(self): var = ["\n", "\n" % (self.height,self.width), " \n"] for item in self.items: var += item.strarray() var += [" \n\n"] return var def write_svg(self,filename=None): if filename: self.svgname = filename else: self.svgname = self.name + ".svg" file = open(self.svgname,'w') file.writelines(self.strarray()) file.close() return def display(self,prog=display_prog): os.system("%s %s" % (prog,self.svgname)) return class Line: def __init__(self,start,end): self.start = start #xy tuple self.end = end #xy tuple return def strarray(self): return [" \n" %\ (self.start[0],self.start[1],self.end[0],self.end[1])] class Polygon: def __init__(self,*args): self.points = list(args) #print "[+]",self.points def strarray(self): strpoints = '"' for p in self.points: strpoints += '%d,%d '%(p[0],p[1]) strpoints += '"' #print "[+]",strpoints #strpoints=' '.join([','.join(map(str,p)) for p in self.points]) return [" "] class Circle: def __init__(self,center,radius,color): self.center = center #xy tuple self.radius = radius #xy tuple self.color = color #rgb tuple in range(0,256) return def strarray(self): return [" \n" % colorstr(self.color)] class Rectangle: def __init__(self,origin,height,width,color): self.origin = origin self.height = height self.width = width self.color = color return def strarray(self): return [" \n" %\ (self.width,colorstr(self.color))] class Text: def __init__(self,origin,text,size=24): self.origin = origin self.text = text self.size = size return def strarray(self): return [" \n" %\ (self.origin[0],self.origin[1],self.size), " %s\n" % self.text, " \n"] def colorstr(rgb): return "#%x%x%x" % (rgb[0]/16,rgb[1]/16,rgb[2]/16) def test(): scene = Scene('test') scene.add(Rectangle((100,100),200,200,(0,255,255))) scene.add(Line((200,200),(200,300))) scene.add(Line((200,200),(300,200))) scene.add(Line((200,200),(100,200))) scene.add(Line((200,200),(200,100))) scene.add(Circle((200,200),30,(0,0,255))) scene.add(Circle((200,300),30,(0,255,0))) scene.add(Circle((300,200),30,(255,0,0))) scene.add(Circle((100,200),30,(255,255,0))) scene.add(Circle((200,100),30,(255,0,255))) scene.add(Text((50,50),"Testing SVG")) scene.write_svg() scene.display() return if __name__ == '__main__': test()