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. NLast edited by: David Kurlander - September 6, 1987 5:59:18 pm PDT Bier, September 4, 1987 11:20:22 pm PDT Type Definitions Making Turtles Public for making turtles on the fly (for efficiency). Also used internally. Modifying Turtles Comparing Turtles Makes a generator of the orientations which match turtle1 to turtle2. Κi˜codešœ?Οk™BKšœ$™'—K™š ˜ K˜NK˜—K˜šΟn œœ ˜Kšœ ˜Kšœ˜—™Kšœœ˜!Kšœ œ˜'Kšœœ˜!Kšœœ˜K˜—Kšœ™K˜Kšœ œœ˜%šœœœ˜Kšœœ˜ KšœΟc)˜7K˜ K˜—Kšœœœ˜)šœœœ˜ Kšœœ˜ KšœŸ<˜KKšœœ˜ KšœœŸ?˜MKšœ-œ˜1K˜K˜Kšœœœ ˜K˜—Kšœ œœ ˜šœ œœ˜Kšœ!œ˜%Kšœ œ˜Kšœ œœ˜Kšœ œœ˜Kšœ œœ˜Kšœœ˜Kšœ œœ˜#K˜—Kšœœœ˜,šœœœ˜KšœœœŸ@˜UKšœ œœŸ1˜HKšœ6œ˜:KšœœŸ=˜SK˜—K˜K™K˜Kšžœœœ˜