Imports System.Collections.ObjectModel Imports System.Collections.Specialized Imports System.ComponentModel Imports System.Reflection Imports EgtUILib Imports EgtWPFLib5 Imports Icarus.Machining Public Class Machining Inherits VMBase Public Enum MPAR_SLICINGTYPE As Integer VERTICAL = 1 DEG45 = 2 DEG45_Y = 3 HORIZONTAL = 4 End Enum Public Enum MPAR_STRANDORDERS As Integer OUTTOIN = 1 INTOOUT = 2 End Enum Public Enum MPAR_DIRECTIONS As Integer CCW = 1 CW = 2 End Enum Public Enum MPAR_LINKTYPES As Integer NONE = 1 LINEAR = 2 BIARC = 3 End Enum Public Enum MPAR_LEADINOUT As Integer NONE = 1 LINEAR = 2 ARC = 3 End Enum Public Enum MPAR_RIBSTYPE As Integer INTERNAL = 1 EXTERNAL = 2 UNBOUNDED = 3 SUPPORT = 4 End Enum Public Enum MPAR_DYNAMIC_MODE As Integer STANDARD = 1 FAST = 2 End Enum Public Enum MPAR_PRINT_ORDER As Integer SHELL = 1 EXTRA_SHELL = 2 INFILL = 3 AUX_SOLID = 4 RIB_UNBOUNDED = 5 RIB_EXTERNAL = 6 RIB_INTERNAL = 7 RIB_SUPPORT = 8 End Enum Public Enum MPAR_INFILL_TYPE As Integer NONE = 0 OFFSET = 16 ZIGZAG = 17 LINES = 32 GRID = 33 ZIGZAG_GRID = 34 HONEYCOMB = 35 HONEYCOMB_GRID = 36 End Enum Protected m_CathegoryList As New ObservableCollection(Of MachiningCathegory) Public ReadOnly Property CathegoryList As ObservableCollection(Of MachiningCathegory) Get Return m_CathegoryList End Get End Property Protected m_bIsModified As Boolean Public ReadOnly Property bIsModified As Boolean Get Return m_bIsModified End Get End Property Friend Sub UpdateIsModified() m_bIsModified = m_CathegoryList.Any(Function(x) x.MachiningParamList.Any(Function(y) y.bIsModified)) OrElse bIsModifiedName NotifyPropertyChanged(NameOf(ghName)) End Sub Protected m_nIndex As Integer Public ReadOnly Property nIndex As Integer Get Return m_nIndex End Get End Property Friend Sub SetIndex(nValue As Integer) m_nIndex = nValue End Sub Protected m_sGUID As String = "" Public Property sGUID As String Get Return m_sGUID End Get Set(value As String) m_sGUID = value End Set End Property Private m_sOrigName As String = "" Protected m_sName As String = "" Public Property sName As String Get Return m_sName End Get Set(value As String) m_sName = value Map.refMachiningDbVM.SetNameVisibility(False) UpdateIsModified() Map.refMachiningDbVM.SetIsEnabled(True) End Set End Property Public ReadOnly Property ghName As String Get Return m_sName & If(m_bIsModified, "*", "") End Get End Property Public ReadOnly Property bIsModifiedName As Boolean Get Return m_sName <> m_sOrigName End Get End Property Sub New() End Sub Sub New(nIndex As Integer) m_nIndex = nIndex If ReadMachiningParamString(nIndex, MAC_GUID, "", m_sGUID) > 0 Then ReadMachiningParamString(nIndex, MAC_NAME, "", m_sName) Else nIndex = -1 m_sGUID = Guid.NewGuid.ToString() m_sName = "New Machining" End If m_sOrigName = m_sName m_CathegoryList.Add(New MachiningCathegory(MachiningCathegory.Cathegories.GENERAL, nIndex)) m_CathegoryList.Add(New MachiningCathegory(MachiningCathegory.Cathegories.LINK, nIndex)) m_CathegoryList.Add(New MachiningCathegory(MachiningCathegory.Cathegories.RIBS, nIndex)) m_CathegoryList.Add(New MachiningCathegory(MachiningCathegory.Cathegories.SHELL_NUMBER, nIndex)) m_CathegoryList.Add(New MachiningCathegory(MachiningCathegory.Cathegories.AUX_SOLID, nIndex)) m_CathegoryList.Add(New MachiningCathegory(MachiningCathegory.Cathegories.INFILL, nIndex)) m_CathegoryList.Add(New MachiningCathegory(MachiningCathegory.Cathegories.MATERIALS, nIndex)) For Each Cathegory In m_CathegoryList For Each MachiningParam In Cathegory.MachiningParamList AddHandler MachiningParam.PropertyChanged, AddressOf OnMachiningParamPropertyChanged Next Next 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 Private Sub SaveName() m_sOrigName = m_sName End Sub Private Sub ResetName() m_sName = m_sOrigName NotifyPropertyChanged(NameOf(ghName)) End Sub Friend Overridable Sub Save() If bIsModified Then ' salvo tutti i parametri su orig SaveParams() ' resetto stato di modificata UpdateIsModified() ' segno Db come modificato Map.refMachiningDbVM.SetIsModified(True) End If End Sub Protected Overridable Sub SaveParams() SaveName() For Each Cathegory In m_CathegoryList Cathegory.SaveParams() Next End Sub Friend Sub ResetModification() ResetName() If bIsModified Then ' annullo le modifiche di tutti i parametri ResetParams() ' resetto stato di modificata UpdateIsModified() End If End Sub Private Sub ResetParams() For Each Cathegory In m_CathegoryList Cathegory.ResetParams() Next End Sub Friend Sub WriteParamsOnDb(nIndex As Integer, Optional sFilePath As String = "") WriteMachiningParam(nIndex, MAC_GUID, m_sGUID, sFilePath) WriteMachiningParam(nIndex, MAC_NAME, m_sName, sFilePath) For Each Cathegory In m_CathegoryList Cathegory.WriteParamOnDb(nIndex, sFilePath) Next End Sub Friend Overridable 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), NameOf(sender.Value) UpdateIsModified() Map.refMachiningDbVM.NotifyPropertyChanged(NameOf(Map.refMachiningDbVM.ImpExp_IsEnabled)) End Select End Sub End Class Public Class MachiningIndex Inherits VMBase Private Shared m_Empty As New MachiningIndex(-1, Guid.Empty, "None") Private m_nIndex As Integer Public ReadOnly Property nIndex As Integer Get Return m_nIndex End Get End Property Private m_sGUID As Guid Public ReadOnly Property sGUID As Guid Get Return m_sGUID End Get End Property Private m_sName As String Public ReadOnly Property sName As String Get Return m_sName End Get End Property Sub New(nIndex As Integer, GUID As Guid, sName As String) m_nIndex = nIndex m_sGUID = GUID m_sName = sName End Sub Friend Shared Function Empty() As MachiningIndex Return m_Empty End Function End Class Public Class MachiningCathegory Inherits VMBase Public Enum Cathegories As Integer GENERAL = 1 LINK = 2 RIBS = 8 SHELL_NUMBER = 9 AUX_SOLID = 10 INFILL = 11 MATERIALS = 12 End Enum Protected m_Type As Cathegories Public Overloads ReadOnly Property Type As Cathegories Get Return m_Type End Get End Property Protected m_sName As String Public ReadOnly Property sName As String Get Return m_sName End Get End Property Protected m_MachiningParamList As List(Of MachiningParam) Public ReadOnly Property MachiningParamList As List(Of MachiningParam) Get Return m_MachiningParamList End Get End Property Protected m_Cathegory_IsExpanded As Boolean Public Property Cathegory_IsExpanded As Boolean Get Return m_Cathegory_IsExpanded End Get Set(value As Boolean) m_Cathegory_IsExpanded = value End Set End Property Sub New() End Sub Sub New(Type As Cathegories, nIndex As Integer) m_Type = Type Select Case m_Type Case Cathegories.GENERAL m_sName = "General" m_MachiningParamList = New List(Of MachiningParam)({New ComboMachiningParam(MachiningParam.Params.SLICINGTYPE, nIndex, Me), New CheckMachiningParam(MachiningParam.Params.SPIRALVASE, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.STRANDH, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.STRANDW, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.STRANDCOUNT, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.OFFSET, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.STRANDOVERLAP, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.STARTPOINTOFFSETONSLICE, nIndex, Me), New ComboMachiningParam(MachiningParam.Params.STRANDORDER, nIndex, Me), New ComboMachiningParam(MachiningParam.Params.DIRECTION, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.G0FEED, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.G0FEEDZ, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.LINKZUP, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.TOOLDIAM, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.FLOWRATE_PC, nIndex, Me), New ComboMachiningParam(MachiningParam.Params.DYNAMIC_MODE, nIndex, Me), New OrderedMachiningParam(MachiningParam.Params.PRINT_ORDER, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.PREFLOWDELAY, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.POSTFLOWDELAY, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.SCREWBACK, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.SLICINGHEIGHT, nIndex, Me)}) Case Cathegories.LINK m_sName = "Shell" m_MachiningParamList = New List(Of MachiningParam)({New NumericMachiningParam(MachiningParam.Params.INNERSHELLWIDTH, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.OFFSETLEADPOINT, nIndex, Me), New ComboMachiningParam(MachiningParam.Params.LINKTYPE, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.LINKPARAM, nIndex, Me), New ComboMachiningParam(MachiningParam.Params.LEADIN, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.LEADINTANGDIST, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.LEADINORTHODIST, nIndex, Me), New ComboMachiningParam(MachiningParam.Params.LEADOUT, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.LEADOUTTANGDIST, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.LEADOUTORTHODIST, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.COASTINGLEN, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.COASTINGFEED_PC, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.WIPELEN, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.WIPEFEED_PC, nIndex, Me)}) 'New NumericMachiningParam(MachiningParam.Params.WIPEDIR, nIndex, Me)}) Case Cathegories.RIBS m_sName = "Ribs" m_MachiningParamList = New List(Of MachiningParam)({New NumericMachiningParam(MachiningParam.Params.RIBSSTRANDWIDTH, nIndex, Me), New ComboMachiningParam(MachiningParam.Params.RIBSTYPE, nIndex, Me), New CheckMachiningParam(MachiningParam.Params.RIBSLIMITUNBOUNDEDWITHSOLID, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.RIBSOVERLAP, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.RIBSSTRANDCOUNT, nIndex, Me), New CheckMachiningParam(MachiningParam.Params.RIBSLINK, nIndex, Me), New CheckMachiningParam(MachiningParam.Params.RIBSINVERTORDER, nIndex, Me), New CheckMachiningParam(MachiningParam.Params.RIBSINVERTDIRECTION, nIndex, Me), New CheckMachiningParam(MachiningParam.Params.RIBSINVERTSTRANDORDER, nIndex, Me), New CheckMachiningParam(MachiningParam.Params.RIBSLEADININVERT, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.RIBSLEADINLEN, nIndex, Me), New CheckMachiningParam(MachiningParam.Params.RIBSLEADOUTINVERT, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.RIBSLEADOUTLEN, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.RIBSLEADOUTCOASTING, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.RIBSLEADOUTWIPE, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.RIBSLEADOUTWIPEDIR, nIndex, Me)}) Case Cathegories.SHELL_NUMBER m_sName = "Reduce Shell Number" m_MachiningParamList = New List(Of MachiningParam)({New NumericMachiningParam(MachiningParam.Params.SHELLNBRDIFFERENCE, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.SHELLNBRCOASTING, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.SHELLNBRWIPE, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.SHELLNBRWIPEDIR, nIndex, Me)}) Case Cathegories.AUX_SOLID m_sName = "Filled Solid" m_MachiningParamList = New List(Of MachiningParam)({New NumericMachiningParam(MachiningParam.Params.AUXSOLIDSSTRANDWIDTH, nIndex, Me), New ComboMachiningParam(MachiningParam.Params.AUXSOLIDSINFILL, nIndex, Me), New CheckMachiningParam(MachiningParam.Params.AUXSOLIDSINFILLLINK, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.AUXSOLIDSSTRANDCOUNT, nIndex, Me), New ComboMachiningParam(MachiningParam.Params.AUXSOLIDSSTRANDORDER, nIndex, Me), New ComboMachiningParam(MachiningParam.Params.AUXSOLIDSLINKTYPE, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.AUXSOLIDSLINKPARAM, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.AUXSOLIDSSTARTPOINTOFFSETONSLICE, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.AUXSOLIDSOFFSETLEADPOINT, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.AUXSOLIDSDENSITY, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.AUXSOLIDSGRIDOVERLAP, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.AUXSOLIDSDIRECTION, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.AUXSOLIDSOFFSETX, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.AUXSOLIDSOFFSETY, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.AUXSOLIDSOVERLAP, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.AUXSOLIDSCOASTINGLEN, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.AUXSOLIDSWIPELEN, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.AUXSOLIDSWIPEDIR, nIndex, Me)}) Case Cathegories.INFILL m_sName = "Infill" m_MachiningParamList = New List(Of MachiningParam)({New NumericMachiningParam(MachiningParam.Params.INFILLSTRANDWIDTH, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.FLOORCOUNT, nIndex, Me), New ComboMachiningParam(MachiningParam.Params.FLOORTYPE, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.CEILCOUNT, nIndex, Me), New ComboMachiningParam(MachiningParam.Params.CEILTYPE, nIndex, Me), New ComboMachiningParam(MachiningParam.Params.INFILLTYPE, nIndex, Me), New CheckMachiningParam(MachiningParam.Params.INFILLLINK, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.INFILLDENSITY, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.INFILLGRIDOVERLAP, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.INFILLDIRECTION, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.INFILLOFFSETX, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.INFILLOFFSETY, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.INFILLOVERLAP, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.INFILLCOASTING, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.INFILLWIPE, nIndex, Me), New NumericMachiningParam(MachiningParam.Params.INFILLWIPEDIR, nIndex, Me)}) Case Cathegories.MATERIALS m_sName = "Materials" Dim sMaterials As String = "" ReadMachiningParamSplit(nIndex, MAC_MATERIALS, "", sMaterials) Dim MaterialGuidList As List(Of String) = sMaterials.Split(";"c).ToList() m_MachiningParamList = New List(Of MachiningParam) For Each Material In Map.refTopPanelVM.MaterialList m_MachiningParamList.Add(New MaterialMachiningParam(Material.sName, Material.sGUID, MaterialGuidList.Contains(Material.sGUID), Me)) Next End Select ' verifico dipendenze tra parametri Select Case m_Type Case Cathegories.LINK For Each Param In {MachiningParam.Params.LINKTYPE, MachiningParam.Params.LEADIN, MachiningParam.Params.LEADOUT} Dim MachiningParam As ComboMachiningParam = MachiningParamList.FirstOrDefault(Function(z) z.Type = Param) MachiningParam.ManageDependencyParam() Next Case Cathegories.RIBS For Each Param In {MachiningParam.Params.RIBSTYPE} Dim MachiningParam As ComboMachiningParam = MachiningParamList.FirstOrDefault(Function(z) z.Type = Param) MachiningParam.ManageDependencyParam() Next Case Cathegories.AUX_SOLID For Each Param In {MachiningParam.Params.AUXSOLIDSINFILL} Dim MachiningParam As ComboMachiningParam = MachiningParamList.FirstOrDefault(Function(z) z.Type = Param) MachiningParam.ManageDependencyParam() Next For Each Param In {MachiningParam.Params.AUXSOLIDSSTRANDCOUNT} Dim MachiningParam As NumericMachiningParam = MachiningParamList.FirstOrDefault(Function(z) z.Type = Param) MachiningParam.ManageDependencyParam() Next Case Cathegories.INFILL For Each Param In {MachiningParam.Params.FLOORCOUNT, MachiningParam.Params.CEILCOUNT} Dim MachiningParam As NumericMachiningParam = MachiningParamList.FirstOrDefault(Function(z) z.Type = Param) MachiningParam.ManageDependencyParam() Next For Each Param In {MachiningParam.Params.INFILLTYPE} Dim MachiningParam As ComboMachiningParam = MachiningParamList.FirstOrDefault(Function(z) z.Type = Param) MachiningParam.ManageDependencyParam() Next End Select End Sub Friend Sub SaveParams() For Each Param In m_MachiningParamList Param.SaveParam() Next End Sub Friend Sub ResetParams() For Each Param In m_MachiningParamList Param.ResetParam() Next End Sub Friend Sub WriteParamOnDb(nIndex As Integer, Optional sFilePath As String = "") If Type = Cathegories.MATERIALS Then WriteMachiningParamSplit(nIndex, MAC_MATERIALS, "", sFilePath) End If For Each Param In m_MachiningParamList Param.WriteParamOnDb(nIndex, sFilePath) Next End Sub End Class Public MustInherit Class MachiningParam Inherits VMBase Public Enum MinMaxTypes As Integer ABSOLUT = 1 PERCENTAGE = 2 End Enum Public Enum Params As Integer SLICINGTYPE = 1 SPIRALVASE = 2 STRANDH = 3 STRANDW = 4 STRANDCOUNT = 5 OFFSET = 6 STRANDOVERLAP = 7 STARTPOINTOFFSETONSLICE = 8 STRANDORDER = 9 DIRECTION = 10 G0FEED = 12 LINKZUP = 13 G0FEEDZ = 14 TOOLDIAM = 15 FLOWRATE_PC = 16 DYNAMIC_MODE = 17 PRINT_ORDER = 18 PREFLOWDELAY = 19 POSTFLOWDELAY = 20 SCREWBACK = 21 SLICINGHEIGHT = 22 LINKTYPE = 51 LINKPARAM = 52 LEADIN = 53 LEADINTANGDIST = 54 LEADINORTHODIST = 55 OFFSETLEADPOINT = 56 LEADOUT = 57 LEADOUTTANGDIST = 58 LEADOUTORTHODIST = 59 COASTINGLEN = 60 COASTINGFEED_PC = 61 WIPELEN = 62 WIPEFEED_PC = 63 INNERSHELLWIDTH = 64 'WIPEDIR = 64 RIBSTYPE = 101 RIBSOVERLAP = 102 RIBSSTRANDCOUNT = 103 RIBSLINK = 104 RIBSINVERTORDER = 105 RIBSINVERTDIRECTION = 106 RIBSINVERTSTRANDORDER = 107 RIBSLEADININVERT = 108 RIBSLEADINLEN = 109 RIBSLEADOUTINVERT = 110 RIBSLEADOUTLEN = 111 RIBSLEADOUTCOASTING = 112 RIBSLEADOUTWIPE = 113 RIBSLEADOUTWIPEDIR = 114 RIBSLIMITUNBOUNDEDWITHSOLID = 115 RIBSSTRANDWIDTH = 116 SHELLNBRDIFFERENCE = 151 SHELLNBRCOASTING = 152 SHELLNBRWIPE = 153 SHELLNBRWIPEDIR = 154 AUXSOLIDSOVERLAP = 201 AUXSOLIDSINFILL = 202 AUXSOLIDSSTRANDORDER = 203 AUXSOLIDSLINKTYPE = 204 AUXSOLIDSLINKPARAM = 205 AUXSOLIDSSTARTPOINTOFFSETONSLICE = 206 AUXSOLIDSOFFSETLEADPOINT = 207 AUXSOLIDSDENSITY = 208 AUXSOLIDSGRIDOVERLAP = 209 AUXSOLIDSDIRECTION = 210 AUXSOLIDSOFFSETX = 211 AUXSOLIDSOFFSETY = 212 AUXSOLIDSCOASTINGLEN = 213 AUXSOLIDSWIPELEN = 214 AUXSOLIDSWIPEDIR = 215 AUXSOLIDSSTRANDCOUNT = 216 AUXSOLIDSINFILLLINK = 217 AUXSOLIDSSTRANDWIDTH = 218 FLOORCOUNT = 250 FLOORTYPE = 251 CEILCOUNT = 252 CEILTYPE = 253 INFILLTYPE = 254 INFILLLINK = 255 INFILLDENSITY = 256 INFILLOVERLAP = 257 INFILLGRIDOVERLAP = 258 INFILLDIRECTION = 259 INFILLOFFSETX = 260 INFILLOFFSETY = 261 INFILLCOASTING = 262 INFILLWIPE = 263 INFILLWIPEDIR = 264 INFILLSTRANDWIDTH = 265 Materials = 500 End Enum Protected m_Type As Params Public ReadOnly Property Type As Params Get Return m_Type End Get End Property Protected m_sName As String Public ReadOnly Property sName As String Get Return m_sName End Get End Property Public MustOverride ReadOnly Property bIsModified As Boolean Protected m_Cathegory As MachiningCathegory Public ReadOnly Property Cathegory As MachiningCathegory Get Return m_Cathegory End Get End Property Public ReadOnly Property bIsBeta As Boolean Get Select Case m_Type Case Params.FLOORCOUNT, Params.FLOORTYPE, Params.CEILCOUNT, Params.CEILTYPE, Params.INFILLTYPE Return True Case Else Return False End Select End Get End Property Public ReadOnly Property IsBeta_Visibility As Visibility Get Return If(bIsBeta, Visibility.Visible, Visibility.Collapsed) End Get End Property Sub New(Type As Params, Cathegory As MachiningCathegory) m_Type = Type m_Cathegory = Cathegory Select Case m_Type Case Params.SLICINGTYPE m_sName = "Slicing Direction" Case Params.STRANDH m_sName = "Strand Height" Case Params.STRANDW m_sName = "Strand Width" Case Params.STRANDCOUNT m_sName = "Strand Count" Case Params.OFFSET m_sName = "Offset" Case Params.STARTPOINTOFFSETONSLICE m_sName = "Start Point Offset On Layer" Case Params.STRANDORDER m_sName = "Strand Order" Case Params.DIRECTION m_sName = "Direction" Case Params.LINKTYPE m_sName = "Link Type" Case Params.LINKPARAM m_sName = "Link Param" Case Params.LINKZUP m_sName = "Link Z Up" Case Params.INNERSHELLWIDTH m_sName = "Custom Inner Shell Width" Case Params.OFFSETLEADPOINT m_sName = "Offset Lead Point" Case Params.LEADIN m_sName = "Lead In" Case Params.LEADINTANGDIST m_sName = "Lead In Tang Dist" Case Params.LEADINORTHODIST m_sName = "Lead In Ortho Dist" Case Params.LEADOUT m_sName = "Lead Out" Case Params.LEADOUTTANGDIST m_sName = "Lead Out Tang Dist" Case Params.LEADOUTORTHODIST m_sName = "Lead Out Ortho Dist" Case Params.COASTINGLEN m_sName = "Coasting Len" Case Params.COASTINGFEED_PC m_sName = "Coasting Feed [%]" Case Params.WIPELEN m_sName = "Wipe Len" Case Params.WIPEFEED_PC m_sName = "Wipe Feed [%]" Case Params.FLOORCOUNT m_sName = "Floor Count" Case Params.G0FEED m_sName = "G0 Feed" Case Params.G0FEEDZ m_sName = "G0 Feed Z" Case Params.TOOLDIAM m_sName = "Nozzle Diameter" Case Params.PREFLOWDELAY m_sName = "Pre Flow Delay" Case Params.POSTFLOWDELAY m_sName = "Post Flow Delay" Case Params.SCREWBACK m_sName = "Screw Back" Case Params.SLICINGHEIGHT m_sName = "Slicing Height" Case Params.RIBSSTRANDWIDTH m_sName = "Custom Strand Width" Case Params.RIBSTYPE m_sName = "Type" Case Params.RIBSOVERLAP m_sName = "Overlap [%]" Case Params.RIBSSTRANDCOUNT m_sName = "Strand Count" Case Params.RIBSLINK m_sName = "Link" Case Params.RIBSINVERTORDER m_sName = "Invert Order" Case Params.RIBSINVERTDIRECTION m_sName = "Invert Direction" Case Params.RIBSINVERTSTRANDORDER m_sName = "Invert Strand Order" Case Params.RIBSLEADININVERT m_sName = "Lead In Invert" Case Params.RIBSLEADINLEN m_sName = "Lead In Len" Case Params.RIBSLEADOUTINVERT m_sName = "Lead Out Invert" Case Params.RIBSLEADOUTLEN m_sName = "Lead Out Len" Case Params.RIBSLEADOUTCOASTING m_sName = "Lead Out Coasting" Case Params.RIBSLEADOUTWIPE m_sName = "Lead Out Wipe" Case Params.RIBSLEADOUTWIPEDIR m_sName = "Lead Out Wipe Dir [deg]" Case Params.RIBSLIMITUNBOUNDEDWITHSOLID m_sName = "Limit Unbounded With Solid" Case Params.SHELLNBRDIFFERENCE m_sName = "Difference" Case Params.SHELLNBRCOASTING m_sName = "Coasting" Case Params.SHELLNBRWIPE m_sName = "Wipe" Case Params.SHELLNBRWIPEDIR m_sName = "Wipe Direction [deg]" Case Params.AUXSOLIDSSTRANDWIDTH m_sName = "Custom Strand Width" Case Params.AUXSOLIDSOVERLAP m_sName = "Overlap [%]" Case Params.AUXSOLIDSINFILL m_sName = "Infill" Case Params.AUXSOLIDSINFILLLINK m_sName = "Infill Link" Case Params.AUXSOLIDSSTRANDCOUNT m_sName = "Strand Count" Case Params.AUXSOLIDSSTRANDORDER m_sName = "Strand Order" Case Params.AUXSOLIDSLINKTYPE m_sName = "Link Type" Case Params.AUXSOLIDSLINKPARAM m_sName = "Link Parameter" Case Params.AUXSOLIDSSTARTPOINTOFFSETONSLICE m_sName = "Start Point Offset On Slice" Case Params.AUXSOLIDSOFFSETLEADPOINT m_sName = "Offset Lead Point" Case Params.AUXSOLIDSDENSITY m_sName = "Density [%]" Case Params.AUXSOLIDSGRIDOVERLAP m_sName = "Grid Overlap [%]" Case Params.AUXSOLIDSDIRECTION m_sName = "Direction" Case Params.AUXSOLIDSOFFSETX m_sName = "Offset X" Case Params.AUXSOLIDSOFFSETY m_sName = "Offset Y" Case Params.AUXSOLIDSCOASTINGLEN m_sName = "Coasting Length" Case Params.AUXSOLIDSWIPELEN m_sName = "Wipe Length" Case Params.AUXSOLIDSWIPEDIR m_sName = "Wipe Direction [deg]" Case Params.SPIRALVASE m_sName = "Spiral Vase" 'Case Params.WIPEDIR ' m_sName = "Wipe Direction [deg]" Case Params.STRANDOVERLAP m_sName = "Strand Overlap [%]" Case Params.FLOWRATE_PC m_sName = "Flow Rate [%]" Case Params.DYNAMIC_MODE m_sName = "Dynamic Mode" Case Params.PRINT_ORDER m_sName = "Print Order" Case Params.INFILLSTRANDWIDTH m_sName = "Custom Strand Width" Case Params.FLOORTYPE m_sName = "Floor Type" Case Params.CEILCOUNT m_sName = "Ceil Count" Case Params.CEILTYPE m_sName = "Ceil Type" Case Params.INFILLTYPE m_sName = "Infill Type" Case Params.INFILLLINK m_sName = "Link" Case Params.INFILLDENSITY m_sName = "Density [%]" Case Params.INFILLOVERLAP m_sName = "Overlap [%]" Case Params.INFILLGRIDOVERLAP m_sName = "Grid Overlap [%]" Case Params.INFILLDIRECTION m_sName = "Direction" Case Params.INFILLOFFSETX m_sName = "Offset X" Case Params.INFILLOFFSETY m_sName = "Offset Y" Case Params.INFILLCOASTING m_sName = "Coasting" Case Params.INFILLWIPE m_sName = "Wipe" Case Params.INFILLWIPEDIR m_sName = "Wipe Direction" End Select End Sub Sub New(sName As String, Cathegory As MachiningCathegory) m_Type = Params.MATERIALS m_Cathegory = Cathegory m_sName = sName End Sub Friend MustOverride Sub WriteParamOnDb(nIndex As Integer, Optional sFilePath As String = "") Friend Overridable Sub WriteParamInPart(nIndex As Integer) End Sub Friend MustOverride Sub SaveParam() Friend MustOverride Sub ResetParam() End Class Public Class NumericMachiningParam Inherits MachiningParam Protected m_bIsLen As Boolean = False Protected m_bIsActiveMinMax As Boolean = False Protected m_MinMaxLinkedParam As Params = 0 Protected m_MinMaxType As MinMaxTypes = 0 Protected m_dMinValue As Double Protected m_dMaxValue As Double Protected m_dValue As Double Public ReadOnly Property dValue As Double Get Return m_dValue End Get End Property Public Overridable Property sValue As String Get Return If(m_bIsLen, LenToString(m_dValue, 1), DoubleToString(m_dValue, 2)) End Get Set(value As String) Dim dTempValue As Double = 0 If m_bIsLen Then StringToLen(value, dTempValue) Else StringToDouble(value, dTempValue) End If If m_bIsActiveMinMax Then If m_MinMaxType = MinMaxTypes.ABSOLUT Then If dTempValue >= m_dMinValue AndAlso dTempValue <= m_dMaxValue Then m_dValue = dTempValue End If ElseIf m_MinMaxType = MinMaxTypes.PERCENTAGE Then Dim LinkedParam As MachiningParam = Nothing ' cerco il parametro a cui e' collegato For Each CurrCathegory In Map.refMachiningDbVM.SelMachining.CathegoryList LinkedParam = CurrCathegory.MachiningParamList.FirstOrDefault(Function(x) x.Type = m_MinMaxLinkedParam) If Not IsNothing(LinkedParam) Then Exit For Next If Not IsNothing(LinkedParam) AndAlso TypeOf LinkedParam Is NumericMachiningParam Then Dim NumericLinkedParam As NumericMachiningParam = DirectCast(LinkedParam, NumericMachiningParam) If dTempValue >= NumericLinkedParam.dValue * m_dMinValue / 100 AndAlso dTempValue <= NumericLinkedParam.dValue * m_dMaxValue / 100 Then m_dValue = dTempValue End If Else m_dValue = dTempValue End If End If Else m_dValue = dTempValue End If NotifyPropertyChanged(NameOf(sValue)) ManageDependencyParam() End Set End Property Protected m_dOrigValue As Double Public ReadOnly Property dOrigValue As Double Get Return m_dOrigValue End Get End Property Public Overrides ReadOnly Property bIsModified As Boolean Get Return m_dValue <> m_dOrigValue End Get End Property Protected m_bIsActive As Boolean = True Public ReadOnly Property bIsActive As Boolean Get Return m_bIsActive End Get End Property Friend Sub SetIsActive(bValue As Boolean) m_bIsActive = bValue NotifyPropertyChanged(NameOf(bIsActive)) End Sub Sub New(Type As Params, Cathegory As MachiningCathegory) MyBase.New(Type, Cathegory) End Sub Sub New(Type As Params, nIndex As Integer, Cathegory As MachiningCathegory) MyBase.New(Type, Cathegory) ' leggo ed imposto eventuali min e max Dim sMinMax As String = "" If GetPrivateProfileString(S_MINMAX, Type, "", sMinMax, CurrentMachine.sMachIniFile) > 0 Then Dim sMinMaxValues() As String = sMinMax.Split(","c) Dim dMin As Double = 0 Dim dMax As Double = 0 If sMinMaxValues.Count() = 2 Then If StringToDouble(sMinMaxValues(0), dMin) AndAlso StringToDouble(sMinMaxValues(1), dMax) Then m_MinMaxType = MinMaxTypes.ABSOLUT m_dMinValue = dMin m_dMaxValue = dMax m_bIsActiveMinMax = True End If ElseIf sMinMaxValues.Count() > 2 Then Dim nMinMaxType As Integer = 0 If StringToDouble(sMinMaxValues(0), nMinMaxType) AndAlso nMinMaxType = 1 Then If StringToDouble(sMinMaxValues(0), dMin) AndAlso StringToDouble(sMinMaxValues(1), dMax) Then m_MinMaxType = nMinMaxType m_dMinValue = dMin m_dMaxValue = dMax m_bIsActiveMinMax = True End If ElseIf StringToDouble(sMinMaxValues(0), nMinMaxType) AndAlso nMinMaxType = 2 Then Dim nMinMaxLinkedParam As Integer = 0 If sMinMaxValues.Count() >= 4 AndAlso Integer.TryParse(sMinMaxValues(1), nMinMaxLinkedParam) AndAlso StringToDouble(sMinMaxValues(2), dMin) AndAlso StringToDouble(sMinMaxValues(3), dMax) Then m_MinMaxLinkedParam = nMinMaxLinkedParam m_MinMaxType = nMinMaxType m_dMinValue = dMin m_dMaxValue = dMax m_bIsActiveMinMax = True End If End If End If End If If Type = Params.SLICINGHEIGHT Then m_dMinValue = 0 m_dMaxValue = CurrentMachine.dSlicingMaxHeight m_bIsActiveMinMax = True End If ' leggo parametri da Db If nIndex = 0 Then m_dValue = 0 m_bIsLen = True Else Select Case Type Case Params.STRANDH m_dValue = ReadMachiningParamDouble(nIndex, MAC_STRANDH, 0) m_bIsLen = True Case Params.STRANDW m_dValue = ReadMachiningParamDouble(nIndex, MAC_STRANDW, 0) m_bIsLen = True Case Params.STRANDCOUNT m_dValue = ReadMachiningParamDouble(nIndex, MAC_STRANDCOUNT, 0) m_bIsLen = False Case Params.OFFSET m_dValue = ReadMachiningParamDouble(nIndex, MAC_OFFSET, 0) m_bIsLen = True Case Params.STRANDOVERLAP m_dValue = ReadMachiningParamDouble(nIndex, MAC_STRANDOVERLAP, 0) m_bIsLen = False Case Params.STARTPOINTOFFSETONSLICE m_dValue = ReadMachiningParamDouble(nIndex, MAC_STARTPOINTOFFSETONSLICE, 0) m_bIsLen = True Case Params.LINKPARAM m_dValue = ReadMachiningParamDouble(nIndex, MAC_LINKPARAM, 0) m_bIsLen = True Case Params.LINKZUP m_dValue = ReadMachiningParamDouble(nIndex, MAC_LINKZUP, 0) m_bIsLen = True Case Params.INNERSHELLWIDTH m_dValue = ReadMachiningParamDouble(nIndex, MAC_INNERSHELLWIDTH, 0) m_bIsLen = True Case Params.OFFSETLEADPOINT m_dValue = ReadMachiningParamDouble(nIndex, MAC_OFFSETLEADPOINT, 0) m_bIsLen = True Case Params.LEADINTANGDIST m_dValue = ReadMachiningParamDouble(nIndex, MAC_LEADINTANGDIST, 0) m_bIsLen = True Case Params.LEADINORTHODIST m_dValue = ReadMachiningParamDouble(nIndex, MAC_LEADINORTHODIST, 0) m_bIsLen = True Case Params.LEADOUTTANGDIST m_dValue = ReadMachiningParamDouble(nIndex, MAC_LEADOUTTANGDIST, 0) m_bIsLen = True Case Params.LEADOUTORTHODIST m_dValue = ReadMachiningParamDouble(nIndex, MAC_LEADOUTORTHODIST, 0) m_bIsLen = True Case Params.COASTINGLEN m_dValue = ReadMachiningParamDouble(nIndex, MAC_COASTINGLEN, 0) m_bIsLen = True Case Params.COASTINGFEED_PC m_dValue = ReadMachiningParamDouble(nIndex, MAC_COASTINGFEEDPU, 0) m_bIsLen = False Case Params.WIPELEN m_dValue = ReadMachiningParamDouble(nIndex, MAC_WIPELEN, 0) m_bIsLen = True Case Params.WIPEFEED_PC m_dValue = ReadMachiningParamDouble(nIndex, MAC_WIPEFEEDPU, 0) m_bIsLen = False 'Case Params.WIPEDIR ' m_dValue = ReadMachiningParamDouble(nIndex, MAC_WIPEDIR, 0) ' m_bIsLen = True Case Params.FLOORCOUNT m_dValue = ReadMachiningParamDouble(nIndex, MAC_FLOORCOUNT, 0) m_bIsLen = False Case Params.G0FEED m_dValue = ReadMachiningParamDouble(nIndex, MAC_G0FEED, 10000) m_bIsLen = True Case Params.G0FEEDZ m_dValue = ReadMachiningParamDouble(nIndex, MAC_G0FEEDZ, 1000) m_bIsLen = True Case Params.TOOLDIAM m_dValue = ReadMachiningParamDouble(nIndex, MAC_TOOLDIAM, 0) m_bIsLen = True Case Params.PREFLOWDELAY m_dValue = ReadMachiningParamDouble(nIndex, MAC_PREFLOWDELAY, 0) m_bIsLen = False Case Params.POSTFLOWDELAY m_dValue = ReadMachiningParamDouble(nIndex, MAC_POSTFLOWDELAY, 0) m_bIsLen = False Case Params.SCREWBACK m_dValue = ReadMachiningParamDouble(nIndex, MAC_SCREWBACK, 45) m_bIsLen = False Case Params.SLICINGHEIGHT m_dValue = ReadMachiningParamDouble(nIndex, MAC_SLICINGHEIGHT, CurrentMachine.dSlicingMaxHeight) m_bIsLen = False Case Params.RIBSSTRANDWIDTH m_dValue = ReadMachiningParamDouble(nIndex, MAC_RIBSSTRANDWIDTH, 0) m_bIsLen = True Case Params.RIBSOVERLAP m_dValue = ReadMachiningParamDouble(nIndex, MAC_RIBSOVERLAP, 0) m_bIsLen = False Case Params.RIBSSTRANDCOUNT m_dValue = ReadMachiningParamDouble(nIndex, MAC_RIBSSTRANDCOUNT, 0) m_bIsLen = False Case Params.RIBSLEADINLEN m_dValue = ReadMachiningParamDouble(nIndex, MAC_RIBSLEADINLEN, 0) m_bIsLen = True Case Params.RIBSLEADOUTLEN m_dValue = ReadMachiningParamDouble(nIndex, MAC_RIBSLEADOUTLEN, 0) m_bIsLen = True Case Params.RIBSLEADOUTCOASTING m_dValue = ReadMachiningParamDouble(nIndex, MAC_RIBSLEADOUTCOASTING, 0) m_bIsLen = True Case Params.RIBSLEADOUTWIPE m_dValue = ReadMachiningParamDouble(nIndex, MAC_RIBSLEADOUTWIPE, 0) m_bIsLen = True Case Params.RIBSLEADOUTWIPEDIR m_dValue = ReadMachiningParamDouble(nIndex, MAC_RIBSLEADOUTWIPEDIR, 0) m_bIsLen = False Case Params.SHELLNBRDIFFERENCE m_dValue = ReadMachiningParamDouble(nIndex, MAC_SHELLNBRDIFFERENCE, 0) m_bIsLen = False Case Params.SHELLNBRCOASTING m_dValue = ReadMachiningParamDouble(nIndex, MAC_SHELLNBRCOASTING, 0) m_bIsLen = True Case Params.SHELLNBRWIPE m_dValue = ReadMachiningParamDouble(nIndex, MAC_SHELLNBRWIPE, 0) m_bIsLen = True Case Params.SHELLNBRWIPEDIR m_dValue = ReadMachiningParamDouble(nIndex, MAC_SHELLNBRWIPEDIR, 0) m_bIsLen = False Case Params.AUXSOLIDSSTRANDWIDTH m_dValue = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSSTRANDWIDTH, 0) m_bIsLen = True Case Params.AUXSOLIDSSTRANDCOUNT m_dValue = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSSTRANDCOUNT, 0) m_bIsLen = False Case Params.AUXSOLIDSOVERLAP m_dValue = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSOVERLAP, 0) m_bIsLen = False Case Params.AUXSOLIDSLINKPARAM m_dValue = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSLINKPARAM, 0) m_bIsLen = True Case Params.AUXSOLIDSSTARTPOINTOFFSETONSLICE m_dValue = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSSTARTPOINTOFFSETONSLICE, 0) m_bIsLen = True Case Params.AUXSOLIDSOFFSETLEADPOINT m_dValue = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSOFFSETLEADPOINT, 0) m_bIsLen = True Case Params.AUXSOLIDSDENSITY m_dValue = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSDENSITY, 0) m_bIsLen = False Case Params.AUXSOLIDSGRIDOVERLAP m_dValue = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSGRIDOVERLAP, 0) m_bIsLen = True Case Params.AUXSOLIDSDIRECTION m_dValue = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSDIRECTION, 0) m_bIsLen = False Case Params.AUXSOLIDSOFFSETX m_dValue = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSOFFSETX, 0) m_bIsLen = True Case Params.AUXSOLIDSOFFSETY m_dValue = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSOFFSETY, 0) m_bIsLen = True Case Params.AUXSOLIDSCOASTINGLEN m_dValue = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSCOASTINGLEN, 0) m_bIsLen = True Case Params.AUXSOLIDSWIPELEN m_dValue = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSWIPELEN, 0) m_bIsLen = True Case Params.AUXSOLIDSWIPEDIR m_dValue = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSWIPEDIR, 0) m_bIsLen = False Case Params.FLOWRATE_PC m_dValue = ReadMachiningParamDouble(nIndex, MAC_CONSTANT, 100) m_bIsLen = False Case Params.INFILLSTRANDWIDTH m_dValue = ReadMachiningParamDouble(nIndex, MAC_INFILLSTRANDWIDTH, 0) m_bIsLen = True Case Params.CEILCOUNT m_dValue = ReadMachiningParamDouble(nIndex, MAC_CEILCOUNT, 0) m_bIsLen = False Case Params.INFILLDENSITY m_dValue = ReadMachiningParamDouble(nIndex, MAC_INFILLDENSITY, 0) m_bIsLen = False Case Params.INFILLOVERLAP m_dValue = ReadMachiningParamDouble(nIndex, MAC_INFILLOVERLAP, 0) m_bIsLen = False Case Params.INFILLGRIDOVERLAP m_dValue = ReadMachiningParamDouble(nIndex, MAC_INFILLGRIDOVERLAP, 0) m_bIsLen = False Case Params.INFILLDIRECTION m_dValue = ReadMachiningParamDouble(nIndex, MAC_INFILLDIRECTION, 0) m_bIsLen = False Case Params.INFILLOFFSETX m_dValue = ReadMachiningParamDouble(nIndex, MAC_INFILLOFFSETX, 0) m_bIsLen = True Case Params.INFILLOFFSETY m_dValue = ReadMachiningParamDouble(nIndex, MAC_INFILLOFFSETY, 0) m_bIsLen = True Case Params.INFILLCOASTING m_dValue = ReadMachiningParamDouble(nIndex, MAC_INFILLCOASTING, 0) m_bIsLen = True Case Params.INFILLWIPE m_dValue = ReadMachiningParamDouble(nIndex, MAC_INFILLWIPE, 0) m_bIsLen = True Case Params.INFILLWIPEDIR m_dValue = ReadMachiningParamDouble(nIndex, MAC_INFILLWIPEDIR, 0) m_bIsLen = False End Select End If m_dOrigValue = m_dValue End Sub Friend Sub ManageDependencyParam() ' gestisco dis/attivazione parametri dipendenti Select Case m_Type Case Params.FLOORCOUNT Dim ComboMachiningParam As ComboMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.FLOORTYPE) ComboMachiningParam.SetIsActive(m_dValue <> 0) Case Params.CEILCOUNT Dim ComboMachiningParam As ComboMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.CEILTYPE) ComboMachiningParam.SetIsActive(m_dValue <> 0) Case Params.AUXSOLIDSSTRANDCOUNT Dim AuxSolidsInfillParam As ComboMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSINFILL) Dim ComboMachiningParam As ComboMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSSTRANDORDER) ComboMachiningParam.SetIsActive(m_dValue > 0 OrElse AuxSolidsInfillParam.SelValue.Id = Machining.MPAR_INFILL_TYPE.OFFSET) ComboMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSLINKTYPE) ComboMachiningParam.SetIsActive(m_dValue > 0 OrElse AuxSolidsInfillParam.SelValue.Id = Machining.MPAR_INFILL_TYPE.OFFSET) Dim NumericMachiningParam As NumericMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSLINKPARAM) NumericMachiningParam.SetIsActive(m_dValue > 0 OrElse AuxSolidsInfillParam.SelValue.Id = Machining.MPAR_INFILL_TYPE.OFFSET) NumericMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSSTARTPOINTOFFSETONSLICE) NumericMachiningParam.SetIsActive(m_dValue > 0 OrElse AuxSolidsInfillParam.SelValue.Id = Machining.MPAR_INFILL_TYPE.OFFSET) NumericMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSOFFSETLEADPOINT) NumericMachiningParam.SetIsActive(m_dValue > 0 OrElse AuxSolidsInfillParam.SelValue.Id = Machining.MPAR_INFILL_TYPE.OFFSET) End Select End Sub Friend Overrides Sub WriteParamOnDb(nIndex As Integer, Optional sFilePath As String = "") 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 WriteMachiningParam(nIndex, MAC_STRANDH, sWriteValue, sFilePath) Case Params.STRANDW WriteMachiningParam(nIndex, MAC_STRANDW, sWriteValue, sFilePath) Case Params.STRANDCOUNT WriteMachiningParam(nIndex, MAC_STRANDCOUNT, sWriteValue, sFilePath) Case Params.OFFSET WriteMachiningParam(nIndex, MAC_OFFSET, sWriteValue, sFilePath) Case Params.STRANDOVERLAP WriteMachiningParam(nIndex, MAC_STRANDOVERLAP, sWriteValue, sFilePath) Case Params.STARTPOINTOFFSETONSLICE WriteMachiningParam(nIndex, MAC_STARTPOINTOFFSETONSLICE, sWriteValue, sFilePath) Case Params.LINKPARAM WriteMachiningParam(nIndex, MAC_LINKPARAM, sWriteValue, sFilePath) Case Params.LINKZUP WriteMachiningParam(nIndex, MAC_LINKZUP, sWriteValue, sFilePath) Case Params.INNERSHELLWIDTH WriteMachiningParam(nIndex, MAC_INNERSHELLWIDTH, sWriteValue, sFilePath) Case Params.OFFSETLEADPOINT WriteMachiningParam(nIndex, MAC_OFFSETLEADPOINT, sWriteValue, sFilePath) Case Params.LEADINTANGDIST WriteMachiningParam(nIndex, MAC_LEADINTANGDIST, sWriteValue, sFilePath) Case Params.LEADINORTHODIST WriteMachiningParam(nIndex, MAC_LEADINORTHODIST, sWriteValue, sFilePath) Case Params.LEADOUTTANGDIST WriteMachiningParam(nIndex, MAC_LEADOUTTANGDIST, sWriteValue, sFilePath) Case Params.LEADOUTORTHODIST WriteMachiningParam(nIndex, MAC_LEADOUTORTHODIST, sWriteValue, sFilePath) Case Params.COASTINGLEN WriteMachiningParam(nIndex, MAC_COASTINGLEN, sWriteValue, sFilePath) Case Params.COASTINGFEED_PC WriteMachiningParam(nIndex, MAC_COASTINGFEEDPU, sWriteValue, sFilePath) Case Params.WIPELEN WriteMachiningParam(nIndex, MAC_WIPELEN, sWriteValue, sFilePath) Case Params.WIPEFEED_PC WriteMachiningParam(nIndex, MAC_WIPEFEEDPU, sWriteValue, sFilePath) 'Case Params.WIPEDIR ' WriteMachiningParam(nIndex, MAC_WIPEDIR, sWriteValue, sFilePath) Case Params.FLOORCOUNT WriteMachiningParam(nIndex, MAC_FLOORCOUNT, sWriteValue, sFilePath) Case Params.G0FEED WriteMachiningParam(nIndex, MAC_G0FEED, sWriteValue, sFilePath) Case Params.G0FEEDZ WriteMachiningParam(nIndex, MAC_G0FEEDZ, sWriteValue, sFilePath) Case Params.TOOLDIAM WriteMachiningParam(nIndex, MAC_TOOLDIAM, sWriteValue, sFilePath) Case Params.PREFLOWDELAY WriteMachiningParam(nIndex, MAC_PREFLOWDELAY, sWriteValue, sFilePath) Case Params.POSTFLOWDELAY WriteMachiningParam(nIndex, MAC_POSTFLOWDELAY, sWriteValue, sFilePath) Case Params.SCREWBACK WriteMachiningParam(nIndex, MAC_SCREWBACK, sWriteValue, sFilePath) Case Params.SLICINGHEIGHT WriteMachiningParam(nIndex, MAC_SLICINGHEIGHT, sWriteValue, sFilePath) Case Params.RIBSSTRANDWIDTH WriteMachiningParam(nIndex, MAC_RIBSSTRANDWIDTH, sWriteValue, sFilePath) Case Params.RIBSOVERLAP WriteMachiningParam(nIndex, MAC_RIBSOVERLAP, sWriteValue, sFilePath) Case Params.RIBSSTRANDCOUNT WriteMachiningParam(nIndex, MAC_RIBSSTRANDCOUNT, sWriteValue, sFilePath) Case Params.RIBSLEADINLEN WriteMachiningParam(nIndex, MAC_RIBSLEADINLEN, sWriteValue, sFilePath) Case Params.RIBSLEADOUTLEN WriteMachiningParam(nIndex, MAC_RIBSLEADOUTLEN, sWriteValue, sFilePath) Case Params.RIBSLEADOUTCOASTING WriteMachiningParam(nIndex, MAC_RIBSLEADOUTCOASTING, sWriteValue, sFilePath) Case Params.RIBSLEADOUTWIPE WriteMachiningParam(nIndex, MAC_RIBSLEADOUTWIPE, sWriteValue, sFilePath) Case Params.RIBSLEADOUTWIPEDIR WriteMachiningParam(nIndex, MAC_RIBSLEADOUTWIPEDIR, sWriteValue, sFilePath) Case Params.SHELLNBRDIFFERENCE WriteMachiningParam(nIndex, MAC_SHELLNBRDIFFERENCE, sWriteValue, sFilePath) Case Params.SHELLNBRCOASTING WriteMachiningParam(nIndex, MAC_SHELLNBRCOASTING, sWriteValue, sFilePath) Case Params.SHELLNBRWIPE WriteMachiningParam(nIndex, MAC_SHELLNBRWIPE, sWriteValue, sFilePath) Case Params.SHELLNBRWIPEDIR WriteMachiningParam(nIndex, MAC_SHELLNBRWIPEDIR, sWriteValue, sFilePath) Case Params.AUXSOLIDSSTRANDWIDTH WriteMachiningParam(nIndex, MAC_AUXSOLIDSSTRANDWIDTH, sWriteValue, sFilePath) Case Params.AUXSOLIDSSTRANDCOUNT WriteMachiningParam(nIndex, MAC_AUXSOLIDSSTRANDCOUNT, sWriteValue, sFilePath) Case Params.AUXSOLIDSOVERLAP WriteMachiningParam(nIndex, MAC_AUXSOLIDSOVERLAP, sWriteValue, sFilePath) Case Params.AUXSOLIDSLINKPARAM WriteMachiningParam(nIndex, MAC_AUXSOLIDSLINKPARAM, sWriteValue, sFilePath) Case Params.AUXSOLIDSSTARTPOINTOFFSETONSLICE WriteMachiningParam(nIndex, MAC_AUXSOLIDSSTARTPOINTOFFSETONSLICE, sWriteValue, sFilePath) Case Params.AUXSOLIDSOFFSETLEADPOINT WriteMachiningParam(nIndex, MAC_AUXSOLIDSOFFSETLEADPOINT, sWriteValue, sFilePath) Case Params.AUXSOLIDSDENSITY WriteMachiningParam(nIndex, MAC_AUXSOLIDSDENSITY, sWriteValue, sFilePath) Case Params.AUXSOLIDSGRIDOVERLAP WriteMachiningParam(nIndex, MAC_AUXSOLIDSGRIDOVERLAP, sWriteValue, sFilePath) Case Params.AUXSOLIDSDIRECTION WriteMachiningParam(nIndex, MAC_AUXSOLIDSDIRECTION, sWriteValue, sFilePath) Case Params.AUXSOLIDSOFFSETX WriteMachiningParam(nIndex, MAC_AUXSOLIDSOFFSETX, sWriteValue, sFilePath) Case Params.AUXSOLIDSOFFSETY WriteMachiningParam(nIndex, MAC_AUXSOLIDSOFFSETY, sWriteValue, sFilePath) Case Params.AUXSOLIDSCOASTINGLEN WriteMachiningParam(nIndex, MAC_AUXSOLIDSCOASTINGLEN, sWriteValue, sFilePath) Case Params.AUXSOLIDSWIPELEN WriteMachiningParam(nIndex, MAC_AUXSOLIDSWIPELEN, sWriteValue, sFilePath) Case Params.AUXSOLIDSWIPEDIR WriteMachiningParam(nIndex, MAC_AUXSOLIDSWIPEDIR, sWriteValue, sFilePath) Case Params.FLOWRATE_PC WriteMachiningParam(nIndex, MAC_CONSTANT, sWriteValue, sFilePath) Case Params.INFILLSTRANDWIDTH WriteMachiningParam(nIndex, MAC_INFILLSTRANDWIDTH, sWriteValue, sFilePath) Case Params.CEILCOUNT WriteMachiningParam(nIndex, MAC_CEILCOUNT, sWriteValue, sFilePath) Case Params.INFILLDENSITY WriteMachiningParam(nIndex, MAC_INFILLDENSITY, sWriteValue, sFilePath) Case Params.INFILLOVERLAP WriteMachiningParam(nIndex, MAC_INFILLOVERLAP, sWriteValue, sFilePath) Case Params.INFILLGRIDOVERLAP WriteMachiningParam(nIndex, MAC_INFILLGRIDOVERLAP, sWriteValue, sFilePath) Case Params.INFILLDIRECTION WriteMachiningParam(nIndex, MAC_INFILLDIRECTION, sWriteValue, sFilePath) Case Params.INFILLOFFSETX WriteMachiningParam(nIndex, MAC_INFILLOFFSETX, sWriteValue, sFilePath) Case Params.INFILLOFFSETY WriteMachiningParam(nIndex, MAC_INFILLOFFSETY, sWriteValue, sFilePath) Case Params.INFILLCOASTING WriteMachiningParam(nIndex, MAC_INFILLCOASTING, sWriteValue, sFilePath) Case Params.INFILLWIPE WriteMachiningParam(nIndex, MAC_INFILLWIPE, sWriteValue, sFilePath) Case Params.INFILLWIPEDIR WriteMachiningParam(nIndex, MAC_INFILLWIPEDIR, sWriteValue, sFilePath) 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 End Class Public Class StringMachiningParam Inherits MachiningParam Protected m_sValue As String Public Property sValue As String Get Return m_sValue End Get Set(value As String) m_sValue = value NotifyPropertyChanged(NameOf(sValue)) End Set End Property Protected m_sOrigValue As String Public ReadOnly Property sOrigValue As String Get Return m_sOrigValue End Get End Property Public Overrides ReadOnly Property bIsModified As Boolean Get Return m_sValue <> m_sOrigValue End Get End Property Sub New(Type As Params, nIndex As Integer, Cathegory As MachiningCathegory) MyBase.New(Type, Cathegory) m_sValue = sValue m_sOrigValue = m_sValue End Sub Friend Overrides Sub WriteParamOnDb(nIndex As Integer, Optional sFilePath As String = "") Select Case Type Case Params.STRANDH 'WritePrivateProfileString(nIndex, MAC_STRANDH, sWriteValue, sFilePath) 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 End Class Public Class ComboMachiningParam Inherits MachiningParam Protected m_ValueList As List(Of IdNameStruct) Public ReadOnly Property ValueList As List(Of IdNameStruct) Get Return m_ValueList End Get End Property Protected m_SelValue As IdNameStruct Public Overridable Property SelValue As IdNameStruct Get Return m_SelValue End Get Set(value As IdNameStruct) m_SelValue = value NotifyPropertyChanged(NameOf(SelValue)) ManageDependencyParam() End Set End Property Protected m_OrigSelValue As IdNameStruct Public ReadOnly Property OrigSelValue As IdNameStruct Get Return m_OrigSelValue End Get End Property Public Overrides ReadOnly Property bIsModified As Boolean Get Return m_SelValue.Id <> m_OrigSelValue.Id End Get End Property Protected m_bIsActive As Boolean = True Public ReadOnly Property bIsActive As Boolean Get Return m_bIsActive End Get End Property Friend Sub SetIsActive(bValue As Boolean) m_bIsActive = bValue NotifyPropertyChanged(NameOf(bIsActive)) End Sub Sub New(Type As Params, Cathegory As MachiningCathegory) MyBase.New(Type, Cathegory) End Sub Sub New(Type As Params, nIndex As Integer, Cathegory As MachiningCathegory) MyBase.New(Type, Cathegory) If nIndex = 0 Then m_ValueList = New List(Of IdNameStruct) m_SelValue = Nothing Else Select Case Type Case Params.SLICINGTYPE Dim nSlicingType As Integer = GetPrivateProfileInt(S_MACH_PRINTING3D, K_SLICINGTYPE, 0, CurrentMachine.sMachIniFile) m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_SLICINGTYPE.VERTICAL, "Vertical")}) If nSlicingType >= 1 Then m_ValueList.Add(New IdNameStruct(Machining.MPAR_SLICINGTYPE.DEG45, "45deg X")) If nSlicingType >= 2 Then m_ValueList.Add(New IdNameStruct(Machining.MPAR_SLICINGTYPE.DEG45_Y, "45deg Y")) If nSlicingType >= 3 Then m_ValueList.Add(New IdNameStruct(Machining.MPAR_SLICINGTYPE.HORIZONTAL, "Horizontal")) End If End If End If Dim nSelValue As Double = ReadMachiningParamDouble(nIndex, MAC_SLICINGTYPE, -1) If nSelValue = -1 Then Dim dSlicing45 As Double = 0 dSlicing45 = ReadMachiningParamDouble(nIndex, MAC_SLICING45, 0) nSelValue = If(dSlicing45 = 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")}) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = ReadMachiningParamDouble(nIndex, MAC_STRANDORDER, Machining.MPAR_STRANDORDERS.OUTTOIN)) Case Params.DIRECTION m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_DIRECTIONS.CCW, "Counterclockwise"), New IdNameStruct(Machining.MPAR_DIRECTIONS.CW, "Clockwise")}) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = ReadMachiningParamDouble(nIndex, MAC_DIRECTION, Machining.MPAR_DIRECTIONS.CCW)) 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")}) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = ReadMachiningParamDouble(nIndex, MAC_LINKTYPE, Machining.MPAR_LEADINOUT.NONE)) 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")}) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = ReadMachiningParamDouble(nIndex, MAC_LEADIN, Machining.MPAR_LEADINOUT.NONE)) 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")}) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = ReadMachiningParamDouble(nIndex, MAC_LEADOUT, Machining.MPAR_LEADINOUT.NONE)) 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")}) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = ReadMachiningParamDouble(nIndex, MAC_RIBSTYPE, Machining.MPAR_RIBSTYPE.INTERNAL)) Case Params.AUXSOLIDSINFILL m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_INFILL_TYPE.NONE, "None"), New IdNameStruct(Machining.MPAR_INFILL_TYPE.OFFSET, "Offset"), New IdNameStruct(Machining.MPAR_INFILL_TYPE.ZIGZAG, "ZigZag"), New IdNameStruct(Machining.MPAR_INFILL_TYPE.LINES, "Lines"), New IdNameStruct(Machining.MPAR_INFILL_TYPE.GRID, "Grid"), New IdNameStruct(Machining.MPAR_INFILL_TYPE.ZIGZAG_GRID, "Zigzag Grid"), New IdNameStruct(Machining.MPAR_INFILL_TYPE.HONEYCOMB, "Honeycomb"), New IdNameStruct(Machining.MPAR_INFILL_TYPE.HONEYCOMB_GRID, "Honeycomb Grid")}) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSINFILL, Machining.MPAR_INFILL_TYPE.NONE)) 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")}) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSSTRANDORDER, Machining.MPAR_STRANDORDERS.OUTTOIN)) 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")}) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSLINKTYPE, Machining.MPAR_LINKTYPES.NONE)) Case Params.DYNAMIC_MODE m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_DYNAMIC_MODE.STANDARD, "Standard"), New IdNameStruct(Machining.MPAR_DYNAMIC_MODE.FAST, "Fast")}) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = ReadMachiningParamDouble(nIndex, MAC_DYNAMICMODE, Machining.MPAR_DYNAMIC_MODE.STANDARD)) Case Params.FLOORTYPE m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_INFILL_TYPE.OFFSET, "Offset"), New IdNameStruct(Machining.MPAR_INFILL_TYPE.ZIGZAG, "ZigZag")}) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = ReadMachiningParamDouble(nIndex, MAC_FLOORTYPE, Machining.MPAR_INFILL_TYPE.OFFSET)) Case Params.CEILTYPE m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_INFILL_TYPE.OFFSET, "Offset"), New IdNameStruct(Machining.MPAR_INFILL_TYPE.ZIGZAG, "ZigZag")}) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = ReadMachiningParamDouble(nIndex, MAC_CEILTYPE, Machining.MPAR_INFILL_TYPE.OFFSET)) Case Params.INFILLTYPE m_ValueList = New List(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_INFILL_TYPE.NONE, "None"), New IdNameStruct(Machining.MPAR_INFILL_TYPE.LINES, "Lines"), New IdNameStruct(Machining.MPAR_INFILL_TYPE.GRID, "Grid"), New IdNameStruct(Machining.MPAR_INFILL_TYPE.ZIGZAG_GRID, "Zigzag Grid"), New IdNameStruct(Machining.MPAR_INFILL_TYPE.HONEYCOMB, "Honeycomb"), New IdNameStruct(Machining.MPAR_INFILL_TYPE.HONEYCOMB_GRID, "Honeycomb Grid")}) m_SelValue = m_ValueList.FirstOrDefault(Function(x) x.Id = ReadMachiningParamDouble(nIndex, MAC_INFILLTYPE, Machining.MPAR_INFILL_TYPE.NONE)) End Select End If m_OrigSelValue = m_SelValue End Sub Friend Sub ManageDependencyParam() ' gestisco dis/attivazione parametri dipendenti Select Case m_Type Case Params.LINKTYPE Dim NumMachiningParam As NumericMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.LINKPARAM) NumMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_LINKTYPES.NONE) Case Params.LEADIN Dim NumMachiningParam As NumericMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.LEADINTANGDIST) NumMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_LEADINOUT.NONE) NumMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.LEADINORTHODIST) NumMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_LEADINOUT.NONE) Case Params.LEADOUT Dim NumMachiningParam As NumericMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.LEADOUTTANGDIST) NumMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_LEADINOUT.NONE) NumMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.LEADOUTORTHODIST) NumMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_LEADINOUT.NONE) Case Params.RIBSTYPE Dim CheckMachiningParam As CheckMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.RIBSLIMITUNBOUNDEDWITHSOLID) CheckMachiningParam.SetIsActive(m_SelValue.Id = MPAR_RIBSTYPE.UNBOUNDED) Case Params.AUXSOLIDSINFILL Dim AuxSolidsStrandCountParam As NumericMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSSTRANDCOUNT) Dim ComboMachiningParam As ComboMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSSTRANDORDER) ComboMachiningParam.SetIsActive(m_SelValue.Id = Machining.MPAR_INFILL_TYPE.OFFSET OrElse AuxSolidsStrandCountParam.dValue > 0) ComboMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSLINKTYPE) ComboMachiningParam.SetIsActive(m_SelValue.Id = Machining.MPAR_INFILL_TYPE.OFFSET OrElse AuxSolidsStrandCountParam.dValue > 0) Dim NumMachiningParam As NumericMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSLINKPARAM) NumMachiningParam.SetIsActive(m_SelValue.Id = Machining.MPAR_INFILL_TYPE.OFFSET OrElse AuxSolidsStrandCountParam.dValue > 0) NumMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSSTARTPOINTOFFSETONSLICE) NumMachiningParam.SetIsActive(m_SelValue.Id = Machining.MPAR_INFILL_TYPE.OFFSET OrElse AuxSolidsStrandCountParam.dValue > 0) NumMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSOFFSETLEADPOINT) NumMachiningParam.SetIsActive(m_SelValue.Id = Machining.MPAR_INFILL_TYPE.OFFSET OrElse AuxSolidsStrandCountParam.dValue > 0) NumMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSDENSITY) NumMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.NONE AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.ZIGZAG AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.OFFSET) NumMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSGRIDOVERLAP) NumMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.NONE AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.ZIGZAG AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.OFFSET AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.LINES AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.GRID) NumMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSDIRECTION) NumMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.NONE AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.ZIGZAG AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.OFFSET) NumMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSOFFSETX) NumMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.NONE AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.ZIGZAG AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.OFFSET) NumMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSOFFSETY) NumMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.NONE AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.ZIGZAG AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.OFFSET) Dim CheckMachiningParam As CheckMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.AUXSOLIDSINFILLLINK) CheckMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.NONE AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.ZIGZAG AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.OFFSET) Case Params.INFILLTYPE Dim NumMachiningParam As NumericMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.INFILLDENSITY) NumMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.NONE) NumMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.INFILLGRIDOVERLAP) NumMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.NONE AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.LINES AndAlso m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.GRID) NumMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.INFILLDIRECTION) NumMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.NONE) NumMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.INFILLOFFSETX) NumMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.NONE) NumMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.INFILLOFFSETY) NumMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.NONE) Dim CheckMachiningParam As CheckMachiningParam = m_Cathegory.MachiningParamList.FirstOrDefault(Function(z) z.Type = Params.INFILLLINK) CheckMachiningParam.SetIsActive(m_SelValue.Id <> Machining.MPAR_INFILL_TYPE.NONE) End Select End Sub Friend Overrides Sub WriteParamOnDb(nIndex As Integer, Optional sFilePath As String = "") Select Case Type Case Params.SLICINGTYPE WriteMachiningParam(nIndex, MAC_SLICINGTYPE, m_SelValue.Id, sFilePath) Case Params.STRANDORDER WriteMachiningParam(nIndex, MAC_STRANDORDER, m_SelValue.Id, sFilePath) Case Params.DIRECTION WriteMachiningParam(nIndex, MAC_DIRECTION, m_SelValue.Id, sFilePath) Case Params.LINKTYPE WriteMachiningParam(nIndex, MAC_LINKTYPE, m_SelValue.Id, sFilePath) Case Params.LEADIN WriteMachiningParam(nIndex, MAC_LEADIN, m_SelValue.Id, sFilePath) Case Params.LEADOUT WriteMachiningParam(nIndex, MAC_LEADOUT, m_SelValue.Id, sFilePath) Case Params.RIBSTYPE WriteMachiningParam(nIndex, MAC_RIBSTYPE, m_SelValue.Id, sFilePath) Case Params.AUXSOLIDSINFILL WriteMachiningParam(nIndex, MAC_AUXSOLIDSINFILL, m_SelValue.Id, sFilePath) Case Params.AUXSOLIDSSTRANDORDER WriteMachiningParam(nIndex, MAC_AUXSOLIDSSTRANDORDER, m_SelValue.Id, sFilePath) Case Params.AUXSOLIDSLINKTYPE WriteMachiningParam(nIndex, MAC_AUXSOLIDSLINKTYPE, m_SelValue.Id, sFilePath) Case Params.DYNAMIC_MODE WriteMachiningParam(nIndex, MAC_DYNAMICMODE, m_SelValue.Id, sFilePath) Case Params.FLOORTYPE WriteMachiningParam(nIndex, MAC_FLOORTYPE, m_SelValue.Id, sFilePath) Case Params.CEILTYPE WriteMachiningParam(nIndex, MAC_CEILTYPE, m_SelValue.Id, sFilePath) Case Params.INFILLTYPE WriteMachiningParam(nIndex, MAC_INFILLTYPE, m_SelValue.Id, sFilePath) 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 End Class Public Class CheckMachiningParam Inherits MachiningParam Protected m_bValue As Boolean Public Overridable Property bValue As Boolean Get Return m_bValue End Get Set(value As Boolean) m_bValue = value NotifyPropertyChanged(NameOf(bValue)) End Set End Property Protected m_bOrigValue As String Public ReadOnly Property bOrigValue As String Get Return m_bOrigValue End Get End Property Public Overrides ReadOnly Property bIsModified As Boolean Get Return m_bValue <> m_bOrigValue End Get End Property Protected m_bIsActive As Boolean = True Public ReadOnly Property bIsActive As Boolean Get Return m_bIsActive End Get End Property Friend Sub SetIsActive(bValue As Boolean) m_bIsActive = bValue NotifyPropertyChanged(NameOf(bIsActive)) End Sub Sub New(Type As Params, Cathegory As MachiningCathegory) MyBase.New(Type, Cathegory) End Sub Sub New(Type As Params, nIndex As Integer, Cathegory As MachiningCathegory) MyBase.New(Type, Cathegory) If nIndex = 0 Then m_bValue = 0 Else Select Case Type Case Params.SPIRALVASE m_bValue = ReadMachiningParamDouble(nIndex, MAC_SPIRALVASE, 0) Case Params.RIBSLINK m_bValue = ReadMachiningParamDouble(nIndex, MAC_RIBSLINK, 0) Case Params.RIBSINVERTORDER m_bValue = ReadMachiningParamDouble(nIndex, MAC_RIBSINVERTORDER, 0) Case Params.RIBSINVERTDIRECTION m_bValue = ReadMachiningParamDouble(nIndex, MAC_RIBSINVERTDIRECTION, 0) Case Params.RIBSINVERTSTRANDORDER m_bValue = ReadMachiningParamDouble(nIndex, MAC_RIBSINVERTSTRANDORDER, 0) Case Params.RIBSLEADININVERT m_bValue = ReadMachiningParamDouble(nIndex, MAC_RIBSLEADININVERT, 0) Case Params.RIBSLEADOUTINVERT m_bValue = ReadMachiningParamDouble(nIndex, MAC_RIBSLEADOUTINVERT, 0) Case Params.RIBSLIMITUNBOUNDEDWITHSOLID m_bValue = ReadMachiningParamDouble(nIndex, MAC_RIBSLIMITUNBOUNDEDWITHSOLID, 0) Case Params.AUXSOLIDSINFILLLINK m_bValue = ReadMachiningParamDouble(nIndex, MAC_AUXSOLIDSINFILLLINK, 0) Case Params.INFILLLINK m_bValue = ReadMachiningParamDouble(nIndex, MAC_INFILLLINK, 0) End Select End If m_bOrigValue = m_bValue End Sub Friend Overrides Sub WriteParamOnDb(nIndex As Integer, Optional sFilePath As String = "") Select Case Type Case Params.SPIRALVASE WriteMachiningParam(nIndex, MAC_SPIRALVASE, If(m_bValue, 1, 0), sFilePath) Case Params.RIBSLINK WriteMachiningParam(nIndex, MAC_RIBSLINK, If(m_bValue, 1, 0), sFilePath) Case Params.RIBSINVERTORDER WriteMachiningParam(nIndex, MAC_RIBSINVERTORDER, If(m_bValue, 1, 0), sFilePath) Case Params.RIBSINVERTDIRECTION WriteMachiningParam(nIndex, MAC_RIBSINVERTDIRECTION, If(m_bValue, 1, 0), sFilePath) Case Params.RIBSINVERTSTRANDORDER WriteMachiningParam(nIndex, MAC_RIBSINVERTSTRANDORDER, If(m_bValue, 1, 0), sFilePath) Case Params.RIBSLEADININVERT WriteMachiningParam(nIndex, MAC_RIBSLEADININVERT, If(m_bValue, 1, 0), sFilePath) Case Params.RIBSLEADOUTINVERT WriteMachiningParam(nIndex, MAC_RIBSLEADOUTINVERT, If(m_bValue, 1, 0), sFilePath) Case Params.RIBSLIMITUNBOUNDEDWITHSOLID WriteMachiningParam(nIndex, MAC_RIBSLIMITUNBOUNDEDWITHSOLID, If(m_bValue, 1, 0), sFilePath) Case Params.AUXSOLIDSINFILLLINK WriteMachiningParam(nIndex, MAC_AUXSOLIDSINFILLLINK, If(m_bValue, 1, 0), sFilePath) Case Params.INFILLLINK WriteMachiningParam(nIndex, MAC_INFILLLINK, If(m_bValue, 1, 0), sFilePath) 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 End Class Public Class MaterialMachiningParam Inherits MachiningParam Private m_sGUID As String Public Property sGUID As String Get Return m_sGUID End Get Set(value As String) m_sGUID = value End Set End Property Private m_bValue As Boolean Public Property bValue As Boolean Get Return m_bValue End Get Set(value As Boolean) m_bValue = value NotifyPropertyChanged(NameOf(bValue)) End Set End Property Private m_bOrigValue As String Public ReadOnly Property bOriValue As String Get Return m_bOrigValue End Get End Property Public Overrides ReadOnly Property bIsModified As Boolean Get Return m_bValue <> m_bOrigValue End Get End Property Sub New(sName As String, sGUID As String, bValue As Boolean, Cathegory As MachiningCathegory) MyBase.New(sName, Cathegory) m_sGUID = sGUID m_bValue = bValue m_bOrigValue = m_bValue End Sub Friend Overrides Sub WriteParamOnDb(nIndex As Integer, Optional sFilePath As String = "") Dim sMaterials As String = "" ReadMachiningParamSplit(nIndex, MAC_MATERIALS, "", sMaterials, sFilePath) Dim MaterialGuidList As New List(Of String) If Not String.IsNullOrWhiteSpace(sMaterials) Then MaterialGuidList = sMaterials.Split(";"c).ToList() End If If Not bValue Then MaterialGuidList.Remove(m_sGUID) ElseIf Not MaterialGuidList.Contains(m_sGUID) Then MaterialGuidList.Add(m_sGUID) End If sMaterials = "" For Index = 0 To MaterialGuidList.Count - 1 sMaterials &= MaterialGuidList(Index) & If(Index < MaterialGuidList.Count - 1, ";"c, "") Next WriteMachiningParamSplit(nIndex, MAC_MATERIALS, sMaterials, sFilePath) 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 End Class Public Class OrderedMachiningParam Inherits MachiningParam Protected m_StandardValueOrderList As List(Of Integer) Protected m_ValueList As ObservableCollection(Of IdNameStruct) Public ReadOnly Property ValueList As ObservableCollection(Of IdNameStruct) Get Return m_ValueList End Get End Property Protected m_SelValue As IdNameStruct Public Overridable Property SelValue As IdNameStruct Get Return m_SelValue End Get Set(value As IdNameStruct) m_SelValue = value End Set End Property Protected m_OrigValue As String Public ReadOnly Property OrigValue As String Get Return m_OrigValue End Get End Property Public Property Value As String Get Dim Temp As String = "" For Each Item In m_ValueList Temp &= Item.Id & "," Next Return Temp.TrimEnd(","c) End Get Set(value As String) Select Case Type Case Params.PRINT_ORDER Dim StringValueList() As String Dim IntegerValueList As New List(Of Integer) If value.Length = 15 Then StringValueList = value.Split(","c) For Each StringValue In StringValueList Dim IntegerValue As Integer = 0 If Integer.TryParse(StringValue, IntegerValue) Then IntegerValueList.Add(IntegerValue) End If Next End If If IntegerValueList.Count <> 8 Then IntegerValueList = m_StandardValueOrderList End If If Not IntegerValueList.Contains(Machining.MPAR_PRINT_ORDER.SHELL) OrElse Not IntegerValueList.Contains(Machining.MPAR_PRINT_ORDER.EXTRA_SHELL) OrElse Not IntegerValueList.Contains(Machining.MPAR_PRINT_ORDER.INFILL) OrElse Not IntegerValueList.Contains(Machining.MPAR_PRINT_ORDER.AUX_SOLID) OrElse Not IntegerValueList.Contains(Machining.MPAR_PRINT_ORDER.RIB_UNBOUNDED) OrElse Not IntegerValueList.Contains(Machining.MPAR_PRINT_ORDER.RIB_EXTERNAL) OrElse Not IntegerValueList.Contains(Machining.MPAR_PRINT_ORDER.RIB_INTERNAL) OrElse Not IntegerValueList.Contains(Machining.MPAR_PRINT_ORDER.RIB_SUPPORT) Then IntegerValueList = m_StandardValueOrderList End If OrderByReference(m_ValueList, IntegerValueList) End Select End Set End Property Public Shared Sub OrderByReference(collection As ObservableCollection(Of IdNameStruct), comparison As List(Of Integer)) For i As Integer = 0 To comparison.Count - 1 Dim Index As Integer = i If Not comparison.ElementAt(i).Equals(collection.ElementAt(i)) Then collection.Move(collection.IndexOf(collection.FirstOrDefault(Function(x) x.Id = comparison(Index))), i) End If Next End Sub Public Overrides ReadOnly Property bIsModified As Boolean Get Return Value <> m_OrigValue End Get End Property ' Definizione comandi Private m_cmdMoveUpOrder As ICommand Private m_cmdMoveDownOrder As ICommand Private m_cmdResetOrder As ICommand Sub New(Type As Params, Cathegory As MachiningCathegory) MyBase.New(Type, Cathegory) End Sub Sub New(Type As Params, nIndex As Integer, Cathegory As MachiningCathegory) MyBase.New(Type, Cathegory) If nIndex = 0 Then Select Case Type Case Params.PRINT_ORDER m_StandardValueOrderList = New List(Of Integer)({Machining.MPAR_PRINT_ORDER.SHELL, Machining.MPAR_PRINT_ORDER.EXTRA_SHELL, Machining.MPAR_PRINT_ORDER.INFILL, Machining.MPAR_PRINT_ORDER.AUX_SOLID, Machining.MPAR_PRINT_ORDER.RIB_UNBOUNDED, Machining.MPAR_PRINT_ORDER.RIB_EXTERNAL, Machining.MPAR_PRINT_ORDER.RIB_INTERNAL, Machining.MPAR_PRINT_ORDER.RIB_SUPPORT}) m_ValueList = New ObservableCollection(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_PRINT_ORDER.SHELL, "Shell"), New IdNameStruct(Machining.MPAR_PRINT_ORDER.EXTRA_SHELL, "Extra Shell"), New IdNameStruct(Machining.MPAR_PRINT_ORDER.INFILL, "Infill"), New IdNameStruct(Machining.MPAR_PRINT_ORDER.AUX_SOLID, "Filled Solid"), New IdNameStruct(Machining.MPAR_PRINT_ORDER.RIB_UNBOUNDED, "Unbounded Rib"), New IdNameStruct(Machining.MPAR_PRINT_ORDER.RIB_EXTERNAL, "External Rib"), New IdNameStruct(Machining.MPAR_PRINT_ORDER.RIB_INTERNAL, "Internal Rib"), New IdNameStruct(Machining.MPAR_PRINT_ORDER.RIB_SUPPORT, "Support Rib")}) m_SelValue = Nothing End Select Else Select Case Type Case Params.PRINT_ORDER m_StandardValueOrderList = New List(Of Integer)({Machining.MPAR_PRINT_ORDER.SHELL, Machining.MPAR_PRINT_ORDER.EXTRA_SHELL, Machining.MPAR_PRINT_ORDER.INFILL, Machining.MPAR_PRINT_ORDER.AUX_SOLID, Machining.MPAR_PRINT_ORDER.RIB_UNBOUNDED, Machining.MPAR_PRINT_ORDER.RIB_EXTERNAL, Machining.MPAR_PRINT_ORDER.RIB_INTERNAL, Machining.MPAR_PRINT_ORDER.RIB_SUPPORT}) m_ValueList = New ObservableCollection(Of IdNameStruct)({New IdNameStruct(Machining.MPAR_PRINT_ORDER.SHELL, "Shell"), New IdNameStruct(Machining.MPAR_PRINT_ORDER.EXTRA_SHELL, "Extra Shell"), New IdNameStruct(Machining.MPAR_PRINT_ORDER.INFILL, "Infill"), New IdNameStruct(Machining.MPAR_PRINT_ORDER.AUX_SOLID, "Filled Solid"), New IdNameStruct(Machining.MPAR_PRINT_ORDER.RIB_UNBOUNDED, "Unbounded Rib"), New IdNameStruct(Machining.MPAR_PRINT_ORDER.RIB_EXTERNAL, "External Rib"), New IdNameStruct(Machining.MPAR_PRINT_ORDER.RIB_INTERNAL, "Internal Rib"), New IdNameStruct(Machining.MPAR_PRINT_ORDER.RIB_SUPPORT, "Support Rib")}) ReadMachiningParamString(nIndex, MAC_PRINTORDER, "", Value) End Select End If m_OrigValue = Value m_SelValue = Nothing NotifyPropertyChanged(NameOf(SelValue)) End Sub Friend Overrides Sub WriteParamOnDb(nIndex As Integer, Optional sFilePath As String = "") Select Case Type Case Params.PRINT_ORDER WriteMachiningParam(nIndex, MAC_PRINTORDER, Value, sFilePath) End Select End Sub Friend Overrides Sub SaveParam() m_OrigValue = Value End Sub Friend Overrides Sub ResetParam() Value = m_OrigValue m_SelValue = Nothing NotifyPropertyChanged(NameOf(ValueList)) NotifyPropertyChanged(NameOf(SelValue)) End Sub #Region "COMMANDS" #Region "MoveUpOrder" Public ReadOnly Property MoveUpOrder_Command As ICommand Get If m_cmdMoveUpOrder Is Nothing Then m_cmdMoveUpOrder = New Command(AddressOf MoveUpOrder) End If Return m_cmdMoveUpOrder End Get End Property Public Sub MoveUpOrder() If IsNothing(m_SelValue) Then Return Dim nIndex As Integer = m_ValueList.IndexOf(m_SelValue) If nIndex < 0 Then Return If nIndex > 0 Then m_ValueList.Move(nIndex, nIndex - 1) NotifyPropertyChanged(NameOf(Value)) End If End Sub #End Region ' MoveUpOrder #Region "MoveDownOrder" Public ReadOnly Property MoveDownOrder_Command As ICommand Get If m_cmdMoveDownOrder Is Nothing Then m_cmdMoveDownOrder = New Command(AddressOf MoveDownOrder) End If Return m_cmdMoveDownOrder End Get End Property Public Sub MoveDownOrder() If IsNothing(m_SelValue) Then Return Dim nIndex As Integer = m_ValueList.IndexOf(m_SelValue) If nIndex < 0 Then Return If nIndex < m_ValueList.Count - 1 Then m_ValueList.Move(nIndex, nIndex + 1) NotifyPropertyChanged(NameOf(Value)) End If End Sub #End Region ' MoveDownOrder #Region "ResetOrder" Public ReadOnly Property ResetOrder_Command As ICommand Get If m_cmdResetOrder Is Nothing Then m_cmdResetOrder = New Command(AddressOf ResetOrder) End If Return m_cmdResetOrder End Get End Property Public Sub ResetOrder() Dim CurrValue As String = Value OrderByReference(m_ValueList, m_StandardValueOrderList) m_ValueList = New ObservableCollection(Of IdNameStruct)(m_ValueList.OrderBy(Function(x) x.Id)) If Value <> CurrValue Then NotifyPropertyChanged(NameOf(ValueList)) NotifyPropertyChanged(NameOf(Value)) NotifyPropertyChanged(NameOf(SelValue)) End If End Sub #End Region ' ResetOrder #End Region ' COMMANDS End Class