Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/19/19 20:35:46 (5 years ago)
Author:
abeham
Message:

#2521: Finished refactoring pTSP

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2521_ProblemRefactoring/HeuristicLab.Problems.PTSP.Views/3.3/EuclideanPTSPDataView.cs

    r17260 r17264  
    2020#endregion
    2121
     22using System;
     23using System.Drawing;
     24using HeuristicLab.Data;
    2225using HeuristicLab.MainForm;
    2326using HeuristicLab.Problems.TravelingSalesman.Views;
     
    3538    public EuclideanPTSPDataView() {
    3639      InitializeComponent();
     40      SuspendLayout();
     41      Controls.Remove(coordinatesMatrixView);
     42      coordinatesMatrixView.Dock = System.Windows.Forms.DockStyle.None;
     43      coordinatesTabPage.Controls.Add(coordinatesMatrixView);
     44      coordinatesMatrixView.Dock = System.Windows.Forms.DockStyle.Fill;
     45      ResumeLayout(true);
    3746    }
    3847
     
    4049      base.OnContentChanged();
    4150      if (Content == null) {
    42 
     51        probabilitiesView.Content = null;
    4352      } else {
    44 
     53        probabilitiesView.Content = Content.Probabilities;
    4554      }
    4655    }
     
    4857    protected override void SetEnabledStateOfControls() {
    4958      base.SetEnabledStateOfControls();
     59      probabilitiesView.Enabled = !ReadOnly && !Locked && Content != null;
     60    }
    5061
     62    protected override void GenerateImage() {
     63      if ((coordinatesPictureBox.Width > 0) && (coordinatesPictureBox.Height > 0)) {
     64        if (Content == null) {
     65          coordinatesPictureBox.Image = null;
     66        } else {
     67          DoubleMatrix coordinates = Content.Coordinates;
     68          DoubleArray probabilities = Content.Probabilities;
     69          Bitmap bitmap = new Bitmap(coordinatesPictureBox.Width, coordinatesPictureBox.Height);
     70
     71          if ((coordinates != null) && (coordinates.Rows > 0) && (coordinates.Columns == 2) && (probabilities.Length == coordinates.Rows)) {
     72            double xMin = double.MaxValue, yMin = double.MaxValue, xMax = double.MinValue, yMax = double.MinValue;
     73            for (int i = 0; i < coordinates.Rows; i++) {
     74              if (xMin > coordinates[i, 0]) xMin = coordinates[i, 0];
     75              if (yMin > coordinates[i, 1]) yMin = coordinates[i, 1];
     76              if (xMax < coordinates[i, 0]) xMax = coordinates[i, 0];
     77              if (yMax < coordinates[i, 1]) yMax = coordinates[i, 1];
     78            }
     79
     80            int border = 20;
     81            double xStep = xMax != xMin ? (coordinatesPictureBox.Width - 2 * border) / (xMax - xMin) : 1;
     82            double yStep = yMax != yMin ? (coordinatesPictureBox.Height - 2 * border) / (yMax - yMin) : 1;
     83
     84            Point[] points = new Point[coordinates.Rows];
     85            for (int i = 0; i < coordinates.Rows; i++)
     86              points[i] = new Point(border + ((int)((coordinates[i, 0] - xMin) * xStep)),
     87                                    bitmap.Height - (border + ((int)((coordinates[i, 1] - yMin) * yStep))));
     88
     89            using (Graphics graphics = Graphics.FromImage(bitmap)) {
     90              for (int i = 0; i < points.Length; i++)
     91                graphics.FillRectangle(Brushes.Red, points[i].X - 2, points[i].Y - 2, Convert.ToInt32(probabilities[i] * 20), Convert.ToInt32(probabilities[i] * 20));
     92            }
     93          } else {
     94            using (Graphics graphics = Graphics.FromImage(bitmap)) {
     95              graphics.Clear(Color.White);
     96              Font font = new Font(FontFamily.GenericSansSerif, 12, FontStyle.Regular);
     97              string text = "No coordinates defined or in wrong format.";
     98              SizeF strSize = graphics.MeasureString(text, font);
     99              graphics.DrawString(text, font, Brushes.Black, (float)(coordinatesPictureBox.Width - strSize.Width) / 2.0f, (float)(coordinatesPictureBox.Height - strSize.Height) / 2.0f);
     100            }
     101          }
     102          coordinatesPictureBox.Image = bitmap;
     103        }
     104      }
    51105    }
    52106  }
Note: See TracChangeset for help on using the changeset viewer.