Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/plugins/threed/threed.py
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/threed/threed.py')
-rw-r--r--plugins/threed/threed.py88
1 files changed, 88 insertions, 0 deletions
diff --git a/plugins/threed/threed.py b/plugins/threed/threed.py
new file mode 100644
index 0000000..7cb303b
--- /dev/null
+++ b/plugins/threed/threed.py
@@ -0,0 +1,88 @@
+# -*- coding: utf-8 -*-
+#Copyright (c) 2012, Walter Bender
+#
+# 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 St, Fifth Floor, Boston, MA 02110-1301 USA
+
+from gettext import gettext as _
+
+from plugins.plugin import Plugin
+from TurtleArt.tapalette import make_palette
+from TurtleArt.taprimitive import (ArgSlot, ConstantArg, Primitive)
+from TurtleArt.tatype import (TYPE_FLOAT, TYPE_NUMBER)
+from TurtleArt.taturtle import Turtle
+
+
+class Threed(Plugin):
+ """ a class for defining the 3-D Turtle Blocks """
+
+ def __init__(self, turtle_window):
+ Plugin.__init__(self)
+ self.tw = turtle_window
+
+ def setup(self):
+ self._turtle_palette()
+
+ def _turtle_palette(self):
+ palette = make_palette('turtle',
+ colors=["#00FF00", "#00A000"],
+ help_string=_('Palette of turtle commands'),
+ translation=_('turtle'))
+
+ palette.add_block('zcor',
+ style='box-style',
+ label=_('zcor'),
+ help_string=_(
+ 'holds current z-coordinate value of the turtle '
+ '(can be used in place of a number block)'),
+ value_block=True,
+ prim_name='zcor')
+ self.tw.lc.def_prim(
+ 'zcor', 0,
+ Primitive(Primitive.divide, return_type=TYPE_FLOAT,
+ arg_descs=[ConstantArg(Primitive(Turtle.get_z)),
+ ConstantArg(Primitive(
+ self.tw.get_coord_scale))]))
+
+ palette.add_block('setxyz',
+ style='basic-style-3arg',
+ # TRANS: xyz are coordinates in a 3-dimensional space
+ label=[_('set xyz') + '\n\n',
+ _('x'), _('y'), _('z')],
+ prim_name='setxyz',
+ default=[0, 0, 0],
+ help_string=_('sets the xyz-coordinates of the '
+ 'turtle'))
+ self.tw.lc.def_prim(
+ 'setxyz', 3,
+ Primitive(Turtle.set_xyz,
+ arg_descs=[ArgSlot(TYPE_NUMBER), ArgSlot(TYPE_NUMBER),
+ ArgSlot(TYPE_NUMBER)],
+ call_afterwards=self.after_move))
+
+ def after_move(self, *ignored_args, **ignored_kwargs):
+ ''' Update labels after moving the turtle '''
+ if self.tw.lc.update_values:
+ self.tw.lc.update_label_value(
+ 'xcor',
+ self.tw.turtles.get_active_turtle().get_xy()[0] /
+ self.tw.coord_scale)
+ self.tw.lc.update_label_value(
+ 'ycor',
+ self.tw.turtles.get_active_turtle().get_xy()[1] /
+ self.tw.coord_scale)
+ self.tw.lc.update_label_value(
+ 'zcor',
+ self.tw.turtles.get_active_turtle().get_xyz()[2] /
+ self.tw.coord_scale)