<<>> <> <> <> <<>> DIRECTORY G3dBasic, G3dShape, ImplicitCubeTet, ImplicitStorage, Rope; ImplicitMinimal: CEDAR DEFINITIONS ~ BEGIN <> Triple: TYPE ~ G3dBasic.Triple; CubeProc: TYPE ~ ImplicitCubeTet.CubeProc; Tetrahedron: TYPE ~ ImplicitCubeTet.Tetrahedron; IDs: TYPE ~ ImplicitStorage.IDs; Edges: TYPE ~ ImplicitStorage.Edges; Vertices: TYPE ~ ImplicitStorage.Vertices; Function: TYPE ~ PROC [point: Triple, clientData: REF ANY] RETURNS [value: REAL ¬ 0.0]; TriangleProc: TYPE ~ PROC [i1, i2, i3: INT, vertices: Vertices] RETURNS [continue: BOOL ¬ TRUE]; Error: ERROR [reason: Rope.ROPE]; Propagate: PROC [ function: Function, level, size: REAL, clientData: REF ANY ¬ NIL, start: Triple ¬ [], action: CubeProc] RETURNS [centers: REF ImplicitStorage.Centers]; <> <<>> ProcessTet: PROC [ function: Function, clientData: REF ANY, level: REAL, tet: REF Tetrahedron, tetID: INT, ids: REF IDs, edges: REF Edges, vertices: Vertices, epsilon: REAL, action: TriangleProc] RETURNS [Vertices]; <> <> Triangulate: PROC [ function: Function, -- the implicit function level: REAL, -- contour level size: REAL, -- size of cubic partitioning clientData: REF ANY ¬ NIL, -- passed back to function start: Triple ¬ [], -- if [], randomly search triangleAction: TriangleProc] -- called per generated triangle RETURNS [error: Rope.ROPE]; <> ShapeFromFunction: PROC [ function: Function, level, size: REAL, -- level, cube size clientData: REF ANY ¬ NIL, -- passed back to function start: Triple ¬ [], -- if [], randomly search statusAction: TriangleProc ¬ NIL] -- progress report, usually graphical RETURNS [G3dShape.Shape]; <> Converge: PROC [pos, neg: Triple, val, level: REAL, function: Function, clientData: REF ANY] RETURNS [Triple]; <> Normal: PROC [point: Triple, function: Function, delta: REAL, clientData: REF ANY] RETURNS [Triple]; <> <<>> FindStart: PROC [ ballpark: Triple, function: Function, size, level: REAL, clientData: REF ANY ¬ NIL] RETURNS [Triple]; <> END.