ImplicitSurfacesDoc.tioga
Bloomenthal, September 6, 1992 1:46 pm PDT
CEDAR 10.0 — FOR INTERNAL XEROX USE ONLY
Implicit Surfaces
a package to represent implicit surfaces with polygons
Jules Bloomenthal
© Copyright 1987, 1992 Xerox Corporation. All rights reserved.
Abstract: This package provides software interfaces and user commands for the numerical construction of a polygonal surface, given an implicit function of space. The polygonal surface consists of a sequence of vertices satisfying the implicit function and a list defining the vertex connectivity. The technique is, optionally, adaptive, so that areas of higher curvature are more finely sampled.
Created by: Jules Bloomenthal
Maintained by: Jules Bloomenthal <Blooment.PARC@Xerox.com>
Keywords: Algebraic geometry, implicit function, implicit surface, numerical methods, polygonization, octree, sampling, simplicial methods, solid modeling, surface following, three-dimensional geometry.
DF File: [Cedar]<Top>ImplicitSurfaces.df
XEROX  Xerox Corporation
   Palo Alto Research Center
   3333 Coyote Hill Road
   Palo Alto, California 94304
Introduction
The algorithms underlying this package are discussed in the CSL Blue-and-White (CSL-87-2), Polygonization of Implicit Surfaces. (The report is to appear in a forthcoming issue of CAGD; it may be viewed by opening /Ivy/Bloomenthal/Text/Implicit/Implicit.tioga, or you may request a copy from me.)
An implicit surface is defined as the set of points P in space that satisfy the function f(P) = 0. By convention, any point whose functional value is positive lies inside the volume, any point whose functional value is negative lies outside the volume.
This package approximates the implicit surface with a finite number of vertices that lie on the surface. These vertices are derived from a sampling of the function at points defined by a partitioning of space; the partitioning is organized as an octree. From the octree a polygonal boundary representation is derived using a simple algorithm. Subsequent, adaptive refinement of the boundary representation is possible by subdividing individual cells of the octree.
The partitioning isolates the definition of the implicit function from the creation of the boundary representation; thus the function may be defined without regard to the conversion process.
Interfaces
ImplicitDesign
This permits a client to conveniently define an implicit function and register it with the ImplicitDesign tool, invoked by the ImplicitDesign command. See ImplicitDesignCmdsImpl.mesa for examples.
The following interfaces are for the serious client; ImplicitSurface and ImplicitValue being, perhaps, the most immediately useful:
ImplicitAdapt:  adaptive sampling of the function.
ImplicitDraw:  drawing of the surface primitives.
ImplicitPoints:  computation and storage of surface points.
ImplicitPolygons: computation and storage of surface polygons.
ImplicitRay:   ray-surface calculations.
ImplicitSlice:   register function with ImplicitSlice; see examples, ImplicitSliceCmdsImpl.
ImplicitSurface:  overall control of the surface construction.
ImplicitTet:   fixed grid sampling, efficiently implemented.
ImplicitValue:   simple functional evaluations.
Commands
ImplicitDesign <Function-name>
This tool operates on a function (previously registered through the ImplicitDesign interface) to produce its approximating octree, produce its polygonal surface representation, or create a ray-traced image. A list of registered functions may be obtained by typing ImplicitDesign <CR>.
The surface approximation may be time-consuming; a number of visual cues are provided to indicate its progress. The visual display may be output as an Interpress file. The intermediate octree may be output as an octree file (see D3Octree.mesa for details).
The polygonal surface representation may be output as a standard points-polygon "shape" file, which may be rendered with 3dVizer (see 3dGraphicsDoc).
The drawing of a viewer may be aborted if the LEFT-SHIFT and SWAT keys are depressed while the mouse is in the viewer.
ImplicitSlice <Function-name>
This tool operates on a function (previously registered through the ImplicitSlice interface) to produce a shaded image, on the color display, that represents a rectangular slice of the implicit function. A list of registered functions may be obtained by typing ImplicitSlice <CR>.
The size, position, and orientation of the slice may be interactively controlled, and the size of the color display region may be set by the user.
The user may mouse-down in the region of the color display, calling a client-supplied procedure to illustrate the computations performed for that particular functional evaluation. Similarly, the user may mouse-down on the LF display, selecting a point in the plane of the slice.
Tool Overview
Each tool is divided into four horizontal sections; from the top they are: buttons, a typescript, a graphics display, and a set of controls. The controls consist of viewing ("camera") controls, plus any client defined controls specified at the time the tool was created. The graphics display shows the progress of the surface construction as well as any client-supplied illustrations. The typescript allows the user to be queried. Some buttons may be client-supplied, but each tool supplies a basic set. A description of the tool-supplied buttons and controls follows.
Buttons and Controls
The tool-supplied buttons usually create a pop-up menu from which parameters may be set and operations executed. The parameter setting entries are given in lower case; the operation execution entries are given in upper case.
Pop-up entries of the form "Option On/Off" behave differently according to the mouse button used. Left click simply changes state. Right click changes state and performs any related operation.
ImplicitDesign Buttons
STOP Stop the current process, (animating, ray-tracing, octree creation, etc.).
Animation Animate the client or the surface.
Ray-Trace Ops Set various ray-trace options or parameters.
Octree Ops Set various octree creation options or parameters, in particular:
        Creation Method
         Tracking
          Cube Size for Tracking Surface
         Converging
          Root Cube Size for Converging Octree
          Minimum and Maximum Recursion Depths
         Adaptive Subdivision
          Maximum During Tracking
          Maximum Post Initial Octree
          Polygon Flatness Requirement
          
        Measurement Mode
         Inverse / InverseSquared
         Spread
         Error Tolerance
         Threshold (contour level)
         
        Operation
         Octree and Polygons
         Octree Only
         Polygonize Existing Octree
         
        Animation
         Client (client draw procs) or Surface (polygonization)
Display Ops Set various graphics viewer display options or parameters.
HLE Ops Stop the current process, whether it is ray-tracing or octree creation.
IO Read or write the octree, or write an interpress or shape file.
Help Open this document.
ImplicitSlice Buttons
Start Begin the slice evaluation.
StartAndMove Begin several slice evaluations; after each one, move the slice.
STOP Halt the slice evaluation.
Name Pix Print slices's name on the color display.
Width Set the color-display region's width.
Height Set the color-display region's height.
Move Set amount slice moves (see StartAndMove).
IP Out Output the display to an Interpress file.
Help Open this document.
ImplicitSlice Controls
xRot,yRot,zRot: Global camera rotations.
scale: A global world scale.
fov: The camera's field-of-view.
x, y, z: Position of the slice in space.
phi: Rotation of slice about vertical axis.
theta: Rotation of slice about the horizontal axis.
size: Size of the slice.