<> <> <<>> DIRECTORY <> <> ViewerClasses, Rope, Menus, IO, Convert, ViewerIO, ViewerTools, ViewerOps, TypeScript, Imager, ImagerColor, ImagerPath, AlgebraClasses, Points, BigRats, RatIntervals, Variables, DistribPolys, Polynomials, AlgebraicNumbers, ExtensionFields, Formulas, QETypes, QEIO, Cad2D, Cads, Graphs, GraphOps; QEIOTestMain: CEDAR PROGRAM IMPORTS IO, Menus, ViewerIO, ViewerTools, ViewerOps, Convert, TypeScript, QEIO, Cad2D, Imager, ImagerColor, Cads, GraphOps SHARES Imager = BEGIN OPEN AC: AlgebraClasses, PTS: Points, BR: BigRats, RI: RatIntervals, VARS: Variables, DP: DistribPolys, POL: Polynomials, AN: AlgebraicNumbers, EF: ExtensionFields, QFF: Formulas, QET: QETypes, QEIO; SEGMENTWIDTH: REAL = 2.; -- width of segment portion in edge drawing <> Cad2DViewer: TYPE = ViewerClasses.Viewer; Cad2DViewerData: TYPE = REF Cad2DViewerDataRec; Cad2DViewerDataRec: TYPE = RECORD [ x, y: REAL _ 0.0, -- origin for plot scale: REAL _ 100.0, -- current scale for Imager cad2D: QET.Cad _ NIL ]; cad2DViewer: Cad2DViewer; ts: TypeScript.TS; -- the primary typescript in, out: IO.STREAM; -- global variables for log writing dimension: NAT; <> cad: QET.Cad _ NIL; <> <> <> <<};>> <<>> SetDimension: Menus.MenuProc = { dimension _ Convert.CardFromRope[ViewerTools.GetSelectionContents[] ]; out.PutF["Dimension = %g\n\n", IO.card[dimension] ]; }; SetCadFromFile: Menus.MenuProc = { cad2DViewerData: Cad2DViewerData _ NARROW[cad2DViewer.data]; cad _ CadFileFromRope[ViewerTools.GetSelectionContents[] ]; cad2DViewerData.cad2D _ GetInducedCad[cad, 2]; dimension _ cad.dimension; WriteCadFile[cad, out]; }; Components: Menus.MenuProc = { << User specifies polynomials with respect to which to cluster by (*,*,@,*,*,@) tuples (@ is new FormulaOperators.Op).>> edgePredicate: GraphOps.EdgePredicate ~ { cell1: QET.Cell _ NARROW[v.rep]; cell2: QET.Cell _ NARROW[w.rep]; RETURN[cell1.basisSignature.structure.class.equal[cell1.basisSignature, cell2.basisSignature] ]; }; inducedCad: QET.Cad _ QEIO.GetInducedCad[cad, dimension]; numComponents: CARDINAL _ GraphOps.DetermineComponents[cad.abstractGraph, Undirected, edgePredicate]; clusters: QET.SignedRegionSeq _ Cads.ExtractClusters[inducedCad, numComponents]; QEIO.WriteSignedRegionSeq[clusters, out]; }; SetCad: Menus.MenuProc = { cad2DViewerData: Cad2DViewerData _ NARROW[cad2DViewer.data]; cad _ CadFromRope[ViewerTools.GetSelectionContents[] ]; cad2DViewerData.cad2D _ QEIO.GetInducedCad[cad, 2]; dimension _ cad.dimension; WriteCad[cad, out]; }; SetCoveringSets: Menus.MenuProc = { CoveringSetsFromRope[ViewerTools.GetSelectionContents[], cad]; WriteCadCoveringSets[cad, out]; }; SetAdjacencies: Menus.MenuProc = { AdjacenciesFromRope[ViewerTools.GetSelectionContents[], cad]; WriteCadAdjacencies[cad, out]; }; DisplayCad2D: Menus.MenuProc = { ViewerOps.PaintViewer[viewer: cad2DViewer, hint: client, whatChanged: NIL, clearClient: TRUE]; }; Zoom: Menus.MenuProc = { selfData: Cad2DViewerData _ NARROW[cad2DViewer.data]; IF mouseButton=red THEN { selfData.scale _ selfData.scale*2; selfData.x _ selfData.x - (1.0 / selfData.scale) * 300.0; selfData.y _ selfData.y - (1.0 / selfData.scale) * 350.0 } ELSE { selfData.x _ selfData.x + (1.0 / selfData.scale) * 300.0; selfData.y _ selfData.y + (1.0 / selfData.scale) * 350.0; selfData.scale _ selfData.scale/2 }; ViewerOps.PaintViewer[viewer: cad2DViewer, hint: client, whatChanged: NIL, clearClient: TRUE]; }; Horizontal: Menus.MenuProc = { selfData: Cad2DViewerData _ NARROW[cad2DViewer.data]; IF mouseButton=red THEN selfData.x _ selfData.x - (1.0 / selfData.scale) * 100.0 ELSE selfData.x _ selfData.x + (1.0 / selfData.scale) * 100.0; ViewerOps.PaintViewer[viewer: cad2DViewer, hint: client, whatChanged: NIL, clearClient: TRUE]; }; Vertical: Menus.MenuProc = { selfData: Cad2DViewerData _ NARROW[cad2DViewer.data]; IF mouseButton=red THEN selfData.y _ selfData.y + (1.0 / selfData.scale) * 100.0 ELSE selfData.y _ selfData.y - (1.0 / selfData.scale) * 100.0; ViewerOps.PaintViewer[viewer: cad2DViewer, hint: client, whatChanged: NIL, clearClient: TRUE]; }; InitCad2DViewer: ViewerClasses.InitProc -- [self: ViewerClasses.Viewer] -- = { self.data _ NEW[Cad2DViewerDataRec _ [ x: 8.0, y: 7.0, scale: 50.0 ]]; self.name _ "Cad2DViewer"; }; PaintCad2DViewer: ViewerClasses.PaintProc = { <<[self: Viewer, context: Imager.Context, whatChanged: REF, clear: BOOL]>> <> DoIt: PROC = { dotWidth: REAL _ 2.0 / selfData.scale ; segmentWidth: REAL _ 10.0 / selfData.scale ; context.ScaleT[selfData.scale]; context.TranslateT[ [selfData.x, selfData.y] ]; Cad2D.DisplayCad[selfData.cad2D, context, dotWidth, segmentWidth]; }; selfData: Cad2DViewerData _ NARROW[self.data]; <> context.SetColor[ImagerColor.ColorFromAtom[$Black]]; SELECT whatChanged FROM NIL => context.DoSaveAll[DoIt]; ENDCASE => ERROR; }; <<>> <> <<[self: Viewer, context: Imager.Context, whatChanged: REF, clear: BOOL]>> <> <> <> <> <> <<>> << traj _ ImagerPath.MoveTo[ [1.587, 1.260] ]; traj _ ImagerPath.LineTo[traj, [1.562, 1.090] ]; traj _ ImagerPath.LineTo[traj, [-0.875, 0.249] ]; traj _ ImagerPath.LineTo[traj, [-0.906, 0.267] ]; traj _ ImagerPath.LineTo[traj, [-0.937, 0.284] ]; traj _ ImagerPath.LineTo[traj, [-0.969, 0.303] ];>> <> <<>> << traj _ ImagerPath.MoveTo[ [1.587, 1.260] ]; traj _ ImagerPath.LineTo[traj, [1.562, 1.402] ]; traj _ ImagerPath.LineTo[traj, [2.469, -3.434] ];>> <> <<};>> <<>> <> <> <> <> <