ImplicitPolygons.mesa
Copyright Ó 1985, 1990 by Xerox Corporation.  All rights reserved.
Bloomenthal, February 26, 1993 3:24 pm PST
DIRECTORY G3dBasic, G3dMatrix, G3dOctree, G3dPolygon, ImplicitDefs, Rope;
 
~ 
BEGIN
NatSequence:   TYPE ~ G3dBasic.NatSequence;
SurfaceSequence: TYPE ~ G3dBasic.SurfaceSequence;
Matrix:    TYPE ~ G3dMatrix.Matrix;
Viewport:    TYPE ~ G3dMatrix.Viewport;
CrossSequence:  TYPE ~ G3dOctree.CrossSequence;
CrossPolygonProc: TYPE ~ G3dOctree.CrossPolygonProc;
Cube:     TYPE ~ G3dOctree.Cube;
CubeProc:   TYPE ~ G3dOctree.CubeProc;
PolygonProc:   TYPE ~ G3dPolygon.PolygonProc;
PolygonOkProc:  TYPE ~ ImplicitDefs.PolygonOkProc;
Surface:    TYPE ~ ImplicitDefs.Surface;
ValueProc:   TYPE ~ ImplicitDefs.ValueProc;
ROPE:     TYPE ~ Rope.ROPE;
 
Polygonization
CrossPolygonizeCube: 
PROC [
cube: Cube,
crossPolygonProc: CrossPolygonProc,
scratchCrossSequence: CrossSequence ¬ NIL,
recurseTrackFace: BOOL ¬ TRUE]
RETURNS [result: ATOM];
Apply crossPolygonProc to each of the polygons in cube.  Crossings are presumed set.
Result is one of $Normal, $RecurseTracked, $RecurseFailed.
 
PolygonizeCube: 
PROC [
cube: Cube,
polygonProc: PolygonProc,
scratchPolygon: NatSequence ¬ NIL,
recurseTrackFace: BOOL ¬ TRUE]
RETURNS [result: ATOM];
Apply polygonProc to each of the polygons in cube.  Crossings are presumed set.
Result is one of $Normal, $RecurseTracked, $RecurseFailed.
 
SetSurfacePolygons: 
PROC [
surface: Surface,
root: Cube,
triangulate: BOOL ¬ FALSE,
valueProc: ValueProc ¬ NIL,
threshold: REAL ¬ 0.0,
cubeProc: CubeProc ¬ NIL,
polygonOkProc: PolygonOkProc ¬ NIL,
clientData: REF ANY ¬ NIL]
RETURNS [message: ROPE];
Create the polygonized cube surface.
If non-NIL, use value to converge on cube's edge surface intersection.
cubeProc is useful to indicate status or test for abort.
 
 
Miscellany
ApplyToSurfacePolygons: 
PROC [surface: Surface, polygonProc: PolygonProc];
Apply polygonProc to each of the surface's polygons.
 
ApplyToFrontFacingPolygons: 
PROC [
surface: Surface,
view: Matrix,
viewport: Viewport,
polygonProc: PolygonProc];
Apply polygonProc to front facing polygons;
any polygon without an associated faceNormal is considered front-facing.
 
SetFaceNormalsCenters: 
PROC [surface: Surface, setNormals, setCenters: 
BOOL ¬ 
TRUE];
Set the surface's polygon normals, if setNormals.
Set the surface's polygon centers, if setCenters.
 
DecodePolygons: 
PROC [surface: Surface] 
RETURNS [SurfaceSequence];
Return a decoded SurfaceSequence from surface.polygons.