summaryrefslogtreecommitdiffstats
path: root/share/extensions/inkex/turtle.py
diff options
context:
space:
mode:
Diffstat (limited to 'share/extensions/inkex/turtle.py')
-rw-r--r--share/extensions/inkex/turtle.py120
1 files changed, 120 insertions, 0 deletions
diff --git a/share/extensions/inkex/turtle.py b/share/extensions/inkex/turtle.py
new file mode 100644
index 0000000..cee7dad
--- /dev/null
+++ b/share/extensions/inkex/turtle.py
@@ -0,0 +1,120 @@
+# 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
+
+
+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
+
+ 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))
+
+ 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))
+
+ def right(self, deg):
+ self.__heading -= deg
+
+ def left(self, deg):
+ self.__heading += deg
+
+ def penup(self):
+ self.__draw = False
+ self.__new = False
+
+ def pendown(self):
+ if not self.__draw:
+ self.__new = True
+ self.__draw = True
+
+ def pentoggle(self):
+ if self.__draw:
+ self.penup()
+ else:
+ self.pendown()
+
+ def home(self):
+ self.setpos(self.__home)
+
+ def clean(self):
+ self.__path = ''
+
+ def clear(self):
+ self.clean()
+ self.home()
+
+ 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])
+
+ def getpos(self):
+ return self.__pos[:]
+
+ def setheading(self, deg):
+ self.__heading = deg
+
+ def getheading(self):
+ return self.__heading
+
+ def sethome(self, arg):
+ self.__home = list(arg)
+
+ def getPath(self):
+ return self.__path
+
+ 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