Source code for inkex.turtle

# coding=utf-8
#
# Copyright (C) 2005 Aaron Spike, aaron@ekips.org
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
#

import math
import random


[docs]class pTurtle(object): """A Python path turtle""" def __init__(self, home=(0, 0)): self.__home = [home[0], home[1]] self.__pos = self.__home[:] self.__heading = -90 self.__path = "" self.__draw = True self.__new = True
[docs] def forward(self, mag): self.setpos((self.__pos[0] + math.cos(math.radians(self.__heading)) * mag, self.__pos[1] + math.sin(math.radians(self.__heading)) * mag))
[docs] def backward(self, mag): self.setpos((self.__pos[0] - math.cos(math.radians(self.__heading)) * mag, self.__pos[1] - math.sin(math.radians(self.__heading)) * mag))
[docs] def right(self, deg): self.__heading -= deg
[docs] def left(self, deg): self.__heading += deg
[docs] def penup(self): self.__draw = False self.__new = False
[docs] def pendown(self): if not self.__draw: self.__new = True self.__draw = True
[docs] def pentoggle(self): if self.__draw: self.penup() else: self.pendown()
[docs] def home(self): self.setpos(self.__home)
[docs] def clean(self): self.__path = ''
[docs] def clear(self): self.clean() self.home()
[docs] def setpos(self, arg): if self.__new: self.__path += "M" + ",".join([str(i) for i in self.__pos]) self.__new = False self.__pos = arg if self.__draw: self.__path += "L" + ",".join([str(i) for i in self.__pos])
[docs] def getpos(self): return self.__pos[:]
[docs] def setheading(self, deg): self.__heading = deg
[docs] def getheading(self): return self.__heading
[docs] def sethome(self, arg): self.__home = list(arg)
[docs] def getPath(self): return self.__path
[docs] def rtree(self, size, minimum, pt=False): if size < minimum: return self.fd(size) turn = random.uniform(20, 40) self.lt(turn) self.rtree(size * random.uniform(0.5, 0.9), minimum, pt) self.rt(turn) turn = random.uniform(20, 40) self.rt(turn) self.rtree(size * random.uniform(0.5, 0.9), minimum, pt) self.lt(turn) if pt: self.pu() self.bk(size) if pt: self.pd()
fd = forward bk = backward rt = right lt = left pu = penup pd = pendown