<> <<>> DIRECTORY Rope, IO, Convert, Imager, ImagerPath, ImagerColor, ImagerFont, AlgebraClasses, Points, Reals, QETypes, QEIO, Cad2D; Cad2DImpl: CEDAR PROGRAM IMPORTS Imager, ImagerPath, ImagerFont, QEIO EXPORTS Cad2D ~ BEGIN OPEN AC: AlgebraClasses, PTS: Points, QET: QETypes, Cad2D; timesRomanBI: Imager.Font ~ ImagerFont.Scale[ImagerFont.Find["xerox/pressfonts/timesroman-brr"], 10.]; --- why does scale of 10. work? ImagerVecFromRealPoint: PUBLIC PROC [point: PTS.Point] RETURNS [v: Imager.VEC] ~ { x: Reals.Real _ NARROW[point.data, PTS.PointData][1]; y: Reals.Real _ NARROW[point.data, PTS.PointData][2]; xData: Reals.RealData _ NARROW[x.data]; yData: Reals.RealData _ NARROW[y.data]; RETURN[ [xData^ , yData^] ]; }; DisplayCad: PUBLIC PROC [cad: QET.Cad, context: Imager.Context, dotWidth, segmentWidth: REAL] ~ { IF cad = NIL THEN RETURN; Imager.SetStrokeEnd[context, round]; Imager.SetFont[context, timesRomanBI]; FOR i: NAT IN [1..cad.cells.lengthPlus1-1] DO SELECT QEIO.CellDimension[cad.cells[i].index] FROM 0 => Display0Cell[cad.cells[i], context, dotWidth]; 1 => Display1Cell[cad.cells[i], context, segmentWidth]; ENDCASE; ENDLOOP; }; Display0Cell: PUBLIC PROC [cell: QET.Cell, context: Imager.Context, dotWidth: REAL] ~ { vec: Imager.VEC _ ImagerVecFromRealPoint[cell.coveringSet[1][1]]; Imager.SetStrokeWidth[context, dotWidth]; Imager.MaskStrokeTrajectory[context, ImagerPath.MoveTo[ vec ] ]; }; Display1Cell: PUBLIC PROC [cell: QET.Cell, context: Imager.Context, segmentWidth: REAL] ~ { column: QET.Column _ cell.coveringSet[1]; vec: Imager.VEC _ ImagerVecFromRealPoint[column[1]]; trajectory: Imager.Trajectory _ ImagerPath.MoveTo[vec]; Imager.SetStrokeWidth[context, segmentWidth]; FOR j:NAT IN [1..column.pointsPlusOne-1] DO vec _ ImagerVecFromRealPoint[column[j] ]; trajectory _ ImagerPath.MoveTo[ vec ]; ENDLOOP; Imager.MaskStrokeTrajectory[context, trajectory]; }; <> <> <> <> <<>> <> <> <> <> <> <<>> <> <> <> <> <> <> <> <> <> <<};>> <> <<>> <> <> <> <> <> <> <> <> <> <> <<};>> <<>> <> <> <> <> <> <> <> <> <> <> <> <> <> <<>> <> <> <> <> <> <> <<}>> <> <> <> <> <> <<};>> <<};>> <<>> <> <> <> <> <> <> <<};>> <<>> <> <> <> <> <> <> <<};>> <<};>> <<>> <> <> <> <> <> <<};>> <<>> <> <> <> <> <> <> <> <<};>> <> <> <> <<};>> <> <> <> <> <<};>> <<>> <> <<[frameLeftX, frameRightX, frameLowerY, frameUpperY] _ Frame[twoDCad, ratApproxBound];>> <> <> <