DIRECTORY Imager USING [Context, Color], Cubic USING [Bezier], Complex USING [Vec], FitBasic USING [Handle, SampleHandle], IO USING [STREAM]; FitIO: CEDAR DEFINITIONS = { Handle: TYPE = FitBasic.Handle; Context: TYPE = REF ContextRec; ContextRec: TYPE = RECORD[ imager: Imager.Context, magnify: REAL, position: Complex.Vec, feedback: Feedback, logActions: BOOLEAN _ TRUE, log: IO.STREAM ]; Feedback: TYPE = REF FeedbackRec; FeedbackRec: TYPE=RECORD [ color: Imager.Color, sampleSize: REAL _ 1, jointSize: REAL _ 2, nodeLength: REAL _ 2, nodeLineWidth: REAL _ 0, lineWidth: REAL _ 0 --for DrawSamples and DrawContour ]; TTY: PROC[ctx: Context] RETURNS[IO.STREAM] = INLINE {RETURN[ctx.log]}; SetFeedback: PROC[ctx: Context, feedback: Feedback]; DrawSamples: PROC [ctx: Context, handle: Handle, all: BOOLEAN _ FALSE, fill: BOOLEAN _ FALSE]; MarkSamples: PROC [ctx: Context, handle: Handle, all: BOOLEAN _ FALSE]; MarkNodes: PROC [ctx: Context, handle: Handle, all: BOOLEAN _ FALSE]; MarkJoints: PROC [ctx: Context, handle: Handle, all: BOOLEAN _ FALSE]; --joints between the cubic pieces DrawContour: PROC [ctx: Context, handle: Handle, all: BOOLEAN _ FALSE, fill: BOOLEAN _ FALSE]; MarkNode: PROC[ctx: Context, s: FitBasic.SampleHandle]; MarkSample: PROC[ctx: Context, s: FitBasic.SampleHandle]; MarkJoint: PROC[ctx: Context, pt: Complex.Vec]; DrawCubic: PROC[ctx: Context, cubic: Cubic.Bezier]; NoLog: SIGNAL; StartLog: PROC [ctx: Context, stream: IO.STREAM _ NIL]; StopLog: PROC[ctx: Context, close: BOOLEAN _ TRUE]; MagnifyData: PROC[ctx: Context, scale: REAL] = INLINE {ctx.magnify _ scale}; PositionData: PROC[ctx: Context, trans: Complex.Vec] = INLINE {ctx.position _ trans}; MagnifyPoint: PROC [ctx: Context, p: Complex.Vec] RETURNS[Complex.Vec]; --magnify and position UnMagnifyPoint: PROC [ctx: Context, p: Complex.Vec] RETURNS[Complex.Vec]; --undo magnify and position }. ’FitIO.mesa Maureen Stone November 29, 1984 10:59:45 am PST Marks: For samples and joints the mark is a dot For nodes the mark is a line normal to the tangent direction or an X if the tangent is (0,0) For sizes, 0 is as small as possible for current device Samples, Nodes and Contours: Samples are the list of input datapoints. Contours are the computed curves. The handle contains a list of Sample, Contour pairs. The all flag controls whether you want to apply the procedure to the current pair or all the pairs. Some samples are also marked as nodes, or potential knots for the spline fitting calculations Logs: Data is stored by logging the actions used to draw it. Format is suitable for driving JaM interface and includes the semantics of marks, not their feedback. SetFeedBack command is recorded. Magnify and Position apply to logs Procedures may automatically log actions treat samples as vertices of a polygon or a broken line procedures used by MarkSamples and MarkNodes procedure used by MarkJoints and DrawContour IF stream=NIL uses previous stream. Otherwise, closes previous stream (if any) and sets current output stream to stream. If there is no previous stream SIGNALS NoLog IF close=FALSE just disables logging. Views of the data: It may be interesting to view the data at a different size or position. However, transforming the Imager Context would affect the mark and linewidth sizes. For many cases the right thing to do is actually modify the data using the procedures in FitState. These are the procedures for when it is inconvenient to change the data. scales the view of the data but not the marks, linewidth or distance from data to the origin This is an absolute number with respect to the data. Reset the magnify by MagnifyData[1]; Positions the data with respect to the origin of the context. This is an absolute with respect to the Imager client coordinates. Reset by PositionData[0,0]; Ê=˜Jšœ ™ Jšœ/™/šÏk ˜ Jšœœ˜Jšœœ ˜Jšœœ˜Jšœ œ˜&Jšœœœ˜J˜—Jšœœ˜Jšœœ˜Jšœ œ ˜šœ œœ˜Jšœ˜Jšœ œ˜Jšœ˜J˜Jšœ œœ˜Jšœœ˜Jšœ˜J˜—Jšœ œœ ˜!šœ œœ˜J˜Jšœ œ˜Jšœ œ˜Jšœ œ˜Jšœœ˜Jšœ œÏc!˜5J˜J˜—JšÐbkœœœœœœœ ˜FJ˜J™™J™(J™\Jšž7™7—™J™LJ™™J™]—™J™6J™ªJ™—Jšœ(™(JšÏn œœ#˜4š   œœ%œœœœ˜^Jšž7™7—Jš  œœ%œœ˜GJš  œœ%œœ˜EJš   œœ%œœž!˜hJš   œœ%œœœœ˜^Jšœ,™,Jš œœ+˜9Jš  œœ)˜9Jšœ,™,Jš  œœ ˜/Jš  œœ$˜3Jšœœ˜š  œœœœœ˜7Jšœœœ™©—š œœœœ˜3J™%—J˜™J™Ê—š  œœœœ˜LJšž\™\J™Z—š  œœ%œ˜UJšž=™=J™BJ™—Jš  œœ œž˜_Jš œœ œž˜fJš˜—…—b1