.TH ico "" "" "X Client"
.PC "Animate an icosahedron or other polyhedron"
\fBico [\-display \fIname\^\fB] [\-geometry \fIgeometry\^\fB] [\-r] [\-d \fIpattern\^\fB] [\-i] [\-dbl] [\-faces] [\-noedges]
	[\-sleep \fIn\^\fB] [\-obj \fIobject\^\fB] [\-objhelp] [\-colors \fIlist\^\fB]\fR
.PP
.HS
.SH Options:
.IC "\fB\-colors \fIcolor color ...\fR"
Name the colors to use to draw the filled faces of the object
.IC "\fB\-d \fIpattern\fR"
Use
.I pattern
as a bit pattern for drawing the dashed lines of a wire-frame object
.IC \fB\-dbl\fR
Use double buffering on the display
.IC \fB\-faces\fR
Draw filled faces instead of wire frames
.IC \fB\-i\fR
Use inverted colors for wire frames
.IC \fB\-noedges\fR
Do not draw the wire frames
.IC \fB\-r\fR
Dislay the polyhedron on the root window, instead of creating a new window
.IC "\fB\-obj \fIobject\fR"
Draw
.I object
.IC \fB\-objhelp\fR
Print a list of the available objects, plus information about each object
.IC \fB\-sleep \fIn\fR"
Sleep
.I n
seconds between each movement of the object
.HE
.B ico
displays and rotates a wire-frame or solid polyhedron.
The object is either wire frame with the hidden lines removed,
or solid with the hidden faces removed.
A number of polyhedra are available;
adding a new polyhedron to the program is quite simple.
.PP
.B ico
recognizes the following command-line options:
.IP "\fB\-colors \fIcolor color ...\fR" 0.75i
Name the colors to use to draw the filled faces of the object.
If fewer colors are named than the object has faces,
.B ico
reuses colors.
.IP "\fB\-d \fIpattern\fR"
Use
.I pattern
as a bit pattern for drawing the dashed lines of a wire-frame object.
.IP \fB\-dbl\fR
Use double buffering on the display.
This works for either wire-frame or solid-fill drawings.
For solid-fill drawings, using this switch results in substantially
smoother movement.
Note that this option doubles the number of bit planes required.
Because some colors typically are allocated by other programs,
most eight-bit-plane displays will be limited to eight colors
when using double buffering.
.IP \fB\-faces\fR
Draw filled faces instead of wire frames.
.IP \fB\-i\fR
Use inverted colors for wire frames.
.IP \fB\-noedges\fR
Do not draw the wire frames.
Typically, this option is used only when
.B \-faces
is specified.
.IP \fB\-r\fR
Dislay the polyhedron on the root window, instead of creating a new window.
.IP "\fB\-obj \fIobject\fR"
Draw
.IR object .
If no object is specified,
.B ico
draws an icosahedron.
.IP \fB\-objhelp\fR
Print a list of the available objects, plus information about each object.
.IP "\fB\-sleep \fIn\fR"
Sleep
.I n
seconds between each movement of the object.
.SH "Adding Polyhedra"
If you have the source code to
.BR ico ,
it is very easy to add more polyhedra.
Each polyhedron is defined in a header file
file of the name of \fBobj\fIXXX\^\fB.h\fR, where
.I XXX
relates to the name of the polyhedron.
The format of the header file is defined in the file
.BR polyinfo.h .
Look at the file
.B objcube.h
to see what the exact format of an \fBobj\fIXXX\^\fB.h\fR
file should be, then model your new object's header file after that.
.PP
After making the new header file (or copying in a new one from elsewhere),
simply invoke the command
.BR "make depend" .
This recreates the file
.BR allobjs.h ,
which lists all of the header files.
Executing
.B make
after this rebuild
.B ico
with the new object.
.SH "See Also"
.B
X clients
.R
.SH Notes
.B ico
consumes an enormous number of computation cycles \(em so many, in fact, that
you may have trouble getting the attention of the system in order to quit
.BR ico .
Unless you have a very robust system, expect
.B ico
to ``nail it to the wall''.
.IR "Caveat utilitor" .
.PP
.B ico
does not correctly display pyramids and tetrahedrons with filled faces.
.PP
Copyright \(co 1988, Massachusetts Institute of Technology.
