

		       Documentation for Polycut 
		        by Ken Brakke
		           Mathematics Department
			   Susquehanna University
			   Selinsgrove, PA 17870
			   brakke@susqu.edu
			   http://www.susqu.edu/facstaff/b/brakke

			      Version 3
			    August 19, 1997

Contents:
1. Overview.
2. Installation.
3. Operation.
4. Covering spaces.
5. Soap films.
6. The sample covering spaces.
7. Adding new spaces.
8. Internal algorithms.

1. Overview.

Polycut is a program for visualizing multiple universes connected
by a certain kind of wormhole.  In mathematical terms, Polycut shows
what a branched covering space of 3-space would look like from the 
inside.  If you know nothing of covering spaces, you should now read 
enough of section 4 of this documentation to get some idea.  Each sheet 
(or universe) of the covering space is colored a different color at 
infinity: red, green, blue, ... . The branch curves are dashed black 
and white.  The observer is located in one of the sheets (red to start with)
and looks toward the branch curves, seeing other colors in the
background as the line of sight passes to other sheets.  The 
screen thus shows regions of constant color separated by dashed 
branch curve.  The user may rotate the branch curve with the mouse.

The purpose of Polycut is to illustrate the author's contention
that soap films are best viewed as minimal cuts in covering spaces.
In particular, any covering space has associated to it a set that
is the minimal area cut that can separate the red sheet from the
others.  To illustrate that, each of the example covering spaces
comes with a soap film that may be inserted into the covering
space, showing how it blocks all lines of sight to the other sheets.
For more about soap films, read section 5 below.


2. Installation.

Polycut is written in Open GL using the GLUT toolkit.  Executable versions
for Silicon Graphics and Windows 95/NT are available from
http://www.susqu.edu/facstaff/b/brakke/polycut.  There is also a source
code package for other unix systems with Open GL and for those who wish
to modify polycut to include their own spaces. To install, make a polycut 
directory and unpack the polycut archive in it.  The general unix version 
will have to have "make" run (good luck!).  There is no fancy installation 
program; all files remain in the polycut directory. When running, the soap film 
files (extension .off) must be in the current directoryor in the directory
specified by the environment variable POLYCUTPATH, or else you will not be 
able to show the soap films.

3. Operation.

The command to start Polycut is 

    polycut

Or double-click on the program name, or do whatever you do to launch
programs.  There are no command line options.  All command input to Polycut
is through the mouse.  Only error messages will appear in the
terminal window.

When started, Polycut brings up a graphics window.  You must use
the mouse to place and size the window as you wish.  There is no
harm in making it full screen, as there is no other output to 
look at.  The initial view is of a two-sheeted covering space with a 
circular branch cut.

Mouse commands:

Left button: Rotates the branch curve.  Hold the 
left button down and drag the mouse.  The branch curve will rotate 
as if the mouse is moving a trackball.  If you are still moving 
when you release the left button, the branch curve will continue 
to rotate.  If zoom mode is in effect (see below), then dragging
vertically with the left button down will zoom in and out.  This is just
scaling, not true 3D flight.

Middle button: Rotates the branch curve about the Z axis, that is,
clockwise or counterclockwise.  Hold down the middle button and
drag.

Right button: Brings up the main menu.

Main menu: All the main menu choices have single-key shortcuts,
except the new space submenu.  Keys are shown in parentheses.
You do not need to hit Enter after the key.

New space: Brings up the submenu for choosing covering spaces.
If there is no film file for your chosen space, Polycut will
print an error message, but everything will still work except
displaying the film.

Soap film (f): Toggles showing the soap film corresponding to the 
current space.

Wire (w): Toggles displaying invisible wires (branch curves of
order 1).  These display as blue and white dashed curves.

Stop (s): Stops any continuing motion.

Colors (c): Toggles displaying different colored sheets. If OFF,
then all background is the color of the viewer's sheet, as if
the sheets hadn't been cut and glued together.  The branch
curve is still shown.

Home sheet (1,2,3,...): Changes the sheet holding the viewpoint.

Rotate (r): Puts left mouse button into rotate mode.

Zoom (z): Puts left mouse button into zoom mode.

Elevation (e): Toggles a window showing top, side, and front view of the
branch curve, along with the camera position with respect to each.  The
camera icon is shown as a T shape.  Any of the camera icons can be dragged
with the left mouse button to fly around the branch curve.  This is the 
best way to fly through the branch curve to other universes.

