Imports System.Collections.ObjectModel Imports EgtUILib Imports EgtWPFLib5 Public Class RibParamPanelVM Inherits MachiningCathegory #Region "FIELDS & PROPERTIES" ' Definizione comandi Private m_cmdOk As ICommand Private m_cmdCancel As ICommand Private m_cmdCopyFrom As ICommand #End Region ' FIELDS & PROPERTIES #Region "CONSTRUCTORS" Sub New() ' Creo riferimento a questa classe in EgtCAM5Map Map.SetRefRibParamPanelVM(Me) End Sub #End Region ' CONSTRUCTORS #Region "METHODS" Friend Sub Init() If IsNothing(Map.refRibPanelVM.SelRib) Then ' ripristino modalita' standard Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.NULL) Return End If Dim nPartId As Integer = Map.refTopPanelVM.SelPart.nPartId Dim nRibId As Integer = GDB_ID.NULL Select Case Map.refRibPanelVM.SelRib.Type Case RibEntity.RibTypes.FROMDRAW nRibId = Map.refRibPanelVM.SelRib.nCurveId Case RibEntity.RibTypes.FROMIMPORT nRibId = Map.refRibPanelVM.SelRib.nExtrusionId End Select m_Type = Cathegories.RIBS m_sName = "Ribs" m_MachiningParamList = New List(Of MachiningParam)({New RibComboMachiningParam(MachiningParam.Params.RIBSTYPE, nRibId, nPartId, Me), New RibNumericMachiningParam(MachiningParam.Params.RIBSOVERLAP, nRibId, nPartId, Me), New RibNumericMachiningParam(MachiningParam.Params.RIBSSTRANDCOUNT, nRibId, nPartId, Me), New RibCheckMachiningParam(MachiningParam.Params.RIBSLINK, nRibId, nPartId, Me), New RibCheckMachiningParam(MachiningParam.Params.RIBSINVERTDIRECTION, nRibId, nPartId, Me), New RibCheckMachiningParam(MachiningParam.Params.RIBSINVERTSTRANDORDER, nRibId, nPartId, Me), New RibCheckMachiningParam(MachiningParam.Params.RIBSLEADININVERT, nRibId, nPartId, Me), New RibNumericMachiningParam(MachiningParam.Params.RIBSLEADINLEN, nRibId, nPartId, Me), New RibCheckMachiningParam(MachiningParam.Params.RIBSLEADOUTINVERT, nRibId, nPartId, Me), New RibNumericMachiningParam(MachiningParam.Params.RIBSLEADOUTLEN, nRibId, nPartId, Me), New RibNumericMachiningParam(MachiningParam.Params.RIBSLEADOUTCOASTING, nRibId, nPartId, Me), New RibNumericMachiningParam(MachiningParam.Params.RIBSLEADOUTWIPE, nRibId, nPartId, Me), New RibNumericMachiningParam(MachiningParam.Params.RIBSLEADOUTWIPEDIR, nRibId, nPartId, Me)}) NotifyPropertyChanged(NameOf(MachiningParamList)) NotifyPropertyChanged(NameOf(sName)) End Sub Friend Sub SaveCurrParams() For Each Param In m_MachiningParamList Param.SaveParam() Next End Sub Friend Sub ResetCurrParams() For Each Param In m_MachiningParamList Param.ResetParam() Next End Sub Friend Sub WriteParamsInRib(nRibId As Integer) ' se parametri modificati Dim bModified As Boolean = False For Each Param In m_MachiningParamList Select Case Param.GetType() Case GetType(RibNumericMachiningParam) Dim NumericParam As RibNumericMachiningParam = TryCast(Param, RibNumericMachiningParam) If NumericParam.bIsModified AndAlso Not bModified Then bModified = True NumericParam.WriteParamInRib(nRibId) Case GetType(RibComboMachiningParam) Dim ComboParam As RibComboMachiningParam = TryCast(Param, RibComboMachiningParam) If ComboParam.bIsModified AndAlso Not bModified Then bModified = True ComboParam.WriteParamInRib(nRibId) Case GetType(RibCheckMachiningParam) Dim CheckParam As RibCheckMachiningParam = TryCast(Param, RibCheckMachiningParam) If CheckParam.bIsModified AndAlso Not bModified Then bModified = True CheckParam.WriteParamInRib(nRibId) End Select Next If bModified Then ' Imposto flag di ricalcolo slice EgtSetInfo(Map.refTopPanelVM.SelPart.nPartId, MAC_TORECALC_SLICE, True) End If End Sub #End Region ' METHODS #Region "COMMANDS" #Region "Ok" Public ReadOnly Property Ok_Command As ICommand Get If m_cmdOk Is Nothing Then m_cmdOk = New Command(AddressOf Ok) End If Return m_cmdOk End Get End Property Public Sub Ok() If Not IsNothing(Map.refRibPanelVM.SelRib) Then ' verifico se modificata tipologia Ribs Dim bIsModifiedRibsType As Boolean = False Dim RibsTypeParam As MachiningParam = MachiningParamList.FirstOrDefault(Function(y) y.Type = MachiningParam.Params.RIBSTYPE) If Not IsNothing(RibsTypeParam) Then bIsModifiedRibsType = RibsTypeParam.bIsModified End If ' scrivo i parametri modificati Select Case Map.refRibPanelVM.SelRib.Type Case RibEntity.RibTypes.FROMDRAW WriteParamsInRib(Map.refRibPanelVM.SelRib.nCurveId) WriteParamsInRib(Map.refRibPanelVM.SelRib.nExtrusionId) Case RibEntity.RibTypes.FROMIMPORT WriteParamsInRib(Map.refRibPanelVM.SelRib.nExtrusionId) End Select SaveCurrParams() ' se modificata tipologia Ribs, aggiorno posizione riferimento e pezzo If bIsModifiedRibsType Then Map.refReferencePanelVM.UpdateFramePosition() Map.refDispositionPanelVM.UpdateZPos() Map.refSliceManagerVM.UpdateDimensions() End If End If ' riattivo lista ribs Map.refRibPanelVM.SetRibListIsEnabled(False) ' ripristino modalita' standard Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.NULL) Map.refRibPanelVM.ResetMachParamIsChecked() End Sub #End Region ' Ok #Region "Cancel" Public ReadOnly Property Cancel_Command As ICommand Get If m_cmdCancel Is Nothing Then m_cmdCancel = New Command(AddressOf Cancel) End If Return m_cmdCancel End Get End Property Public Sub Cancel() ' ripristino modalita' standard Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.NULL) Map.refRibPanelVM.ResetMachParamIsChecked() End Sub #End Region ' Cancel #Region "CopyFrom" Public ReadOnly Property CopyFrom_Command As ICommand Get If m_cmdCopyFrom Is Nothing Then m_cmdCopyFrom = New Command(AddressOf CopyFrom) End If Return m_cmdCopyFrom End Get End Property Public Sub CopyFrom() Dim CopyFromWndVM As New CopyFromWndVM Dim CopyFromWndV As New CopyFromWndV(Application.Current.MainWindow, CopyFromWndVM) CopyFromWndV.ShowDialog() Dim x = CopyFromWndVM.SelRib End Sub #End Region ' CopyFrom #End Region ' COMMANDS End Class Public Class RibNumericMachiningParam Inherits NumericMachiningParam Public Overrides Property sValue As String Get Return If(m_bIsLen, LenToString(m_dValue, 1), m_dValue) End Get Set(value As String) If m_bIsLen Then StringToLen(value, m_dValue) Else m_dValue = value End If NotifyPropertyChanged(NameOf(sValue)) NotifyPropertyChanged(NameOf(bIsModifiedFromPart)) End Set End Property Friend Sub SetValue(value As Double) m_dValue = value NotifyPropertyChanged(NameOf(sValue)) NotifyPropertyChanged(NameOf(bIsModifiedFromPart)) End Sub Private m_dPartValue As Double Public ReadOnly Property dPartValue As Double Get Return m_dPartValue End Get End Property Public ReadOnly Property bIsModifiedFromPart As Boolean Get Return m_dValue <> m_dPartValue End Get End Property ' Definizione comandi Private m_cmdResetParam As ICommand Sub New(Type As Params, nRibId As Integer, nPartId As Integer, Cathegory As MachiningCathegory) MyBase.New(Type, Cathegory) Dim bReadFromPart As Boolean = False Select Case Type Case Params.RIBSOVERLAP bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSOVERLAP, m_dValue) EgtGetInfo(nPartId, MAC_RIBSOVERLAP, m_dPartValue) m_bIsLen = True Case Params.RIBSSTRANDCOUNT bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSSTRANDCOUNT, m_dValue) EgtGetInfo(nPartId, MAC_RIBSSTRANDCOUNT, m_dPartValue) m_bIsLen = True Case Params.RIBSINVERTDIRECTION bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSINVERTDIRECTION, m_dValue) EgtGetInfo(nPartId, MAC_RIBSINVERTDIRECTION, m_dPartValue) m_bIsLen = True Case Params.RIBSINVERTSTRANDORDER bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSINVERTSTRANDORDER, m_dValue) EgtGetInfo(nPartId, MAC_RIBSINVERTSTRANDORDER, m_dPartValue) m_bIsLen = True Case Params.RIBSLEADININVERT bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSLEADININVERT, m_dValue) EgtGetInfo(nPartId, MAC_RIBSLEADININVERT, m_dPartValue) m_bIsLen = True Case Params.RIBSLEADINLEN bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSLEADINLEN, m_dValue) EgtGetInfo(nPartId, MAC_RIBSLEADINLEN, m_dPartValue) m_bIsLen = True Case Params.RIBSLEADOUTINVERT bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSLEADOUTINVERT, m_dValue) EgtGetInfo(nPartId, MAC_RIBSLEADOUTINVERT, m_dPartValue) m_bIsLen = True Case Params.RIBSLEADOUTLEN bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSLEADOUTLEN, m_dValue) EgtGetInfo(nPartId, MAC_RIBSLEADOUTLEN, m_dPartValue) m_bIsLen = True Case Params.RIBSLEADOUTCOASTING bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSLEADOUTCOASTING, m_dValue) EgtGetInfo(nPartId, MAC_RIBSLEADOUTCOASTING, m_dPartValue) m_bIsLen = True Case Params.RIBSLEADOUTWIPE bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSLEADOUTWIPE, m_dValue) EgtGetInfo(nPartId, MAC_RIBSLEADOUTWIPE, m_dPartValue) m_bIsLen = True Case Params.RIBSLEADOUTWIPEDIR bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSLEADOUTWIPEDIR, m_dValue) EgtGetInfo(nPartId, MAC_RIBSLEADOUTWIPEDIR, m_dPartValue) m_bIsLen = True End Select m_dOrigValue = m_dValue If Not bReadFromPart Then m_dValue = m_dPartValue m_dOrigValue = m_dPartValue End If End Sub Friend Sub WriteParamInRib(nRibId As Integer) Dim sWriteValue As String = "" If m_bIsLen Then sWriteValue = LenToString(m_dValue, 2) Else sWriteValue = DoubleToString(m_dValue, 2) End If Select Case Type Case Params.RIBSOVERLAP If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSOVERLAP, sWriteValue) Else EgtRemoveInfo(nRibId, MAC_RIBSOVERLAP) End If Case Params.RIBSSTRANDCOUNT If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSSTRANDCOUNT, sWriteValue) Else EgtRemoveInfo(nRibId, MAC_RIBSSTRANDCOUNT) End If Case Params.RIBSINVERTDIRECTION If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSINVERTDIRECTION, sWriteValue) Else EgtRemoveInfo(nRibId, MAC_RIBSINVERTDIRECTION) End If Case Params.RIBSINVERTSTRANDORDER If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSINVERTSTRANDORDER, sWriteValue) Else EgtRemoveInfo(nRibId, MAC_RIBSINVERTSTRANDORDER) End If Case Params.RIBSLEADININVERT If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSLEADININVERT, sWriteValue) Else EgtRemoveInfo(nRibId, MAC_RIBSLEADININVERT) End If Case Params.RIBSLEADINLEN If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSLEADINLEN, sWriteValue) Else EgtRemoveInfo(nRibId, MAC_RIBSLEADINLEN) End If Case Params.RIBSLEADOUTINVERT If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSLEADOUTINVERT, sWriteValue) Else EgtRemoveInfo(nRibId, MAC_RIBSLEADOUTINVERT) End If Case Params.RIBSLEADOUTLEN If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSLEADOUTLEN, sWriteValue) Else EgtRemoveInfo(nRibId, MAC_RIBSLEADOUTLEN) End If Case Params.RIBSLEADOUTCOASTING If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSLEADOUTCOASTING, sWriteValue) Else EgtRemoveInfo(nRibId, MAC_RIBSLEADOUTCOASTING) End If Case Params.RIBSLEADOUTWIPE If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSLEADOUTWIPE, sWriteValue) Else EgtRemoveInfo(nRibId, MAC_RIBSLEADOUTWIPE) End If Case Params.RIBSLEADOUTWIPEDIR If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSLEADOUTWIPEDIR, sWriteValue) Else EgtRemoveInfo(nRibId, MAC_RIBSLEADOUTWIPEDIR) End If End Select End Sub Friend Overrides Sub SaveParam() m_dOrigValue = m_dValue End Sub Friend Overrides Sub ResetParam() m_dValue = m_dOrigValue End Sub #Region "COMMANDS" #Region "ResetParam" Public ReadOnly Property ResetParam_Command As ICommand Get If m_cmdResetParam Is Nothing Then m_cmdResetParam = New Command(AddressOf ResetParamCmd) End If Return m_cmdResetParam End Get End Property Public Sub ResetParamCmd() m_dValue = m_dPartValue NotifyPropertyChanged(NameOf(sValue)) NotifyPropertyChanged(NameOf(bIsModifiedFromPart)) End Sub #End Region ' ResetParam #End Region ' COMMANDS End Class Public Class RibComboMachiningParam Inherits ComboMachiningParam Public Overrides Property SelValue As IdNameStruct Get Return m_SelValue End Get Set(value As IdNameStruct) m_SelValue = value NotifyPropertyChanged(NameOf(SelValue)) NotifyPropertyChanged(NameOf(bIsModifiedFromPart)) End Set End Property Protected m_PartSelValue As IdNameStruct Public ReadOnly Property PartSelValue As IdNameStruct Get Return m_PartSelValue End Get End Property Public ReadOnly Property bIsModifiedFromPart As Boolean Get Return m_SelValue.Id <> m_PartSelValue.Id End Get End Property ' Definizione comandi Private m_cmdResetParam As ICommand Sub New(Type As Params, nRibId As Integer, nPartId As Integer, Cathegory As MachiningCathegory) MyBase.New(Type, Cathegory) Dim bReadFromRib As Boolean = False Dim bReadFromPart As Boolean = False Select Case Type Case Params.RIBSTYPE m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_RIBSTYPE.INTERNAL, "Internal"), New IdNameStruct(Machining.MPAR_RIBSTYPE.EXTERNAL, "External"), New IdNameStruct(Machining.MPAR_RIBSTYPE.UNBOUNDED, "Unbounded"), New IdNameStruct(Machining.MPAR_RIBSTYPE.SUPPORT, "Support")}) Dim nSelValue As Integer = 1 bReadFromRib = EgtGetInfo(nRibId, MAC_RIBSTYPE, nSelValue) If bReadFromRib Then m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = nSelValue) End If bReadFromPart = EgtGetInfo(nPartId, MAC_RIBSTYPE, nSelValue) m_PartSelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = nSelValue) End Select m_OrigSelValue = m_SelValue If Not bReadFromRib Then If bReadFromPart Then m_SelValue = m_PartSelValue m_OrigSelValue = m_PartSelValue ElseIf Type = Params.RIBSTYPE Then m_OrigSelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = Machining.MPAR_RIBSTYPE.INTERNAL) m_SelValue = m_OrigSelValue End If End If End Sub Friend Sub WriteParamInRib(nRibId As Integer) Select Case Type Case Params.RIBSTYPE If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSTYPE, m_SelValue.Id) Else EgtRemoveInfo(nRibId, MAC_RIBSTYPE) End If End Select End Sub Friend Overrides Sub SaveParam() m_OrigSelValue = m_SelValue End Sub Friend Overrides Sub ResetParam() m_SelValue = m_OrigSelValue End Sub #Region "COMMANDS" #Region "ResetParam" Public ReadOnly Property ResetParam_Command As ICommand Get If m_cmdResetParam Is Nothing Then m_cmdResetParam = New Command(AddressOf ResetParamCmd) End If Return m_cmdResetParam End Get End Property Public Sub ResetParamCmd() m_SelValue = m_PartSelValue NotifyPropertyChanged(NameOf(SelValue)) NotifyPropertyChanged(NameOf(bIsModifiedFromPart)) End Sub #End Region ' ResetParam #End Region ' COMMANDS End Class Public Class RibCheckMachiningParam Inherits CheckMachiningParam Public Overrides Property bValue As Boolean Get Return m_bValue End Get Set(value As Boolean) m_bValue = value NotifyPropertyChanged(NameOf(bValue)) NotifyPropertyChanged(NameOf(bIsModifiedFromPart)) End Set End Property Protected m_bPartValue As Boolean Public ReadOnly Property bPartValue As Boolean Get Return m_bPartValue End Get End Property Public ReadOnly Property bIsModifiedFromPart As Boolean Get Return m_bValue <> m_bPartValue End Get End Property ' Definizione comandi Private m_cmdResetParam As ICommand Sub New(Type As Params, nRibId As Integer, nPartId As Integer, Cathegory As MachiningCathegory) MyBase.New(Type, Cathegory) Dim bReadFromPart As Boolean = False Select Case Type Case Params.RIBSLINK bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSLINK, m_bValue) EgtGetInfo(nPartId, MAC_RIBSLINK, m_bPartValue) Case Params.RIBSINVERTDIRECTION bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSINVERTDIRECTION, m_bValue) EgtGetInfo(nPartId, MAC_RIBSINVERTDIRECTION, m_bPartValue) Case Params.RIBSINVERTSTRANDORDER bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSINVERTSTRANDORDER, m_bValue) EgtGetInfo(nPartId, MAC_RIBSINVERTSTRANDORDER, m_bPartValue) Case Params.RIBSLEADININVERT bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSLEADININVERT, m_bValue) EgtGetInfo(nPartId, MAC_RIBSLEADININVERT, m_bPartValue) Case Params.RIBSLEADOUTINVERT bReadFromPart = EgtGetInfo(nRibId, MAC_RIBSLEADOUTINVERT, m_bValue) EgtGetInfo(nPartId, MAC_RIBSLEADOUTINVERT, m_bPartValue) End Select m_bOrigValue = m_bValue If Not bReadFromPart Then m_bValue = m_bPartValue m_bOrigValue = m_bPartValue End If End Sub Friend Sub WriteParamInRib(nRibId As Integer) Select Case Type Case Params.RIBSLINK If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSLINK, If(m_bValue, 1, 0)) Else EgtRemoveInfo(nRibId, MAC_RIBSLINK) End If Case Params.RIBSINVERTDIRECTION If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSINVERTDIRECTION, If(m_bValue, 1, 0)) Else EgtRemoveInfo(nRibId, MAC_RIBSINVERTDIRECTION) End If Case Params.RIBSINVERTSTRANDORDER If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSINVERTSTRANDORDER, If(m_bValue, 1, 0)) Else EgtRemoveInfo(nRibId, MAC_RIBSINVERTSTRANDORDER) End If Case Params.RIBSLEADININVERT If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSLEADININVERT, If(m_bValue, 1, 0)) Else EgtRemoveInfo(nRibId, MAC_RIBSLEADININVERT) End If Case Params.RIBSLEADOUTINVERT If bIsModifiedFromPart Then EgtSetInfo(nRibId, MAC_RIBSLEADOUTINVERT, If(m_bValue, 1, 0)) Else EgtRemoveInfo(nRibId, MAC_RIBSLEADOUTINVERT) End If End Select End Sub Friend Overrides Sub SaveParam() m_bOrigValue = m_bValue End Sub Friend Overrides Sub ResetParam() m_bValue = m_bOrigValue NotifyPropertyChanged(NameOf(bValue)) End Sub #Region "COMMANDS" #Region "ResetParam" Public ReadOnly Property ResetParam_Command As ICommand Get If m_cmdResetParam Is Nothing Then m_cmdResetParam = New Command(AddressOf ResetParamCmd) End If Return m_cmdResetParam End Get End Property Public Sub ResetParamCmd() m_bValue = m_bPartValue NotifyPropertyChanged(NameOf(bValue)) NotifyPropertyChanged(NameOf(bIsModifiedFromPart)) End Sub #End Region ' ResetParam #End Region ' COMMANDS End Class