Imports System.Collections.ObjectModel Imports System.ComponentModel Imports EgtUILib Imports EgtWPFLib5 Public Class CurrMachining Inherits Machining Private m_sCurrGUID As Guid = Guid.Empty Public Property sCurrGUID As Guid Get Return m_sCurrGUID End Get Set(value As Guid) m_sCurrGUID = value End Set End Property Public ReadOnly Property dCurrSlicingType As Machining.MPAR_SLICINGTYPE Get Dim SlicingType As CurrComboMachiningParam = m_CathegoryList.FirstOrDefault(Function(x) x.Type = MachiningCathegory.Cathegories.GENERAL).MachiningParamList.FirstOrDefault(Function(y) y.Type = MachiningParam.Params.SLICINGTYPE) If Not IsNothing(SlicingType) Then Return SlicingType.SelValue.Id Else Return 0 End If End Get End Property Public ReadOnly Property sCurrSlicingType As String Get Dim Slicing45 As CurrComboMachiningParam = m_CathegoryList.FirstOrDefault(Function(x) x.Type = MachiningCathegory.Cathegories.GENERAL).MachiningParamList.FirstOrDefault(Function(y) y.Type = MachiningParam.Params.SLICINGTYPE) If Not IsNothing(Slicing45) Then Return Slicing45.SelValue.Name Else Return False End If End Get End Property Public ReadOnly Property dCurrStrandH As Double Get Dim StrandH As CurrNumericMachiningParam = m_CathegoryList.FirstOrDefault(Function(x) x.Type = MachiningCathegory.Cathegories.GENERAL).MachiningParamList.FirstOrDefault(Function(y) y.Type = MachiningParam.Params.STRANDH) If Not IsNothing(StrandH) Then Return StrandH.dValue Else Return False End If End Get End Property Public ReadOnly Property sCurrStrandH As String Get Dim StrandH As CurrNumericMachiningParam = m_CathegoryList.FirstOrDefault(Function(x) x.Type = MachiningCathegory.Cathegories.GENERAL).MachiningParamList.FirstOrDefault(Function(y) y.Type = MachiningParam.Params.STRANDH) If Not IsNothing(StrandH) Then Return StrandH.sValue Else Return False End If End Get End Property Public ReadOnly Property sCurrStrandW As String Get Dim StrandH As CurrNumericMachiningParam = m_CathegoryList.FirstOrDefault(Function(x) x.Type = MachiningCathegory.Cathegories.GENERAL).MachiningParamList.FirstOrDefault(Function(y) y.Type = MachiningParam.Params.STRANDW) If Not IsNothing(StrandH) Then Return StrandH.sValue Else Return False End If End Get End Property Public ReadOnly Property sCurrStrandCount As String Get Dim StrandH As CurrNumericMachiningParam = m_CathegoryList.FirstOrDefault(Function(x) x.Type = MachiningCathegory.Cathegories.GENERAL).MachiningParamList.FirstOrDefault(Function(y) y.Type = MachiningParam.Params.STRANDCOUNT) If Not IsNothing(StrandH) Then Return StrandH.sValue Else Return False End If End Get End Property Public ReadOnly Property sCurrOffset As String Get Dim StrandH As CurrNumericMachiningParam = m_CathegoryList.FirstOrDefault(Function(x) x.Type = MachiningCathegory.Cathegories.GENERAL).MachiningParamList.FirstOrDefault(Function(y) y.Type = MachiningParam.Params.OFFSET) If Not IsNothing(StrandH) Then Return StrandH.sValue Else Return False End If End Get End Property Sub New(nPartId As Integer) ' ricavo lavorazione da lista Dim sCurrGuid As String = "" EgtGetInfo(nPartId, MAC_GUID, sCurrGuid) If Guid.TryParse(sCurrGuid, m_sCurrGUID) Then Dim CurrMachiningInDb As MachiningIndex = Map.refTopPanelVM.MachiningList.FirstOrDefault(Function(x) x.sGUID = m_sCurrGUID) If IsNothing(CurrMachiningInDb) Then m_nIndex = 0 Else m_nIndex = CurrMachiningInDb.nIndex End If Else m_nIndex = 0 End If m_CathegoryList.Add(New CurrMachiningCathegory(MachiningCathegory.Cathegories.GENERAL, nPartId, m_nIndex, False)) m_CathegoryList.Add(New CurrMachiningCathegory(MachiningCathegory.Cathegories.LINK, nPartId, m_nIndex, False)) m_CathegoryList.Add(New CurrMachiningCathegory(MachiningCathegory.Cathegories.RIBS, nPartId, m_nIndex, False)) m_CathegoryList.Add(New CurrMachiningCathegory(MachiningCathegory.Cathegories.SHELL_NUMBER, nPartId, m_nIndex, False)) m_CathegoryList.Add(New CurrMachiningCathegory(MachiningCathegory.Cathegories.AUX_SOLID, nPartId, m_nIndex, False)) For Each Cathegory In m_CathegoryList For Each MachiningParam In Cathegory.MachiningParamList AddHandler MachiningParam.PropertyChanged, AddressOf OnMachiningParamPropertyChanged Next Next End Sub Sub New(nPartId As Integer, nIndex As Integer) m_nIndex = nIndex ' ricavo lavorazione da lista Dim CurrMachiningInDb As MachiningIndex = Map.refTopPanelVM.MachiningList.FirstOrDefault(Function(x) x.nIndex = nIndex) m_sCurrGUID = CurrMachiningInDb.sGUID m_CathegoryList.Add(New CurrMachiningCathegory(MachiningCathegory.Cathegories.GENERAL, nPartId, m_nIndex, True)) m_CathegoryList.Add(New CurrMachiningCathegory(MachiningCathegory.Cathegories.LINK, nPartId, m_nIndex, True)) m_CathegoryList.Add(New CurrMachiningCathegory(MachiningCathegory.Cathegories.RIBS, nPartId, m_nIndex, True)) m_CathegoryList.Add(New CurrMachiningCathegory(MachiningCathegory.Cathegories.SHELL_NUMBER, nPartId, m_nIndex, True)) m_CathegoryList.Add(New CurrMachiningCathegory(MachiningCathegory.Cathegories.AUX_SOLID, nPartId, m_nIndex, True)) For Each Cathegory In m_CathegoryList For Each MachiningParam In Cathegory.MachiningParamList AddHandler MachiningParam.PropertyChanged, AddressOf OnMachiningParamPropertyChanged Next Next ' scrivo i parametri impostati dentro il pezzo WriteCurrParamInPart(nPartId) End Sub Sub New(sName As String, bSlicing45 As Boolean, dStrandH As Double, dStrandW As Double, nStrandCount As Integer, dOffset As Double, dStartPointOffsetOnSlice As Double, dStrandOrder As MPAR_STRANDORDERS, dDirection As MPAR_DIRECTIONS, dLinkType As MPAR_LINKTYPES, dLinkParam As Double, dLinkZup As Double, dOffsetLeadPoint As Double, dLeadIn As MPAR_LEADINOUT, dLeadInTangDist As Double, dLeadInOrthoDist As Double, dLeadOut As MPAR_LEADINOUT, dLeadOutTangDist As Double, dLeadOutOrthoDist As Double, dCoastingLen As Double, dCoastingFeed As Double, dWipeLen As Double, dWipeFeedPu As Double, dFloorCount As Integer, dG0Feed As Double, dMaterial As String, dToolDiam As Double, dRibsOverlap As Double, dRibsStrandCount As Integer, dRibsLink As Boolean, dRibsInvertOrder As Boolean, dRibsInvertDirection As Boolean, dRibsLeadInInvert As Boolean, dRibsLeadInLen As Double, dRibsLeadOutInvert As Boolean, dRibsLeadOutLen As Double, dRibsLeadOutCoasting As Double, dRibsLeadOutWipe As Double, dRibsLeadOutWipeDir As Double) End Sub #Region "METHODS" Friend Overrides Sub OnMachiningParamPropertyChanged(sender As Object, e As PropertyChangedEventArgs) Select Case e.PropertyName Case NameOf(sender.dValue), NameOf(sender.sValue), NameOf(sender.bValue), NameOf(sender.SelValue) m_bIsModified = m_CathegoryList.Any(Function(x) x.MachiningParamList.Any(Function(y) y.bIsModified)) NotifyPropertyChanged(NameOf(ghName)) NotifyPropertyChanged(NameOf(sCurrSlicingType)) NotifyPropertyChanged(NameOf(sCurrStrandH)) NotifyPropertyChanged(NameOf(sCurrStrandW)) NotifyPropertyChanged(NameOf(sCurrStrandCount)) NotifyPropertyChanged(NameOf(sCurrOffset)) End Select End Sub Friend Sub WriteCurrParamInPart(nPartId As Integer) EgtSetInfo(nPartId, MAC_GUID, m_sCurrGUID.ToString()) For Each Cathegory As CurrMachiningCathegory In m_CathegoryList Cathegory.WriteCurrParamInPart(nPartId) Next ' Imposto flag di ricalcolo slice EgtSetInfo(nPartId, MAC_TORECALC_SLICE, True) End Sub #End Region ' METHODS End Class Public Class CurrMachiningCathegory Inherits MachiningCathegory Sub New(Type As Cathegories, nPartId As Integer, nIndex As Integer, bForceFromDb As Boolean) m_Type = Type Select Case m_Type Case Cathegories.GENERAL m_sName = "General" m_MachiningParamList = New List(Of MachiningParam)({New CurrComboMachiningParam(MachiningParam.Params.SLICINGTYPE, nPartId, nIndex, bForceFromDb), New CurrCheckMachiningParam(MachiningParam.Params.SPIRALVASE, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.STRANDH, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.STRANDW, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.STRANDCOUNT, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.OFFSET, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.STRANDOVERLAP, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.STARTPOINTOFFSETONSLICE, nPartId, nIndex, bForceFromDb), New CurrComboMachiningParam(MachiningParam.Params.STRANDORDER, nPartId, nIndex, bForceFromDb), New CurrComboMachiningParam(MachiningParam.Params.DIRECTION, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.FLOORCOUNT, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.G0FEED, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.TOOLDIAM, nPartId, nIndex, bForceFromDb)}) Case Cathegories.LINK m_sName = "Shell" m_MachiningParamList = New List(Of MachiningParam)({New CurrComboMachiningParam(MachiningParam.Params.LINKTYPE, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.LINKPARAM, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.LINKZUP, nPartId, nIndex, bForceFromDb), New CurrComboMachiningParam(MachiningParam.Params.LEADIN, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.LEADINTANGDIST, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.LEADINORTHODIST, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.OFFSETLEADPOINT, nPartId, nIndex, bForceFromDb), New CurrComboMachiningParam(MachiningParam.Params.LEADOUT, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.LEADOUTTANGDIST, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.LEADOUTORTHODIST, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.COASTINGLEN, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.COASTINGFEED, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.WIPELEN, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.WIPEFEEDPU, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.WIPEDIR, nPartId, nIndex, bForceFromDb)}) Case Cathegories.RIBS m_sName = "Ribs" m_MachiningParamList = New List(Of MachiningParam)({New CurrNumericMachiningParam(MachiningParam.Params.RIBSOVERLAP, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.RIBSSTRANDCOUNT, nPartId, nIndex, bForceFromDb), New CurrCheckMachiningParam(MachiningParam.Params.RIBSLINK, nPartId, nIndex, bForceFromDb), New CurrCheckMachiningParam(MachiningParam.Params.RIBSINVERTORDER, nPartId, nIndex, bForceFromDb), New CurrCheckMachiningParam(MachiningParam.Params.RIBSINVERTDIRECTION, nPartId, nIndex, bForceFromDb), New CurrCheckMachiningParam(MachiningParam.Params.RIBSLEADININVERT, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.RIBSLEADINLEN, nPartId, nIndex, bForceFromDb), New CurrCheckMachiningParam(MachiningParam.Params.RIBSLEADOUTINVERT, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.RIBSLEADOUTLEN, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.RIBSLEADOUTCOASTING, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.RIBSLEADOUTWIPE, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.RIBSLEADOUTWIPEDIR, nPartId, nIndex, bForceFromDb)}) Case Cathegories.SHELL_NUMBER m_sName = "Reduce Shell Number" m_MachiningParamList = New List(Of MachiningParam)({New CurrNumericMachiningParam(MachiningParam.Params.SHELLNBRDIFFERENCE, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.SHELLNBRCOASTING, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.SHELLNBRWIPE, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.SHELLNBRWIPEDIR, nPartId, nIndex, bForceFromDb)}) Case Cathegories.AUX_SOLID m_sName = "Filled Solid" m_MachiningParamList = New List(Of MachiningParam)({New CurrNumericMachiningParam(MachiningParam.Params.AUXSOLIDSOVERLAP, nPartId, nIndex, bForceFromDb), New CurrComboMachiningParam(MachiningParam.Params.AUXSOLIDSINFILL, nPartId, nIndex, bForceFromDb), New CurrComboMachiningParam(MachiningParam.Params.AUXSOLIDSSTRANDORDER, nPartId, nIndex, bForceFromDb), New CurrComboMachiningParam(MachiningParam.Params.AUXSOLIDSLINKTYPE, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.AUXSOLIDSLINKPARAM, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.AUXSOLIDSSTARTPOINTOFFSETONSLICE, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.AUXSOLIDSCOASTINGLEN, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.AUXSOLIDSWIPELEN, nPartId, nIndex, bForceFromDb), New CurrNumericMachiningParam(MachiningParam.Params.AUXSOLIDSWIPEDIR, nPartId, nIndex, bForceFromDb)}) End Select 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 WriteCurrParamInPart(nPartId As Integer) For Each Param In m_MachiningParamList Param.WriteParamInPart(nPartId) Next End Sub End Class Public Class CurrNumericMachiningParam 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(bIsModifiedFromDb)) End Set End Property Private m_DbParam As NumericMachiningParam Public ReadOnly Property DbParam As NumericMachiningParam Get Return m_DbParam End Get End Property Public ReadOnly Property bIsModifiedFromDb As Boolean Get Return If(Map.refTopPanelVM.SelMachining.sGUID <> Guid.Empty, m_dValue <> m_DbParam.dOrigValue, False) End Get End Property ' Definizione comandi Private m_cmdResetParam As ICommand Sub New(Type As Params, nPartId As Integer, nIndex As Integer, bForceFromDb As Boolean) MyBase.New(Type, nIndex) Dim bReadFromPart As Boolean = False Select Case Type Case Params.STRANDH bReadFromPart = EgtGetInfo(nPartId, MAC_STRANDH, m_dValue) m_bIsLen = True Case Params.STRANDW bReadFromPart = EgtGetInfo(nPartId, MAC_STRANDW, m_dValue) m_bIsLen = True Case Params.STRANDCOUNT bReadFromPart = EgtGetInfo(nPartId, MAC_STRANDCOUNT, m_dValue) m_bIsLen = True Case Params.OFFSET bReadFromPart = EgtGetInfo(nPartId, MAC_OFFSET, m_dValue) m_bIsLen = True Case Params.STRANDOVERLAP bReadFromPart = EgtGetInfo(nPartId, MAC_STRANDOVERLAP, m_dValue) m_bIsLen = True Case Params.STARTPOINTOFFSETONSLICE bReadFromPart = EgtGetInfo(nPartId, MAC_STARTPOINTOFFSETONSLICE, m_dValue) m_bIsLen = True Case Params.LINKPARAM bReadFromPart = EgtGetInfo(nPartId, MAC_LINKPARAM, m_dValue) m_bIsLen = True Case Params.LINKZUP bReadFromPart = EgtGetInfo(nPartId, MAC_LINKZUP, m_dValue) m_bIsLen = True Case Params.OFFSETLEADPOINT bReadFromPart = EgtGetInfo(nPartId, MAC_OFFSETLEADPOINT, m_dValue) m_bIsLen = True Case Params.LEADINTANGDIST bReadFromPart = EgtGetInfo(nPartId, MAC_LEADINTANGDIST, m_dValue) m_bIsLen = True Case Params.LEADINORTHODIST bReadFromPart = EgtGetInfo(nPartId, MAC_LEADINORTHODIST, m_dValue) m_bIsLen = True Case Params.LEADOUTTANGDIST bReadFromPart = EgtGetInfo(nPartId, MAC_LEADOUTTANGDIST, m_dValue) m_bIsLen = True Case Params.LEADOUTORTHODIST bReadFromPart = EgtGetInfo(nPartId, MAC_LEADOUTORTHODIST, m_dValue) m_bIsLen = True Case Params.COASTINGLEN bReadFromPart = EgtGetInfo(nPartId, MAC_COASTINGLEN, m_dValue) m_bIsLen = True Case Params.COASTINGFEED bReadFromPart = EgtGetInfo(nPartId, MAC_COASTINGFEED, m_dValue) m_bIsLen = True Case Params.WIPELEN bReadFromPart = EgtGetInfo(nPartId, MAC_WIPELEN, m_dValue) m_bIsLen = True Case Params.WIPEFEEDPU bReadFromPart = EgtGetInfo(nPartId, MAC_WIPEFEEDPU, m_dValue) m_bIsLen = True Case Params.WIPEDIR bReadFromPart = EgtGetInfo(nPartId, MAC_WIPEDIR, m_dValue) m_bIsLen = True Case Params.FLOORCOUNT bReadFromPart = EgtGetInfo(nPartId, MAC_FLOORCOUNT, m_dValue) m_bIsLen = True Case Params.G0FEED bReadFromPart = EgtGetInfo(nPartId, MAC_G0FEED, m_dValue) m_bIsLen = True Case Params.TOOLDIAM bReadFromPart = EgtGetInfo(nPartId, MAC_TOOLDIAM, m_dValue) m_bIsLen = True Case Params.RIBSOVERLAP bReadFromPart = EgtGetInfo(nPartId, MAC_RIBSOVERLAP, m_dValue) m_bIsLen = True Case Params.RIBSSTRANDCOUNT bReadFromPart = EgtGetInfo(nPartId, MAC_RIBSSTRANDCOUNT, m_dValue) m_bIsLen = True Case Params.RIBSLEADINLEN bReadFromPart = EgtGetInfo(nPartId, MAC_RIBSLEADINLEN, m_dValue) m_bIsLen = True Case Params.RIBSLEADOUTLEN bReadFromPart = EgtGetInfo(nPartId, MAC_RIBSLEADOUTLEN, m_dValue) m_bIsLen = True Case Params.RIBSLEADOUTCOASTING bReadFromPart = EgtGetInfo(nPartId, MAC_RIBSLEADOUTCOASTING, m_dValue) m_bIsLen = True Case Params.RIBSLEADOUTWIPE bReadFromPart = EgtGetInfo(nPartId, MAC_RIBSLEADOUTWIPE, m_dValue) m_bIsLen = True Case Params.RIBSLEADOUTWIPEDIR bReadFromPart = EgtGetInfo(nPartId, MAC_RIBSLEADOUTWIPEDIR, m_dValue) m_bIsLen = True Case Params.SHELLNBRDIFFERENCE bReadFromPart = EgtGetInfo(nPartId, MAC_SHELLNBRDIFFERENCE, m_dValue) m_bIsLen = True Case Params.SHELLNBRCOASTING bReadFromPart = EgtGetInfo(nPartId, MAC_SHELLNBRCOASTING, m_dValue) m_bIsLen = True Case Params.SHELLNBRWIPE bReadFromPart = EgtGetInfo(nPartId, MAC_SHELLNBRWIPE, m_dValue) m_bIsLen = True Case Params.SHELLNBRWIPEDIR bReadFromPart = EgtGetInfo(nPartId, MAC_SHELLNBRWIPEDIR, m_dValue) m_bIsLen = True Case Params.AUXSOLIDSOVERLAP bReadFromPart = EgtGetInfo(nPartId, MAC_AUXSOLIDSOVERLAP, m_dValue) m_bIsLen = True Case Params.AUXSOLIDSLINKPARAM bReadFromPart = EgtGetInfo(nPartId, MAC_AUXSOLIDSLINKPARAM, m_dValue) m_bIsLen = True Case Params.AUXSOLIDSSTARTPOINTOFFSETONSLICE bReadFromPart = EgtGetInfo(nPartId, MAC_AUXSOLIDSSTARTPOINTOFFSETONSLICE, m_dValue) m_bIsLen = True Case Params.AUXSOLIDSCOASTINGLEN bReadFromPart = EgtGetInfo(nPartId, MAC_AUXSOLIDSCOASTINGLEN, m_dValue) m_bIsLen = True Case Params.AUXSOLIDSWIPELEN bReadFromPart = EgtGetInfo(nPartId, MAC_AUXSOLIDSWIPELEN, m_dValue) m_bIsLen = True Case Params.AUXSOLIDSWIPEDIR bReadFromPart = EgtGetInfo(nPartId, MAC_AUXSOLIDSWIPEDIR, m_dValue) m_bIsLen = True End Select m_dOrigValue = m_dValue If nIndex > 0 Then Dim DbMachining As Machining = Map.refMachiningDbVM.MachiningList.FirstOrDefault(Function(x) x.nIndex = nIndex) Select Case Type Case Params.STRANDH, Params.STRANDW, Params.STRANDCOUNT, Params.OFFSET, Params.STRANDOVERLAP, Params.STARTPOINTOFFSETONSLICE, Params.FLOORCOUNT, Params.G0FEED, Params.TOOLDIAM m_DbParam = DbMachining.CathegoryList.FirstOrDefault(Function(y) y.Type = MachiningCathegory.Cathegories.GENERAL).MachiningParamList.FirstOrDefault(Function(z) z.Type = m_Type) Case Params.LINKPARAM, Params.LINKZUP, Params.OFFSETLEADPOINT, Params.LEADINTANGDIST, Params.LEADINORTHODIST, Params.LEADOUTTANGDIST, Params.LEADOUTORTHODIST, Params.COASTINGLEN, Params.COASTINGFEED, Params.WIPELEN, Params.WIPEFEEDPU, Params.WIPEDIR m_DbParam = DbMachining.CathegoryList.FirstOrDefault(Function(y) y.Type = MachiningCathegory.Cathegories.LINK).MachiningParamList.FirstOrDefault(Function(z) z.Type = m_Type) Case Params.RIBSOVERLAP, Params.RIBSSTRANDCOUNT, Params.RIBSLINK, Params.RIBSINVERTORDER, Params.RIBSINVERTDIRECTION, Params.RIBSLEADININVERT, Params.RIBSLEADINLEN, Params.RIBSLEADOUTINVERT, Params.RIBSLEADOUTLEN, Params.RIBSLEADOUTCOASTING, Params.RIBSLEADOUTWIPE, Params.RIBSLEADOUTWIPEDIR m_DbParam = DbMachining.CathegoryList.FirstOrDefault(Function(y) y.Type = MachiningCathegory.Cathegories.RIBS).MachiningParamList.FirstOrDefault(Function(z) z.Type = m_Type) Case Params.SHELLNBRDIFFERENCE, Params.SHELLNBRCOASTING, Params.SHELLNBRWIPE, Params.SHELLNBRWIPEDIR m_DbParam = DbMachining.CathegoryList.FirstOrDefault(Function(y) y.Type = MachiningCathegory.Cathegories.SHELL_NUMBER).MachiningParamList.FirstOrDefault(Function(z) z.Type = m_Type) Case Params.AUXSOLIDSOVERLAP, Params.AUXSOLIDSLINKPARAM, Params.AUXSOLIDSSTARTPOINTOFFSETONSLICE, Params.AUXSOLIDSCOASTINGLEN, Params.AUXSOLIDSWIPELEN, Params.AUXSOLIDSWIPEDIR m_DbParam = DbMachining.CathegoryList.FirstOrDefault(Function(y) y.Type = MachiningCathegory.Cathegories.AUX_SOLID).MachiningParamList.FirstOrDefault(Function(z) z.Type = m_Type) End Select If bForceFromDb OrElse Not bReadFromPart Then m_dValue = m_DbParam.dOrigValue m_dOrigValue = m_DbParam.dOrigValue End If End If End Sub Friend Overrides Sub WriteParamInPart(nPartId 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.STRANDH EgtSetInfo(nPartId, MAC_STRANDH, sWriteValue) Case Params.STRANDW EgtSetInfo(nPartId, MAC_STRANDW, sWriteValue) Case Params.STRANDCOUNT EgtSetInfo(nPartId, MAC_STRANDCOUNT, sWriteValue) Case Params.OFFSET EgtSetInfo(nPartId, MAC_OFFSET, sWriteValue) Case Params.STRANDOVERLAP EgtSetInfo(nPartId, MAC_STRANDOVERLAP, sWriteValue) Case Params.STARTPOINTOFFSETONSLICE EgtSetInfo(nPartId, MAC_STARTPOINTOFFSETONSLICE, sWriteValue) Case Params.LINKPARAM EgtSetInfo(nPartId, MAC_LINKPARAM, sWriteValue) Case Params.LINKZUP EgtSetInfo(nPartId, MAC_LINKZUP, sWriteValue) Case Params.OFFSETLEADPOINT EgtSetInfo(nPartId, MAC_OFFSETLEADPOINT, sWriteValue) Case Params.LEADINTANGDIST EgtSetInfo(nPartId, MAC_LEADINTANGDIST, sWriteValue) Case Params.LEADINORTHODIST EgtSetInfo(nPartId, MAC_LEADINORTHODIST, sWriteValue) Case Params.LEADOUTTANGDIST EgtSetInfo(nPartId, MAC_LEADOUTTANGDIST, sWriteValue) Case Params.LEADOUTORTHODIST EgtSetInfo(nPartId, MAC_LEADOUTORTHODIST, sWriteValue) Case Params.COASTINGLEN EgtSetInfo(nPartId, MAC_COASTINGLEN, sWriteValue) Case Params.COASTINGFEED EgtSetInfo(nPartId, MAC_COASTINGFEED, sWriteValue) Case Params.WIPELEN EgtSetInfo(nPartId, MAC_WIPELEN, sWriteValue) Case Params.WIPEFEEDPU EgtSetInfo(nPartId, MAC_WIPEFEEDPU, sWriteValue) Case Params.WIPEDIR EgtSetInfo(nPartId, MAC_WIPEDIR, sWriteValue) Case Params.FLOORCOUNT EgtSetInfo(nPartId, MAC_FLOORCOUNT, sWriteValue) Case Params.G0FEED EgtSetInfo(nPartId, MAC_G0FEED, sWriteValue) Case Params.TOOLDIAM EgtSetInfo(nPartId, MAC_TOOLDIAM, sWriteValue) Case Params.RIBSOVERLAP EgtSetInfo(nPartId, MAC_RIBSOVERLAP, sWriteValue) Case Params.RIBSSTRANDCOUNT EgtSetInfo(nPartId, MAC_RIBSSTRANDCOUNT, sWriteValue) Case Params.RIBSLEADINLEN EgtSetInfo(nPartId, MAC_RIBSLEADINLEN, sWriteValue) Case Params.RIBSLEADOUTLEN EgtSetInfo(nPartId, MAC_RIBSLEADOUTLEN, sWriteValue) Case Params.RIBSLEADOUTCOASTING EgtSetInfo(nPartId, MAC_RIBSLEADOUTCOASTING, sWriteValue) Case Params.RIBSLEADOUTWIPE EgtSetInfo(nPartId, MAC_RIBSLEADOUTWIPE, sWriteValue) Case Params.RIBSLEADOUTWIPEDIR EgtSetInfo(nPartId, MAC_RIBSLEADOUTWIPEDIR, sWriteValue) Case Params.SHELLNBRDIFFERENCE EgtSetInfo(nPartId, MAC_SHELLNBRDIFFERENCE, sWriteValue) Case Params.SHELLNBRCOASTING EgtSetInfo(nPartId, MAC_SHELLNBRCOASTING, sWriteValue) Case Params.SHELLNBRWIPE EgtSetInfo(nPartId, MAC_SHELLNBRWIPE, sWriteValue) Case Params.SHELLNBRWIPEDIR EgtSetInfo(nPartId, MAC_SHELLNBRWIPEDIR, sWriteValue) Case Params.AUXSOLIDSOVERLAP EgtSetInfo(nPartId, MAC_AUXSOLIDSOVERLAP, sWriteValue) Case Params.AUXSOLIDSLINKPARAM EgtSetInfo(nPartId, MAC_AUXSOLIDSLINKPARAM, sWriteValue) Case Params.AUXSOLIDSSTARTPOINTOFFSETONSLICE EgtSetInfo(nPartId, MAC_AUXSOLIDSSTARTPOINTOFFSETONSLICE, sWriteValue) Case Params.AUXSOLIDSCOASTINGLEN EgtSetInfo(nPartId, MAC_AUXSOLIDSCOASTINGLEN, sWriteValue) Case Params.AUXSOLIDSWIPELEN EgtSetInfo(nPartId, MAC_AUXSOLIDSWIPELEN, sWriteValue) Case Params.AUXSOLIDSWIPEDIR EgtSetInfo(nPartId, MAC_AUXSOLIDSWIPEDIR, sWriteValue) End Select End Sub Friend Overrides Sub SaveParam() m_dOrigValue = m_dValue End Sub Friend Overrides Sub ResetParam() m_dValue = m_dOrigValue NotifyPropertyChanged(NameOf(sValue)) 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 = DbParam.dOrigValue NotifyPropertyChanged(NameOf(sValue)) NotifyPropertyChanged(NameOf(bIsModifiedFromDb)) End Sub #End Region ' ResetParam #End Region ' COMMANDS End Class Public Class CurrStringMachiningParam Inherits StringMachiningParam Private m_DbParam As StringMachiningParam Public ReadOnly Property DbParam As StringMachiningParam Get Return m_DbParam End Get End Property Public ReadOnly Property bIsModifiedFromDb As Boolean Get Return m_sValue <> m_DbParam.sOrigValue End Get End Property ' Definizione comandi Private m_cmdResetParam As ICommand Sub New(Type As Params, nIndex As Integer) MyBase.New(Type, nIndex) m_sValue = sValue m_sOrigValue = m_sValue End Sub Friend Overrides Sub WriteParamInPart(nIndex As Integer) Select Case Type 'Case Params.STRANDH 'EgtSetInfo(nPartId, MAC_STRANDH, sWriteValue) End Select End Sub Friend Overrides Sub SaveParam() m_sOrigValue = m_sValue End Sub Friend Overrides Sub ResetParam() m_sValue = m_sOrigValue NotifyPropertyChanged(NameOf(sValue)) 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() ResetParam() End Sub #End Region ' ResetParam #End Region ' COMMANDS End Class Public Class CurrComboMachiningParam 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(bIsModifiedFromDb)) End Set End Property Private m_DbParam As ComboMachiningParam Public ReadOnly Property DbParam As ComboMachiningParam Get Return m_DbParam End Get End Property Public ReadOnly Property bIsModifiedFromDb As Boolean Get Return If(Map.refTopPanelVM.SelMachining.sGUID <> Guid.Empty, m_SelValue.Id <> m_DbParam.OrigSelValue.Id, False) End Get End Property ' Definizione comandi Private m_cmdResetParam As ICommand Sub New(Type As Params, nPartId As Integer, nIndex As Integer, bForceFromDb As Boolean) MyBase.New(Type, nIndex) Dim bReadFromPart As Boolean = False Select Case Type Case Params.SLICINGTYPE Dim nHorizontalPrint As Integer = GetPrivateProfileInt(S_MACH_PRINTING3D, K_HORIZONTAL_PRINT, 0, CurrentMachine.sMachIniFile) m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_SLICINGTYPE.VERTICAL, "Vertical"), New IdNameStruct(Machining.MPAR_SLICINGTYPE.HORIZONTAL, "Horizontal")}) If nHorizontalPrint > 0 Then m_ValueList.Add(New IdNameStruct(Machining.MPAR_SLICINGTYPE.DEG45, "45°")) End If Dim nSelValue As Integer = 0 bReadFromPart = EgtGetInfo(nPartId, MAC_SLICINGTYPE, nSelValue) If Not bReadFromPart Then Dim nSlicing45 As Integer = 0 bReadFromPart = EgtGetInfo(nPartId, MAC_SLICING45, nSlicing45) nSelValue = If(nSlicing45 = 0, Machining.MPAR_SLICINGTYPE.VERTICAL, Machining.MPAR_SLICINGTYPE.DEG45) End If m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = nSelValue) Case Params.STRANDORDER m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_STRANDORDERS.OUTTOIN, "From Outside To Inside"), New IdNameStruct(Machining.MPAR_STRANDORDERS.INTOOUT, "From Inside To Outside")}) Dim nSelValue As Integer = 0 bReadFromPart = EgtGetInfo(nPartId, MAC_STRANDORDER, nSelValue) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = nSelValue) Case Params.DIRECTION m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_DIRECTIONS.CCW, "Counterclockwise"), New IdNameStruct(Machining.MPAR_DIRECTIONS.CW, "Clockwise")}) Dim nSelValue As Integer = 0 bReadFromPart = EgtGetInfo(nPartId, MAC_DIRECTION, nSelValue) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = nSelValue) Case Params.LINKTYPE m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_LINKTYPES.NONE, "None"), New IdNameStruct(Machining.MPAR_LINKTYPES.LINEAR, "Linear"), New IdNameStruct(Machining.MPAR_LINKTYPES.BIARC, "Biarc")}) Dim nSelValue As Integer = 0 bReadFromPart = EgtGetInfo(nPartId, MAC_LINKTYPE, nSelValue) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = nSelValue) Case Params.LEADIN m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_LEADINOUT.NONE, "None"), New IdNameStruct(Machining.MPAR_LEADINOUT.LINEAR, "Linear"), New IdNameStruct(Machining.MPAR_LEADINOUT.ARC, "Arc")}) Dim nSelValue As Integer = 0 bReadFromPart = EgtGetInfo(nPartId, MAC_LEADIN, nSelValue) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = nSelValue) Case Params.LEADOUT m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_LEADINOUT.NONE, "None"), New IdNameStruct(Machining.MPAR_LEADINOUT.LINEAR, "Linear"), New IdNameStruct(Machining.MPAR_LEADINOUT.ARC, "Arc")}) Dim nSelValue As Integer = 0 bReadFromPart = EgtGetInfo(nPartId, MAC_LEADOUT, nSelValue) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = nSelValue) Case Params.AUXSOLIDSINFILL m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_INFILL.NONE, "None"), New IdNameStruct(Machining.MPAR_INFILL.OFFSET, "Offset"), New IdNameStruct(Machining.MPAR_INFILL.ZIGZAG, "ZigZag")}) Dim nSelValue As Integer = 0 bReadFromPart = EgtGetInfo(nPartId, MAC_AUXSOLIDSINFILL, nSelValue) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = nSelValue) Case Params.AUXSOLIDSSTRANDORDER m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_STRANDORDERS.OUTTOIN, "From Outside To Inside"), New IdNameStruct(Machining.MPAR_STRANDORDERS.INTOOUT, "From Inside To Outside")}) Dim nSelValue As Integer = 0 bReadFromPart = EgtGetInfo(nPartId, MAC_AUXSOLIDSSTRANDORDER, nSelValue) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = nSelValue) Case Params.AUXSOLIDSLINKTYPE m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_LINKTYPES.NONE, "None"), New IdNameStruct(Machining.MPAR_LINKTYPES.LINEAR, "Linear"), New IdNameStruct(Machining.MPAR_LINKTYPES.BIARC, "Biarc")}) Dim nSelValue As Integer = 0 bReadFromPart = EgtGetInfo(nPartId, MAC_AUXSOLIDSLINKTYPE, nSelValue) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = nSelValue) End Select m_OrigSelValue = m_SelValue If nIndex > 0 Then Dim DbMachining As Machining = Map.refMachiningDbVM.MachiningList.FirstOrDefault(Function(x) x.nIndex = nIndex) Select Case Type Case Params.SLICINGTYPE, Params.STRANDORDER, Params.DIRECTION m_DbParam = DbMachining.CathegoryList.FirstOrDefault(Function(y) y.Type = MachiningCathegory.Cathegories.GENERAL).MachiningParamList.FirstOrDefault(Function(z) z.Type = m_Type) Case Params.LINKTYPE, Params.LEADIN, Params.LEADOUT m_DbParam = DbMachining.CathegoryList.FirstOrDefault(Function(y) y.Type = MachiningCathegory.Cathegories.LINK).MachiningParamList.FirstOrDefault(Function(z) z.Type = m_Type) Case Params.AUXSOLIDSINFILL, Params.AUXSOLIDSSTRANDORDER, Params.AUXSOLIDSLINKTYPE m_DbParam = DbMachining.CathegoryList.FirstOrDefault(Function(y) y.Type = MachiningCathegory.Cathegories.AUX_SOLID).MachiningParamList.FirstOrDefault(Function(z) z.Type = m_Type) End Select If bForceFromDb OrElse Not bReadFromPart Then m_SelValue = m_DbParam.OrigSelValue m_OrigSelValue = m_DbParam.OrigSelValue End If End If End Sub Friend Overrides Sub WriteParamInPart(nPartId As Integer) Select Case Type Case Params.SLICINGTYPE EgtSetInfo(nPartId, MAC_SLICINGTYPE, m_SelValue.Id) Case Params.STRANDORDER EgtSetInfo(nPartId, MAC_STRANDORDER, m_SelValue.Id) Case Params.DIRECTION EgtSetInfo(nPartId, MAC_DIRECTION, m_SelValue.Id) Case Params.LINKTYPE EgtSetInfo(nPartId, MAC_LINKTYPE, m_SelValue.Id) Case Params.LEADIN EgtSetInfo(nPartId, MAC_LEADIN, m_SelValue.Id) Case Params.LEADOUT EgtSetInfo(nPartId, MAC_LEADOUT, m_SelValue.Id) Case Params.AUXSOLIDSINFILL EgtSetInfo(nPartId, MAC_AUXSOLIDSINFILL, m_SelValue.Id) Case Params.AUXSOLIDSSTRANDORDER EgtSetInfo(nPartId, MAC_AUXSOLIDSSTRANDORDER, m_SelValue.Id) Case Params.AUXSOLIDSLINKTYPE EgtSetInfo(nPartId, MAC_AUXSOLIDSLINKTYPE, m_SelValue.Id) End Select End Sub Friend Overrides Sub SaveParam() m_OrigSelValue = m_SelValue End Sub Friend Overrides Sub ResetParam() m_SelValue = m_OrigSelValue NotifyPropertyChanged(NameOf(SelValue)) 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 = DbParam.OrigSelValue NotifyPropertyChanged(NameOf(SelValue)) NotifyPropertyChanged(NameOf(bIsModifiedFromDb)) End Sub #End Region ' ResetParam #End Region ' COMMANDS End Class Public Class CurrCheckMachiningParam 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(bIsModifiedFromDb)) End Set End Property Private m_DbParam As CheckMachiningParam Public ReadOnly Property DbParam As CheckMachiningParam Get Return m_DbParam End Get End Property Public ReadOnly Property bIsModifiedFromDb As Boolean Get Return If(Map.refTopPanelVM.SelMachining.sGUID <> Guid.Empty, m_bValue <> m_DbParam.bOrigValue, False) End Get End Property ' Definizione comandi Private m_cmdResetParam As ICommand Sub New(Type As Params, nPartId As Integer, nIndex As Integer, bForceFromDb As Boolean) MyBase.New(Type, nIndex) Dim bReadFromPart As Boolean = False Select Case Type Case Params.SPIRALVASE bReadFromPart = EgtGetInfo(nPartId, MAC_SPIRALVASE, m_bValue) Case Params.RIBSLINK bReadFromPart = EgtGetInfo(nPartId, MAC_RIBSLINK, m_bValue) Case Params.RIBSINVERTORDER bReadFromPart = EgtGetInfo(nPartId, MAC_RIBSINVERTORDER, m_bValue) Case Params.RIBSINVERTDIRECTION bReadFromPart = EgtGetInfo(nPartId, MAC_RIBSINVERTDIRECTION, m_bValue) Case Params.RIBSLEADININVERT bReadFromPart = EgtGetInfo(nPartId, MAC_RIBSLEADININVERT, m_bValue) Case Params.RIBSLEADOUTINVERT bReadFromPart = EgtGetInfo(nPartId, MAC_RIBSLEADOUTINVERT, m_bValue) End Select m_bOrigValue = m_bValue If nIndex > 0 Then Dim DbMachining As Machining = Map.refMachiningDbVM.MachiningList.FirstOrDefault(Function(x) x.nIndex = nIndex) Select Case Type Case Params.SPIRALVASE m_DbParam = DbMachining.CathegoryList.FirstOrDefault(Function(y) y.Type = MachiningCathegory.Cathegories.GENERAL).MachiningParamList.FirstOrDefault(Function(z) z.Type = m_Type) Case Params.RIBSLINK, Params.RIBSINVERTORDER, Params.RIBSINVERTDIRECTION, Params.RIBSLEADININVERT, Params.RIBSLEADOUTINVERT m_DbParam = DbMachining.CathegoryList.FirstOrDefault(Function(y) y.Type = MachiningCathegory.Cathegories.RIBS).MachiningParamList.FirstOrDefault(Function(z) z.Type = m_Type) End Select If bForceFromDb OrElse Not bReadFromPart Then m_bValue = m_DbParam.bOrigValue m_bOrigValue = m_DbParam.bOrigValue End If End If End Sub Friend Overrides Sub WriteParamInPart(nPartId As Integer) Select Case Type Case Params.SPIRALVASE EgtSetInfo(nPartId, MAC_SPIRALVASE, If(m_bValue, 1, 0)) Case Params.RIBSLINK EgtSetInfo(nPartId, MAC_RIBSLINK, If(m_bValue, 1, 0)) Case Params.RIBSINVERTORDER EgtSetInfo(nPartId, MAC_RIBSINVERTORDER, If(m_bValue, 1, 0)) Case Params.RIBSINVERTDIRECTION EgtSetInfo(nPartId, MAC_RIBSINVERTDIRECTION, If(m_bValue, 1, 0)) Case Params.RIBSLEADININVERT EgtSetInfo(nPartId, MAC_RIBSLEADININVERT, If(m_bValue, 1, 0)) Case Params.RIBSLEADOUTINVERT EgtSetInfo(nPartId, MAC_RIBSLEADOUTINVERT, If(m_bValue, 1, 0)) 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 = DbParam.bOrigValue NotifyPropertyChanged(NameOf(bValue)) NotifyPropertyChanged(NameOf(bIsModifiedFromDb)) End Sub #End Region ' ResetParam #End Region ' COMMANDS End Class