#Copyright (c) 2009-13, Walter Bender # This procedure is invoked when the user-definable block on the "extras" # palette is selected. Some examples of how to use this block are included # below. Try uncommenting an example or write your own Python code. # # To uncomment code, remove the '# ' in the Python code. Take care to preserve # the proper indentations. # # # NOTES: # # Turtle Art is created in object oriented Python code. This is based # around the definition of classes and the creation of object(s) which # are instance(s) of that class. These objects then have properties and # methods which are defined by their class. # # See http://docs.python.org/tutorial/classes.html for a description of # classes in Python. # # Class Defined in Instance Created in # TurtleArtWindow tawindow.py tw TurtleArtActivity.py # LogoCode talogo.py lc tawindow.py # TurtleGraphics tacanvas.py canvas tawindow.py # Turtles, Turtle taturtle.py turtles tawindow.py, # tacanvas.py # Blocks, Block tablock.py block_list tawindow.py # # # Class TurtleArtWindow -- useful properties and methods (from within # tamyblock.py, tw is the class instance) # # Methods and data attributes Example # set_fullscreen(self) tw.set_fullscreen() # Note: Hides the Sugar toolbar # set_cartesian(self, flag) tw.set_cartesian(True) # Note: True will make the overlay visible; # False will make it invisible # set_polar(self, flag) tw.set_polar(True) # Note: True will make the overlay visible; # False will make it invisible # hideshow_button(self, flag) tw.hideshow_button() # Note: Toggles visibility of blocks and palettes # self.active_turtle tw.active_turtle # Note: The active turtle instance # # # Class TurtleGraphics -- useful properties and methods (from within # tamyblock.py, tw.canvas is the class instance) # # Methods and data attributes Example # clearscreen(self) tw.canvas.clearscreen() # Note: Clears the screen and resets all turtle and # pen attributes to default values # # # Class Turtles -- useful properties and methods (from within # tamyblock.py, tw.turtles is the class instance) # # self.set_turtle(name) tw.turltes.set_turtle(1) # Note: Set the current turtle to turtle '1' # self.get_active_turtle() tw.turltes.get_active_turtle() # Note: Returns active turtle (See Class Turtle below) # # Class Turtle -- useful properties and methods (from within # tamyblock.py, tw.turtles.get_active_turtle() is the class instance) # # set_pen_state(self, flag) # tw.turtles.get_active_turtle().set_pen_state(True) # Note: True will set the pen "down", enabling drawing; # False will set the pen "up" # forward(self, n) tw.turtles.get_active_turtle().forward(100) # Note: Move the turtle forward 100 units # arc(self, a, r) tw.turtles.get_active_turtle().arc(120, 50) # Note: Move the turtle along an arc of 120 degrees # (clockwise) and radius of 50 units # set_heading(self, a) tw.turtles.get_active_turtle().set_heading(180) # Note: Set the turtle heading to 180 # (towards the bottom of the screen) # self.get_heading() tw.turtles.get_active_turtle().get_heading() # Note: The current heading # set_pen_size(self, n) tw.turtles.get_active_turtle().set_pen_size(25) # Note: Set the turtle pensize to 25 units # self.get_pen_size() tw.turtles.get_active_turtle().get_pen_size() # Note: The current pen size # self.set_color(self, c) tw.turtles.get_active_turtle().set_color(70) # Note: Set the pen color to 70 (blue) # self.color() tw.turtles.get_active_turtle().get_color() # Note: The current pen color # self.set_shade(self, s) tw.turtles.get_active_turtle().set_shade(50) # Note: Set the pen shade to 50 # self.get_shade() tw.turtles.get_active_turtle().get_shade() # Note: The current pen shade # fillscreen(self, c, s) # tw.turtles.get_active_turtle().fillscreen(70, 90) # Note: Fill the screen with color 70, shade 90 (light blue) # self.set_xy(self, (x, y)) # tw.turtles.get_active_turtle().set_xy((100,100)) # Note: Move the turtle to position (100, 100) # self.get_xy tw.turtles.get_active_turtle().get_xy()[0] # Note: The current x coordinate of the turtle # (scaled to current units) # self.get_xy tw.turtles.get_active_turtle().get_xy()[1] # Note: The current y coordinate of the turtle # (scaled to current units) # # # Other useful Python functions # Module Example # from math import pow pow(2,3) returns 2 to the 3rd power # Note: See http://docs.python.org/library/math.html # from math import sin, pi sin(45*pi/180) returns sin of 45 (0.707) # Note: See http://docs.python.org/library/math.html # from time import localtime localtime().tm_hour returns the current hour # Note: See http://docs.python.org/library/time.html # tw.lc.heap.append(data) adds data to the heap # Note: See http://docs.python.org/tutorial/datastructures.html # data = tw.lc.heap.pop(-1) pops data off the heap # Note: See http://docs.python.org/tutorial/datastructures.html # # Usage: Import this code into a Python (user-definable) block; when # this code is run, the turtle will draw a dotted line of the length # of the numeric argument block docked to the Python block. def myblock(tw, line_length): ''' Draw a dotted line of length line_length. ''' try: # make sure line_length is a number line_length = float(line_length) except ValueError: return if tw.turtles.get_active_turtle().get_pen_state(): dist = 0 pen_size = tw.turtles.get_active_turtle().get_pen_size() while dist + pen_size < line_length: # repeat drawing dots tw.turtles.get_active_turtle().set_pen_state(True) tw.turtles.get_active_turtle().forward(1) tw.turtles.get_active_turtle().set_pen_state(False) tw.turtles.get_active_turtle().forward(pen_size * 2 - 1) dist += pen_size * 2 # make sure we have moved exactly line_length tw.turtles.get_active_turtle().forward(line_length - dist) tw.turtles.get_active_turtle().set_pen_state(True) else: tw.turtles.get_active_turtle().forward(line_length) return