6. Graphics
Berkeley Logo provides traditional Logo turtle graphics with one turtle.
Multiple turtles, dynamic turtles, and collision detection are not supported.
This is the most hardware-dependent part of Logo; some features may exist
on some machines but not others. Nevertheless, the goal has been to make
Logo programs as portable as possible, rather than to take fullest advantage
of the capabilities of each machine. In particular, Logo attempts to scale
the screen so that turtle coordinates [–100 –100] and [100 100] fit on the
graphics window, and so that the aspect ratio is 1:1.
The center of the graphics window (which may or may not be the entire
screen, depending on the machine used) is turtle location [0 0]. Positive
X is to the right; positive Y is up. Headings (angles) are measured in
degrees clockwise from the positive Y axis. (This differs from the common
mathematical convention of measuring angles counterclockwise from the
positive X axis.) The turtle is represented as an isoceles triangle; the
actual turtle position is at the midpoint of the base (the short side).
However, the turtle is drawn one step behind its actual position, so that
the display of the base of the turtle's triangle does not obscure a line
drawn perpendicular to it (as would happen after drawing a square).
Colors are, of course, hardware-dependent. However, Logo provides partial
hardware independence by interpreting color numbers 0 through 7 uniformly
on all computers:
| 0 black 1 blue 2 green 3 cyan
4 red 5 magenta 6 yellow 7 white
|
Where possible, Logo provides additional user-settable colors; how many
are available depends on the hardware and operating system environment.
If at least 16 colors are available, Logo tries to provide uniform
initial settings for the colors 8-15:
| 8 brown 9 tan 10 forest 11 aqua
12 salmon 13 purple 14 orange 15 grey
|
Logo begins with a black background and white pen.
6.1 Turtle Motion
forward
moves the turtle forward, in the direction that it's facing, by the
specified distance (measured in turtle steps).
back
moves the turtle backward, i.e., exactly opposite to the direction that
it's facing, by the specified distance. (The heading of the turtle does
not change.)
left
turns the turtle counterclockwise by the specified angle, measured in
degrees (1/360 of a circle).
right
turns the turtle clockwise by the specified angle, measured in degrees
(1/360 of a circle).
setpos
moves the turtle to an absolute position in the graphics window. The input is
a list of two numbers, the X and Y coordinates.
setxy
moves the turtle to an absolute position in the graphics window. The two
inputs are numbers, the X and Y coordinates.
setx
moves the turtle horizontally from its old position to a new absolute
horizontal coordinate. The input is the new X coordinate.
sety
moves the turtle vertically from its old position to a new absolute
vertical coordinate. The input is the new Y coordinate.
setheading
| SETHEADING degrees
SETH degrees
|
turns the turtle to a new absolute heading. The input is a number,
the heading in degrees clockwise from the positive Y axis.
home
moves the turtle to the center of the screen. Equivalent to
SETPOS [0 0] SETHEADING 0.
See section setpos ,
See section setheading .
arc
draws an arc of a circle, with the turtle at the center, with the
specified radius, starting at the turtle's heading and extending
clockwise through the specified angle. The turtle does not move.
6.2 Turtle Motion Queries
pos
outputs the turtle's current position, as a list of two numbers, the X
and Y coordinates.
xcor
outputs a number, the turtle's X coordinate.
ycor
outputs a number, the turtle's Y coordinate.
heading
outputs a number, the turtle's heading in degrees.
towards
outputs a number, the heading at which the turtle should be facing so
that it would point from its current position to the position given as
the input.
scrunch
outputs a list containing two numbers, the X and Y scrunch factors, as used by
SETSCRUNCH
. (But note that SETSCRUNCH
takes two numbers as inputs, not one
list of numbers.)
See section setscrunch .
6.3 Turtle and Window Control
showturtle
makes the turtle visible.
hideturtle
makes the turtle invisible. It's a good idea to do this while you're in
the middle of a complicated drawing, because hiding the turtle speeds up
the drawing substantially.
clean
erases all lines that the turtle has drawn on the graphics window. The
turtle's state (position, heading, pen mode, etc.) is not changed.
clearscreen
erases the graphics window and sends the turtle to its initial position
and heading. Like HOME
and CLEAN
together.
See section home .
wrap
tells the turtle to enter wrap mode: From now on, if the turtle is
asked to move past the boundary of the graphics window, it will "wrap
around" and reappear at the opposite edge of the window. The top edge
wraps to the bottom edge, while the left edge wraps to the right edge.
(So the window is topologically equivalent to a torus.) This is the
turtle's initial mode. Compare WINDOW
and FENCE
.
See section fence .
window
tells the turtle to enter window mode: From now on, if the turtle is
asked to move past the boundary of the graphics window, it will move
offscreen. The visible graphics window is considered as just part of an
infinite graphics plane; the turtle can be anywhere on the plane. (If
you lose the turtle, HOME
will bring it back to the center of the
window.) Compare WRAP
and FENCE
.
See section home .
fence
tells the turtle to enter fence mode: From now on, if the turtle is
asked to move past the boundary of the graphics window, it will move as
far as it can and then stop at the edge with an "out of bounds" error
message. Compare WRAP
and WINDOW
.
See section wrap .
fill
fills in a region of the graphics window containing the turtle and
bounded by lines that have been drawn earlier. This is not portable; it
doesn't work for all machines, and may not work exactly the same way on
different machines.
filled
| FILLED color instructions
|
runs the instructions, remembering all points visited by turtle
motion commands, starting and ending with the turtle's initial
position. Then draws (ignoring penmode) the resulting polygon,
in the current pen color, filling the polygon with the given color,
which can be a color number or an RGB list. The instruction list
cannot include another FILLED invocation. (wxWidgets only)
label
takes a word or list as input, and prints the input on the graphics
window, starting at the turtle's position.
setlabelheight
command (wxWidgets only). Takes a positive integer argument and tries
to set the font size so that the character height (including
descenders) is that many turtle steps. This will be different from
the number of screen pixels if SETSCRUNCH
has been used. Also, note
that SETSCRUNCH
changes the font size to try to preserve this height
in turtle steps. Note that the query operation corresponding to this
command is LABELSIZE
, not LABELHEIGHT
, because it tells you the width
as well as the height of characters in the current font.
textscreen
rearranges the size and position of windows to maximize the space
available in the text window (the window used for interaction with
Logo). The details differ among machines. Compare SPLITSCREEN
and
FULLSCREEN
.
See section splitscreen .
fullscreen
rearranges the size and position of windows to maximize the space
available in the graphics window. The details differ among machines.
Compare SPLITSCREEN
and TEXTSCREEN
.
Since there must be a text window to allow printing (including the printing of
the Logo prompt), Logo automatically switches from fullscreen to splitscreen
whenever anything is printed.
In the DOS version, switching from fullscreen to splitscreen loses the part of
the picture that's hidden by the text window. [This design decision follows
from the scarcity of memory, so that the extra memory to remember an invisible
part of a drawing seems too expensive.]
splitscreen
rearranges the size and position of windows to allow some room for text
interaction while also keeping most of the graphics window visible. The
details differ among machines. Compare TEXTSCREEN
and FULLSCREEN
.
See section textscreen .
setscrunch
adjusts the aspect ratio and scaling of the graphics display. After
this command is used, all further turtle motion will be adjusted by
multiplying the horizontal and vertical extent of the motion by the two
numbers given as inputs. For example, after the instruction
SETSCRUNCH 2 1 motion at a heading of 45 degrees will move twice
as far horizontally as vertically. If your squares don't come out
square, try this. (Alternatively, you can deliberately misadjust the
aspect ratio to draw an ellipse.)
For all modern computers, both scale factors are initially 1.
For DOS machines, the scale factors are initially set according to what
the hardware claims the aspect ratio is, but the hardware sometimes
lies. For DOS, the values set by SETSCRUNCH
are remembered in a file (called
‘scrunch.dat’) and are automatically put into effect when a Logo session
begins.
refresh
(command) tells Logo to remember the turtle's motions so that they
can be used for high-resolution printing (wxWidgets) or to refresh
the graphics window if it is moved, resized, or overlayed
(non-wxWidgets). This is the default.
norefresh
(command) tells Logo not to remember the turtle's motions, which may
be useful to save time and memory if your program is interactive or
animated, rather than drawing a static picture you'll want to print
later (wxWidgets). In non-wxWidgets versions, using NOREFRESH may
prevent Logo from restoring the graphics image after the window is
moved, resized, or overlayed.
6.4 Turtle and Window Queries
shownp
outputs TRUE
if the turtle is shown (visible), FALSE
if the turtle is
hidden. See SHOWTURTLE
and HIDETURTLE
.
See section showturtle ,
hideturtle .
screenmode
outputs the word TEXTSCREEN
, SPLITSCREEN
, or FULLSCREEN
depending
on the current screen mode.
turtlemode
outputs the word WRAP
, FENCE
, or WINDOW
depending on the current
turtle mode.
labelsize
(wxWidgets only) outputs a list of two positive integers, the width
and height of characters displayed by LABEL
measured in turtle steps
(which will be different from screen pixels if SETSCRUNCH
has been
used). There is no SETLABELSIZE
because the width and height of a
font are not separately controllable, so the inverse of this operation
is SETLABELHEIGHT
, which takes just one number for the desired height.
6.5 Pen and Background Control
The turtle carries a pen that can draw pictures. At any time the pen
can be UP (in which case moving the turtle does not change what's on the
graphics screen) or DOWN (in which case the turtle leaves a trace).
If the pen is down, it can operate in one of three modes: PAINT (so that it
draws lines when the turtle moves), ERASE (so that it erases any lines
that might have been drawn on or through that path earlier), or REVERSE
(so that it inverts the status of each point along the turtle's path).
pendown
sets the pen's position to DOWN
, without changing its mode.
penup
sets the pen's position to UP
, without changing its mode.
penpaint
sets the pen's position to DOWN
and mode to PAINT
.
penerase
sets the pen's position to DOWN
and mode to ERASE
.
See section erase .
penreverse
sets the pen's position to DOWN
and mode to REVERSE
. (This may interact
in system-dependent ways with use of color.)
See section reverse .
setpencolor
| SETPENCOLOR colornumber.or.rgblist
SETPC colornumber.or.rgblist
|
sets the pen color to the given number, which must be a nonnegative
integer. There are initial assignments for the first 16 colors:
| 0 black 1 blue 2 green 3 cyan
4 red 5 magenta 6 yellow 7 white
8 brown 9 tan 10 forest 11 aqua
12 salmon 13 purple 14 orange 15 grey
|
but other colors can be assigned to numbers by the PALETTE
command.
Alternatively, sets the pen color to the given RGB values (a list of
three nonnegative numbers less than 100 specifying the percent saturation
of red, green, and blue in the desired color).
setpalette
| SETPALETTE colornumber rgblist
|
sets the actual color corresponding to a given number, if allowed by the
hardware and operating system. Colornumber must be an integer greater than or
equal to 8. (Logo tries to keep the first 8 colors constant.) The second
input is a list of three nonnegative numbers less than 100 specifying the
percent saturation of red, green, and blue in the desired color.
setpensize
sets the thickness of the pen. The input is either a single positive
integer or a list of two positive integers (for horizontal and
vertical thickness). Some versions pay no attention to the second
number, but always have a square pen.
setpenpattern
sets hardware-dependent pen characteristics. This command is not
guaranteed compatible between implementations on different machines.
setpen
| SETPEN list (library procedure)
|
sets the pen's position, mode, thickness, and hardware-dependent
characteristics according to the information in the input list, which should
be taken from an earlier invocation of PEN
.
See section pen .
setbackground
| SETBACKGROUND colornumber.or.rgblist
SETBG colornumber.or.rgblist
|
set the screen background color by slot number or RGB values.
See SETPENCOLOR
for details.
See section setpencolor .
6.6 Pen Queries
pendownp
outputs TRUE
if the pen is down, FALSE
if it's up.
penmode
outputs one of the words PAINT
, ERASE
, or REVERSE
according to the
current pen mode.
See section erase ,
reverse .
pencolor
outputs a color number, a nonnegative integer that is associated with
a particular color, or a list of RGB values if such a list was used as
the most recent input to SETPENCOLOR
. There are initial assignments
for the first 16 colors:
| 0 black 1 blue 2 green 3 cyan
4 red 5 magenta 6 yellow 7 white
8 brown 9 tan 10 forest 11 aqua
12 salmon 13 purple 14 orange 15 grey
|
but other colors can be assigned to numbers by the PALETTE
command.
palette
outputs a list of three nonnegative numbers less than 100 specifying the
percent saturation of red, green, and blue in the color associated with the
given number.
pensize
outputs a list of two positive integers, specifying the horizontal
and vertical thickness of the turtle pen. (In some implementations,
including wxWidgets, the two numbers are always equal.)
outputs system-specific pen information.
pen
outputs a list containing the pen's position, mode, thickness, and
hardware-specific characteristics, for use by SETPEN
.
See section setpen .
background
outputs the graphics background color, either as a slot number or
as an RGB list, whichever way it was set. (See PENCOLOR
.)
6.7 Saving and Loading Pictures
savepict
command. Writes a file with the specified name containing the state of
the graphics window, including any nonstandard color palette settings,
in Logo's internal format. This picture can be restored to the screen
using LOADPICT
. The format is not portable between platforms, nor is it
readable by other programs. epspict to export Logo graphics for
other programs.
loadpict
command. Reads the specified file, which must have been written by a
SAVEPICT
command, and restores the graphics window and color palette
settings to the values stored in the file. Any drawing previously on
the screen is cleared.
See section savepict .
epspict
command. Writes a file with the specified name, containing an
Encapsulated Postscript (EPS) representation of the state of the
graphics window. This file can be imported into other programs that
understand EPS format. Restrictions: the drawing cannot use FILL
,
PENERASE
, or PENREVERSE
; any such instructions will be ignored in the
translation to Postscript form.
See section fill ,
See section penerase ,
See section penreverse .
6.8 Mouse Queries
mousepos
outputs the coordinates of the mouse, provided that it's within the
graphics window, in turtle coordinates. If the mouse is outside the
graphics window, then the last position within the window is returned.
Exception: If a mouse button is pressed within the graphics window
and held while the mouse is dragged outside the window, the mouse's
position is returned as if the window were big enough to include it.
clickpos
outputs the coordinates that the mouse was at when a mouse button
was most recently pushed, provided that that position was within the
graphics window, in turtle coordinates. (wxWidgets only)
buttonp
outputs TRUE
if a mouse button is down and the mouse is over the
graphics window. Once the button is down, BUTTONP
remains true until
the button is released, even if the mouse is dragged out of the
graphics window.
button
outputs 0 if no mouse button has been pushed inside the Logo window
since the last call to BUTTON
. Otherwise, it outputs an integer
between 1 and 3 indicating which button was most recently pressed.
Ordinarily 1 means left, 2 means right, and 3 means center, but
operating systems may reconfigure these.
This document was generated by Brian Harvey on September, 3 2008 using texi2html 1.78.