You can use Kali to draw Escher-like tilings, infinite knots, frieze
patterns, and other cool stuff.  It lets you draw patterns in any of
the 17 planar (wallpaper) or 7 frieze symmetry groups.  

The newest version of Kali is always available for free via anonymous
ftp from the Geometry Center: (geom.umn.edu or 128.101.25.35).  The
current version is 3.1, and runs under X Windows and SGIs.  It is
copyrighted.


        HISTORY

KALI was first written by Nina Amenta at UC Berkeley and ran under SGI
machines. Then it was later extended at the Geometry Center at the
University of Minnesota.  Nina added the capability to move and delete
lines. Tamara Munzner added user interface panels using the public
domain Forms Library by Mark Overmars of the University of Utrecht
(available via anonymous ftp at archive.cs.ruu.nl). This older version
was known as Kali 2.1.

The newest version is Kali version 3.1.  Ed H. Chi did the port to X
Windows, using an alpha version of the Xforms library (a port of SGI
forms library to X), and the vogl graphics library.  The header files
were recreated, and the code was reorganized some what.  Nina added
the frieze group, and Tamara changed the user interface to allow the
switch between the two groups.  Stuart Levy of the Geometry Center
adapted it to a later XForms release, implemented editing (selection
and deletion) under X, and made it independent of vogl.


        HOW IT WORKS

Every symmetry group is defined by a lattice and a set of two
generators, which are either a rotation, reflections, or glide
reflections. A pattern is just a list of lines.  Each line is first
reflected (if there are any reflection or glide reflection generators)
and then all reflections are rotated (if there is a rotation
generator). Finally the resulting figure is redrawn around every
lattice point.  The list of lines, the lattice, and the symmetry group
are written into the file when you save your picture.  Kaliprint turns
this information into a Postscript file.  Postscript is a format which
you can print on a laser printer or mail to your friends.


        STARTUP

You can start up kali in frieze mode with "-f" or wallpaper mode with
"-w". The "-m" option disables switching between the two modes. The
default is "-w".


        CHOOSING A WALLPAPER OR FRIEZE GROUP

To switch between the wallpaper group and the frieze group, click on
the choice panel at the top of the symmetry buttons. The choice panel
will change to either "Wallpaper Groups" or "Frieze Groups".


        CHOOSING A SYMMETRY

Select the symmetry you wish to work in by clicking on one of the
symmetry button. Each icon shows some of the symmetries which your
pattern will contain. Each group is also labeled in Conway notation
and the traditional crystallographic notation.

Re-selecting the current symmetry group clears the window and throws
away your current drawing.


        SUMMARY OF MOUSE AND KEYBOARD COMMANDS

Left Mouse (draw mode) -- Start/Continue drawing connected lines
Left Mouse (move mode) -- Move second endpoint of selected line
Middle Mouse (draw mode) -- Break connected lines, allow starting fresh
Middle Mouse (other modes) -- Delete selected line
Right Mouse (any mode) -- Select line

backspace/delete -- Delete selected line
Keys to choose modes: (d)raw (m)ove (r)otate (a)ngle (R)atio (z)oom
		      (<)load (>)save

        DRAWING

Clicking the left mouse puts down points in your pattern.  Once a
point is down, a new line "rubber-bands" from the point to the current
cursor position.  Click the left mouse again to fix the second
endpoint of the current line and start the next one. Click the middle
mouse button to let go of the current rubber-banding line. Clicking
infrequently often gives nicer patterns.


        TRANSFORMATIONS

ZOOM: You can scale your window by clicking on "Zoom".  Now holding
down the left mouse button and moving the mouse left and right makes
your pattern bigger or smaller. When editing (see the next section) it
is often useful make the pattern very big, edit, and then shrink it
again.

ROTATE: Clicking "Rotate" lets you rotate the pattern within the
window.  Again, hold down the left mouse and move it left and right.

ANGLE and RATIO: Some symmetry groups have some additional degrees of
freedom in the symmetry lattice.  If the "Angle" or "Ratio" button is
activated, you can change the angle between the two vectors
forming the lattice, or the ratio between the lengths of the two
vectors, respectively.

You can always resize the window to fit your pattern into a
differently shaped rectangle by picking up its lower righthand corner.

To get back to Draw mode after a transformation, click on the "Draw"
button.


        EDITING

Click the RIGHT mouse button to SELECT the line under the cursor.
It is highlighted in red.

Click the MIDDLE mouse button to DELETE the selected line, or
press the Backspace or Delete keys.  After deleting, another line
(often the adjacent one) becomes highlighted, and can be deleted in turn.

Press the "Move" button to choose Move mode.
Then, click and drag the LEFT mouse button to move the nearest endpoint of
the selected line.  You'll need to press the "Draw" button to resume drawing.


        SAVING AND LOADING A PATTERN

SAVE: Click "Save" on the control panel to save your pattern. It will prompt
you for a name under which to save it, and puts it in a file with that
name.

LOAD: To load an old pattern, click "Load". It will ask you for the
name it was saved under. Some demonstration patterns to look at are
"weaving.kali", "turtles.kali", and "people.kali".

"Esc" clears the input panel in the popup window.


        PRINTING A PATTERN

The "Print" button on the main kali panel will route a PostScript
version of the pattern to the printer defined by the "PRINTER"
environment variable.  There is also a separate program for printing a
kali output file. From the Unix shell, type "kaliprint yourfile.kali | lpr"
replacing "yourfile.kali" with the name of the file containing your pattern.

The "Print To" button saves the current view in a Postscript file.
If instead of a file name you enter a UNIX command preceded by
a "|" vertical bar, (as in "| lpr -Potherprinter"), the Postscript
text is piped to that command.
