1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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)
|