Пример #1
0
    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()
Пример #2
0
    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()
Пример #3
0
    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)
Пример #4
0
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)
Пример #5
0
def testLindenMayer():
    s=Svg(0, 0, 2000, 2000)
    commands='F+F-F-FF+F+F-F+F+F-F-FF+F+F-F+F+F-F-FF+F+F-F+F+F-F-FF+F+F-F'
    t=Turtle()
    t.moveTo(Vector(500,250))
    t.penDown()
    angle=90
    distance=40
    for cmd in commands:
        print(cmd)
        if cmd=='F':
            t.forward(distance)
        elif cmd=='+':
            t.right(angle)
        elif cmd=='-':
            t.left(angle)
        print(t.getPosition())
    t.penDown()
    print (t.getXML())
    s=t.addTurtlePathToSVG(s)
    s.save('./testoutput/testTurtle.svg')
Пример #6
0
def testLindenMayer():
    s = Svg(0, 0, 2000, 2000)
    commands = 'F+F-F-FF+F+F-F+F+F-F-FF+F+F-F+F+F-F-FF+F+F-F+F+F-F-FF+F+F-F'
    t = Turtle()
    t.moveTo(Vector(500, 250))
    t.penDown()
    angle = 90
    distance = 40
    for cmd in commands:
        print(cmd)
        if cmd == 'F':
            t.forward(distance)
        elif cmd == '+':
            t.right(angle)
        elif cmd == '-':
            t.left(angle)
        print(t.getPosition())
    t.penDown()
    print(t.getXML())
    s = t.addTurtlePathToSVG(s)
    s.save('./testoutput/testTurtle.svg')
Пример #7
0
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')
Пример #8
0
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)
Пример #9
0
	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)