<> <> <> <> <<>> DIRECTORY GriffinPoint USING [ObjPt, ObjPtSequence, X, Y], Rope USING [ROPE]; GriffinTransform: CEDAR DEFINITIONS = BEGIN ProblemWithXForms: SIGNAL[string: Rope.ROPE]; Axis: TYPE = {x, y, z}; XFMDescriptor: TYPE = REF XFormMatrix; XFormMatrix: TYPE = ARRAY [1..3] OF GriffinPoint.ObjPt; GetInverseXForm: PROC RETURNS [XFMDescriptor]; InitXForms: PROC [matrix: XFMDescriptor]; Rotate: PROC [theta: REAL, axis: Axis, matrix: XFMDescriptor]; Scale: PROC [scale: ARRAY[GriffinPoint.X..GriffinPoint.Y] OF REAL, matrix: XFMDescriptor]; Translate: PROC [dist: ARRAY[GriffinPoint.X..GriffinPoint.Y] OF REAL, matrix: XFMDescriptor]; XForm4Pts: PROC [pts: GriffinPoint.ObjPtSequence, matrix: XFMDescriptor]; XForm6Pts: PROC [pts: GriffinPoint.ObjPtSequence, matrix: XFMDescriptor]; XFormPt: PROC [pt: GriffinPoint.ObjPt, matrix: XFMDescriptor] RETURNS [GriffinPoint.ObjPt]; END.