Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pysamples/dotted_line.py
diff options
context:
space:
mode:
Diffstat (limited to 'pysamples/dotted_line.py')
-rw-r--r--pysamples/dotted_line.py136
1 files changed, 59 insertions, 77 deletions
diff --git a/pysamples/dotted_line.py b/pysamples/dotted_line.py
index 9db7f9d..febd409 100644
--- a/pysamples/dotted_line.py
+++ b/pysamples/dotted_line.py
@@ -1,42 +1,23 @@
-#Copyright (c) 2009-10, Walter Bender
+#Copyright (c) 2009-11, Walter Bender
-#Permission is hereby granted, free of charge, to any person obtaining a copy
-#of this software and associated documentation files (the "Software"), to deal
-#in the Software without restriction, including without limitation the rights
-#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-#copies of the Software, and to permit persons to whom the Software is
-#furnished to do so, subject to the following conditions:
-
-#The above copyright notice and this permission notice shall be included in
-#all copies or substantial portions of the Software.
-
-#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-#THE SOFTWARE.
-
-#
# 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
@@ -44,72 +25,72 @@
# 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, lc.tw is the class instance)
-#
+# tamyblock.py, tw is the class instance)
+#
# Methods and data attributes Example
-# set_fullscreen(self) lc.tw.set_fullscreen()
+# set_fullscreen(self) tw.set_fullscreen()
# Note: Hides the Sugar toolbar
-# set_cartesian(self, flag) lc.tw.set_cartesian(True)
+# set_cartesian(self, flag) tw.set_cartesian(True)
# Note: True will make the overlay visible;
# False will make it invisible
-# set_polar(self, flag) lc.tw.set_polar(True)
+# set_polar(self, flag) tw.set_polar(True)
# Note: True will make the overlay visible;
# False will make it invisible
-# hideshow_button(self, flag) lc.tw.hideshow_button()
+# hideshow_button(self, flag) tw.hideshow_button()
# Note: Toggles visibility of blocks and palettes
-# self.active_turtle lc.tw.active_turtle
+# self.active_turtle tw.active_turtle
# Note: The active turtle instance
-#
-#
+#
+#
# Class TurtleGraphics -- useful properties and methods (from within
-# tamyblock.py, lc.tw.canvas is the class instance)
-#
+# tamyblock.py, tw.canvas is the class instance)
+#
# Methods and data attributes Example
-# clearscreen(self) lc.tw.canvas.clearscreen()
+# clearscreen(self) tw.canvas.clearscreen()
# Note: Clears the screen and resets all turtle and
# pen attributes to default values
-# setpen(self, flag) lc.tw.canvas.setpen(True)
+# setpen(self, flag) tw.canvas.setpen(True)
# Note: True will set the pen "down", enabling drawing;
# False will set the pen "up"
-# forward(self, n) lc.tw.canvas.forward(100)
+# forward(self, n) tw.canvas.forward(100)
# Note: Move the turtle forward 100 units
-# arc(self, a, r) lc.tw.canvas.arc(120, 50)
+# arc(self, a, r) tw.canvas.arc(120, 50)
# Note: Move the turtle along an arc of 120 degrees
# (clockwise) and radius of 50 units
-# setheading(self, a) lc.tw.canvas.setheading(180)
+# setheading(self, a) tw.canvas.setheading(180)
# Note: Set the turtle heading to 180
# (towards the bottom of the screen)
-# self.heading lc.tw.canvas.heading
+# self.heading tw.canvas.heading
# Note: The current heading
-# setpensize(self, n) lc.tw.canvas.setpensize(25)
+# setpensize(self, n) tw.canvas.setpensize(25)
# Note: Set the turtle pensize to 25 units
-# self.pensize lc.tw.canvas.pensize
+# self.pensize tw.canvas.pensize
# Note: The current pensize
-# setcolor(self, c) lc.tw.canvas.color(70)
+# setcolor(self, c) tw.canvas.color(70)
# Note: Set the pen color to 70 (blue)
-# self.color lc.tw.canvas.color
+# self.color tw.canvas.color
# Note: The current pen color
-# setshade(self, s) lc.tw.canvas.shade(50)
+# setshade(self, s) tw.canvas.shade(50)
# Note: Set the pen shade to 50
-# self.shade lc.tw.canvas.shade
+# self.shade tw.canvas.shade
# Note: The current pen shade
-# fillscreen(self, c, s) lc.tw.canvas.fillscreen(70, 90)
+# fillscreen(self, c, s) tw.canvas.fillscreen(70, 90)
# Note: Fill the screen with color 70, shade 90 (light blue)
-# setxy(self, x, y) lc.tw.canvas.setxy(100,100)
+# setxy(self, x, y) tw.canvas.setxy(100,100)
# Note: Move the turtle to position (100, 100)
-# self.xcor lc.tw.canvas.xcor
+# self.xcor tw.canvas.xcor
# Note: The current x coordinate of the turtle
# (scaled to current units)
-# self.ycor lc.tw.canvas.ycor
+# self.ycor tw.canvas.ycor
# Note: The current y coordinate of the turtle
# (scaled to current units)
-# self.set_turtle(name) lc.tw.canvas.set_turtle(1)
+# self.set_turtle(name) tw.canvas.set_turtle(1)
# Note: Set the current turtle to turtle '1'
-#
-#
+#
+#
# Other useful Python functions
# Module Example
# from math import pow pow(2,3) returns 2 to the 3rd power
@@ -118,34 +99,35 @@
# 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
-# lc.heap.append(data) adds data to the heap
+# tw.lc.heap.append(data) adds data to the heap
# Note: See http://docs.python.org/tutorial/datastructures.html
-# data = lc.heap.pop(-1) pops data off the heap
+# data = tw.lc.heap.pop(-1) pops data off the heap
# Note: See http://docs.python.org/tutorial/datastructures.html
#
-def myblock(lc, x):
+# 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.
+
- ###########################################################################
- #
- # Draw a dotted line of length x.
- #
- ###########################################################################
+def myblock(tw, line_length):
+ ''' Draw a dotted line of length line_length. '''
- try: # make sure x is a number
- x = float(x)
+ try: # make sure line_length is a number
+ line_length = float(line_length)
except ValueError:
return
- if lc.tw.canvas.pendown:
+ if tw.canvas.pendown:
dist = 0
- while dist+lc.tw.canvas.pensize < x: # repeat drawing dots
- lc.tw.canvas.setpen(True)
- lc.tw.canvas.forward(1)
- lc.tw.canvas.setpen(False)
- lc.tw.canvas.forward((lc.tw.canvas.pensize*2)-1)
- dist += (lc.tw.canvas.pensize*2)
- lc.tw.canvas.forward(x-dist) # make sure we have moved exactly x
- lc.tw.canvas.setpen(True)
+ while dist + tw.canvas.pensize < line_length: # repeat drawing dots
+ tw.canvas.setpen(True)
+ tw.canvas.forward(1)
+ tw.canvas.setpen(False)
+ tw.canvas.forward((tw.canvas.pensize * 2) - 1)
+ dist += (tw.canvas.pensize * 2)
+ # make sure we have moved exactly line_length
+ tw.canvas.forward(line_length - dist)
+ tw.canvas.setpen(True)
else:
- lc.tw.canvas.forward(x)
+ tw.canvas.forward(line_length)
return