DIRECTORY GraphicsToPress, Graphics, JaMBasic, JaMInternal, JaMOps, Rope, TJaMGraphicsContexts, GraphicsToPressPrivate, SirPress, Real, GraphicsColor, CGCubic USING [Bezier, Coeffs, BezierToCoeffs], CGPath, GraphicsBasic USING [Vec]; GraphicsToPressJaM: CEDAR PROGRAM IMPORTS GraphicsToPress, JaMOps, Rope, TJaMGraphicsContexts, GraphicsToPressPrivate, SirPress, Graphics, Real, GraphicsColor, CGCubic, CGPath = BEGIN ROPE: TYPE = Rope.ROPE; Frame: TYPE = JaMInternal.Frame; pressContext: Graphics.Context; pressHandle: SirPress.PressHandle; resolution: REAL _ 144; PopRope: PROCEDURE [f: Frame] RETURNS [rope: ROPE] = TRUSTED { s: string JaMBasic.Object _ JaMOps.PopString[f.opstk]; C: PROC[c: CHAR] RETURNS [BOOLEAN] = TRUSTED {t[t.length]_c; t.length _ t.length+1; RETURN[FALSE]}; t: REF TEXT _ NEW[TEXT[s.length]]; t.length _ 0; JaMOps.StringForAll[s, C]; rope _ Rope.FromRefText[t]; }; GetContext: PROCEDURE [] RETURNS [Graphics.Context] = { RETURN[pressContext]; }; Open: PROCEDURE [f: Frame] = TRUSTED { fileName: ROPE _ 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] = TRUSTED { savedProcRec _ NIL; [] _ TJaMGraphicsContexts.RemoveContext[f, $Press]; GraphicsToPress.Close[pressContext]; pressContext _ NIL; }; SetResolution: PROCEDURE [f: Frame] = TRUSTED { resolution _ JaMOps.PopReal[f.opstk]; }; SetFont: PROCEDURE [f: Frame] = TRUSTED { face: INT _ JaMOps.PopInteger[f.opstk]; size: INT _ JaMOps.PopInteger[f.opstk]; family: ROPE _ PopRope[f]; SirPress.SetFont[pressHandle,family,size,face]; }; PutText: PROCEDURE [f: Frame] = { rope: ROPE _ 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] = TRUSTED { y _ JaMOps.PopReal[f.opstk]; x _ JaMOps.PopReal[f.opstk]; [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]; }; TRUSTED { JaMOps.RegisterExplicit[JaMOps.defaultFrame, "Press.Open", Open]; JaMOps.RegisterExplicit[JaMOps.defaultFrame, "Press.Close", Close]; JaMOps.RegisterExplicit[JaMOps.defaultFrame, "Press.Resolution", SetResolution]; JaMOps.RegisterExplicit[JaMOps.defaultFrame, "Press.SetFont", SetFont]; JaMOps.RegisterExplicit[JaMOps.defaultFrame, "Press.PutText", PutText]; JaMOps.RegisterExplicit[JaMOps.defaultFrame, "Press.UsePressOutline", UsePressOutline]; JaMOps.RegisterExplicit[JaMOps.defaultFrame, "Press.UseGraphicsOutline", UseGraphicsOutline]; }; END. -- GraphicsToPressJaM.mese -- Last edit by Michael Plass on April 11, 1983 11:33 am -- Last edit by Maureen Stone on April 11, 1983 1:17 pm Press bug...argggh! IF NOT parityFill THEN ERROR; these routines are for accessing the SirPress handle directly Κ*– "cedar" style˜JšΟcœœ™Jšœ(™8Jšœ'™7šΟk ˜ Jšœ˜Jšœ ˜ Jšœ ˜ Jšœ ˜ Jšœ˜Jšœ˜Jšœ˜Jšœ˜Jšœ ˜ Jšœ˜Jšœ˜Jšœžœ"˜/J˜Jšœžœ˜—šœžœž˜!Jšžœ†˜Jšœž˜Jšžœžœžœ˜Jšœžœ˜ Iprocšœ˜K˜"Kšœ žœ˜š Οnœž œ žœžœžœ˜>Jšœ6˜6š žœžœžœžœžœ˜$Jšžœ(žœžœ˜>—Jš œžœžœžœžœ ˜"J˜ Jšœžœ˜J˜J˜—šŸ œž œžœ˜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˜—š Ÿœž œ žœžœžœ˜>Jšœ˜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šœA˜AJšœC˜CJšœP˜PJšœG˜GJšœ=™=JšœG˜GJšœW˜WJšœ]˜]J˜—Jšžœ˜——…—2