Exemplo n.º 1
0
        private void MakePlots()
        {
            if (!PlotsMade) //Only do this once
            {
                Model  mShe         = new Model(SheFileName);
                DFS3   dfs          = new DFS3(Dfs3FileName);
                Item   dfsI         = dfs.Items[ItemNumber - 1];
                string BaseFileName = System.IO.Path.ChangeExtension(Dfs3FileName, "");

                int[] TimeSteps = Dfs3plotdfs0.MainWindow.ParseString(TimeStepsAsString, 0, dfs.NumberOfTimeSteps - 1);
                int[] Layers    = Dfs3plotdfs0.MainWindow.ParseString(LayersAsString, 0, dfs.NumberOfLayers - 1);

                //Set graph headers
                Header.Content = dfsI.Name;
                Unit.Content   = dfsI.EumQuantity.UnitAbbreviation;

                //Give plot the same scale as the dfs grid
                plotter.Width = plotter.Height * ((double)dfs.NumberOfColumns) / (double)dfs.NumberOfRows;

                //Plot the extraction wells
                EnumerableDataSource <MikeSheWell> ds = new EnumerableDataSource <MikeSheWell>(mShe.ExtractionWells);
                ds.SetXMapping(var => var.X);
                ds.SetYMapping(var => var.Y);
                var point = new Microsoft.Research.DynamicDataDisplay.PointMarkers.CirclePointMarker();
                point.Size = 10;
                point.Pen  = new Pen(Brushes.Black, 3);
                plotter.AddLineGraph(ds, null, point, null);

                //Now loop, first on time steps then on layers
                foreach (int T in TimeSteps)
                {
                    foreach (int L in Layers)
                    {
                        Header2.Content = "Time: " + dfs.TimeSteps[T].ToShortDateString() + ", Layer: " + L;
                        var           M  = dfs.GetData(T, ItemNumber)[L];
                        NaiveColorMap nc = new NaiveColorMap();
                        M.Transpose(); //Need to transpose
                        nc.Data = M.ToArray();
                        M.Transpose(); //Transpose back as this is a reference to data held in the buffer
                        nc.Palette = Microsoft.Research.DynamicDataDisplay.Common.Palettes.UniformLinearPalettes.RedGreenBluePalette;
                        var bmp = nc.BuildImage();
                        image.Source = bmp;

                        //Set the color scale
                        paletteControl.Palette = nc.Palette;
                        paletteControl.Range   = nc.Data.GetMinMax();

                        //Set the size
                        var visible = new Microsoft.Research.DynamicDataDisplay.DataRect(dfs.XOrigin, dfs.YOrigin, dfs.GridSize * dfs.NumberOfColumns, dfs.GridSize * dfs.NumberOfRows);
                        ViewportPanel.SetViewportBounds(image, visible);
                        plotter.Visible = visible;

                        //Write the bitmap
                        this.UpdateLayout();
                        string fname = BaseFileName + "TimeStep_" + T + "_Layer_" + L;
                        Dfs3plotdfs0.MainWindow.SaveScreen(this, fname + ".jpg", (int)ActualWidth, (int)ActualHeight);

                        //Now write the ascii grid
                        using (StreamWriter sw = new StreamWriter(fname + ".asc"))
                        {
                            sw.Write(dfs.GetASCIIGrid(T, ItemNumber, L));
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
    private void MakePlots()
    {
      if (!PlotsMade) //Only do this once
      {
        Model mShe = new Model(SheFileName);
        DFS3 dfs = new DFS3(Dfs3FileName);
        Item dfsI = dfs.Items[ItemNumber - 1];
        string BaseFileName = System.IO.Path.ChangeExtension(Dfs3FileName, "");

        int[] TimeSteps = Dfs3plotdfs0.MainWindow.ParseString(TimeStepsAsString, 0, dfs.NumberOfTimeSteps - 1);
        int[] Layers = Dfs3plotdfs0.MainWindow.ParseString(LayersAsString, 0, dfs.NumberOfLayers - 1);

        //Set graph headers
        Header.Content = dfsI.Name;
        Unit.Content = dfsI.EumQuantity.UnitAbbreviation;

        //Give plot the same scale as the dfs grid
        plotter.Width = plotter.Height * ((double)dfs.NumberOfColumns) / (double)dfs.NumberOfRows;

        //Plot the extraction wells
        EnumerableDataSource<MikeSheWell> ds = new EnumerableDataSource<MikeSheWell>(mShe.ExtractionWells);
        ds.SetXMapping(var => var.X);
        ds.SetYMapping(var => var.Y);
        var point = new Microsoft.Research.DynamicDataDisplay.PointMarkers.CirclePointMarker();
        point.Size = 10;
        point.Pen = new Pen(Brushes.Black, 3);
        plotter.AddLineGraph(ds, null, point, null);

        //Now loop, first on time steps then on layers
        foreach (int T in TimeSteps)
        {
          foreach (int L in Layers)
          {
            Header2.Content = "Time: " + dfs.TimeSteps[T].ToShortDateString() + ", Layer: " + L; 
            var M = dfs.GetData(T, ItemNumber)[L];
            NaiveColorMap nc = new NaiveColorMap();
            M.Transpose(); //Need to transpose
            nc.Data = M.ToArray();
            M.Transpose(); //Transpose back as this is a reference to data held in the buffer
            nc.Palette = Microsoft.Research.DynamicDataDisplay.Common.Palettes.UniformLinearPalettes.RedGreenBluePalette;
            var bmp = nc.BuildImage();
            image.Source = bmp;

            //Set the color scale
            paletteControl.Palette = nc.Palette;
            paletteControl.Range = nc.Data.GetMinMax();
            
            //Set the size
            var visible = new Microsoft.Research.DynamicDataDisplay.DataRect(dfs.XOrigin, dfs.YOrigin, dfs.GridSize*dfs.NumberOfColumns, dfs.GridSize * dfs.NumberOfRows);            
            ViewportPanel.SetViewportBounds(image, visible);
            plotter.Visible = visible;

            //Write the bitmap
            this.UpdateLayout();
            string fname = BaseFileName + "TimeStep_" +T + "_Layer_" + L;
            Dfs3plotdfs0.MainWindow.SaveScreen(this, fname + ".jpg", (int)ActualWidth, (int)ActualHeight);

            //Now write the ascii grid
            using (StreamWriter sw = new StreamWriter(fname + ".asc"))
            {
              sw.Write(dfs.GetASCIIGrid(T, ItemNumber, L)); 
            }
          }
        }
      }
    }