From 7febfae37f22273a28009f74d9b86b9d93084197 Mon Sep 17 00:00:00 2001
From: Michael Krisper <michael.krisper@tugraz.at>
Date: Wed, 27 Apr 2022 10:00:48 +0200
Subject: [PATCH] PowertrainBuilder and GUI: Removed P0 in Dropdown and throw
 exception if P0 is defined in file.

---
 VECTO/GUI/VehicleForm.vb                             |  3 ++-
 VectoCommon/VectoCommon/Models/PowertrainPosition.cs | 12 +++++++++---
 .../VectoCore/Models/Simulation/Data/VectoRunData.cs |  4 ++++
 .../Models/Simulation/Impl/PowertrainBuilder.cs      |  5 ++++-
 4 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/VECTO/GUI/VehicleForm.vb b/VECTO/GUI/VehicleForm.vb
index 2b0f976321..6711527776 100644
--- a/VECTO/GUI/VehicleForm.vb
+++ b/VECTO/GUI/VehicleForm.vb
@@ -122,7 +122,8 @@ Public Class VehicleForm
 		_changed = False
 
 		cbEmPos.DataSource = EnumHelper.GetKeyValuePairs(Of PowertrainPosition)(Function(t) t.GetLabel(),
-																				Function(x) x <> PowertrainPosition.GEN)
+																				Function(x) x <> PowertrainPosition.GEN _
+																					AndAlso x <> PowertrainPosition.HybridP0)
 
 		NewVehicle()
 	End Sub
diff --git a/VectoCommon/VectoCommon/Models/PowertrainPosition.cs b/VectoCommon/VectoCommon/Models/PowertrainPosition.cs
index ae6edc8132..c06a09c8f1 100644
--- a/VectoCommon/VectoCommon/Models/PowertrainPosition.cs
+++ b/VectoCommon/VectoCommon/Models/PowertrainPosition.cs
@@ -72,14 +72,20 @@ namespace TUGraz.VectoCommon.InputData
 
 		public static bool IsBatteryElectric(this PowertrainPosition pos)
 		{
-			return pos == PowertrainPosition.BatteryElectricE2 || pos == PowertrainPosition.BatteryElectricE3 ||
-					pos == PowertrainPosition.BatteryElectricE4;
+			switch (pos) {
+				case PowertrainPosition.BatteryElectricE2:
+				case PowertrainPosition.BatteryElectricE3:
+				case PowertrainPosition.BatteryElectricE4:
+					return true;
+				default:
+					return false;
+			}
 		}
 
 		public static bool IsParallelHybrid(this PowertrainPosition pos)
 		{
 			switch (pos) {
-				case PowertrainPosition.HybridP0:
+				//case PowertrainPosition.HybridP0: // special case, currently not considered in VECTO
 				case PowertrainPosition.HybridP1:
 				case PowertrainPosition.HybridP2:
 				case PowertrainPosition.HybridP2_5:
diff --git a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs
index bb57cfc446..74e2855d1c 100644
--- a/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Data/VectoRunData.cs
@@ -235,6 +235,10 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 				}
 			}
 
+			if (runData.ElectricMachinesData?.Any(e => e.Item1 == PowertrainPosition.HybridP0) ?? false){
+				return new ValidationResult("PowertrainPosition P0 is currently not supported.");
+			}
+
 			return ValidationResult.Success;
 		}
 
diff --git a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
index 96e80a328e..11de9cf78f 100644
--- a/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
+++ b/VectoCore/VectoCore/Models/Simulation/Impl/PowertrainBuilder.cs
@@ -412,6 +412,9 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			if (data.ElectricMachinesData.Count != 1) {
 				throw new VectoException("ParallelHybrid needs exactly one electric motor.");
 			}
+			if (data.ElectricMachinesData.Any(e => e.Item1 == PowertrainPosition.HybridP0)) {
+				throw new VectoException("PowertrainPosition P0 is currently not supported.");
+			}
 
 			var container = new VehicleContainer(data.ExecutionMode, _modData, _sumWriter) { RunData = data };
 			var es = ConnectREESS(data, container);
@@ -665,7 +668,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Impl
 			if (data.ElectricMachinesData.Count != 1) {
 				throw new VectoException("Battery electric vehicle needs exactly one electric motor.");
 			}
-
+			
 			var container = new VehicleContainer(data.ExecutionMode, _modData, _sumWriter) { RunData = data };
 			var es = ConnectREESS(data, container);
 
-- 
GitLab