DIRECTORY GraphicsToPress, Graphics, JaM USING [State, Register, RegisterInit, PopRope, PopInt, PopReal], Rope, TJaMGraphicsContexts, GraphicsToPressPrivate, SirPress, Real, GraphicsColor, CGCubic USING [Bezier, Coeffs, BezierToCoeffs], CGPath, GraphicsBasic USING [Vec]; GraphicsToPressJaM: CEDAR PROGRAM IMPORTS GraphicsToPress, TJaMGraphicsContexts, GraphicsToPressPrivate, SirPress, Graphics, Real, GraphicsColor, CGCubic, CGPath, JaM = BEGIN ROPE: TYPE = Rope.ROPE; Frame: TYPE = JaM.State; pressContext: Graphics.Context; pressHandle: SirPress.PressHandle; resolution: REAL _ 144; GetContext: PROCEDURE [] RETURNS [Graphics.Context] = { RETURN[pressContext]; }; Open: PROCEDURE [f: Frame] = { fileName: ROPE _ JaM.PopRope[f]; pressContext _ GraphicsToPress.NewContext[fileName, resolution]; pressHandle _ GraphicsToPressPrivate.SirPressHandle[pressContext]; TJaMGraphicsContexts.AddContext[frame: f,init: GetContext, name: $Press, enabled: TRUE, initOnErase: FALSE]; }; Close: PROCEDURE [f: Frame] = { savedProcRec _ NIL; [] _ TJaMGraphicsContexts.RemoveContext[f, $Press]; GraphicsToPress.Close[pressContext]; pressContext _ NIL; }; SetResolution: PROCEDURE [f: Frame] = { resolution _ JaM.PopReal[f]; }; SetFont: PROCEDURE [f: Frame] = { face: INT _ JaM.PopInt[f]; size: INT _ JaM.PopInt[f]; family: ROPE _ JaM.PopRope[f]; SirPress.SetFont[pressHandle,family,size,face]; }; PutText: PROCEDURE [f: Frame] = { rope: ROPE _ JaM.PopRope[f]; x,y: REAL; color: Graphics.Color _ Graphics.GetColor[pressContext]; h,s,v: REAL; [h,s,v] _ GraphicsColor.ColorToHSV[color]; SirPress.SetColor[pressHandle,Real.RoundI[h*240],Real.RoundI[s*255],Real.RoundI[v*255]]; [x,y] _ Graphics.GetCP[pressContext]; [x,y] _ Graphics.UserToWorld[pressContext,x,y]; SirPress.PutText[pressHandle,rope,Real.RoundI[x],Real.RoundI[y],SirPress.pt]; }; GetPoint: PROCEDURE [f: Frame] RETURNS [x,y: REAL] = { y _ JaM.PopReal[f]; x _ JaM.PopReal[f]; [x,y] _ Graphics.UserToWorld[pressContext,x,y]; }; savedProcRec: REF Graphics.GraphicsProcs; UsePressOutline: PROCEDURE [f: Frame] = { newProcRec: REF Graphics.GraphicsProcs _ NEW[Graphics.GraphicsProcs]; IF savedProcRec # NIL THEN ERROR; savedProcRec _ pressContext.procs; newProcRec^ _ savedProcRec^; newProcRec.DrawArea _ PressDrawArea; pressContext.procs _ newProcRec; }; UseGraphicsOutline: PROCEDURE [f: Frame] = { IF savedProcRec = NIL THEN ERROR; pressContext.procs _ savedProcRec; savedProcRec _ NIL; }; micasPerPoint: REAL = 2540.0/72.0; PressDrawArea: PROC[self: Graphics.Context, path: Graphics.Path, parityFill: BOOLEAN] = { color: Graphics.Color _ Graphics.GetColor[pressContext]; h,s,v: REAL; bezier: CGCubic.Bezier; Map: PROC [v: GraphicsBasic.Vec] RETURNS [t: GraphicsBasic.Vec] = { [t.x, t.y] _ Graphics.UserToWorld[pressContext, v.x, v.y]; t.x _ t.x * micasPerPoint; t.y _ t.y * micasPerPoint; }; Move: PROCEDURE [v: GraphicsBasic.Vec] = { bezier.b0 _ v; SirPress.PutMoveTo[pressHandle, Real.RoundI[v.x], Real.RoundI[v.y]]; }; Line: PROCEDURE [v: GraphicsBasic.Vec] = { bezier.b0 _ v; SirPress.PutDrawTo[pressHandle, Real.RoundI[v.x], Real.RoundI[v.y]]; }; Curve: PROCEDURE [v1, v2, v3: GraphicsBasic.Vec] = { c: CGCubic.Coeffs; bezier.b1 _ v1; bezier.b2 _ v2; bezier.b3_ v3; c _ CGCubic.BezierToCoeffs[bezier]; IF ABS[c.c1.x] < 0.1 THEN c.c1.x _ 0; IF ABS[c.c1.y] < 0.1 THEN c.c1.y _ 0; IF ABS[c.c2.x] < 0.1 THEN c.c2.x _ 0; IF ABS[c.c2.y] < 0.1 THEN c.c2.y _ 0; IF ABS[c.c3.x] < 0.1 THEN c.c3.x _ 0; IF ABS[c.c3.y] < 0.1 THEN c.c3.y _ 0; SirPress.PutCubic[pressHandle, c.c1.x, c.c1.y, c.c2.x, c.c2.y, c.c3.x, c.c3.y]; bezier.b0 _ bezier.b3; bezier.b1 _ bezier.b2 _bezier.b3 _ [0,0]; }; Close: PROCEDURE = { }; [h,s,v] _ GraphicsColor.ColorToHSV[color]; SirPress.SetColor[pressHandle,Real.RoundI[h*240],Real.RoundI[s*255],Real.RoundI[v*255]]; SirPress.StartOutline[pressHandle]; CGPath.MapAndFilter[path, Map, Move, Line, Curve, Close]; SirPress.EndOutline[pressHandle]; }; Init: PROC[state: JaM.State] = { JaM.Register[state, "Press.Open", Open]; JaM.Register[state, "Press.Close", Close]; JaM.Register[state, "Press.Resolution", SetResolution]; JaM.Register[state, "Press.SetFont", SetFont]; JaM.Register[state, "Press.PutText", PutText]; JaM.Register[state, "Press.UsePressOutline", UsePressOutline]; JaM.Register[state, "Press.UseGraphicsOutline", UseGraphicsOutline]; }; JaM.RegisterInit["GraphicsToPressJaM", Init]; END.  -- GraphicsToPressJaM.mese -- Last edit by Michael Plass on April 11, 1983 11:33 am -- Last edit by Maureen Stone on February 15, 1984 4:14:46 pm PST Press bug...argggh! IF NOT parityFill THEN ERROR; these routines are for accessing the SirPress handle directly Κ•– "cedar" style˜JšΟcœœ™Jšœ(™8JšœΟk ™Ašž ˜ Jšœ˜Jšœ ˜ J˜DJšœ˜Jšœ˜Jšœ˜Jšœ ˜ Jšœ˜Jšœ˜Jšœžœ"˜/J˜Jšœžœ˜—šœžœž˜!Jšžœ}˜„Jšœž˜Jšžœžœžœ˜Jšœžœ ˜Iprocšœ˜K˜"Kšœ žœ˜šΟn œž œžœ˜7Jšžœ˜J˜—šŸœž œ˜Jšœ žœ˜ Jšœ@˜@J˜BJšœRžœžœ˜lJ˜—šŸœž œ˜ Jšœžœ˜Jšœ3˜3Jšœ$˜$Jšœžœ˜J˜—šŸ œž œ˜(Jšœ˜J˜—šŸœž œ˜"Jšœžœ˜Jšœžœ˜Jšœžœ˜J˜/J˜—šŸœž œ˜!Jšœžœ˜Jšœžœ˜ J˜8Jšœžœ˜ J˜*J˜XJ˜%J˜/J˜MJ˜—šŸœž œ žœžœ˜7Jšœ˜Jšœ˜J˜/J˜—Jšœžœ˜)šŸœž œ˜)Jšœ žœžœ˜EJšžœžœžœžœ˜!Jšœ"˜"Jšœ˜Jšœ$˜$Jšœ ˜ Jšœ˜—šŸœž œ˜,Jšžœžœžœžœ˜!Jšœ"˜"Jšœžœ˜Jšœ˜—Jšœžœ˜"šŸ œžœ:žœ˜YJ˜8Jšœžœ˜ J˜šŸœžœžœ˜CJšœ:˜:Jšœ˜Jšœ˜Jšœ˜—šŸœž œ˜*J˜J˜DJšœ˜—šŸœž œ˜*J˜J˜DJšœ˜—šŸœž œ$˜4J˜Jšœ˜Jšœ˜Jšœ˜J˜#Jšœ™Jš žœžœžœžœžœžœ ˜LJš žœžœžœžœžœžœ ˜LJš žœžœžœžœžœžœ ˜LJ˜OJ˜J˜)Jšœ˜—šŸœž œ˜Jšœ˜—Jšœ™J˜*Icedar˜XJ˜#J˜9J˜!Jšœ˜—šŸœžœ˜ Jšœ(˜(Jšœ*˜*Jšœ7˜7Jšœ.˜.Jšœ=™=Jšœ.˜.Jšœ>˜>JšœD˜DJ˜—J˜-Jšžœ˜——…—Ώ