From f046a37594d6fa16512dbf3d2fd9f786f2a3e90b Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Fri, 22 Apr 2016 10:24:50 +0200
Subject: [PATCH] extended drawing of shift polygons

---
 .../VectoCoreTest/Utils/ShiftPolygonDrawer.cs | 157 ++++++++++++------
 1 file changed, 108 insertions(+), 49 deletions(-)

diff --git a/VectoCore/VectoCoreTest/Utils/ShiftPolygonDrawer.cs b/VectoCore/VectoCoreTest/Utils/ShiftPolygonDrawer.cs
index acf8d38e7c..8b16d06df1 100644
--- a/VectoCore/VectoCoreTest/Utils/ShiftPolygonDrawer.cs
+++ b/VectoCore/VectoCoreTest/Utils/ShiftPolygonDrawer.cs
@@ -33,6 +33,8 @@ namespace TUGraz.VectoCore.Tests.Utils
 			};
 			var maxX = engineFld.FullLoadEntries.Last().EngineSpeed.Value() / Constants.RPMToRad * 1.1;
 
+			AddLegend(chart);
+
 			var i = 0;
 			foreach (var shiftPolygon in polygons) {
 				var chartArea = AddChartArea(chart, "Gear " + (i + 1), "Engine Speed", "Torque", 0, maxX);
@@ -52,7 +54,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 
 				PlotShiftPolygon(i, shiftPolygon, chartArea, chart);
 
-				PositionChartArea(chartArea, 5, i, polygons.Count);
+				PositionChartArea(chartArea, 5, i, polygons.Count, 7);
 
 
 				i++;
@@ -71,7 +73,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 				Color = Color.DarkGoldenrod,
 				BorderWidth = 2,
 				//Legend = legend.Name,
-				IsVisibleInLegend = true,
+				IsVisibleInLegend = false,
 				ChartArea = chartArea.Name,
 				//YAxisType = AxisType.Secondary
 			};
@@ -102,7 +104,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 			chart.Titles.Add(title);
 		}
 
-		private static void PositionChartArea(ChartArea chartArea, float titleHeight, int i, int count)
+		private static void PositionChartArea(ChartArea chartArea, float titleHeight, int i, int count, float legendHeight)
 		{
 			var numRows = Math.Ceiling(count / 4.0);
 			var numCols = Math.Ceiling(count / numRows);
@@ -110,7 +112,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 			chartArea.Position.Width = (float)((100.0f) / numCols);
 			chartArea.Position.Height = (float)((100.0f - titleHeight) / numRows);
 			chartArea.Position.X = (float)(((i) % numCols) * 100.0f / numCols);
-			chartArea.Position.Y = (float)(titleHeight + (int)((i) / numCols) * (100 - titleHeight) / numRows);
+			chartArea.Position.Y = (float)(titleHeight + (int)((i) / numCols) * (100 - titleHeight - legendHeight) / numRows);
 		}
 
 		private static void PlotShiftPolygon(int gear, ShiftPolygon shiftPolygon, ChartArea chartArea, Chart chart)
@@ -145,7 +147,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 				Color = color,
 				BorderWidth = 2,
 				//Legend = legend.Name,
-				IsVisibleInLegend = true,
+				IsVisibleInLegend = false,
 				ChartArea = chartArea.Name,
 			};
 			if (dashed) {
@@ -164,64 +166,36 @@ namespace TUGraz.VectoCore.Tests.Utils
 
 			PlotDragLoad(engineFld, chartArea, chart, name);
 
-			PlotNPref(engineFld, chartArea, chart, name);
+			PlotEngineSpeedLine(engineFld, chartArea, chart, "nPref " + name, Color.DeepSkyBlue,
+				engineFld.PreferredSpeed.Value() / Constants.RPMToRad);
 
-			PlotN95h(engineFld, chartArea, chart, name);
+			PlotEngineSpeedLine(engineFld, chartArea, chart, "n95h " + name, Color.Red,
+				engineFld.N95hSpeed.Value() / Constants.RPMToRad);
 
-			PlotN85kmh(engineFld, speed85kmh, chartArea, chart, name);
-		}
+			PlotEngineSpeedLine(engineFld, chartArea, chart, "n85kmh " + name, Color.LimeGreen,
+				speed85kmh.Value() / Constants.RPMToRad);
 
-		private static void PlotN85kmh(EngineFullLoadCurve engineFld, PerSecond speed85kmh, ChartArea chartArea, Chart chart,
-			string name)
-		{
-			var series85kmh = new Series {
-				Name = "85kmh-" + name,
-				ChartType = SeriesChartType.Line,
-				Color = Color.LimeGreen,
-				BorderWidth = 2,
-				//Legend = legend.Name,
-				IsVisibleInLegend = true,
-				ChartArea = chartArea.Name,
-			};
-			chart.Series.Add(series85kmh);
-			var x85kmh = new[] { speed85kmh.Value() / Constants.RPMToRad, speed85kmh.Value() / Constants.RPMToRad }.ToList();
-			var y85kmh = new[] { engineFld.MaxDragTorque.Value(), engineFld.MaxLoadTorque.Value() }.ToList();
-			chart.Series[series85kmh.Name].Points.DataBindXY(x85kmh, y85kmh);
+			PlotEngineSpeedLine(engineFld, chartArea, chart, "nPmax " + name, Color.Coral,
+				engineFld.RatedSpeed.Value() / Constants.RPMToRad);
 		}
 
