<<>> <> <> <> DIRECTORY G3dBasic, G3dMatrix, G3dSpline; G3dPatch: CEDAR DEFINITIONS ~ BEGIN <> Triple: TYPE ~ G3dBasic.Triple; Matrix: TYPE ~ G3dMatrix.Matrix; Spline: TYPE ~ G3dSpline.Spline; MinMax: TYPE ~ RECORD [min, max: REAL]; ControlPoints: TYPE ~ REF ControlPointsRep; ControlPointsRep: TYPE ~ ARRAY [0..4) OF ARRAY [0..4) OF Triple; << Four sets in the t direction of four points in the s direction.>> Patch: TYPE ~ REF PatchRep; PatchRep: TYPE ~ RECORD [ controlPoints: ControlPoints ¬ NIL, sCurves: ARRAY [0..4) OF Spline ¬ ALL[NIL], tCurves: ARRAY [0..4) OF Spline ¬ ALL[NIL] ]; FourPatches: TYPE ~ ARRAY [0..4) OF Patch; <> FromBezier: PROC [cp: ControlPoints, out: Patch ¬ NIL] RETURNS [Patch]; <> <> <> Position: PROC [patch: Patch, s, t: REAL] RETURNS [Triple]; <> <<>> Normal: PROC [patch: Patch, s, t: REAL, unitize: BOOL ¬ TRUE] RETURNS [Triple]; <> <<>> MinMaxCurvature: PROC [patch: Patch, s, t: REAL] RETURNS [MinMax]; <> <<>> SCurve: PROC [patch: Patch, s: REAL, out: Spline ¬ NIL] RETURNS [Spline]; <> <<>> TCurve: PROC [patch: Patch, t: REAL, out: Spline ¬ NIL] RETURNS [Spline]; <> <> Subdivide: PROC [patch: Patch, s, t: REAL ¬ 0.5] RETURNS [FourPatches]; <> <<>> END.