NAME
        IsosurfaceNaN

   DESCRIPTION
        This module creates an isosurface (surface of constant value) for a 3-D
        lattice.  It uses Lorenson and Cline's "marching cubes" algorithm to
        calculate all the necessary triangles comprising the isosurface.
        IsosurfaceNaN's notable feature is its ability to exclude from the
        isosurface triangles that contain a certain value.  This prevents them
        from deceptively flowing around values that should be considered
        special.  Finally, the isosurface can be uniformly colored using the
        sliders on the control panel or colored by another 3-D lattice on the
        "Scalar Field" port in conjunction with a colormap.
        
        ---------------------------------------------------
        NOTE: This module contains some isosurface code adapted from
        the "Isovis" program written by Mike Krogh at NCSA, University of
        Illinois at Urbana-Champaign.
        ---------------------------------------------------

   INPUTS

      Input -- Lattice
         (3-D, 1-vector, float, perimeter).
         This is the lattice from which to calculate the isosurface.

      Scalar Field -- Lattice (Opt.)
         (3-D, 1-vector, float, perimeter).
         This is a lattice that can be used to color the isosurface.  It can be
         colored by itself or by the data values of another lattice of equal size.

      Colormap -- Lattice (Opt.)
         (1-D, 4-vector, float, uniform).
         This is a colormap which can be used to color the isosurface in
         conjunction with the "Scalar Field" lattice.  If either the "Scalar Field"
         or the "Colormap" port is empty then the isosurface will be colored
         based on the settings of the color-component widgets.

   WIDGETS

      Red -- Slider
         This is the red component of the isosurface color.

      Green -- Slider
         This is the green component of the isosurface color.

      Blue -- Slider
         This is the blue component of the isosurface color.

      Opacity -- Slider
         This is the opacity component of the isosurface color.

      Threshold -- Dial
         This is the value through which to generate the isosurface.

      Special Value -- Text
         This is a value which can be left out of the isosurface.

      Ignore Special? -- Option Menu
         (No, Yes).
         This determines whether any triangles with vertices crossing the
         "special value" should be included in the isosurface.  Excluding them
         could create holes.

      Smooth? -- Option Menu
         (No, Yes).
         This determines whether normals are calculated for the vertices of the
         triangles.  Turning this option on has the effect of smoothing out the
         surface.

      Flip Normal? -- Option Menu
         (No, Yes).
         This reverses the vertex normals of the isosurface when the smoothing
         option is in effect.  It allows either side of the isosurface to be properly
         lit on machines which do not support two-sided lighting.

   OUTPUTS

      Surface -- Geometry
         This is the generated isosurface.

   KNOWN PROBLEMS
      The triangle generation is not highly optimized; it is slower and
      consumes more memory than IsosurfaceLat.  This module can also
      produce surfaces with undesirable holes since it uses the "marching
      cubes" algorithm which is known for this potential behavior.  Then
      again, IsosurfaceLat's help file says it could create those holes as well.
      There are no known bugs.

   SEE ALSO
      IsosurfaceLat, IsosurfacePyr

      -
      
      Hans Vahlenkamp (Hans.Vahlenkamp@noaa.gov)
      Geophysical Fluid Dynamics Laboratory / NOAA
      Princeton University Forrestal Campus
      http://www.gfdl.noaa.gov