-		private static void PlotN95h(EngineFullLoadCurve engineFld, ChartArea chartArea, Chart chart, string name)
-		{
-			var seriesN95h = new Series {
-				Name = "N95h-" + name,
-				ChartType = SeriesChartType.Line,
-				Color = Color.Red,
-				BorderWidth = 2,
-				//Legend = legend.Name,
-				IsVisibleInLegend = true,
-				ChartArea = chartArea.Name,
-			};
-			chart.Series.Add(seriesN95h);
-			var x95h =
-				new[] { engineFld.N95hSpeed.Value() / Constants.RPMToRad, engineFld.N95hSpeed.Value() / Constants.RPMToRad }.ToList();
-			var y95h = new[] { engineFld.MaxDragTorque.Value(), engineFld.MaxLoadTorque.Value() }.ToList();
-			chart.Series[seriesN95h.Name].Points.DataBindXY(x95h, y95h);
-		}
 
-		private static void PlotNPref(EngineFullLoadCurve engineFld, ChartArea chartArea, Chart chart, string name)
+		private static void PlotEngineSpeedLine(EngineFullLoadCurve engineFld, ChartArea chartArea, Chart chart, string name,
+			Color color, double n)
 		{
 			var seriesNpref = new Series {
-				Name = "NPref-" + name,
+				Name = name,
 				ChartType = SeriesChartType.Line,
-				Color = Color.DeepSkyBlue,
+				Color = color,
 				BorderWidth = 2,
 				//Legend = legend.Name,
-				IsVisibleInLegend = true,
+				IsVisibleInLegend = false,
 				ChartArea = chartArea.Name,
 			};
 			chart.Series.Add(seriesNpref);
 			var xpref =
 				new[]
-				{ engineFld.PreferredSpeed.Value() / Constants.RPMToRad, engineFld.PreferredSpeed.Value() / Constants.RPMToRad }
+				{ n, n }
 					.ToList();
 			var ypref = new[] { engineFld.MaxDragTorque.Value(), engineFld.MaxLoadTorque.Value() }.ToList();
 			chart.Series[seriesNpref.Name].Points.DataBindXY(xpref, ypref);
@@ -235,7 +209,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 				Color = Color.DarkBlue,
 				BorderWidth = 2,
 				//Legend = legend.Name,
-				IsVisibleInLegend = true,
+				IsVisibleInLegend = false,
 				ChartArea = chartArea.Name,
 			};
 			chart.Series.Add(seriesDrag);
@@ -256,7 +230,7 @@ namespace TUGraz.VectoCore.Tests.Utils
 				Color = Color.DarkBlue,
 				BorderWidth = 2,
 				//Legend = legend.Name,
-				IsVisibleInLegend = true,
+				IsVisibleInLegend = false,
 				ChartArea = chartArea.Name,
 			};
 			chart.Series.Add(series);
@@ -304,5 +278,90 @@ namespace TUGraz.VectoCore.Tests.Utils
 			chart.ChartAreas.Add(chartArea);
 			return chartArea;
 		}
+
+		private static void AddLegend(Chart chart)
+		{
+			var legend = new Legend()
+			{
+				Docking = Docking.Bottom,
+				Alignment = StringAlignment.Center,
+				IsDockedInsideChartArea = false,
+				Font = LegendFont,
+				//Title = "Legend",
+			};
+			legend.CustomItems.Add(new LegendItem()
+			{
+				Color = Color.DarkBlue,
+				Name = "Engine Full Load Curve",
+				MarkerStyle = MarkerStyle.None,
+				ImageStyle = LegendImageStyle.Line,
+				BorderWidth = 3,
+			});
+			legend.CustomItems.Add(new LegendItem()
+			{
+				Color = Color.DarkRed,
+				Name = "Upshift / Downshift",
+				MarkerStyle = MarkerStyle.None,
+				ImageStyle = LegendImageStyle.Line,
+				BorderWidth = 3,
+			});
+			legend.CustomItems.Add(new LegendItem()
+			{
+				Color = Color.DeepSkyBlue,
+				Name = "n_pref",
+				MarkerStyle = MarkerStyle.None,
+				ImageStyle = LegendImageStyle.Line,
+				BorderWidth = 3,
+			});
+			legend.CustomItems.Add(new LegendItem()
+			{
+				Color = Color.Coral,
+				Name = "n_Pmax",
+				MarkerStyle = MarkerStyle.None,
+				ImageStyle = LegendImageStyle.Line,
+				BorderWidth = 3,
+			});
+			legend.CustomItems.Add(new LegendItem()
+			{
+				Color = Color.Red,
+				Name = "n_95h",
+				MarkerStyle = MarkerStyle.None,
+				ImageStyle = LegendImageStyle.Line,
+				BorderWidth = 3,
+			});
+			legend.CustomItems.Add(new LegendItem()
+			{
+				Color = Color.LimeGreen,
+				Name = "n_85km/h",
+				MarkerStyle = MarkerStyle.None,
+				ImageStyle = LegendImageStyle.Line,
+				BorderWidth = 3,
+			});
+			legend.CustomItems.Add(new LegendItem()
+			{
+				Color = Color.BlueViolet,
+				Name = "Downshift next gear",
+				MarkerStyle = MarkerStyle.None,
+				ImageStyle = LegendImageStyle.Line,
+				BorderWidth = 3,
+			});
+			legend.CustomItems.Add(new LegendItem()
+			{
+				Color = Color.Gray,
+				Name = "Upshift orig.",
+				MarkerStyle = MarkerStyle.None,
+				ImageStyle = LegendImageStyle.Line,
+				BorderWidth = 3,
+			});
+			legend.CustomItems.Add(new LegendItem()
+			{
+				Color = Color.DarkGoldenrod,
+				Name = "P",
+				MarkerStyle = MarkerStyle.None,
+				ImageStyle = LegendImageStyle.Line,
+				BorderWidth = 3,
+			});
+			chart.Legends.Add(legend);
+		}
 	}
 }
\ No newline at end of file
-- 
GitLab