Help (h): Prints a help screen to the terminal window.

Quit (q): Exit Polycut.

5. Covering spaces.

This section is meant to explain enough about covering spaces to
the totally naive to make Polycut somewhat comprehensible.  As a
familiar everyday example of a covering space, consider a multi-
level parking garage.  Each level looks pretty much alike, and
you can drive smoothly from one level to the next.  In covering
space terminology, each level is called a "sheet". There is no
particular dividing line between levels.  The only nonsmooth
places are the pillars the ramps spiral around as they go up.
You have to go around such a pillar several times to get back
where you started from (we assume that going up from the top level
gets you to the bottom level).  Such a pillar is called a "branch point",
since several sheets or "branches" meet there.  The number of
times you have to go around the pillar to get back to your starting
point is called the "order" of the branch point.  The term 
"covering space" comes from the fact that the ground the garage
is built on is covered with multiple levels of parking.

Mathematically, covering spaces are constructed as follows.
Start with a plane (for 2D covering spaces) or Euclidean
3-space (for 3D covering spaces). This is called the "base space".
With magic scissors, make cuts in the base space (cuts are lines
in the plane or surfaces in 3-space).  Make as many copies of
this cut base space as you want sheets in your covering space.
Then glue each side of a cut on one sheet to the opposite side
of the cut on some other sheet (actually, it could be the same
sheet).  Now everything is smooth, except at the ends of the
cuts.  These ends are branch points (in 2D) or branch curves
(in 3D).  If you go around a branch point or curve, you will generally
have to make several complete turns to come back to your starting
point.  The number of turns is called the "order" of the branch
point or curve.  A branch point or curve of order 1 is just an
ordinary point or curve; there is nothing to distinguish it.
After the gluing, the cuts become undistinguishable also, so
that afterwards there is no way to tell exactly where they were.
So in essence, the covering space exists in such a way that the 
branch points and curves are real but the cuts are artificial.

Another example of a covering space is seen in animated cartoons.
A horse disappears behind a skinny tree and doesn't come out the
other side.  The tree is actually a branch curve, and the horse
has gone to another sheet.

5. Soap films.

