def testMultiplePaths(): """ - | - """ t=Turtle() t.penDown() print(t.getPosition()) t.forward(205) print(t.getPosition()) t.right(90) t.forward(205) print(t.getPosition()) t.right(90) t.forward(105) print(t.getPosition()) t.right(90) t.forward(105) print(t.getPosition()) t.penUp() t.moveTo(Vector(300,300)) print(t.getPosition()) t.penDown() t.forward(205) print(t.getPosition()) t.finish() #print (t.getXML()) s=svg(0, 0, 2000, 2000) s=t.addTurtlePathToSVG(s) s.save('./testoutput/testTurtle.svg')
def gen(self, svg): # outlines if self.opt.outline: t = Turtle(fill="lightgrey") t.moveTo(Vector(self.sx, self.sy)) t.penDown() for i in self.edges: p = i.basic(t) t.right(90) t.finish() for i in t.getSVGElements(): svg.addElement(i) ## fill # bodge up the insets self.edges[0].length = self.edges[0].length - self.edges[ 1].inset - self.edges[3].inset self.edges[1].length = self.edges[1].length - self.edges[ 0].inset - self.edges[2].inset self.edges[2].length = self.edges[2].length - self.edges[ 3].inset - self.edges[1].inset self.edges[3].length = self.edges[3].length - self.edges[ 2].inset - self.edges[0].inset #gr = g() gr = a() # gr.set_xlink_href('./?face='+self.name) # gr.set_target('_parent') t = Turtle() t.moveTo( Vector(self.sx + self.edges[3].inset, self.sy + self.edges[0].inset)) t.penDown() for i in self.edges: p = i.gen(t) t.right(90) t.penUp() t.finish() for i in t.getSVGElements(): gr.addElement(i) if self.opt.show_labels: te = text(self.name, self.sx + self.width / 2, self.sy + self.length / 2) te.setAttribute("text-anchor", "middle") gr.addElement(te) svg.addElement(gr)
def gen(self,svg): # outlines if self.opt.outline: t = Turtle(fill="lightgrey") t.moveTo(Vector(self.sx,self.sy)) t.penDown() for i in self.edges: p = i.basic(t) t.right(90) t.finish() for i in t.getSVGElements(): svg.addElement(i) ## fill # bodge up the insets self.edges[0].length = self.edges[0].length - self.edges[1].inset - self.edges[3].inset self.edges[1].length = self.edges[1].length - self.edges[0].inset - self.edges[2].inset self.edges[2].length = self.edges[2].length - self.edges[3].inset - self.edges[1].inset self.edges[3].length = self.edges[3].length - self.edges[2].inset - self.edges[0].inset #gr = g() gr = a() # gr.set_xlink_href('./?face='+self.name) # gr.set_target('_parent') t = Turtle() t.moveTo(Vector(self.sx+self.edges[3].inset,self.sy+self.edges[0].inset)) t.penDown() for i in self.edges: p = i.gen(t) t.right(90) t.penUp() t.finish() for i in t.getSVGElements(): gr.addElement(i) if self.opt.show_labels: te = text(self.name,self.sx+self.width/2,self.sy+self.length/2) te.setAttribute("text-anchor","middle") gr.addElement(te) svg.addElement(gr)
class SVG(object): def __init__(self, width, height, filename, start=Vector(0, 0)): global o, a self.t = Turtle(stroke=o.color, strokeWidth=str(o.line)) self.width = int(math.ceil(width)) self.height = int(math.ceil(height)) self.filename = filename self.t.moveTo(start) self.t.setOrientation(Vector(1, 0)) self.t.penDown() def __enter__(self): return self def __exit__(self, exc_type, exc_value, traceback): self.t.finish() print self.t.getXML() # Some versions of pysvg have ".Svg" and some have ".svg", so just # try one at a time until it works. try: self.svg = pysvg.structure.Svg(width='%smm' % self.width, height='%smm' % self.height) except AttributeError: self.svg = pysvg.structure.svg(width='%smm' % self.width, height='%smm' % self.height) self.svg.set_viewBox('0 0 %s %s' % (self.width, self.height)) self.t.addTurtlePathToSVG(self.svg) print 'Saving to %s (size: %umm x %umm)' % (self.filename, self.width, self.height) self.svg.save(self.filename) def r(self, before=None, after=None): if before: self.t.forward(before) self.t.right(90) if after: self.t.forward(after) def l(self, before=None, after=None): if before: self.t.forward(before) self.t.left(90) if after: self.t.forward(after) def f(self, length): self.t.forward(length) def v(self, x, y): return Vector(x, y) def here(self): return self.t.getPosition() def up(self): self.t.penUp() def down(self): self.t.penDown() # Move to a specific position def move(self, x=0, y=0, v=None): if not v: v = Vector(x, y) self.t.moveTo(v) # Move relative to the current position def shift(self, x=0, y=0, v=None): if not v: v = Vector(x, y) self.t.moveTo(self.t.getPosition() + v) # Move to a specific absolute position without drawing def relocate(self, x=0, y=0, v=None): if not v: v = Vector(x, y) self.t.penUp() self.t.moveTo(v) self.t.penDown() def east(self): self.t.setOrientation(Vector(1, 0)) def north(self): self.t.setOrientation(Vector(0, -1)) def west(self): self.t.setOrientation(Vector(-1, 0)) def south(self): self.t.setOrientation(Vector(0, 1)) def notch_l(self, width, length): self.t.left(90) self.t.forward(width) self.t.right(90) self.t.forward(length) self.t.right(90) self.t.forward(width) self.t.left(90) def notch_r(self, width, length): self.t.right(90) self.t.forward(width) self.t.left(90) self.t.forward(length) self.t.left(90) self.t.forward(width) self.t.right(90) def rectangle_r(self, length, width): self.t.forward(length) self.t.right(90) self.t.forward(width) self.t.right(90) self.t.forward(length) self.t.right(90) self.t.forward(width) self.t.right(90) def rectangle_l(self, length, width): self.t.forward(length) self.t.left(90) self.t.forward(width) self.t.left(90) self.t.forward(length) self.t.left(90) self.t.forward(width) self.t.left(90) def semicircle_r(self, length, segments): theta = 180.0 / segments radius = length / 2 segment = 2 * radius * math.sin(math.radians(theta / 2)) direction = self.t.getOrientation() self.t.right(90 - theta / 2) for i in range(0, segments): self.t.forward(segment) self.t.left(theta) self.t.setOrientation(direction)
class DeckSVG(object): def __init__(self, width, height, filename, start = Vector(0, 0)): global o, a self.t = Turtle(stroke=o.color, strokeWidth=str(o.line)) self.width = int(math.ceil(width)) self.height = int(math.ceil(height)) self.filename = filename self.t.moveTo(start) self.t.setOrientation(Vector(1, 0)) self.t.penDown() def __enter__(self): return self def __exit__(self, exc_type, exc_value, traceback): self.t.finish() print self.t.getXML() # Some versions of pysvg have ".Svg" and some have ".svg", so just # try one at a time until it works. try: self.svg = pysvg.structure.Svg(width='%smm' % self.width, height='%smm' % self.height) except AttributeError: self.svg = pysvg.structure.svg(width='%smm' % self.width, height='%smm' % self.height) self.svg.set_viewBox('0 0 %s %s' % (self.width, self.height)) self.t.addTurtlePathToSVG(self.svg) print 'Saving to %s (size: %umm x %umm)' % (self.filename, self.width, self.height) self.svg.save(self.filename) def r(self, before = None, after = None): if before: self.t.forward(before) self.t.right(90) if after: self.t.forward(after) def l(self, before = None, after = None): if before: self.t.forward(before) self.t.left(90) if after: self.t.forward(after) def f(self, length): self.t.forward(length) def v(self, x, y): return Vector(x, y) def here(self): return self.t.getPosition() def up(self): self.t.penUp() def down(self): self.t.penDown() # Move to a specific position def move(self, x = 0, y = 0, v = None): if not v: v = Vector(x, y) self.t.moveTo(v) # Move relative to the current position def shift(self, x = 0, y = 0, v = None): if not v: v = Vector(x, y) self.t.moveTo(self.t.getPosition() + v) # Move to a specific position without drawing def relocate(self, x = 0, y = 0, v = None): if not v: v = Vector(x, y) self.t.penUp() self.t.moveTo(v) self.t.penDown() def east(self): self.t.setOrientation(Vector(1, 0)) def north(self): self.t.setOrientation(Vector(0, -1)) def west(self): self.t.setOrientation(Vector(-1, 0)) def south(self): self.t.setOrientation(Vector(0, 1)) def notchl(self, width, height): self.t.left(90) self.t.forward(width) self.t.right(90) self.t.forward(height) self.t.right(90) self.t.forward(width) self.t.left(90) def notchr(self, width, height): self.t.right(90) self.t.forward(width) self.t.left(90) self.t.forward(height) self.t.left(90) self.t.forward(width) self.t.right(90) def rectangle(self, length, width): self.t.forward(length) self.t.right(90) self.t.forward(width) self.t.right(90) self.t.forward(length) self.t.right(90) self.t.forward(width)