--Write Contour --Written by M.Stone --Last changed by M.Stone 8-Jan-82 14:49:20 DIRECTORY CurveDefs, GriffinFig, Rope USING [Ref], Vector USING[Add,Mul,Vec]; CurveFitIO: PROGRAM IMPORTS GriffinFig,Vector EXPORTS CurveDefs = BEGIN OPEN CurveDefs; lineStyleID: GriffinFig.LineStyleID; OpenFile: PUBLIC PROC [file: Rope.Ref] = { black: GriffinFig.ColorID; GriffinFig.NewFile[file]; black _ GriffinFig.Color[0,0,0,177777B]; lineStyleID _ GriffinFig.LineStyle[black,1]; }; CloseFile: PUBLIC PROC = {GriffinFig.CloseFile}; WriteContour: PUBLIC PROC[contour: ContourHandle, s: REAL, t: Vector.Vec] = { sl: SListHandle _ contour.sLists; enter: PROC[sa: SampleHandle] = {GriffinFig.EnterPoint[XFormPt[sa.xy]]}; scale _ s; translate _ t; GriffinFig.StartPath[]; ForAllSamples[contour,enter]; GriffinFig.EnterPoint[XFormPt[sl.samples.xy]]; [] _ GriffinFig.LineObject[lineStyleID, GriffinFig.EndPath[]]; }; WriteSamples: PUBLIC PROC[samples: SampleHandle] = { s: SampleHandle _ samples; GriffinFig.StartPath[]; DO GriffinFig.EnterPoint[s.xy]; s _ s.next; IF s=NIL OR s=samples THEN EXIT; ENDLOOP; [] _ GriffinFig.EndPath[]; }; WriteTraj: PUBLIC PROCEDURE[t: TrajHandle, first: BOOLEAN _ FALSE] = { l: LinkHandle _ t.links; IF first THEN GriffinFig.StartPath[] ELSE GriffinFig.NewBoundary[]; DO GriffinFig.EnterCubic[l.cubic]; IF l=t.lastLink THEN EXIT ELSE l _ l.next; ENDLOOP; [] _ GriffinFig.EndPath[]; }; scale: REAL _ 1; translate: Vector.Vec _ [0,0]; XFormPt: PROC[p: Vector.Vec] RETURNS [Vector.Vec] = { RETURN[Vector.Mul[Vector.Add[translate,p],scale]]; }; ForAllSamples: PROC [c: ContourHandle,proc: PROC[sa: SampleHandle]] = { sl: SListHandle _ c.sLists; sa: SampleHandle _ NIL; UNTIL sl=NIL DO sa _ sl.samples; UNTIL sa=NIL DO proc[sa]; IF sa=sl.lastSample THEN EXIT ELSE sa _ sa.next; ENDLOOP; IF sl=c.lastSList THEN EXIT ELSE sl _ sl.next; ENDLOOP }; END.