It is the author's contention that soap films are best viewed as
cut surfaces in covering spaces.  In particular, the soap film
associated to a given covering space is the least area cut
that separates one sheet (i.e. the viewer's sheet) from the rest.
The film is not required to be a complete cut for separating all
sheets.  With the soap film as cut, one may take the whole exterior
of the film as the viewer's sheet, and the boundary of the film
is on a branch curve.  In fact, the boundary branch curve must
have order greater than 1, since an order 1 branch curve can be
disregarded when trying to separate sheets.  If one has a wire frame
to put a soap film on, then one takes the frame as the branch
curve of a covering space.  Different covering spaces can give
different films.  Order 1 branch curves then correspond to wire
that isn't part of the soap film boundary.  I call such wires
"invisible wires" since they are invisible to the soap film
and invisible in the covering space (as far as being a dividing
line between different colors of background).

The advantage of this model of soap films is that the film becomes
an orientable surface, the boundary of the viewer's sheet. This
is despite the film being nonorientable in the ordinary sense
(mobius band) or having triple junctions or tetrahedral points.
Further, there is minimal-cut maximal-flow duality available.
Consider the problem of a fluid flowing from the viewer's sheet
to the other sheets with the restriction that the the vector 
difference in flow between any two sheets at corresponding points 
has maximum magnitude 1.  The goal is to maximize the total flux
from the viewer's sheet to the other sheets. Then the bottleneck to 
the flow is precisely the minimal area cut separating the viewer's 
sheet from the others.  Thus we can prove a soap film is indeed
the minimal cut by exhibiting a flow whose flux is equal to the
area of the film.  This is the first technique of proving minimality
that is applicable to all soap films.  A heavy-duty mathematical
treatment of this is available in my preprint "Soap films and 
covering spaces." (But it has lots of pictures.)


6. The sample covering spaces.

These are brief descriptions of the covering spaces that appear
in the new spaces menu of Polycut.

Circle 2-cover.  Two sheets with branch curve a circle.  Looks the
same from front and back since both views see second sheet.

Circle 3-cover.  Three sheets with branch curve a circle.  Front
view sees second sheet, while back view sees third sheet.  Covering
spaces whose branch curve is an unknotted loop differ only in the
number of sheets, i.e. the order of the branch curve. More
sheets don't give a different-looking view, since you always see
one sheet from the front and another from the back.

Mobius band 2-cover.  Two sheets whose branch curve is the edge
of a Mobius band.  Note that this curve is an unknotted loop, so
its covering spaces are topologically the same as those of the
circle.  But the picture is different since the curve is twisted.
Note that the view through the center shows the viewer's home sheet,
since in effect the line of sight is going through two cut surfaces,
and so gets back to the home sheet.  The soap film is a Mobius band.
There is no need to have film in the center since going through
the center does not lead to another sheet.

Mobius band 3-cover.  Three sheets whose branch curve is the edge
of a Mobius band.  Now going through the center does lead to another
sheet, so the soap film extends across the middle.  Note that this
film has a triple junction line.  Triple lines can only appear
when the covering space has at least three sheets.

Mobius band 4-cover.  One can see four different colors from
various angles, but the soap film is the same as the 3-cover.
More sheets still give the same film.  However, using the method
described below for the trefoil 4-cover, one can get the 
orientable minimal manifold bounded by the wire.  It is extremely
difficult to get this film physically on a wire, since it would
like to make the film shown with the Mobius 3-cover.

Catenoid 2-cover.  The branch curves are a pair of coaxial parallel
rings.  Note the similarity to the Mobius 2-cover.  The soap film
is a piece of catenoid.

Catenoid 3-cover,symmetric.  The gluings around each branch curve
are independent.  Here the gluings around both rings are the same,
so that when you look through the center your line of sight goes
through two cuts, from sheet 1 to 2 and then from 2 to 3, and you
see a different color background.  Hence the soap film must have
a disk across the center to block this.

Catenoid 3-cover, antisymmetric.  Here the gluings around the two
rings are in opposite order, so that looking through the center
goes from sheet 1 to 2, then from 2 to 1.  Hence the soap film
doesn't need to span the center, and winds up being a catenoid again.

Catenoid 4-cover. Both rings branching order 4, parallel gluings.

Double catenoid.   The branch curve is two pairs of parallel rings
joined at right angles.  The curve is topologically an unknotted
circle, so covering spaces are distinguished only by the order of
branching.  This example is an order 3 branching.  Note that looking
through the centers of the rings always winds up on the viewer's
sheet. In fact, there is a continuous path for your line of sight
from the middle of a pair of rings between the other pair of rings
to the outside.  So no covering space of any number of sheets ever
gives a different color in the centers.  Thus no film has to cover
the centers.  The film for any order is a double catenoid.  Note
that this film is not simply connected, even though its boundary
is an unknotted closed curve.

Double catenoid with 1 extra wire.  If you dip the double catenoid wire
into soap solution, you will probably not get the double catenoid
film.  Instead you will probably get a disk or two spanning the
catenoids.  But the previous example proved that no covering space
gives disks.   So how do we get a film with disks?  The answer is
inspired by the invisible wires of the partial trefoil example.
We will put in  additional branch curves that wind up being order 1
on sheet 1, yet let us see different background sheets through
the centers of the rings.  This example adds one invisible wire
in the shape of a rectangle (hit 'w' to see it).  If one takes
the film-with-disk to be the cut between the viewer's sheet and
the others, note that the rectangle is of order 1 entirely on
the viewer's sheet, hence invisible and not affecting the film's
shape, but it is a branch curve of order 2 on the unseen sheets.
One way to look at this maneuver is that it converts a film that
is a stable relative minimum (as a surface subject to small
deformations) in the usual covering space to one that is an
absolute minimum in the covering space with the added invisible
wire.

Double catenoid with 2 extra wire.  Here there are two invisible
wire rectangles added.  There are four total sheets.  The
double catenoid wire splits into three branch curves of order
2,1,1, and so do each of the invisible rectangles.
The views from the different sheets here are really spectacular.


Trefoil 2-cover.  The branch curve is a trefoil knot.  The soap
film is a Mobius band with 3 half-twists.

Trefoil partial.  This is a 3-cover with a trefoil knot branch
curve.  However, the gluing is done in such a way that there are
actually two separate branch curves in the covering space: one
is of order 2 and one is of order 1 (note the orders total to
3, which is the number of sheets).  Each of these is a complete
trefoil.  By default, only the order 2 branch curve is shown, 
since order 1 branch curves are "invisible".  You may toggle the
showing of invisible branch curves as blue-and-white dashed curves
with the "Wires" menu command or by hitting the 'w' key.  Note
that the two branch curves are entirely separate.  To verify this,
you can follow each all the way around by changing the viewpoint 
sheet with the 1,2,3 keys.  Going back to sheet 1 and turning off
the invisible wires, you see that the soap film doesn't have to
touch the full trefoil to cut sheet 1 from the others.  Physically,
you can form this film by bending a wire into a trefoil and dipping
it into soap solution not all the way.

Trefoil full.  This is a 3-cover where the branch curve is a trefoil
knot with branch order 3.  The corresponding soap film spans the
full knot, and is what you get when you dip a trefoil wire all
the way into soap solution.

Trefoil 4-cover.  This is a 4-cover where the branch curve is a
trefoil with branch order 4.  The standard soap film is the same 
as the full trefoil case previous.  However we're going to change
the rules here to get a different film.  There is a mathematical
theorem that any smooth closed curve is the boundary of a smooth
orientable minimal manifold, and none of the previous three films
satisfy that.  The trefoil 2-cover film was nonorientable, and
the next two had triple lines, so were not manifolds.  To get
the orientable manifold, we make the soap film cut rule that
one can glue only consecutive sheets across the cut.  That is,
sheet 1 in front must be glued to sheet 2 in back, sheet 2 to 3,
sheet 3 to 4, and sheet 4 to 1.  This guarantees the cut surface
is orientable, and it eliminates triple lines since there are
no cycles of length 3 permitted (which is what triple junctions
are when viewed as cuts).  Such a manifold is called a Seifert
surface for a knot, and this procedure will produce a Seifert 
surface for any knot.  I have not been able to get this film
physically on a wire.  It is a genus 1 surface, and soap films
don't like to form them naturally.  They like to form films
with connected exteriors.

Trefoil Narnia.  This is a six-fold covering with a single order-2
branch curve that triple covers the trefoil.  It is named "Narnia"
after a video Bill Thurston made featuring this space.

Figure 8 knot 2-cover.  A double covering with an order 2 branch curve 
in the shape of a figure 8 knot.

Figure 8 knot 3-cover. A triple covering with an order 3 branch curve 
in the shape of a figure 8 knot.

Figure 8 knot 4-full. A 4-covering with an order 4 branch curve 
in the shape of a figure 8 knot.

Figure 8 knot 4-partial. A 4-covering with an order 3 branch curve 
and in the shape of a figure 8 knot.  Notice the soap film does not
touch one loop of the wire.

Figure 8 knot 5-full. A 5-covering with an order 5 branch curve 
in the shape of a figure 8 knot.

Figure 8 knot 1,4-cover. A 5-covering with an order 4 branch curve 
and in the shape of a figure 8 knot.  Notice the soap film does not
touch one loop of the wire.

Figure 8 knot 2,3-a.  A 5-covering with an order 2 and an order 3
branch curve and in the shape of a figure 8 knot.

Figure 8 knot 2,3-b.  A different 5-covering with an order 2 and an order 3
branch curve and in the shape of a figure 8 knot.

Figure 8 knot 1,5-cover. A 6-covering with an order 5 branch curve 
and in the shape of a figure 8 knot.  Notice the soap film does not
touch one loop of the wire.

Figure 8 knot 2,4-cover.  A 6-covering with an order 2 and an order 4
branch curve and in the shape of a figure 8 knot.

Figure 8 knot 3,3-cover.  A 6-covering with two order 3 branch curves 
in the shape of a figure 8 knot.

Figure 8 knot 6-full. A 6-covering with an order 6 branch curve 
in the shape of a figure 8 knot.


Penetrating loops.  The branch curves are two circles of equal
radii, one slightly poking through the center of the other.
There are three sheets, and each circle splits into two branch
curves of orders 2 and 1.  So part of one circle is an invisible
wire on the viewer's sheet.  The soap film is a disk in one circle
that is poked up by the other circle.  This is an example of a
"thin obstacle" problem in minimal surface theory.

Tetrahedron.  This is a four-fold covering.  The soap film is the
tetrahedral minimal cone.

Cube.  This is a six-fold covering. The soap film has a rounded square
in the middle.  Six is the minimal number of sheets for this film
without invisible wires.

Octahedron. This is an eight-fold covering. The film is entirely
composed of plane segments.  Eight is the minimal number of sheets
for this film without invisible wires.

Oscillating string.  In general relativity, a cosmic string with the
negative energy density will have more than 360 degrees around it, so
our branch curves could be implemented with the right negative energy
density (which is very high).  For integral multiples of 360 degrees,
space is flat outside the string, so there are none of the nasty 
gravitational effects associated with ordinary black-hole type wormholes.
A curved string would not be static, however, but would obey a fairly simple 
equation of motion, basically acceleration proportional to curvature.  The 
fascinating point is that it is possible to find solutions where an oscillating 
loop never intersects itself.  This example implements a solution I found in 
a paper by Turok.  It is shown connecting two universes, but could 
connect any number.  In reality, the string would be moving near the
speed of light, so you would want a big string and precise timing as
you zip through in your spaceship.

7. Adding new spaces.

Polycut is set up so that it is easy to add your own covering spaces.
All that is needed are functions computing the branch curves as
functions of one parameter and some structures describing the
gluing of the the cuts and some other data.  If you get an
interesting space, please send it to me.

To design your own covering space, first decide on your branch
curves.  Each branch curve may be an open or closed curve, 
which may be knotted or not.  If open curves are used, then
more than one curve must attach to any endpoint.  One covering 
space may have any number of branch curves.  No branch curve may 
intersect itself or another branch curve, except at endpoints. 

The second step of design is to decide on the gluings across the
cut surfaces.  The cut surfaces are defined in Polycut to be
cones from the origin (center of the screen) out to the curves.
That is, the cut surface is swept out by a line segment with
one end at the origin and the other end moving along the branch
curve.  A gluing is specified as a permutation of sheets, that is,
for each sheet in front of the cut there is specified which sheet
is glued to it in back of the cut, and there is a 1-1 correspondence
of sheets.  Gluings are completely arbitrary, except for a consistency
condition: where two cut surfaces intersect (i.e. where branch
curves cross when viewed from the origin), the net permutation
due to going through both cut surfaces must be the same on either
side of their intersection.  This guarantees that the cut surface
intersection will not cause a color change in the background.
This also means that the cut surfaces get divided up into sections
bounded by cut surface intersections, and each section has its
own gluing.  Sheets may be glued to themselves; this means the
arc will be an order 1 branch curve on that sheet, which is an
"invisible wire".

The third step is to divide up the branch curves into arcs, one
arc for each section of cut surface.  Each arc needs to have
a C function computing its x, y, and z coordinates as a function
of a parameter.  This function goes in polydata.c, which contains
many examples to follow.  Usually, one function can serve for many
different arcs, each of which have their own parameter range.

The fourth step is to add a structure to the data[] array in
polydata.c.  Add it before the last structure, which contains
just NULL to signal the end of the array.  The fields of this 
structure are:

  char *submenu         A quoted string for the submenu this space will appear in.
			All spaces with the same submenu name will be gathered
			together in a submenu.  Spaces in the same submenu do
			not have to be listed consecutively.  A NULL here will
			put the space on the main space menu.

  char *name;           A quoted string with the name that will appear
		        in the new space submenu.

  char *filmfile;       A quoted string with the name of the file  
		        holding the data for the soap film corresponding
		        to the space.  NULL if there is no file.

  int sheets;           The number of sheets in the covering space (max 10).

  int arccount;         The total number of arcs in all the branch curves.

  struct arc arcs[20];  One structure for each arc (max 20; change MAXARC in
			polydata.h if you need more).  Arcs may be listed
			in any order; Polycut will figure out which 
			endpoints are really the same.

The fields of the arc structure are:

  void (*formula)(); The name of the function computing the curve.

  double start;      Starting parameter of the arc.

  double end;        Ending parameter of the arc.

  int segments;      Number of straight segments to divide the arc
		     into.  The branch curves are actually polygons.
		     One segment per 5 degrees of curvature works
		     well.  Too many segments slows down calculations,
		     and if you ever get over 256 segments around
		     a single background region, the SGI graphics
		     may go haywire.

  int dashes;        Number of dashes in the arc.  Should be even
		     and a divisor of segs.

  int gluing[10];    Gives the gluing across the cut surface of the
		     arc.  The array index is the number of the
		     front sheet (indexing starting at 0, not 1),
		     and the array value is the number of the back
		     sheet.  Entries beyond the number of sheets
		     may be omitted.

You are now ready to test.  Run "make" again to recompile everything.
Run Polycut, and look for your space on the new spaces menu.

The fifth step (optional) is to make a soap film for your covering
space.  A soap film is represented as a collection of triangles
and triple line segments.  The format of a soap film file is as follows:

Line 1: OFF           Keyword.

Line 2: n1 n2 n3      Numbers of vertices, facets, and edges.
		      (the number of edges is not used.)

next n1 lines: x y z   Coordinates of vertices

next n2 lines: v1 v2 v3   Indices of vertices for each triangle.
                          These start at 0, so have values
			  between 0 and n1-1.

next line: TRIPLE         This keyword indicates that triple line
			  segments follow.

next line:  nt           The number of triple line segments.

next nt lines: x1 y1 z1 x2 y2 z2    The coordinates of the endpoints
				    of the triple line segments.

A good way to generate film files is with the Surface Evolver program,
which is available by anonymous ftp from geom.umn.edu as 
pub/evolver.tar.Z.  Included in the Polycut package is an Evolver
command file which can be read into the Evolver and used to 
create the film file after you have evolved the film.  At the
Evolver main prompt, just do

    Enter command: read "polycut.cmd"
    Enter command: polyfilm >>> "filmfile.off"

Caveat: The polyfilm command assumes all vertices and facets are
consecutively numbered, which means you shouldn't do any surgery
on the surface in Evolver. If you do, dump and reload the surface.


8. Internal algorithms.

This section describes some of the algorithms Polycut uses.
The basic goal is to use the branch curves to divide the screen
into polygonal regions and color each region the appropriate color.
This involves finding all the intersections of the branch curves
as projected to the screen.  This is done by having a radial
sweep line rotate around the origin, keeping track of a list
of the edges intersecting the sweep line.  A vertically moving
horizontal sweep line would be simpler to just find the intersections,
but it would not be compatible with finding the polygon colors
since the cuts are all radial.

Internally, each branch curve is represented by a linked list
of alternating edges and vertices.  When it is time to draw 
a new image, the following steps occur:

A. The coordinates of the vertices are rotated into screen
coordinates.  
B. The directions of the links are altered so that all edges
are oriented counterclockwise with respect to the origin
(center of the screen).
C. All vertices are examined to find which are minimums in angle
(i.e. will be encountered by the sweep line before their neighbors).
These are sorted in order of angle.  This sweep also identifies
those edges that cross the initial sweep line.
D. The edges crossing the initial sweep line are sorted in order
of the radius of their crossing points.
E. Three lists of upcoming events are set up: endpoints of
active edges, crossings of active edges, and minimum points.
All are kept sorted in order of angle (order the sweep line
will encounter them).
F. As the sweep line rotates around, each event is handled as
it is encountered.  An endpoint causes the edges after the
endpoint to replace the old edge in the active edge list (unless
the endpoint is a maximum in angle).  A crossing causes a new
vertex to be generated and the edge-vertex links to be rearranged
so the four polygons adjacent to the vertex have proper linked
lists.  A minimum causes new edges to be inserted in the
active edge list.  Whenever a new edge is added to the active
list, it is checked for intersections with its immediate neighbors.
Crossings found are inserted into the crossings list.  The other endpoint
of a new edge is inserted into the endpoint event list.
G. Whenever a crossing or a minimum is encountered, the cuts of 
the active edges are sorted in depth order and the coloring of
each segment of the radial line is figured from the cut gluings.
Active edges are marked as to the colors of the inner and outer
adjacent polygons.  This step also marks invisible edges.
H. After the sweep has been completed, the polygons are drawn.
The background is cleared to the viewer's sheet color.  The
edge list is scanned, and when an edge marked with a color is
found, it starts the drawing of a polygon. The drawing just follows
the edge-vertex linked list around until it comes back to the start.
The polygons are drawn far back in the z-buffer.
I. Finally, the edges are drawn in 3D with the z-buffer.  The
branch curves are followed, and visible edges are drawn with
black-and-white dashing, and invisible edges (if turned on)
are drawn blue-and-white.
J. If the soap film is turned on, all its facets are drawn by
just going through the facet list from the film file.  Smooth
shading is done by computing the average normal at each vertex
of neighboring facets and having the SGI hardware apply Gourard
shading. The hardware also handles all the coordinate rotation
and z-buffering. Triple lines are then drawn in black moved forward
a little so they are visible.



End of Polycut documentation.

