<> <> <> <<>> DIRECTORY ConstantColors USING[IntensityToColor, NameToColor], FilteredTransforms USING [Transform, xyRectangle], Filters USING [SetFilter], Imager USING [Context, Create, MaskRectangle, MaskVector, MoveTo, Trajectory, MaskStroke, ConicTo, Pair, SetColor], <> ImagerBasic USING [IntRectangle], ImagerColorAIS USING [GetAISFile, PutAISFile, PutFastAISFile], ImagerColorTestMain USING [GetDisplayContext, GetDisplayData, LineTest, LoadGrey8BitMap, SetDevice], ImagerDisplay USING [DisplayData], ImagerPixelMaps USING [Clear, PixelMap, Rotate], <> Matrix3d, <> <> Rope USING [ROPE]; TransformTest: CEDAR PROGRAM IMPORTS ConstantColors, FilteredTransforms, Filters, Imager, ImagerColorAIS, ImagerPixelMaps, ImagerColorTestMain, Matrix3d <<-- ImagerPixelMapsExtras, Real, RealFns, ImagerAISUtil>> = BEGIN CurrentMatrix: Matrix3d.Matrix4by4; contexts: ARRAY [0..10) OF Imager.Context _ ALL[NIL]; contextCount: NAT _ 0; PI: REAL = 3.14159265; <> CreateContext: PUBLIC PROC[ deviceType: ATOM, box: ImagerBasic.IntRectangle] RETURNS[ NAT] ~ { context: Imager.Context; data: ImagerDisplay.DisplayData; refBox: REF ImagerBasic.IntRectangle _ NEW[ImagerBasic.IntRectangle]; refPinned: REF BOOLEAN _ NEW[BOOLEAN _ FALSE]; -- don't pin this pixelmap creationList: LIST OF REF ANY _ LIST[refBox, refPinned]; refBox.x _ box.x; refBox.y _ box.y; refBox.w _ box.w; refBox.h _ box.h; context _ Imager.Create[deviceType, creationList]; contexts[contextCount] _ context; contextCount _ contextCount + 1; NameColor[ "Black"]; Imager.MaskRectangle[context, 0, 0, .26, .2]; -- initialize compositeClipper data _ NARROW[context.data, ImagerDisplay.DisplayData]; ImagerPixelMaps.Clear[ data[0]]; -- clear image (it would be nice if this could be done with MaskRectangle, but I don't want to have to figure out how to convert pixels to meters, or whatever the !@#$@#$~%~* thing is. RETURN[ contextCount - 1]; -- tell 'em where you put it }; <> <> <> <<};>> <<>> <> <> <> <> <> <> <<};>> NameColor: PROC [color: Rope.ROPE, context: Imager.Context _ NIL] ~ { IF context = NIL THEN context _ ImagerColorTestMain.GetDisplayContext[]; Imager.SetColor[context, ConstantColors.NameToColor[color]]}; NameIntensity: PROC [ intensity: REAL, context: Imager.Context _ NIL] ~ { IF context = NIL THEN context _ ImagerColorTestMain.GetDisplayContext[]; Imager.SetColor[context, ConstantColors.IntensityToColor[intensity]]}; LoadGrey8BitMap: PROC [] ~ { ImagerColorTestMain.LoadGrey8BitMap[]}; FillRectangle: PROC [ x, y, w, h: REAL, context: Imager.Context _ NIL] ~ { IF context = NIL THEN context _ ImagerColorTestMain.GetDisplayContext[]; Imager.MaskRectangle[context, x, y, w, h]}; DrawLine: PROC [ pt1, pt2: Imager.Pair, width: REAL, context: Imager.Context _ NIL] ~ { IF context = NIL THEN context _ ImagerColorTestMain.GetDisplayContext[]; Imager.MaskVector[context, pt1, pt2, width]}; LineTest: PROC[ color: CARDINAL, length, times: NAT] ~ { ImagerColorTestMain.LineTest[ color, length, times]}; SetDevice: PROC[ deviceType: ATOM, box: ImagerBasic.IntRectangle] ~ { ImagerColorTestMain.SetDevice[ deviceType, box]}; GetAISFile: PUBLIC PROC[ fileName: Rope.ROPE, context: Imager.Context _ NIL, xOffSet, yOffSet: INTEGER _ 0] ~ { IF context = NIL THEN context _ ImagerColorTestMain.GetDisplayContext[]; ImagerColorAIS.GetAISFile[context, fileName, xOffSet, yOffSet]}; PutAISFile: PUBLIC PROC[ fileName: Rope.ROPE, context: Imager.Context _ NIL] ~ { IF context = NIL THEN context _ ImagerColorTestMain.GetDisplayContext[]; ImagerColorAIS.PutAISFile[ context, fileName]}; PutFastAISFile: PUBLIC PROC[ fileName: Rope.ROPE, context: Imager.Context _ NIL] ~ { IF context = NIL THEN context _ ImagerColorTestMain.GetDisplayContext[]; ImagerColorAIS.PutFastAISFile[ context, fileName]}; SetWindow: PUBLIC PROC[ w: FilteredTransforms.xyRectangle, image: Imager.Context _ NIL] ~ { data: ImagerDisplay.DisplayData; IF image = NIL THEN data _ ImagerColorTestMain.GetDisplayData[] ELSE data _ NARROW[image.data, ImagerDisplay.DisplayData]; data.compositeClipper.first.sMin _ data[0].sMin _ w.yMin; data.compositeClipper.first.fMin _ data[0].fMin _ w.xMin; data.compositeClipper.first.sSize _ data[0].sSize _ w.ySize; data.compositeClipper.first.fSize _ data[0].fSize _ w.xSize; }; <> ScaleImage: PUBLIC PROC[ scaleX, scaleY: REAL, moveX, moveY: REAL _ 0.0, image, newImage: Imager.Context _ NIL] ~ TRUSTED { data, newData: ImagerDisplay.DisplayData; screen, newScreen: ImagerPixelMaps.PixelMap; CurrentMatrix _ Matrix3d.Identity[]; CurrentMatrix _ Matrix3d.Scale[ CurrentMatrix, scaleX, scaleY, 1]; IF image = NIL THEN { data _ ImagerColorTestMain.GetDisplayData[]; screen _ data[0]} ELSE { data _ NARROW[image.data, ImagerDisplay.DisplayData]; screen _ data[0]}; IF newImage = NIL THEN { newData _ ImagerColorTestMain.GetDisplayData[]; newScreen _ newData[0]} ELSE { newData _ NARROW[newImage.data, ImagerDisplay.DisplayData]; newScreen _ newData[0]}; FilteredTransforms.Transform[ screen, newScreen, CurrentMatrix, moveX, moveY, 1]; }; <> RotateImage: PUBLIC PROC[ angle: REAL, moveX, moveY: REAL _ 0.0, image, newImage: Imager.Context _ NIL] ~ TRUSTED { data, newData: ImagerDisplay.DisplayData; screen, newScreen: ImagerPixelMaps.PixelMap; CurrentMatrix _ Matrix3d.Identity[]; CurrentMatrix _ Matrix3d.LocalRotateAboutZAxis[ CurrentMatrix, angle]; IF image = NIL THEN { data _ ImagerColorTestMain.GetDisplayData[]; screen _ data[0]} ELSE { data _ NARROW[image.data, ImagerDisplay.DisplayData]; screen _ data[0]}; IF newImage = NIL THEN { newData _ ImagerColorTestMain.GetDisplayData[]; newScreen _ newData[0]} ELSE { newData _ NARROW[newImage.data, ImagerDisplay.DisplayData]; newScreen _ newData[0]}; FilteredTransforms.Transform[ screen, newScreen, CurrentMatrix, moveX, moveY, 1]; }; <> TransformImage: PUBLIC PROC[ moveX, moveY: REAL _ 0.0, focalLength: REAL _ 0.0, m: Matrix3d.Matrix4by4, image, newImage: Imager.Context _ NIL] ~ { data, newData: ImagerDisplay.DisplayData; screen, newScreen: ImagerPixelMaps.PixelMap; IF image = NIL THEN { data _ ImagerColorTestMain.GetDisplayData[]; screen _ data[0]} ELSE { data _ NARROW[image.data, ImagerDisplay.DisplayData]; screen _ data[0]}; IF newImage = NIL THEN { newData _ ImagerColorTestMain.GetDisplayData[]; newScreen _ newData[0]} ELSE { newData _ NARROW[newImage.data, ImagerDisplay.DisplayData]; newScreen _ newData[0]}; IF focalLength = 0.0 THEN focalLength _ MAX[ screen.sSize - screen.sMin, screen.fSize - screen.fMin]; FilteredTransforms.Transform[ screen, newScreen, m, moveX, moveY, focalLength]; }; <> SetFilter: PUBLIC PROC[ i: [0..2)] ~ { Filters.SetFilter[i]}; <> <> <> <> <> <> <<};>> <<>> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <> <<};>> Rotate90: PUBLIC PROC[ filename: Rope.ROPE, context: Imager.Context _ NIL] ~ { data: ImagerDisplay.DisplayData; screen: ImagerPixelMaps.PixelMap; IF context = NIL THEN context _ ImagerColorTestMain.GetDisplayContext[]; data _ NARROW[context.data, ImagerDisplay.DisplayData]; screen _ data[0]; data[0] _ ImagerPixelMaps.Rotate[ screen]; PutAISFile[ filename]; data[0] _ screen; }; <> <> <> <> <> <> <<};>> <<>> CurveTest: PUBLIC PROC[ scale: REAL _ 1] ~ { displayData: ImagerDisplay.DisplayData _ ImagerColorTestMain.GetDisplayData[]; map: ImagerPixelMaps.PixelMap _ displayData[0]; pos: REAL _ 0.; FOR i: INTEGER IN [0..60) DO pos: REAL _ pos + scale*(0.004 - 0.00005 * i); t: Imager.Trajectory _ Imager.MoveTo[[pos, 0.005*scale]]; Imager.MaskStroke[ ImagerColorTestMain.GetDisplayContext[], Imager.ConicTo[t, [0.15*scale + pos, 0.095*scale], [pos, 0.185*scale], .5], scale*(.001 - 0.00001 * i)]; ENDLOOP }; <> <> <> <> <> <> <> <> <> <> <<>> <<};>> <<>> END.