<> <> <<>> DIRECTORY GGBasicTypes, GGModelTypes, GGSegmentTypes, ImagerTransformation, MatchViewer; MatchTurtle: CEDAR DEFINITIONS IMPORTS MatchViewer = BEGIN <<>> Point: TYPE = GGBasicTypes.Point; Segment: TYPE = GGSegmentTypes.Segment; Slice: TYPE = GGModelTypes.Slice; Traj: TYPE = GGModelTypes.Traj; <> TurtleInfo: TYPE = REF TurtleInfoObj; TurtleInfoObj: TYPE = RECORD [ length: REAL, start: Point, -- start and end used during construction end: Point ]; TurtleHeader: TYPE = REF TurtleHeaderObj; TurtleHeaderObj: TYPE = RECORD [ length: REAL, center: Point, -- center of mass of curve (assuming a uniform wire density) closed: BOOL, radius: REAL, -- really the max distance from the curve to the center of mass tform: ImagerTransformation.Transformation _ NIL, originalStart: Point, originalCenter: Point, tail: LIST OF TurtleInfo ]; Matcher: TYPE = REF MatcherObj; MatcherObj: TYPE = RECORD [ turtle1, turtle2: TurtleHeader _ NIL, maxError: REAL _ 0.0, noMatch: BOOL _ TRUE, checkFirst: BOOL _ TRUE, checkSecond: BOOL _ FALSE, turtleCopy: TurtleHeader _ NIL, tailSoFar: LIST OF TurtleInfo _ NIL ]; PositionDescriptor: TYPE = REF PositionDObj; PositionDObj: TYPE = RECORD [ valid: BOOL _ FALSE, -- specifies whether tform1 and tform2 are to be taken seriously settable: BOOL _ TRUE, -- specifies whether tform1 and tform2 can be set tform1, tform2: ImagerTransformation.Transformation _ NIL, others: Matcher _ NIL -- a generator for other position descriptors which may match ]; <> GetShapeOfSlice: PROC [slice: Slice] RETURNS [TurtleHeader]; TrajToTurtle: PROC [traj: Traj] RETURNS [turtle: TurtleHeader]; SegmentToTurtle: PROC [seg: Segment, soFar: LIST OF TurtleInfo, reverse: BOOL _ FALSE] RETURNS [path: LIST OF TurtleInfo]; CopyTurtleTail: PROC [turtleTail: LIST OF TurtleInfo] RETURNS [newTail: LIST OF TurtleInfo _ NIL]; PackageTurtleTail: PROC [tail: LIST OF TurtleInfo] RETURNS [turtle: TurtleHeader]; <> <> <<>> FlipTurtle: PROC [turtle: TurtleHeader] RETURNS [newTurtle: TurtleHeader]; <> <<>> TurtleEqual: PROC [turtle1, turtle2: TurtleHeader, tol: REAL _ MatchViewer.GetMatchTolerance[], posD: PositionDescriptor _ NIL] RETURNS [BOOL _ FALSE]; TurtleEqualEitherWay: PROC [turtle1, turtle2: TurtleHeader, tol: REAL _ MatchViewer.GetMatchTolerance[], posD: PositionDescriptor _ NIL] RETURNS [BOOL]; CreateMatcher: PROC [turtle1, turtle2: TurtleHeader, tol: REAL _ -1.0, oneWay: BOOL] RETURNS [m: Matcher]; <> NextMatch: PROC [m: Matcher] RETURNS [PositionDescriptor _ NIL]; END.