diff --git a/VECTO/File Browser/FB_Global.vb b/VECTO/File Browser/FB_Global.vb index 741f01d03da42e89a5eb177d6e1825092bb29990..9129d13dedb69b184f758d65db941a86ea227f32 100644 --- a/VECTO/File Browser/FB_Global.vb +++ b/VECTO/File Browser/FB_Global.vb @@ -36,6 +36,7 @@ Public Module FB_Global Public fbGBS As cFileBrowser Public fbTLM As cFileBrowser + Public fbPTOLM As cFileBrowser Public fbRLM As cFileBrowser Public fbTCC As cFileBrowser Public fbCDx As cFileBrowser diff --git a/VECTO/GUI/F_MAINForm.vb b/VECTO/GUI/F_MAINForm.vb index dc963b9631f8f8951fea0cb4dbe1e7645306e7ec..58ae37bcb61988891203d9b5f2965e3b1469989f 100644 --- a/VECTO/GUI/F_MAINForm.vb +++ b/VECTO/GUI/F_MAINForm.vb @@ -136,6 +136,7 @@ Public Class F_MAINForm fbGBS = New cFileBrowser("vgbs") fbRLM = New cFileBrowser("vrlm") fbTLM = New cFileBrowser("vtlm") + fbPTOLM = New cFileBrowser("vptol") fbTCC = New cFileBrowser("vtcc") fbCDx = New cFileBrowser("vcdx") fbDfVelocityDrop = New cFileBrowser("DfVelocityDrop") @@ -160,6 +161,7 @@ Public Class F_MAINForm fbGBS.Extensions = New String() {"vgbs"} fbRLM.Extensions = New String() {"vrlm"} fbTLM.Extensions = New String() {"vtlm"} + fbPTOLM.Extensions = New String() {"vptol"} fbTCC.Extensions = New String() {"vtcc"} fbCDx.Extensions = New String() {"vcdv", "vcdb"} @@ -181,6 +183,7 @@ Public Class F_MAINForm fbGBS.Close() fbRLM.Close() fbTLM.Close() + fbPTOLM.Close() fbTCC.Close() fbCDx.Close() fbVMOD.Close() diff --git a/VECTO/GUI/F_VEH.Designer.vb b/VECTO/GUI/F_VEH.Designer.vb index c7ee84b1f602f55958607854f168ff7ea9ec3a33..bfd1a78fafa873285d6ea00f7460549291a65c86 100644 --- a/VECTO/GUI/F_VEH.Designer.vb +++ b/VECTO/GUI/F_VEH.Designer.vb @@ -109,10 +109,11 @@ Partial Class F_VEH Me.ShowInFolderToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.PnAll = New System.Windows.Forms.Panel() Me.gbPTO = New System.Windows.Forms.GroupBox() + Me.pnPTO = New System.Windows.Forms.Panel() Me.btPTOLossMapBrowse = New System.Windows.Forms.Button() - Me.cbPTOType = New System.Windows.Forms.ComboBox() - Me.tbPTOLossMap = New System.Windows.Forms.TextBox() Me.Label7 = New System.Windows.Forms.Label() + Me.tbPTOLossMap = New System.Windows.Forms.TextBox() + Me.cbPTOType = New System.Windows.Forms.ComboBox() Me.GroupBox3 = New System.Windows.Forms.GroupBox() Me.GroupBox2 = New System.Windows.Forms.GroupBox() Me.pnAngularGearFields = New System.Windows.Forms.Panel() @@ -141,6 +142,7 @@ Partial Class F_VEH Me.CmOpenFile.SuspendLayout() Me.PnAll.SuspendLayout() Me.gbPTO.SuspendLayout() + Me.pnPTO.SuspendLayout() Me.GroupBox3.SuspendLayout() Me.GroupBox2.SuspendLayout() Me.pnAngularGearFields.SuspendLayout() @@ -822,10 +824,8 @@ Partial Class F_VEH ' 'gbPTO ' - Me.gbPTO.Controls.Add(Me.btPTOLossMapBrowse) + Me.gbPTO.Controls.Add(Me.pnPTO) Me.gbPTO.Controls.Add(Me.cbPTOType) - Me.gbPTO.Controls.Add(Me.tbPTOLossMap) - Me.gbPTO.Controls.Add(Me.Label7) Me.gbPTO.Location = New System.Drawing.Point(6, 412) Me.gbPTO.Name = "gbPTO" Me.gbPTO.Size = New System.Drawing.Size(564, 86) @@ -833,44 +833,54 @@ Partial Class F_VEH Me.gbPTO.TabStop = False Me.gbPTO.Text = "PTO Transmission" ' + 'pnPTO + ' + Me.pnPTO.Controls.Add(Me.btPTOLossMapBrowse) + Me.pnPTO.Controls.Add(Me.Label7) + Me.pnPTO.Controls.Add(Me.tbPTOLossMap) + Me.pnPTO.Dock = System.Windows.Forms.DockStyle.Bottom + Me.pnPTO.Location = New System.Drawing.Point(3, 42) + Me.pnPTO.Name = "pnPTO" + Me.pnPTO.Size = New System.Drawing.Size(558, 41) + Me.pnPTO.TabIndex = 4 + ' 'btPTOLossMapBrowse ' Me.btPTOLossMapBrowse.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) Me.btPTOLossMapBrowse.Image = Global.VECTO.My.Resources.Resources.Open_icon - Me.btPTOLossMapBrowse.Location = New System.Drawing.Point(532, 55) + Me.btPTOLossMapBrowse.Location = New System.Drawing.Point(529, 15) Me.btPTOLossMapBrowse.Name = "btPTOLossMapBrowse" Me.btPTOLossMapBrowse.Size = New System.Drawing.Size(24, 24) Me.btPTOLossMapBrowse.TabIndex = 14 Me.btPTOLossMapBrowse.UseVisualStyleBackColor = True ' - 'cbPTOType + 'Label7 ' - Me.cbPTOType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList - Me.cbPTOType.FormattingEnabled = True - Me.cbPTOType.Items.AddRange(New Object() {"None", "only the drive shaft of the PTO - shift claw, synchronizer, Schieberad", "only the drive shaft of the PTO - multi-disc clutch", "only the drive shaft of the PTO - multi-disc clutch, oil pump", "drive shaft and/or up to 2 gear wheels - shift claw, synchronizer, Schieberad", "drive shaft and/or up to 2 gear wheels - multi-disc clutch", "drive shaft and/or up to 2 gear wheels - multi-disc clutch, oil pump", "drive shaft and/or more than 2 gear wheels - shift claw, synchronizer, Schieberad" & _ - "", "drive shaft and/or more than 2 gear wheels - multi-disc clutch", "drive shaft and/or more than 2 gear wheels - multi-disc clutch, oil pump"}) - Me.cbPTOType.Location = New System.Drawing.Point(6, 19) - Me.cbPTOType.Name = "cbPTOType" - Me.cbPTOType.Size = New System.Drawing.Size(550, 21) - Me.cbPTOType.TabIndex = 0 + Me.Label7.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.Label7.Location = New System.Drawing.Point(3, -1) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(201, 16) + Me.Label7.TabIndex = 15 + Me.Label7.Text = "PTO Consumer Loss Map (.vptol)" + Me.Label7.TextAlign = System.Drawing.ContentAlignment.BottomLeft ' 'tbPTOLossMap ' Me.tbPTOLossMap.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.tbPTOLossMap.Location = New System.Drawing.Point(9, 58) + Me.tbPTOLossMap.Location = New System.Drawing.Point(6, 18) Me.tbPTOLossMap.Name = "tbPTOLossMap" Me.tbPTOLossMap.Size = New System.Drawing.Size(523, 20) Me.tbPTOLossMap.TabIndex = 13 + Me.ToolTip1.SetToolTip(Me.tbPTOLossMap, "PTO Consumer Loss Map") ' - 'Label7 + 'cbPTOType ' - Me.Label7.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) - Me.Label7.Location = New System.Drawing.Point(6, 41) - Me.Label7.Name = "Label7" - Me.Label7.Size = New System.Drawing.Size(201, 16) - Me.Label7.TabIndex = 15 - Me.Label7.Text = "PTO Loss Map" - Me.Label7.TextAlign = System.Drawing.ContentAlignment.BottomLeft + Me.cbPTOType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.cbPTOType.Location = New System.Drawing.Point(6, 17) + Me.cbPTOType.Name = "cbPTOType" + Me.cbPTOType.Size = New System.Drawing.Size(550, 21) + Me.cbPTOType.TabIndex = 0 + Me.ToolTip1.SetToolTip(Me.cbPTOType, "Transmission type to the PTO consumer") ' 'GroupBox3 ' @@ -1040,7 +1050,8 @@ Partial Class F_VEH Me.CmOpenFile.ResumeLayout(False) Me.PnAll.ResumeLayout(False) Me.gbPTO.ResumeLayout(False) - Me.gbPTO.PerformLayout() + Me.pnPTO.ResumeLayout(False) + Me.pnPTO.PerformLayout() Me.GroupBox3.ResumeLayout(False) Me.GroupBox2.ResumeLayout(False) Me.pnAngularGearFields.ResumeLayout(False) @@ -1142,4 +1153,5 @@ Partial Class F_VEH Friend WithEvents gbPTO As System.Windows.Forms.GroupBox Friend WithEvents btPTOLossMapBrowse As System.Windows.Forms.Button Friend WithEvents cbPTOType As System.Windows.Forms.ComboBox + Friend WithEvents pnPTO As System.Windows.Forms.Panel End Class diff --git a/VECTO/GUI/F_VEH.resx b/VECTO/GUI/F_VEH.resx index 2b54623060b4e67c5930e84c93822b2442ebd8b8..8208af3f02197b9fe447fda8f3a8340fb6499578 100644 --- a/VECTO/GUI/F_VEH.resx +++ b/VECTO/GUI/F_VEH.resx @@ -130,7 +130,7 @@ <value>376, 21</value> </metadata> <metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> - <value>57</value> + <value>77</value> </metadata> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> diff --git a/VECTO/GUI/F_VEH.vb b/VECTO/GUI/F_VEH.vb index 54eee8866ba17bd8fc6b9649eef44861cc203137..80fac163db50966fa8adfbe303e83f959f93f10d 100644 --- a/VECTO/GUI/F_VEH.vb +++ b/VECTO/GUI/F_VEH.vb @@ -1,758 +1,784 @@ -' Copyright 2014 European Union. -' Licensed under the EUPL (the 'Licence'); -' -' * You may not use this work except in compliance with the Licence. -' * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl -' * Unless required by applicable law or agreed to in writing, -' software distributed under the Licence is distributed on an "AS IS" basis, -' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -' -' See the LICENSE.txt for the specific language governing permissions and limitations. -Option Infer On - -Imports System.IO -Imports System.Text.RegularExpressions -Imports TUGraz.VectoCommon.Models - -''' <summary> -''' Vehicle Editor. -''' </summary> -Public Class F_VEH - Private _axlDlog As F_VEH_Axle - Private _hdVclass As String - Private _vehFile As String - Private _changed As Boolean = False - Private _cmFiles As String() - - Public AutoSendTo As Boolean = False - Public JobDir As String = "" - - 'Close - Check for unsaved changes - Private Sub F_VEH_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing - If e.CloseReason <> CloseReason.ApplicationExitCall And e.CloseReason <> CloseReason.WindowsShutDown Then - e.Cancel = ChangeCheckCancel() - End If - End Sub - - 'Initialise form - Private Sub F05_VEH_Load(sender As Object, e As EventArgs) Handles MyBase.Load - TbLoadingMax.Text = "-" - PnLoad.Enabled = Not Cfg.DeclMode - ButAxlAdd.Enabled = Not Cfg.DeclMode - ButAxlRem.Enabled = Not Cfg.DeclMode - CbCdMode.Enabled = Not Cfg.DeclMode - PnWheelDiam.Enabled = Not Cfg.DeclMode - - _axlDlog = New F_VEH_Axle - - _changed = False - - NewVehicle() - End Sub - - 'Set HDVclasss - Private Sub SetHdVclass() - Dim vehC = CType(CbCat.SelectedIndex, tVehCat) - Dim axlC = CType(CbAxleConfig.SelectedIndex, tAxleConf) - Dim maxMass = CSng(fTextboxToNumString(TbMassMass.Text)) - - Dim s0 As cSegmentTableEntry = Declaration.SegmentTable.SetRef(vehC, axlC, maxMass) - _hdVclass = "-" - If Not s0 Is Nothing Then - _hdVclass = s0.HDVclass - End If - - TbHDVclass.Text = _hdVclass - PicVehicle.Image = Image.FromFile(cDeclaration.ConvPicPath(_hdVclass, False)) - End Sub - - - 'Set generic values for Declaration mode - Private Sub DeclInit() - If Not Cfg.DeclMode Then Exit Sub - - Dim vehC = CType(CbCat.SelectedIndex, tVehCat) - Dim axlC = CType(CbAxleConfig.SelectedIndex, tAxleConf) - Dim maxMass = CSng(fTextboxToNumString(TbMassMass.Text)) - Dim s0 = Declaration.SegmentTable.SetRef(vehC, axlC, maxMass) - - If Not s0 Is Nothing Then - _hdVclass = s0.HDVclass - Dim axleCount As Short = s0.AxleShares(s0.Missions(0)).Count - Dim i0 = LvRRC.Items.Count - - If axleCount > i0 Then - For i = 1 To axleCount - LvRRC.Items.Count - Dim lvi = New ListViewItem - lvi.SubItems(0).Text = (i + i0).ToString - lvi.SubItems.Add("-") - lvi.SubItems.Add("no") - lvi.SubItems.Add("") - lvi.SubItems.Add("") - lvi.SubItems.Add("-") - lvi.SubItems.Add("-") - LvRRC.Items.Add(lvi) - Next - - ElseIf axleCount < LvRRC.Items.Count Then - For i = axleCount To LvRRC.Items.Count - 1 - LvRRC.Items.RemoveAt(LvRRC.Items.Count - 1) - Next - End If - - PnAll.Enabled = True - - Else - PnAll.Enabled = False - _hdVclass = "-" - End If - - TbMassExtra.Text = "-" - TbLoad.Text = "-" - CbCdMode.SelectedIndex = CType(tCdMode.CdOfVdecl, Integer) - TbCdFile.Text = "" - - Dim rdyn As Single - rdyn = -1 - - If rdyn < 0 Then - TBrdyn.Text = "-" - Else - TBrdyn.Text = rdyn - End If - End Sub - - -#Region "Toolbar" - - 'New - Private Sub ToolStripBtNew_Click(sender As Object, e As EventArgs) Handles ToolStripBtNew.Click - NewVehicle() - End Sub - - 'Open - Private Sub ToolStripBtOpen_Click(sender As Object, e As EventArgs) Handles ToolStripBtOpen.Click - If fbVEH.OpenDialog(_vehFile) Then OpenVehicle(fbVEH.Files(0)) - End Sub - - 'Save - Private Sub ToolStripBtSave_Click(sender As Object, e As EventArgs) Handles ToolStripBtSave.Click - SaveOrSaveAs(False) - End Sub - - 'Save As - Private Sub ToolStripBtSaveAs_Click(sender As Object, e As EventArgs) Handles ToolStripBtSaveAs.Click - SaveOrSaveAs(True) - End Sub - - 'Send to VECTO Editor - Private Sub ToolStripBtSendTo_Click(sender As Object, e As EventArgs) Handles ToolStripBtSendTo.Click - - If ChangeCheckCancel() Then Exit Sub - - If _vehFile = "" Then - If MsgBox("Save file now?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then - If Not SaveOrSaveAs(True) Then Exit Sub - Else - Exit Sub - End If - End If - - - If Not F_VECTO.Visible Then - JobDir = "" - F_VECTO.Show() - F_VECTO.VECTOnew() - Else - F_VECTO.WindowState = FormWindowState.Normal - End If - - F_VECTO.TbVEH.Text = fFileWoDir(_vehFile, JobDir) - End Sub - - 'Help - Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click - If File.Exists(MyAppPath & "User Manual\help.html") Then - Dim registryString = My.Computer.Registry.ClassesRoot.OpenSubKey("\http\shell\open\command\").GetValue("").ToString - Dim defaultBrowserPath = Regex.Match(registryString, "(\"".*?\"")").Captures(0).ToString - Process.Start(defaultBrowserPath, String.Format("""{0}{1}""", MyAppPath, "User Manual\help.html#vehicle-editor")) - Else - MsgBox("User Manual not found!", MsgBoxStyle.Critical) - End If - End Sub - -#End Region - - 'Save and Close - Private Sub ButOK_Click(sender As Object, e As EventArgs) Handles ButOK.Click - If SaveOrSaveAs(False) Then Close() - End Sub - - 'Cancel - Private Sub ButCancel_Click(sender As Object, e As EventArgs) Handles ButCancel.Click - Close() - End Sub - - 'Save or Save As function = true if file is saved - Private Function SaveOrSaveAs(saveAs As Boolean) As Boolean - If _vehFile = "" Or saveAs Then - If fbVEH.SaveDialog(_vehFile) Then - _vehFile = fbVEH.Files(0) - Else - Return False - End If - End If - Return SaveVehicle(_vehFile) - End Function - - 'New VEH - Private Sub NewVehicle() - If ChangeCheckCancel() Then Exit Sub - - TbMass.Text = "" - TbLoad.Text = "" - TBrdyn.Text = "" - TBcdA.Text = "" - - CbCdMode.SelectedIndex = 0 - TbCdFile.Text = "" - - CbRtType.SelectedIndex = 0 - TbRtRatio.Text = "" - TbRtPath.Text = "" - - CbRtType.SelectedIndex = 0 - TbRtRatio.Text = "" - TbRtPath.Text = "" - - CbCat.SelectedIndex = 0 - - LvRRC.Items.Clear() - - TbMassMass.Text = "" - TbMassExtra.Text = "" - CbAxleConfig.SelectedIndex = 0 - - DeclInit() - - _vehFile = "" - Text = "VEH Editor" - LbStatus.Text = "" - - _changed = False - End Sub - - 'Open VEH - Sub OpenVehicle(file As String) - Dim inertia As Single - - If ChangeCheckCancel() Then Exit Sub - - Dim veh = New cVEH - veh.FilePath = file - - If Not veh.ReadFile Then - MsgBox("Cannot read " & file & "!") - Exit Sub - End If - - If Cfg.DeclMode <> veh.SavedInDeclMode Then - Select Case WrongMode() - Case 1 - Close() - F_MAINForm.RbDecl.Checked = Not F_MAINForm.RbDecl.Checked - F_MAINForm.OpenVectoFile(file) - Case -1 - Exit Sub - End Select - End If - - TbMass.Text = veh.Mass - TbMassExtra.Text = veh.MassExtra - TbLoad.Text = veh.Loading - TBrdyn.Text = veh.rdyn - - CbCdMode.SelectedIndex = CType(veh.CdMode, Integer) - TbCdFile.Text = veh.CdFile.OriginalPath - - CbRtType.SelectedIndex = CType(veh.RtType, Integer) - TbRtRatio.Text = veh.RtRatio - TbRtPath.Text = veh.RtFile.OriginalPath - - cbAngularGearType.SelectedIndex = CType(veh.AngularGearType, Integer) - tbAngularGearRatio.Text = veh.AngularGearRatio - tbAngularGearLossMapPath.Text = veh.AngularGearLossMapFile.OriginalPath - - CbCat.SelectedIndex = CType(veh.VehCat, Integer) - - - LvRRC.Items.Clear() - Dim i = 0 - For Each a0 In veh.Axles - i += 1 - Dim lvi = New ListViewItem - lvi.SubItems(0).Text = i.ToString - - If Cfg.DeclMode Then - lvi.SubItems.Add("-") - Else - lvi.SubItems.Add(a0.Share) - End If - - If a0.TwinTire Then - lvi.SubItems.Add("yes") - Else - lvi.SubItems.Add("no") - End If - lvi.SubItems.Add(a0.RRC) - lvi.SubItems.Add(a0.FzISO) - lvi.SubItems.Add(a0.Wheels) - - If Cfg.DeclMode Then - inertia = Declaration.WheelsInertia(a0.Wheels) - If inertia < 0 Then - lvi.SubItems.Add("-") - Else - lvi.SubItems.Add(inertia) - End If - Else - lvi.SubItems.Add(a0.Inertia) - End If - - LvRRC.Items.Add(lvi) - Next - - TbMassMass.Text = veh.MassMax - TbMassExtra.Text = veh.MassExtra - - CbAxleConfig.SelectedIndex = CType(veh.AxleConf, Integer) - - TBcdA.Text = veh.CdA0 - - DeclInit() - - fbVEH.UpdateHistory(file) - Text = fFILE(file, True) - LbStatus.Text = "" - _vehFile = file - Activate() - - _changed = False - End Sub - - 'Save VEH - Private Function SaveVehicle(file As String) As Boolean - - Dim veh = New cVEH - veh.FilePath = file - - veh.Mass = CSng(fTextboxToNumString(TbMass.Text)) - veh.MassExtra = CSng(fTextboxToNumString(TbMassExtra.Text)) - veh.Loading = CSng(fTextboxToNumString(TbLoad.Text)) - - veh.CdA0 = CSng(fTextboxToNumString(TBcdA.Text)) - veh.CdA02 = veh.CdA0 - - Dim vehC = CType(CbCat.SelectedIndex, tVehCat) - Dim axlC = CType(CbAxleConfig.SelectedIndex, tAxleConf) - Dim maxMass = CSng(fTextboxToNumString(TbMassMass.Text)) - Dim s0 As cSegmentTableEntry = Declaration.SegmentTable.SetRef(vehC, axlC, maxMass) - If Not s0 Is Nothing Then - If s0.HDVclass = "2" Then - ' CdA Addition for T1 Trailer - veh.CdA02 += 1.1 - End If - If s0.HDVclass = "4" OrElse s0.HDVclass = "9" Then - ' CdA Addition for T2 Trailer - veh.CdA02 += 0.6 - End If - End If - - veh.rdyn = CSng(fTextboxToNumString(TBrdyn.Text)) - veh.CdMode = CType(CbCdMode.SelectedIndex, tCdMode) - veh.CdFile.Init(fPATH(file), TbCdFile.Text) - veh.RtType = CType(CbRtType.SelectedIndex, tRtType) - veh.RtRatio = CSng(fTextboxToNumString(TbRtRatio.Text)) - veh.RtFile.Init(fPATH(file), TbRtPath.Text) - - veh.AngularGearType = CType(cbAngularGearType.SelectedIndex, AngularGearType) - veh.AngularGearRatio = CSng(fTextboxToNumString(tbAngularGearRatio.Text)) - veh.AngularGearLossMapFile.Init(fPATH(file), tbAngularGearLossMapPath.Text) - - veh.VehCat = CType(CbCat.SelectedIndex, tVehCat) - - Dim axleShareCheck As Double - For Each LV0 In LvRRC.Items - Dim a0 = New cVEH.cAxle - a0.Share = fTextboxToNumString(LV0.SubItems(1).Text) - axleShareCheck += a0.Share - a0.TwinTire = (LV0.SubItems(2).Text = "yes") - a0.RRC = fTextboxToNumString(LV0.SubItems(3).Text) - a0.FzISO = fTextboxToNumString(LV0.SubItems(4).Text) - a0.Wheels = LV0.SubItems(5).Text - a0.Inertia = fTextboxToNumString(LV0.SubItems(6).Text) - veh.Axles.Add(a0) - Next - - If Not Cfg.DeclMode AndAlso Math.Abs(axleShareCheck - 1) > 0.000001 Then - MsgBox("Relative axle loads must sum up to 1.0. Current value: " & axleShareCheck, MsgBoxStyle.Critical) - Return False - End If - - veh.MassMax = CSng(fTextboxToNumString(TbMassMass.Text)) - veh.MassExtra = CSng(fTextboxToNumString(TbMassExtra.Text)) - veh.AxleConf = CType(CbAxleConfig.SelectedIndex, tAxleConf) - - '--------------------------------------------------------------------------------- - If Not veh.SaveFile Then - MsgBox("Cannot safe to " & file, MsgBoxStyle.Critical) - Return False - End If - - If AutoSendTo Then - If F_VECTO.Visible Then - If UCase(fFileRepl(F_VECTO.TbVEH.Text, JobDir)) <> UCase(file) Then F_VECTO.TbVEH.Text = fFileWoDir(file, JobDir) - F_VECTO.UpdatePic() - End If - End If - - fbVEH.UpdateHistory(file) - Text = fFILE(file, True) - LbStatus.Text = "" - - _changed = False - - Return True - End Function - -#Region "Cd" - - 'Cd Mode Change - Private Sub CbCdMode_SelectedIndexChanged(sender As Object, e As EventArgs) _ - Handles CbCdMode.SelectedIndexChanged - Dim bEnabled As Boolean - - Select Case CType(CbCdMode.SelectedIndex, tCdMode) - - Case tCdMode.CdOfBeta - bEnabled = True - LbCdMode.Text = "Input file: Yaw Angle [°], Cd Scaling Factor [-]" - - Case tCdMode.CdOfVeng - bEnabled = True - LbCdMode.Text = "Input file: Vehicle Speed [km/h], Cd Scaling Factor [-]" - - Case Else ' tCdMode.ConstCd0, tCdMode.CdOfVdecl - bEnabled = False - LbCdMode.Text = "" - - End Select - - If Not Cfg.DeclMode Then - TbCdFile.Enabled = bEnabled - BtCdFileBrowse.Enabled = bEnabled - BtCdFileOpen.Enabled = bEnabled - End If - - Change() - End Sub - - 'Cd File Browse - Private Sub BtCdFileBrowse_Click(sender As Object, e As EventArgs) Handles BtCdFileBrowse.Click - Dim ex As String - - If CbCdMode.SelectedIndex = 1 Then - ex = "vcdv" - Else - ex = "vcdb" - End If - - If fbCDx.OpenDialog(fFileRepl(TbCdFile.Text, fPATH(_vehFile)), False, ex) Then _ - TbCdFile.Text = fFileWoDir(fbCDx.Files(0), fPATH(_vehFile)) - End Sub - - 'Open Cd File - Private Sub BtCdFileOpen_Click(sender As Object, e As EventArgs) Handles BtCdFileOpen.Click - OpenFiles(fFileRepl(TbCdFile.Text, fPATH(_vehFile))) - End Sub - -#End Region - -#Region "Retarder" - - 'Rt Type Change - Private Sub CbRtType_SelectedIndexChanged(sender As Object, e As EventArgs) _ - Handles CbRtType.SelectedIndexChanged - Select Case CbRtType.SelectedIndex - Case 1 'Primary - LbRtRatio.Text = "Ratio to engine speed" - PnRt.Enabled = True - Case 2 'Secondary - LbRtRatio.Text = "Ratio to cardan shaft speed" - TbRtPath.Enabled = True - BtRtBrowse.Enabled = True - PnRt.Enabled = True - Case Else '0 None - LbRtRatio.Text = "Ratio" - PnRt.Enabled = False - End Select - - Change() - End Sub - - 'Rt File Browse - Private Sub BtRtBrowse_Click(sender As Object, e As EventArgs) Handles BtRtBrowse.Click - If fbRLM.OpenDialog(fFileRepl(TbRtPath.Text, fPATH(_vehFile))) Then _ - TbRtPath.Text = fFileWoDir(fbRLM.Files(0), fPATH(_vehFile)) - End Sub - -#End Region - -#Region "Track changes" - - Private Sub Change() - If Not _changed Then - LbStatus.Text = "Unsaved changes in current file" - _changed = True - End If - End Sub - - ' "Save changes? "... Returns True if user aborts - Private Function ChangeCheckCancel() As Boolean - +' Copyright 2014 European Union. +' Licensed under the EUPL (the 'Licence'); +' +' * You may not use this work except in compliance with the Licence. +' * You may obtain a copy of the Licence at: http://ec.europa.eu/idabc/eupl +' * Unless required by applicable law or agreed to in writing, +' software distributed under the Licence is distributed on an "AS IS" basis, +' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +' +' See the LICENSE.txt for the specific language governing permissions and limitations. +Option Infer On + +Imports System.IO +Imports System.Linq +Imports System.Text.RegularExpressions +Imports TUGraz.VectoCommon.Models + +''' <summary> +''' Vehicle Editor. +''' </summary> +Public Class F_VEH + Private _axlDlog As F_VEH_Axle + Private _hdVclass As String + Private _vehFile As String + Private _changed As Boolean = False + Private _cmFiles As String() + + Public AutoSendTo As Boolean = False + Public JobDir As String = "" + + 'Close - Check for unsaved changes + Private Sub F_VEH_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing + If e.CloseReason <> CloseReason.ApplicationExitCall And e.CloseReason <> CloseReason.WindowsShutDown Then + e.Cancel = ChangeCheckCancel() + End If + End Sub + + 'Initialise form + Private Sub F05_VEH_Load(sender As Object, e As EventArgs) Handles MyBase.Load + TbLoadingMax.Text = "-" + PnLoad.Enabled = Not Cfg.DeclMode + ButAxlAdd.Enabled = Not Cfg.DeclMode + ButAxlRem.Enabled = Not Cfg.DeclMode + CbCdMode.Enabled = Not Cfg.DeclMode + PnWheelDiam.Enabled = Not Cfg.DeclMode + gbPTO.Enabled = Not Cfg.DeclMode + + _axlDlog = New F_VEH_Axle + + cbPTOType.Items.AddRange(PtoTypeStrings.Values.Cast(Of Object).ToArray()) + + _changed = False + + NewVehicle() + End Sub + + 'Set HDVclasss + Private Sub SetHdVclass() + Dim vehC = CType(CbCat.SelectedIndex, tVehCat) + Dim axlC = CType(CbAxleConfig.SelectedIndex, tAxleConf) + Dim maxMass = CSng(fTextboxToNumString(TbMassMass.Text)) + + Dim s0 As cSegmentTableEntry = Declaration.SegmentTable.SetRef(vehC, axlC, maxMass) + _hdVclass = "-" + If Not s0 Is Nothing Then + _hdVclass = s0.HDVclass + End If + + TbHDVclass.Text = _hdVclass + PicVehicle.Image = Image.FromFile(cDeclaration.ConvPicPath(_hdVclass, False)) + End Sub + + + 'Set generic values for Declaration mode + Private Sub DeclInit() + If Not Cfg.DeclMode Then Exit Sub + + Dim vehC = CType(CbCat.SelectedIndex, tVehCat) + Dim axlC = CType(CbAxleConfig.SelectedIndex, tAxleConf) + Dim maxMass = CSng(fTextboxToNumString(TbMassMass.Text)) + Dim s0 = Declaration.SegmentTable.SetRef(vehC, axlC, maxMass) + + If Not s0 Is Nothing Then + _hdVclass = s0.HDVclass + Dim axleCount As Short = s0.AxleShares(s0.Missions(0)).Count + Dim i0 = LvRRC.Items.Count + + If axleCount > i0 Then + For i = 1 To axleCount - LvRRC.Items.Count + Dim lvi = New ListViewItem + lvi.SubItems(0).Text = (i + i0).ToString + lvi.SubItems.Add("-") + lvi.SubItems.Add("no") + lvi.SubItems.Add("") + lvi.SubItems.Add("") + lvi.SubItems.Add("-") + lvi.SubItems.Add("-") + LvRRC.Items.Add(lvi) + Next + + ElseIf axleCount < LvRRC.Items.Count Then + For i = axleCount To LvRRC.Items.Count - 1 + LvRRC.Items.RemoveAt(LvRRC.Items.Count - 1) + Next + End If + + PnAll.Enabled = True + + Else + PnAll.Enabled = False + _hdVclass = "-" + End If + + TbMassExtra.Text = "-" + TbLoad.Text = "-" + CbCdMode.SelectedIndex = CType(tCdMode.CdOfVdecl, Integer) + TbCdFile.Text = "" + + Dim rdyn As Single + rdyn = -1 + + If rdyn < 0 Then + TBrdyn.Text = "-" + Else + TBrdyn.Text = rdyn + End If + End Sub + + +#Region "Toolbar" + + 'New + Private Sub ToolStripBtNew_Click(sender As Object, e As EventArgs) Handles ToolStripBtNew.Click + NewVehicle() + End Sub + + 'Open + Private Sub ToolStripBtOpen_Click(sender As Object, e As EventArgs) Handles ToolStripBtOpen.Click + If fbVEH.OpenDialog(_vehFile) Then OpenVehicle(fbVEH.Files(0)) + End Sub + + 'Save + Private Sub ToolStripBtSave_Click(sender As Object, e As EventArgs) Handles ToolStripBtSave.Click + SaveOrSaveAs(False) + End Sub + + 'Save As + Private Sub ToolStripBtSaveAs_Click(sender As Object, e As EventArgs) Handles ToolStripBtSaveAs.Click + SaveOrSaveAs(True) + End Sub + + 'Send to VECTO Editor + Private Sub ToolStripBtSendTo_Click(sender As Object, e As EventArgs) Handles ToolStripBtSendTo.Click + + If ChangeCheckCancel() Then Exit Sub + + If _vehFile = "" Then + If MsgBox("Save file now?", MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then + If Not SaveOrSaveAs(True) Then Exit Sub + Else + Exit Sub + End If + End If + + + If Not F_VECTO.Visible Then + JobDir = "" + F_VECTO.Show() + F_VECTO.VECTOnew() + Else + F_VECTO.WindowState = FormWindowState.Normal + End If + + F_VECTO.TbVEH.Text = fFileWoDir(_vehFile, JobDir) + End Sub + + 'Help + Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click + If File.Exists(MyAppPath & "User Manual\help.html") Then + Dim registryString = My.Computer.Registry.ClassesRoot.OpenSubKey("\http\shell\open\command\").GetValue("").ToString + Dim defaultBrowserPath = Regex.Match(registryString, "(\"".*?\"")").Captures(0).ToString + Process.Start(defaultBrowserPath, String.Format("""{0}{1}""", MyAppPath, "User Manual\help.html#vehicle-editor")) + Else + MsgBox("User Manual not found!", MsgBoxStyle.Critical) + End If + End Sub + +#End Region + + 'Save and Close + Private Sub ButOK_Click(sender As Object, e As EventArgs) Handles ButOK.Click + If SaveOrSaveAs(False) Then Close() + End Sub + + 'Cancel + Private Sub ButCancel_Click(sender As Object, e As EventArgs) Handles ButCancel.Click + Close() + End Sub + + 'Save or Save As function = true if file is saved + Private Function SaveOrSaveAs(saveAs As Boolean) As Boolean + If _vehFile = "" Or saveAs Then + If fbVEH.SaveDialog(_vehFile) Then + _vehFile = fbVEH.Files(0) + Else + Return False + End If + End If + Return SaveVehicle(_vehFile) + End Function + + 'New VEH + Private Sub NewVehicle() + If ChangeCheckCancel() Then Exit Sub + + TbMass.Text = "" + TbLoad.Text = "" + TBrdyn.Text = "" + TBcdA.Text = "" + + CbCdMode.SelectedIndex = 0 + TbCdFile.Text = "" + + CbRtType.SelectedIndex = 0 + TbRtRatio.Text = "" + TbRtPath.Text = "" + + CbRtType.SelectedIndex = 0 + TbRtRatio.Text = "" + TbRtPath.Text = "" + + CbCat.SelectedIndex = 0 + + LvRRC.Items.Clear() + + TbMassMass.Text = "" + TbMassExtra.Text = "" + CbAxleConfig.SelectedIndex = 0 + + cbPTOType.SelectedIndex = 0 + tbPTOLossMap.Text = "" + + DeclInit() + + _vehFile = "" + Text = "VEH Editor" + LbStatus.Text = "" + + _changed = False + End Sub + + 'Open VEH + Sub OpenVehicle(file As String) + Dim inertia As Single + + If ChangeCheckCancel() Then Exit Sub + + Dim veh = New cVEH + veh.FilePath = file + + If Not veh.ReadFile Then + MsgBox("Cannot read " & file & "!") + Exit Sub + End If + + If Cfg.DeclMode <> veh.SavedInDeclMode Then + Select Case WrongMode() + Case 1 + Close() + F_MAINForm.RbDecl.Checked = Not F_MAINForm.RbDecl.Checked + F_MAINForm.OpenVectoFile(file) + Case -1 + Exit Sub + End Select + End If + + TbMass.Text = veh.Mass + TbMassExtra.Text = veh.MassExtra + TbLoad.Text = veh.Loading + TBrdyn.Text = veh.rdyn + + CbCdMode.SelectedIndex = CType(veh.CdMode, Integer) + TbCdFile.Text = veh.CdFile.OriginalPath + + CbRtType.SelectedIndex = CType(veh.RtType, Integer) + TbRtRatio.Text = veh.RtRatio + TbRtPath.Text = veh.RtFile.OriginalPath + + cbAngularGearType.SelectedIndex = CType(veh.AngularGearType, Integer) + tbAngularGearRatio.Text = veh.AngularGearRatio + tbAngularGearLossMapPath.Text = veh.AngularGearLossMapFile.OriginalPath + + CbCat.SelectedIndex = CType(veh.VehCat, Integer) + + + LvRRC.Items.Clear() + Dim i = 0 + For Each a0 In veh.Axles + i += 1 + Dim lvi = New ListViewItem + lvi.SubItems(0).Text = i.ToString + + If Cfg.DeclMode Then + lvi.SubItems.Add("-") + Else + lvi.SubItems.Add(a0.Share) + End If + + If a0.TwinTire Then + lvi.SubItems.Add("yes") + Else + lvi.SubItems.Add("no") + End If + lvi.SubItems.Add(a0.RRC) + lvi.SubItems.Add(a0.FzISO) + lvi.SubItems.Add(a0.Wheels) + + If Cfg.DeclMode Then + inertia = Declaration.WheelsInertia(a0.Wheels) + If inertia < 0 Then + lvi.SubItems.Add("-") + Else + lvi.SubItems.Add(inertia) + End If + Else + lvi.SubItems.Add(a0.Inertia) + End If + + LvRRC.Items.Add(lvi) + Next + + TbMassMass.Text = veh.MassMax + TbMassExtra.Text = veh.MassExtra + + CbAxleConfig.SelectedIndex = CType(veh.AxleConf, Integer) + + TBcdA.Text = veh.CdA0 + + cbPTOType.SelectedIndex = CType(veh.PTOType, Integer) + tbPTOLossMap.Text = veh.PTOLossMap.OriginalPath + + DeclInit() + + fbVEH.UpdateHistory(file) + Text = fFILE(file, True) + LbStatus.Text = "" + _vehFile = file + Activate() + + _changed = False + End Sub + + 'Save VEH + Private Function SaveVehicle(file As String) As Boolean + + Dim veh = New cVEH + veh.FilePath = file + + veh.Mass = CSng(fTextboxToNumString(TbMass.Text)) + veh.MassExtra = CSng(fTextboxToNumString(TbMassExtra.Text)) + veh.Loading = CSng(fTextboxToNumString(TbLoad.Text)) + + veh.CdA0 = CSng(fTextboxToNumString(TBcdA.Text)) + veh.CdA02 = veh.CdA0 + + Dim vehC = CType(CbCat.SelectedIndex, tVehCat) + Dim axlC = CType(CbAxleConfig.SelectedIndex, tAxleConf) + Dim maxMass = CSng(fTextboxToNumString(TbMassMass.Text)) + Dim s0 As cSegmentTableEntry = Declaration.SegmentTable.SetRef(vehC, axlC, maxMass) + If Not s0 Is Nothing Then + If s0.HDVclass = "2" Then + ' CdA Addition for T1 Trailer + veh.CdA02 += 1.1 + End If + If s0.HDVclass = "4" OrElse s0.HDVclass = "9" Then + ' CdA Addition for T2 Trailer + veh.CdA02 += 0.6 + End If + End If + + veh.rdyn = CSng(fTextboxToNumString(TBrdyn.Text)) + veh.CdMode = CType(CbCdMode.SelectedIndex, tCdMode) + veh.CdFile.Init(fPATH(file), TbCdFile.Text) + veh.RtType = CType(CbRtType.SelectedIndex, tRtType) + veh.RtRatio = CSng(fTextboxToNumString(TbRtRatio.Text)) + veh.RtFile.Init(fPATH(file), TbRtPath.Text) + + veh.AngularGearType = CType(cbAngularGearType.SelectedIndex, AngularGearType) + veh.AngularGearRatio = CSng(fTextboxToNumString(tbAngularGearRatio.Text)) + veh.AngularGearLossMapFile.Init(fPATH(file), tbAngularGearLossMapPath.Text) + + veh.VehCat = CType(CbCat.SelectedIndex, tVehCat) + + Dim axleShareCheck As Double + For Each LV0 In LvRRC.Items + Dim a0 = New cVEH.cAxle + a0.Share = fTextboxToNumString(LV0.SubItems(1).Text) + axleShareCheck += a0.Share + a0.TwinTire = (LV0.SubItems(2).Text = "yes") + a0.RRC = fTextboxToNumString(LV0.SubItems(3).Text) + a0.FzISO = fTextboxToNumString(LV0.SubItems(4).Text) + a0.Wheels = LV0.SubItems(5).Text + a0.Inertia = fTextboxToNumString(LV0.SubItems(6).Text) + veh.Axles.Add(a0) + Next + + veh.PTOType = CType(cbPTOType.SelectedIndex, tPTOType) + veh.PTOLossMap.Init(fPATH(file), tbPTOLossMap.Text) + + If Not Cfg.DeclMode AndAlso Math.Abs(axleShareCheck - 1) > 0.000001 Then + MsgBox("Relative axle loads must sum up to 1.0. Current value: " & axleShareCheck, MsgBoxStyle.Critical) + Return False + End If + + veh.MassMax = CSng(fTextboxToNumString(TbMassMass.Text)) + veh.MassExtra = CSng(fTextboxToNumString(TbMassExtra.Text)) + veh.AxleConf = CType(CbAxleConfig.SelectedIndex, tAxleConf) + + '--------------------------------------------------------------------------------- + If Not veh.SaveFile Then + MsgBox("Cannot safe to " & file, MsgBoxStyle.Critical) + Return False + End If + + If AutoSendTo Then + If F_VECTO.Visible Then + If UCase(fFileRepl(F_VECTO.TbVEH.Text, JobDir)) <> UCase(file) Then F_VECTO.TbVEH.Text = fFileWoDir(file, JobDir) + F_VECTO.UpdatePic() + End If + End If + + fbVEH.UpdateHistory(file) + Text = fFILE(file, True) + LbStatus.Text = "" + + _changed = False + + Return True + End Function + +#Region "Cd" + + 'Cd Mode Change + Private Sub CbCdMode_SelectedIndexChanged(sender As Object, e As EventArgs) _ + Handles CbCdMode.SelectedIndexChanged + Dim bEnabled As Boolean + + Select Case CType(CbCdMode.SelectedIndex, tCdMode) + + Case tCdMode.CdOfBeta + bEnabled = True + LbCdMode.Text = "Input file: Yaw Angle [°], Cd Scaling Factor [-]" + + Case tCdMode.CdOfVeng + bEnabled = True + LbCdMode.Text = "Input file: Vehicle Speed [km/h], Cd Scaling Factor [-]" + + Case Else ' tCdMode.ConstCd0, tCdMode.CdOfVdecl + bEnabled = False + LbCdMode.Text = "" + + End Select + + If Not Cfg.DeclMode Then + TbCdFile.Enabled = bEnabled + BtCdFileBrowse.Enabled = bEnabled + BtCdFileOpen.Enabled = bEnabled + End If + + Change() + End Sub + + 'Cd File Browse + Private Sub BtCdFileBrowse_Click(sender As Object, e As EventArgs) Handles BtCdFileBrowse.Click + Dim ex As String + + If CbCdMode.SelectedIndex = 1 Then + ex = "vcdv" + Else + ex = "vcdb" + End If + + If fbCDx.OpenDialog(fFileRepl(TbCdFile.Text, fPATH(_vehFile)), False, ex) Then _ + TbCdFile.Text = fFileWoDir(fbCDx.Files(0), fPATH(_vehFile)) + End Sub + + 'Open Cd File + Private Sub BtCdFileOpen_Click(sender As Object, e As EventArgs) Handles BtCdFileOpen.Click + OpenFiles(fFileRepl(TbCdFile.Text, fPATH(_vehFile))) + End Sub + +#End Region + +#Region "Retarder" + + 'Rt Type Change + Private Sub CbRtType_SelectedIndexChanged(sender As Object, e As EventArgs) _ + Handles CbRtType.SelectedIndexChanged + Select Case CbRtType.SelectedIndex + Case 1 'Primary + LbRtRatio.Text = "Ratio to engine speed" + PnRt.Enabled = True + Case 2 'Secondary + LbRtRatio.Text = "Ratio to cardan shaft speed" + TbRtPath.Enabled = True + BtRtBrowse.Enabled = True + PnRt.Enabled = True + Case Else '0 None + LbRtRatio.Text = "Ratio" + PnRt.Enabled = False + End Select + + Change() + End Sub + + 'Rt File Browse + Private Sub BtRtBrowse_Click(sender As Object, e As EventArgs) Handles BtRtBrowse.Click + If fbRLM.OpenDialog(fFileRepl(TbRtPath.Text, fPATH(_vehFile))) Then _ + TbRtPath.Text = fFileWoDir(fbRLM.Files(0), fPATH(_vehFile)) + End Sub + +#End Region + +#Region "Track changes" + + Private Sub Change() + If Not _changed Then + LbStatus.Text = "Unsaved changes in current file" + _changed = True + End If + End Sub + + ' "Save changes? "... Returns True if user aborts + Private Function ChangeCheckCancel() As Boolean + If _changed Then - Select Case MsgBox("Save changes ?", MsgBoxStyle.YesNoCancel) - Case MsgBoxResult.Yes - Return Not SaveOrSaveAs(False) - Case MsgBoxResult.Cancel - Return True - Case Else 'MsgBoxResult.No - _changed = False - Return False - End Select + Select Case MsgBox("Save changes ?", MsgBoxStyle.YesNoCancel) + Case MsgBoxResult.Yes + Return Not SaveOrSaveAs(False) + Case MsgBoxResult.Cancel + Return True + Case Else 'MsgBoxResult.No + _changed = False + Return False + End Select Else Return False End If - End Function - - Private Sub TBmass_TextChanged(sender As Object, e As EventArgs) Handles TbMass.TextChanged - SetMaxLoad() - Change() - End Sub - - Private Sub CbRim_SelectedIndexChanged(sender As Object, e As EventArgs) - Change() - DeclInit() - End Sub - - Private Sub TBcw_TextChanged(sender As Object, e As EventArgs) _ - Handles TbLoad.TextChanged, TBrdyn.TextChanged, TBcdA.TextChanged, TbCdFile.TextChanged, TbRtRatio.TextChanged, - cbAngularGearType.SelectedIndexChanged, TbRtPath.TextChanged, tbAngularGearLossMapPath.TextChanged, - tbAngularGearRatio.TextChanged - Change() - End Sub - - Private Sub CbCat_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CbCat.SelectedIndexChanged - Change() - SetHdVclass() - DeclInit() - End Sub - - Private Sub TbMassTrailer_TextChanged(sender As Object, e As EventArgs) Handles TbMassExtra.TextChanged - SetMaxLoad() - Change() - End Sub - - Private Sub TbMassMax_TextChanged(sender As Object, e As EventArgs) Handles TbMassMass.TextChanged - SetMaxLoad() - Change() - SetHdVclass() - DeclInit() - End Sub - - Private Sub CbAxleConfig_SelectedIndexChanged(sender As Object, e As EventArgs) _ - Handles CbAxleConfig.SelectedIndexChanged - Change() - SetHdVclass() - DeclInit() - End Sub - -#End Region - - 'Update maximum load when truck/trailer mass was changed - Private Sub SetMaxLoad() - If Not Cfg.DeclMode Then - If IsNumeric(TbMass.Text) And IsNumeric(TbMassExtra.Text) And IsNumeric(TbMassMass.Text) Then - TbLoadingMax.Text = CStr(CSng(TbMassMass.Text) * 1000 - CSng(TbMass.Text) - CSng(TbMassExtra.Text)) - Else - TbLoadingMax.Text = "" - End If - End If - End Sub - -#Region "Axle Configuration" - - Private Sub ButAxlAdd_Click(sender As Object, e As EventArgs) Handles ButAxlAdd.Click - Dim lv0 As ListViewItem - - _axlDlog.Clear() - - If _axlDlog.ShowDialog = DialogResult.OK Then - lv0 = New ListViewItem - - lv0.SubItems(0).Text = LvRRC.Items.Count + 1 - lv0.SubItems.Add(Trim(_axlDlog.TbAxleShare.Text)) - If _axlDlog.CbTwinT.Checked Then - lv0.SubItems.Add("yes") - Else - lv0.SubItems.Add("no") - End If - lv0.SubItems.Add(Trim(_axlDlog.TbRRC.Text)) - lv0.SubItems.Add(Trim(_axlDlog.TbFzISO.Text)) - lv0.SubItems.Add(Trim(_axlDlog.CbWheels.Text)) - lv0.SubItems.Add(Trim(_axlDlog.TbI_wheels.Text)) - - LvRRC.Items.Add(lv0) - - Change() - DeclInit() - - End If - End Sub - - Private Sub ButAxlRem_Click(sender As Object, e As EventArgs) Handles ButAxlRem.Click - RemoveAxleItem() - End Sub - - Private Sub LvAxle_DoubleClick(sender As Object, e As EventArgs) Handles LvRRC.DoubleClick - EditAxleItem() - End Sub - - Private Sub LvAxle_KeyDown(sender As Object, e As KeyEventArgs) Handles LvRRC.KeyDown - Select Case e.KeyCode - Case Keys.Delete, Keys.Back - If Not Cfg.DeclMode Then RemoveAxleItem() - Case Keys.Enter - EditAxleItem() - End Select - End Sub - - Private Sub RemoveAxleItem() - Dim lv0 As ListViewItem - Dim i As Integer - - If LvRRC.SelectedItems.Count = 0 Then - If LvRRC.Items.Count = 0 Then - Exit Sub - Else - LvRRC.Items(LvRRC.Items.Count - 1).Selected = True - End If - End If - - LvRRC.SelectedItems(0).Remove() - - If LvRRC.Items.Count > 0 Then - - i = 0 - For Each lv0 In LvRRC.Items - i += 1 - lv0.SubItems(0).Text = i.ToString - Next - - LvRRC.Items(LvRRC.Items.Count - 1).Selected = True - LvRRC.Focus() - End If - - Change() - End Sub - - Private Sub EditAxleItem() - If LvRRC.SelectedItems.Count = 0 Then Exit Sub - - Dim lv0 = LvRRC.SelectedItems(0) - - _axlDlog.TbAxleShare.Text = lv0.SubItems(1).Text - _axlDlog.CbTwinT.Checked = (lv0.SubItems(2).Text = "yes") - _axlDlog.TbRRC.Text = lv0.SubItems(3).Text - _axlDlog.TbFzISO.Text = lv0.SubItems(4).Text - _axlDlog.TbI_wheels.Text = lv0.SubItems(6).Text - _axlDlog.CbWheels.Text = lv0.SubItems(5).Text - - If _axlDlog.ShowDialog = DialogResult.OK Then - lv0.SubItems(1).Text = _axlDlog.TbAxleShare.Text - If _axlDlog.CbTwinT.Checked Then - lv0.SubItems(2).Text = "yes" - Else - lv0.SubItems(2).Text = "no" - End If - lv0.SubItems(3).Text = _axlDlog.TbRRC.Text - lv0.SubItems(4).Text = _axlDlog.TbFzISO.Text - lv0.SubItems(5).Text = _axlDlog.CbWheels.Text - lv0.SubItems(6).Text = _axlDlog.TbI_wheels.Text - - Change() - DeclInit() - End If - End Sub - -#End Region - -#Region "Open File Context Menu" - - - Private Sub OpenFiles(ParamArray files() As String) - If files.Length = 0 Then Exit Sub - - _cmFiles = files - OpenWithToolStripMenuItem.Text = "Open with " & Cfg.OpenCmdName - CmOpenFile.Show(Cursor.Position) - End Sub - - Private Sub OpenWithToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles OpenWithToolStripMenuItem.Click - If Not FileOpenAlt(_cmFiles(0)) Then MsgBox("Failed to open file!") - End Sub - - Private Sub ShowInFolderToolStripMenuItem_Click(sender As Object, e As EventArgs) _ - Handles ShowInFolderToolStripMenuItem.Click - If File.Exists(_cmFiles(0)) Then - Try - Process.Start("explorer", "/select,""" & _cmFiles(0) & "") - Catch ex As Exception - MsgBox("Failed to open file!") - End Try - Else - MsgBox("File not found!") + End Function + + Private Sub TBmass_TextChanged(sender As Object, e As EventArgs) Handles TbMass.TextChanged + SetMaxLoad() + Change() + End Sub + + Private Sub TBcw_TextChanged(sender As Object, e As EventArgs) _ + Handles TbLoad.TextChanged, TBrdyn.TextChanged, TBcdA.TextChanged, TbCdFile.TextChanged, TbRtRatio.TextChanged, + cbAngularGearType.SelectedIndexChanged, TbRtPath.TextChanged, tbAngularGearLossMapPath.TextChanged, + tbAngularGearRatio.TextChanged, tbPTOLossMap.TextChanged + Change() + End Sub + + Private Sub CbCat_SelectedIndexChanged(sender As Object, e As EventArgs) Handles CbCat.SelectedIndexChanged + Change() + SetHdVclass() + DeclInit() + End Sub + + Private Sub TbMassTrailer_TextChanged(sender As Object, e As EventArgs) Handles TbMassExtra.TextChanged + SetMaxLoad() + Change() + End Sub + + Private Sub TbMassMax_TextChanged(sender As Object, e As EventArgs) Handles TbMassMass.TextChanged + SetMaxLoad() + Change() + SetHdVclass() + DeclInit() + End Sub + + Private Sub CbAxleConfig_SelectedIndexChanged(sender As Object, e As EventArgs) _ + Handles CbAxleConfig.SelectedIndexChanged + Change() + SetHdVclass() + DeclInit() + End Sub + +#End Region + + 'Update maximum load when truck/trailer mass was changed + Private Sub SetMaxLoad() + If Not Cfg.DeclMode Then + If IsNumeric(TbMass.Text) And IsNumeric(TbMassExtra.Text) And IsNumeric(TbMassMass.Text) Then + TbLoadingMax.Text = CStr(CSng(TbMassMass.Text) * 1000 - CSng(TbMass.Text) - CSng(TbMassExtra.Text)) + Else + TbLoadingMax.Text = "" + End If + End If + End Sub + +#Region "Axle Configuration" + + Private Sub ButAxlAdd_Click(sender As Object, e As EventArgs) Handles ButAxlAdd.Click + Dim lv0 As ListViewItem + + _axlDlog.Clear() + + If _axlDlog.ShowDialog = DialogResult.OK Then + lv0 = New ListViewItem + + lv0.SubItems(0).Text = LvRRC.Items.Count + 1 + lv0.SubItems.Add(Trim(_axlDlog.TbAxleShare.Text)) + If _axlDlog.CbTwinT.Checked Then + lv0.SubItems.Add("yes") + Else + lv0.SubItems.Add("no") + End If + lv0.SubItems.Add(Trim(_axlDlog.TbRRC.Text)) + lv0.SubItems.Add(Trim(_axlDlog.TbFzISO.Text)) + lv0.SubItems.Add(Trim(_axlDlog.CbWheels.Text)) + lv0.SubItems.Add(Trim(_axlDlog.TbI_wheels.Text)) + + LvRRC.Items.Add(lv0) + + Change() + DeclInit() + + End If + End Sub + + Private Sub ButAxlRem_Click(sender As Object, e As EventArgs) Handles ButAxlRem.Click + RemoveAxleItem() + End Sub + + Private Sub LvAxle_DoubleClick(sender As Object, e As EventArgs) Handles LvRRC.DoubleClick + EditAxleItem() + End Sub + + Private Sub LvAxle_KeyDown(sender As Object, e As KeyEventArgs) Handles LvRRC.KeyDown + Select Case e.KeyCode + Case Keys.Delete, Keys.Back + If Not Cfg.DeclMode Then RemoveAxleItem() + Case Keys.Enter + EditAxleItem() + End Select + End Sub + + Private Sub RemoveAxleItem() + Dim lv0 As ListViewItem + Dim i As Integer + + If LvRRC.SelectedItems.Count = 0 Then + If LvRRC.Items.Count = 0 Then + Exit Sub + Else + LvRRC.Items(LvRRC.Items.Count - 1).Selected = True + End If + End If + + LvRRC.SelectedItems(0).Remove() + + If LvRRC.Items.Count > 0 Then + + i = 0 + For Each lv0 In LvRRC.Items + i += 1 + lv0.SubItems(0).Text = i.ToString + Next + + LvRRC.Items(LvRRC.Items.Count - 1).Selected = True + LvRRC.Focus() + End If + + Change() + End Sub + + Private Sub EditAxleItem() + If LvRRC.SelectedItems.Count = 0 Then Exit Sub + + Dim lv0 = LvRRC.SelectedItems(0) + + _axlDlog.TbAxleShare.Text = lv0.SubItems(1).Text + _axlDlog.CbTwinT.Checked = (lv0.SubItems(2).Text = "yes") + _axlDlog.TbRRC.Text = lv0.SubItems(3).Text + _axlDlog.TbFzISO.Text = lv0.SubItems(4).Text + _axlDlog.TbI_wheels.Text = lv0.SubItems(6).Text + _axlDlog.CbWheels.Text = lv0.SubItems(5).Text + + If _axlDlog.ShowDialog = DialogResult.OK Then + lv0.SubItems(1).Text = _axlDlog.TbAxleShare.Text + If _axlDlog.CbTwinT.Checked Then + lv0.SubItems(2).Text = "yes" + Else + lv0.SubItems(2).Text = "no" + End If + lv0.SubItems(3).Text = _axlDlog.TbRRC.Text + lv0.SubItems(4).Text = _axlDlog.TbFzISO.Text + lv0.SubItems(5).Text = _axlDlog.CbWheels.Text + lv0.SubItems(6).Text = _axlDlog.TbI_wheels.Text + + Change() + DeclInit() + End If + End Sub + +#End Region + +#Region "Open File Context Menu" + + + Private Sub OpenFiles(ParamArray files() As String) + If files.Length = 0 Then Exit Sub + + _cmFiles = files + OpenWithToolStripMenuItem.Text = "Open with " & Cfg.OpenCmdName + CmOpenFile.Show(Cursor.Position) + End Sub + + Private Sub OpenWithToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles OpenWithToolStripMenuItem.Click + If Not FileOpenAlt(_cmFiles(0)) Then MsgBox("Failed to open file!") + End Sub + + Private Sub ShowInFolderToolStripMenuItem_Click(sender As Object, e As EventArgs) _ + Handles ShowInFolderToolStripMenuItem.Click + If File.Exists(_cmFiles(0)) Then + Try + Process.Start("explorer", "/select,""" & _cmFiles(0) & "") + Catch ex As Exception + MsgBox("Failed to open file!") + End Try + Else + MsgBox("File not found!") + End If + End Sub + +#End Region + + +#Region "Angular Gear" + + Private Sub cbAngularGearType_SelectedIndexChanged(sender As Object, e As EventArgs) _ + Handles cbAngularGearType.SelectedIndexChanged + Select Case cbAngularGearType.SelectedIndex + Case 1 'Separate Angular Gear + pnAngularGearFields.Enabled = True + tbAngularGearRatio.Text = "1.0" + Case Else 'Losses included in Transmission, None + tbAngularGearRatio.Text = "" + tbAngularGearLossMapPath.Text = "" + pnAngularGearFields.Enabled = False + End Select + Change() + End Sub + + Private Sub btAngularGearLossMapBrowse_Click(sender As Object, e As EventArgs) Handles btAngularGearLossMapBrowse.Click + If fbTLM.OpenDialog(fFileRepl(TbRtPath.Text, fPATH(_vehFile))) Then _ + tbAngularGearLossMapPath.Text = fFileWoDir(fbTLM.Files(0), fPATH(_vehFile)) + End Sub + +#End Region + + Private Sub cbPTOType_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbPTOType.SelectedIndexChanged + + If (cbPTOType.SelectedIndex = 0) Then + pnPTO.Enabled = False + tbPTOLossMap.Text = "" + Else + pnPTO.Enabled = True + End If + + Change() + End Sub + + Private Sub btPTOLossMapBrowse_Click(sender As Object, e As EventArgs) Handles btPTOLossMapBrowse.Click + If fbPTOLM.OpenDialog(fFileRepl(tbPTOLossMap.Text, fPATH(_vehFile))) Then + tbPTOLossMap.Text = fFileWoDir(fbPTOLM.Files(0), fPATH(_vehFile)) End If End Sub - -#End Region - - -#Region "Angular Gear" - - Private Sub cbAngularGearType_SelectedIndexChanged(sender As Object, e As EventArgs) _ - Handles cbAngularGearType.SelectedIndexChanged - Select Case cbAngularGearType.SelectedIndex - Case 1 'Separate Angular Gear - pnAngularGearFields.Enabled = True - tbAngularGearRatio.Text = "1.0" - Case Else 'Losses included in Transmission, None - tbAngularGearRatio.Text = "" - tbAngularGearLossMapPath.Text = "" - pnAngularGearFields.Enabled = False - End Select - Change() - End Sub - - Private Sub btAngularGearLossMapBrowse_Click(sender As Object, e As EventArgs) Handles btAngularGearLossMapBrowse.Click - If fbTLM.OpenDialog(fFileRepl(TbRtPath.Text, fPATH(_vehFile))) Then _ - tbAngularGearLossMapPath.Text = fFileWoDir(fbTLM.Files(0), fPATH(_vehFile)) - End Sub - -#End Region -End Class - +End Class + diff --git a/VECTO/Input Files/cVEH.vb b/VECTO/Input Files/cVEH.vb index 456aeb9cbf53d2d22662de0d3d1d2e8114a80d37..e346fac8912329e38f6f4b3150f544366df0f383 100644 --- a/VECTO/Input Files/cVEH.vb +++ b/VECTO/Input Files/cVEH.vb @@ -62,6 +62,8 @@ Public Class cVEH Public AngularGearRatio As Single Public AngularGearLossMapFile As cSubPath + Public PTOType As tPTOType + Public PTOLossMap As cSubPath Public Class cAxle Public RRC As Single @@ -105,6 +107,7 @@ Public Class cVEH RtnU = New List(Of Single) RtM = New List(Of Single) Axles = New List(Of cAxle) + PTOLossMap = New cSubPath() SetDefault() End Sub @@ -129,12 +132,14 @@ Public Class cVEH RtnU.Clear() RtM.Clear() RtFile.Clear() - AngularGearLossMapFile.Clear() AngularGearType = AngularGearType.None AngularGearLossMapFile.Clear() AngularGearRatio = 1 + PTOType = tPTOType.None + PTOLossMap.Clear() + Axles.Clear() VehCat = tVehCat.Undef MassMax = 0 @@ -263,6 +268,23 @@ Public Class cVEH Axles.Add(axle) Next + PTOType = tPTOType.None + If Not body("PTO") Is Nothing Then + Dim ptoStr = body("PTO")("Type") + + If String.IsNullOrWhiteSpace(ptoStr) Then + PTOType = tPTOType.None + WorkerMsg(tMsgID.Normal, "PTO automatically updated to '" + PTOType + "'", msgSrc) + Else + PTOType = GetPTOType(ptoStr) + End If + + End If + + If Not PTOType = tPTOType.None Then + PTOLossMap.Init(MyPath, body("PTO")("LossMap")) + End If + Catch ex As Exception If showMsg Then WorkerMsg(tMsgID.Err, "Failed to read Vehicle file! " & ex.Message, msgSrc) Return False @@ -304,6 +326,9 @@ Public Class cVEH {"Type", AngularGearType.ToString()}, {"Ratio", AngularGearRatio}, {"LossMap", AngularGearLossMapFile.PathOrDummy}}}, + {"PTO", New Dictionary(Of String, Object) From { + {"Type", GetPTOString(PTOType)}, + {"LossMap", PTOLossMap.PathOrDummy}}}, {"AxleConfig", New Dictionary(Of String, Object) From { {"Type", ConvAxleConf(AxleConf)}, {"Axles", (From axle In Axles Select New Dictionary(Of String, Object) From { diff --git a/VECTO/VECTO_Types.vb b/VECTO/VECTO_Types.vb index bc848ef2b4444c664fae04091743bcd4c78e5eba..851c327bbe38d4015618be9477ef961277ff6f37 100644 --- a/VECTO/VECTO_Types.vb +++ b/VECTO/VECTO_Types.vb @@ -8,6 +8,10 @@ ' WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ' ' See the LICENSE.txt for the specific language governing permissions and limitations. +Option Infer On + +Imports System.Collections.Generic +Imports System.Linq Imports System.Runtime.CompilerServices ''' <summary> @@ -154,6 +158,58 @@ Public Enum tAxleConf As Integer a8x8 = 9 End Enum + +Public Enum tPTOType + None = 0 + OnlyDriveShaftShiftClawSynchronizerSchieberad = 1 + OnlyDriveShaftMultiDiscClutch = 2 + OnlyDriveShaftMultiDiscClutchOilPump = 3 + DriveShaftUpTo2GearWheelsShiftClawSynchronizerSchieberad = 4 + DriveShaftUpTo2GearWheelsMultiDiscClutch = 5 + DriveShaftUpTo2GearWheelsMultiDiscClutchOilPump = 6 + DriveShaftMoreThan2GearWheelsShiftClawSynchronizerSchieberad = 7 + DriveShaftMoreThan2GearWheelsMultiDiscClutch = 8 + DriveShaftMoreThan2GearWheelsMultiDiscClutchOilPump = 9 +End Enum + +Module PTOType + Public ReadOnly PtoTypeStrings As New Dictionary(Of tPTOType, String) From { + {tPTOType.None, "None"}, + {tPTOType.OnlyDriveShaftShiftClawSynchronizerSchieberad, + "only the drive shaft of the PTO - shift claw, synchronizer, Schieberad"}, + {tPTOType.OnlyDriveShaftMultiDiscClutch, "only the drive shaft of the PTO - multi-disc clutch"}, + {tPTOType.OnlyDriveShaftMultiDiscClutchOilPump, "only the drive shaft of the PTO - multi-disc clutch, oil pump"}, + {tPTOType.DriveShaftUpTo2GearWheelsShiftClawSynchronizerSchieberad, + "drive shaft and/or up to 2 gear wheels - shift claw, synchronizer, Schieberad"}, + {tPTOType.DriveShaftUpTo2GearWheelsMultiDiscClutch, "drive shaft and/or up to 2 gear wheels - multi-disc clutch"}, + {tPTOType.DriveShaftUpTo2GearWheelsMultiDiscClutchOilPump, + "drive shaft and/or up to 2 gear wheels - multi-disc clutch, oil pump"}, + {tPTOType.DriveShaftMoreThan2GearWheelsShiftClawSynchronizerSchieberad, + "drive shaft and/or more than 2 gear wheels - shift claw, synchronizer, Schieberad"}, + {tPTOType.DriveShaftMoreThan2GearWheelsMultiDiscClutch, + "drive shaft and/or more than 2 gear wheels - multi-disc clutch"}, + {tPTOType.DriveShaftMoreThan2GearWheelsMultiDiscClutchOilPump, + "drive shaft and/or more than 2 gear wheels - multi-disc clutch, oil pump"} + } + + + Public Function GetPTOString(p As tPTOType) As String + If Not PtoTypeStrings.ContainsKey(p) Then + Return PtoTypeStrings(tPTOType.None) + Else + Return PtoTypeStrings(p) + End If + End Function + + Public Function GetPTOType(p As String) As tPTOType + If Not PtoTypeStrings.ContainsValue(p) Then + Return tPTOType.None + End If + Return PtoTypeStrings.ToDictionary(Function(pair) pair.Value, Function(pair) pair.Key)(p) + End Function +End Module + + Public Enum tLoading FullLoaded EmptyLoaded diff --git a/VectoCore/VectoCore/JsonKeys.Designer.cs b/VectoCore/VectoCore/JsonKeys.Designer.cs index f73bb2606bc49ea29cb432ec64145899d25d05ce..7d0b2c195f7c03ebdc1cd1a392463a911dc6680e 100644 --- a/VectoCore/VectoCore/JsonKeys.Designer.cs +++ b/VectoCore/VectoCore/JsonKeys.Designer.cs @@ -727,7 +727,7 @@ namespace TUGraz.VectoCore { } /// <summary> - /// Looks up a localized string similar to PTOTransmission. + /// Looks up a localized string similar to PTO. /// </summary> internal static string Vehicle_PTO { get { diff --git a/VectoCore/VectoCore/JsonKeys.resx b/VectoCore/VectoCore/JsonKeys.resx index d08053e9f0eb377714c58e6b67482878936e4ba4..d7fc848dd831eb2edc44afb99383cdcf476f1d50 100644 --- a/VectoCore/VectoCore/JsonKeys.resx +++ b/VectoCore/VectoCore/JsonKeys.resx @@ -174,7 +174,7 @@ <value>File</value> </data> <data name="Vehicle_PTO" xml:space="preserve"> - <value>PTOTransmission</value> + <value>PTO</value> </data> <data name="Vehicle_PTO_LossMapFile" xml:space="preserve"> <value>LossMap</value>