Imports System.Collections.ObjectModel Imports System.IO Imports EgtUILib Imports EgtWPFLib5 Public Class TopPanelVM Inherits VMBase #Region "FIELDS & PROPERTIES" #Region "Pages & Modes" Private m_SelPage As Integer = -1 Public Property SelPage As Integer Get Return m_SelPage End Get Set(value As Integer) ' lancio selezione pagina con verifica file modificato SetSelPage(value) End Set End Property ' funzione che permette di cambiare pagina ' bVerifyModification: se vero verifica modifiche su file e chiede di salvare Friend Sub SetSelPage(Page As Pages, Optional bVerifyModification As Boolean = True) Dim bOk As Boolean = True ' Esco dallo stato corrente Select Case m_SelPage Case Pages.IMPORT bOk = ExitIMPORT() Case Pages.MODIFY bOk = ExitMODIFY() Case Pages.SLICE bOk = ExitSLICE() Case Pages.SIMULATION bOk = ExitSIMULATION() Case Pages.MATERIALDB bOk = ExitMATERIALDB() Case Pages.MACHININGDB bOk = ExitMACHININGDB() Case Pages.CURRMACHINING bOk = ExitCURRMACHINING() Case Pages.MODIFYPART bOk = ExitMODIFYPART() End Select If bOk Then ' Entro nel nuovo stato m_SelPage = Page Select Case m_SelPage Case Pages.IMPORT InitIMPORT() Case Pages.MODIFY InitMODIFY() Case Pages.SLICE InitSLICE() Case Pages.SIMULATION InitSIMULATION() Case Pages.MATERIALDB InitMATERIALDB() Case Pages.MACHININGDB InitMACHININGDB() Case Pages.CURRMACHINING InitCURRMACHINING() Case Pages.MODIFYPART InitMODIFYPART() Case Else InitNULL() End Select End If End Sub Private m_ModifyModeList As New List(Of ModifyModeButton)({New ModifyModeButton("Disposition", ModifyModes.DISPOSITION), New ModifyModeButton("Origin Point", ModifyModes.REFERENCE), New ModifyModeButton("Layer Start", ModifyModes.STARTMACH), New ModifyModeButton("Ribs", ModifyModes.RIBS), New ModifyModeButton("Reduce Shell Number", ModifyModes.SHELLNUMBER), New ModifyModeButton("Filled Solid", ModifyModes.AUXSOLIDS)}) Public ReadOnly Property ModifyModeList As List(Of ModifyModeButton) Get Return m_ModifyModeList End Get End Property Private m_SelModifyMode As ModifyModeButton Public Property SelModifyMode As ModifyModeButton Get Return m_SelModifyMode End Get Set(value As ModifyModeButton) ' se in slice If m_SelPage = Pages.SLICE Then ' imposto pagina di modifica SetSelPage(Pages.MODIFY) End If ' se non c'e' pezzo selezionato , modalita' nulla If IsNothing(m_SelPart) Then m_SelModifyMode = Nothing Else m_SelModifyMode = value End If If Not IsNothing(m_SelModifyMode) AndAlso Map.refTopPanelVM.m_PartList.Count > 0 AndAlso Not IsNothing(Map.refTopPanelVM.SelPart) Then Dim SelLeftPanel As LeftPanelVM.Panels = LeftPanelVM.Panels.NULL Select Case m_SelModifyMode.ModifyMode Case ModifyModes.DISPOSITION SelLeftPanel = LeftPanelVM.Panels.DISPOSITION Case ModifyModes.REFERENCE SelLeftPanel = LeftPanelVM.Panels.REFERENCE Case ModifyModes.STARTMACH SelLeftPanel = LeftPanelVM.Panels.STARTMACH Case ModifyModes.RIBS SelLeftPanel = LeftPanelVM.Panels.RIBS Case ModifyModes.SHELLNUMBER SelLeftPanel = LeftPanelVM.Panels.SHELLNUMBER Case ModifyModes.AUXSOLIDS SelLeftPanel = LeftPanelVM.Panels.AUXSOLIDS Case Else SelLeftPanel = LeftPanelVM.Panels.NULL End Select Map.refLeftPanelVM.SetSelPanel(SelLeftPanel) Else Map.refLeftPanelVM.SetSelPanel(LeftPanelVM.Panels.NULL) NotifyPropertyChanged(NameOf(SelModifyMode)) End If ' chiudo il popup SetModifyIsChecked(False) End Set End Property Friend Sub SetSelModifyMode(ModifyMode As ModifyModes) SelModifyMode = m_ModifyModeList.FirstOrDefault(Function(x) x.ModifyMode = ModifyMode) NotifyPropertyChanged(NameOf(SelModifyMode)) End Sub Private m_bModify_IsChecked As Boolean Public Property bModify_IsChecked As Boolean Get Return m_bModify_IsChecked End Get Set(value As Boolean) If Map.refSceneHostVM.MainController.GetStep = 0 Then m_bModify_IsChecked = value Else NotifyPropertyChanged(NameOf(bModify_IsChecked)) End If End Set End Property Friend Sub SetModifyIsChecked(value As Boolean) m_bModify_IsChecked = value NotifyPropertyChanged(NameOf(bModify_IsChecked)) End Sub #End Region ' Pages #Region "Parts Manager" Private m_PartList As New ObservableCollection(Of Print3dPartVM) Public ReadOnly Property PartList As ObservableCollection(Of Print3dPartVM) Get Return m_PartList End Get End Property Private m_SelPart As Print3dPartVM Public Property SelPart As Print3dPartVM Get Return m_SelPart End Get Set(value As Print3dPartVM) If Not IsNothing(m_SelPart) Then ' deseleziono eventuale pezzo precedente EgtResetMark(m_SelPart.nPrintSolidId) End If m_SelPart = value If Not IsNothing(value) Then ' Eseguo la selezione EgtDeselectAll() EgtSetMark(m_SelPart.nPrintSolidId) EgtDraw() ' imposto lavorazione e materiale del pezzo selezionato Map.refCurrMachiningPanelVM.ReadMachParamFromSelPart() Dim DbMachining As MachiningIndex = MachiningList.FirstOrDefault(Function(x) x.sGUID = Map.refCurrMachiningPanelVM.CurrMachining.sCurrGUID) If IsNothing(DbMachining) Then DbMachining = MachiningIndex.Empty() SetSelMachining(DbMachining) ' notifico posizione pezzo Map.refDispositionPanelVM.RefreshPos() End If End Set End Property #End Region ' Parts Manager #Region "Material" Private m_MaterialList As New ObservableCollection(Of MaterialIndex) Public ReadOnly Property MaterialList As ObservableCollection(Of MaterialIndex) Get Return m_MaterialList End Get End Property Private m_SelMaterial As MaterialIndex Public Property SelMaterial As MaterialIndex Get Return m_SelMaterial End Get Set(value As MaterialIndex) ' salvo materiale selezionato come ultimo utilizzato If Not IsNothing(value) Then WriteMainPrivateProfileString(S_PRINTING3D, K_CURRMATERIAL, value.sGUID) ' salvo lavorazione selezionata per riselezionarlo Dim PrevMachiningGuid As Guid = m_SelMachining.sGUID ' seleziono materiale m_SelMaterial = value ' scrivo materiale sulla tavola If Not IsNothing(m_SelMaterial) Then Dim nTabPartId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, TABLE) If nTabPartId <> GDB_ID.NULL Then EgtSetInfo(nTabPartId, KEY_MATERIAL_GUID, Map.refTopPanelVM.SelMaterial.sGUID) EgtSetInfo(nTabPartId, KEY_MATERIAL_NAME, Map.refTopPanelVM.SelMaterial.sName) End If End If ' ricarico lista lavorazioni valide per il materiale selezionato InitMachiningsList() Dim PrevMachining As MachiningIndex = m_MachiningList.FirstOrDefault(Function(x) x.sGUID = PrevMachiningGuid) SetSelMachining(If(Not IsNothing(PrevMachining), PrevMachining, MachiningIndex.Empty())) End Set End Property Friend Sub SetSelMaterial(value As MaterialIndex) m_SelMaterial = value NotifyPropertyChanged(NameOf(SelMaterial)) End Sub #End Region ' Material #Region "Machining" Private m_MachiningList As New ObservableCollection(Of MachiningIndex) Public ReadOnly Property MachiningList As ObservableCollection(Of MachiningIndex) Get Return m_MachiningList End Get End Property Private m_SelMachining As MachiningIndex Public Property SelMachining As MachiningIndex Get Return m_SelMachining End Get Set(value As MachiningIndex) If Not IsNothing(value) Then ' verifico se selezionata none If Not IsNothing(m_SelMachining) AndAlso m_SelMachining.sGUID = MachiningIndex.Empty().sGUID AndAlso value.sGUID <> MachiningIndex.Empty().sGUID AndAlso m_MachiningList.Contains(MachiningIndex.Empty()) Then ' e la rimuovo m_MachiningList.Remove(MachiningIndex.Empty()) End If WriteMainPrivateProfileString(S_PRINTING3D, K_CURRMACHINING, value.sGUID.ToString()) ' imposto selezionata come corrente If Not IsNothing(m_SelPart) AndAlso (IsNothing(m_SelMachining) OrElse value.sGUID <> m_SelMachining.sGUID) Then Map.refCurrMachiningPanelVM.SetCurrMachining(New CurrMachining(m_SelPart.nPartId, value.nIndex)) End If End If m_SelMachining = value End Set End Property Friend Sub SetSelMachining(SelMachining As MachiningIndex) ' verifico se precedentemente selezionata none If Not IsNothing(m_SelMachining) AndAlso m_SelMachining.sGUID = MachiningIndex.Empty().sGUID AndAlso SelMachining.sGUID <> MachiningIndex.Empty().sGUID AndAlso m_MachiningList.Contains(MachiningIndex.Empty()) Then ' e la rimuovo m_MachiningList.Remove(MachiningIndex.Empty()) End If ' se nuova lavorazione e' none If SelMachining.sGUID = Guid.Empty AndAlso Not MachiningList.Any(Function(x) x.sGUID = MachiningIndex.Empty.sGUID) Then ' aggiungo lavorazione vuota MachiningList.Insert(0, MachiningIndex.Empty()) End If m_SelMachining = SelMachining NotifyPropertyChanged(NameOf(SelMachining)) End Sub 'Private m_CurrMachining As CurrMachining Public ReadOnly Property CurrMachining As CurrMachining Get Return If(Not IsNothing(Map.refCurrMachiningPanelVM), Map.refCurrMachiningPanelVM.CurrMachining, Nothing) End Get End Property Friend Sub UpdateCurrMachining() NotifyPropertyChanged(NameOf(CurrMachining)) End Sub 'Private Sub SetCurrMachining(CurrMachining As CurrMachining) ' m_CurrMachining = CurrMachining ' Map.refCurrMachiningPanelVM.SetCurrMachining(CurrMachining) 'End Sub #End Region ' Machining Private m_TopPanel_IsEnabled As Boolean = True Public ReadOnly Property TopPanel_IsEnabled As Boolean Get Return m_TopPanel_IsEnabled End Get End Property Friend Sub SetTopPanelIsEnabled(value As Boolean) m_TopPanel_IsEnabled = value NotifyPropertyChanged(NameOf(TopPanel_IsEnabled)) End Sub ' Definizione comandi Private m_cmdPartModify As ICommand Private m_cmdMachining As ICommand Private m_cmdMaterialDb As ICommand Private m_cmdPrintParamDb As ICommand #End Region ' FIELDS & PROPERTIES #Region "CONSTRUCTORS" Sub New() ' Creo riferimento a questa classe in Map Map.SetRefTopPanelVM(Me) End Sub #End Region ' CONSTRUCTORS #Region "METHODS" #Region "Materials" Friend Sub InitMaterialList() m_MaterialList.Clear() Dim nIndex As Integer = 1 Dim sGUID As String = "" Dim sName As String = "" While ReadMaterialParamString(nIndex, MAT_GUID, "", sGUID) > 0 ' leggo nome ReadMaterialParamString(nIndex, MAT_NAME, "", sName) ' EgtGetStringUtf8FromIni(nIndex, MAT_NAME, "", sName) MaterialList.Add(New MaterialIndex(nIndex, sGUID, sName)) nIndex += 1 End While Dim sCurrMaterial As String = "" GetMainPrivateProfileString(S_PRINTING3D, K_CURRMATERIAL, "", sCurrMaterial) m_SelMaterial = m_MaterialList.FirstOrDefault(Function(x) x.sGUID = sCurrMaterial) NotifyPropertyChanged(NameOf(SelMaterial)) End Sub Friend Function GetSelMaterialData() As Material Return New Material(m_SelMaterial.nIndex, m_SelMaterial.sGUID, m_SelMaterial.sName) End Function #End Region ' Materials #Region "Machining" Friend Sub InitMachiningsList() If IsNothing(m_SelMaterial) Then Return MachiningList.Clear() ' leggo ed aggiungo le altre Dim nIndex As Integer = 1 Dim sGUID As String = "" Dim sName As String = "" Dim sMaterials As String = "" While ReadMachiningParamString(nIndex, MAC_GUID, "", sGUID) > 0 Dim Guid As Guid = Guid.Empty Guid.TryParse(sGUID, Guid) ReadMachiningParamString(nIndex, MAC_NAME, "", sName) ' leggo materiali che usa ReadMachiningParamSplit(nIndex, MAC_MATERIALS, "", sMaterials) Dim MacMaterials() As String = sMaterials.Split(";"c) If MacMaterials.Contains(SelMaterial.sGUID) Then MachiningList.Add(New MachiningIndex(nIndex, Guid, sName)) End If nIndex += 1 End While Dim sCurrMachining As String = "" GetMainPrivateProfileString(S_PRINTING3D, K_CURRMACHINING, "", sCurrMachining) Dim CurrMachining As Guid Guid.TryParse(sCurrMachining, CurrMachining) m_SelMachining = MachiningList.FirstOrDefault(Function(x) x.sGUID = CurrMachining) NotifyPropertyChanged(NameOf(SelMachining)) End Sub Friend Function GetSelMachining() As Machining If IsNothing(m_SelMachining) Then Return Nothing Return New Machining(m_SelMachining.nIndex) End Function 'Friend Sub WriteMachParamOnSelPart() ' If IsNothing(m_SelPart) OrElse IsNothing(m_CurrMachining) Then Return ' m_CurrMachining.WriteMachParamOnPart(m_SelPart.nPartId) 'End Sub #End Region ' Machining #Region "Pages" Private Sub InitIMPORT() Map.refLeftPanelVM.SetSelPanel(LeftPanelVM.Panels.IMPORT) Map.refImportPanelVM.Init() End Sub Private Function ExitIMPORT() Return True End Function Private Sub InitMODIFY() SetSelModifyMode(ModifyModes.DISPOSITION) Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.NULL) Map.refViewLayerManagerVM.UpdateIsVisibleFromIni() End Sub Private Function ExitMODIFY() SetSelModifyMode(ModifyModes.NULL) ' Map.refLeftPanelVM.SetSelPanel(LeftPanelVM.Panels.NULL) Return True End Function Private Sub InitSLICE() Map.refSliceManagerVM.UpdateState(True) Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.TFSEDITOR) Map.refSliderManagerVM.SetSliderVisibility(True) Map.refSliderManagerVM.SetLayerIndexToMax() Map.refViewLayerManagerVM.UpdateIsVisibleFromIni() EgtDeselectAll() End Sub Private Function ExitSLICE() Map.refSliceManagerVM.UpdateState(False) Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.NULL) Map.refSliderManagerVM.SetSliderVisibility(False) SelPart = SelPart Return True End Function Private Sub InitSIMULATION() End Sub Private Function ExitSIMULATION() Return True End Function Private Sub InitMATERIALDB() ' disabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma Map.refProjManagerVM.SetProjCmdIsEnabled(False) Map.refTopPanelVM.SetTopPanelIsEnabled(False) Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(False) Map.refSliceManagerVM.SetButtonsIsEnabled(False) Map.refSliderManagerVM.SetLayerIndexIsEnabled(False) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(False) ' imposto pagina Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.MATERIALDB) End Sub Private Function ExitMATERIALDB() ' riabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma Map.refProjManagerVM.SetProjCmdIsEnabled(True) Map.refTopPanelVM.SetTopPanelIsEnabled(True) Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(True) Map.refSliceManagerVM.SetButtonsIsEnabled(True) Map.refSliderManagerVM.SetLayerIndexIsEnabled(True) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(True) Return True End Function Private Sub InitMACHININGDB() ' disabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma Map.refProjManagerVM.SetProjCmdIsEnabled(False) Map.refTopPanelVM.SetTopPanelIsEnabled(False) Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(False) Map.refSliceManagerVM.SetButtonsIsEnabled(False) Map.refSliderManagerVM.SetLayerIndexIsEnabled(False) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(False) ' imposto pagina Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.PRINTPARAMDB) End Sub Private Function ExitMACHININGDB() ' riabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma Map.refProjManagerVM.SetProjCmdIsEnabled(True) Map.refTopPanelVM.SetTopPanelIsEnabled(True) Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(True) Map.refSliceManagerVM.SetButtonsIsEnabled(True) Map.refSliderManagerVM.SetLayerIndexIsEnabled(True) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(True) Return True End Function Private Sub InitCURRMACHINING() ' disabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma Map.refProjManagerVM.SetProjCmdIsEnabled(False) Map.refTopPanelVM.SetTopPanelIsEnabled(False) Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(False) Map.refSliceManagerVM.SetButtonsIsEnabled(False) Map.refSliderManagerVM.SetLayerIndexIsEnabled(False) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(False) ' imposto pagina Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.CURRPRINTPARAM) End Sub Private Function ExitCURRMACHINING() ' riabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma Map.refProjManagerVM.SetProjCmdIsEnabled(True) Map.refTopPanelVM.SetTopPanelIsEnabled(True) Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(True) Map.refSliceManagerVM.SetButtonsIsEnabled(True) Map.refSliderManagerVM.SetLayerIndexIsEnabled(True) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(True) Return True End Function Private Sub InitMODIFYPART() Map.refLeftPanelVM.SetSelPanel(LeftPanelVM.Panels.MODIFYPART) End Sub Private Function ExitMODIFYPART() Return True End Function Private Sub InitNULL() Map.refLeftPanelVM.SetSelPanel(LeftPanelVM.Panels.NULL) End Sub #End Region ' Pages #Region "Parts Manager" Friend Sub AddNewPart(sFile As String) ' rinomino pezzo e layer Dim nPartId As Integer = EgtGetLastPart() EgtSetName(nPartId, PART) Dim nLayerId As Integer = EgtGetFirstInGroup(nPartId) EgtSetName(nLayerId, ORIGINAL_SOLID) '' Recupero o creo layer ausiliario 'Dim nAuxId As Integer = EgtGetFirstNameInGroup(nPartId, LAY_AUX) 'If Not nAuxId Then ' nAuxId = EgtCreateGroup(nPartId) ' EgtSetName(nAuxId, LAY_AUX) 'End If ' Richiedo posizione origine e offset pezzo Dim b3Part As New BBox3d EgtGetBBoxGlob(nPartId, GDB_BB.EXACT, b3Part) Dim nRefX As Integer = 1 Dim nRefY As Integer = 1 Dim dPosX As Double = CurrentMachine.b3Tab.DimX / 2 - b3Part.DimX / 2 Dim dPosY As Double = CurrentMachine.b3Tab.DimY / 2 - b3Part.DimY / 2 ' Dim Positions = EgtDialogBox( 'Part position on table:', { 'Reference', 'CB:Left,Center,Right'}, ' { '', 'CB:Bottom,Middle,Top'}, ' { 'X', EgtNumToString( EgtToUiUnits( dPosX), 1)}, ' { 'Y', EgtNumToString( EgtToUiUnits( dPosY), 1)}) Dim ChooseReferenceWndVM As New ChooseReferenceWndVM Dim ChooseReferenceWndV As New ChooseReferenceWndV(Application.Current.MainWindow, ChooseReferenceWndVM) If Not ChooseReferenceWndV.ShowDialog() Then Return Dim gg = ChooseReferenceWndVM.SelReference '' Aggiungo il box del solido 'Dim nBoxId As Integer = EgtSurftmb(nAuxId, b3Solid, False, GDB_RT.GLOB) '' posiziono il pezzo al centro 'Dim b3Part As New BBox3d 'EgtGetBBoxGlob(nPartId, GDB_BB.EXACT, b3Part) 'Dim dPosX As Double = (CurrentMachine.b3Tab.DimX() / 2) - (b3Part.DimX() / 2) 'Dim dPosY As Double = (CurrentMachine.b3Tab.DimY() / 2) - (b3Part.DimY() / 2) ' Posiziono il pezzo e aggiorno il suo box Dim vtMove As Vector3d = New Point3d(dPosX, dPosY, 0) - b3Part.Min() EgtMove(nPartId, vtMove) b3Part.Move(vtMove) ' Creo il frame del pezzo Dim frPart = New Frame3d(b3Part.Center() - 0.5 * b3Part.DimZ() * Vector3d.Z_AX(), Frame3d.TYPE.TOP) Dim nFrameId = EgtCreateGeoFrame(nPartId, frPart, GDB_RT.GLOB) If nFrameId <> GDB_ID.NULL Then EgtSetName(nFrameId, "FramePart") EgtSetMode(nFrameId, GDB_MD.LOCKED) End If EgtAddMachGroup("3dPrint") EgtSetTable("Tab") Dim nRawId As Integer = EgtAddRawPart(b3Part.Min, b3Part.DimX, b3Part.DimY, b3Part.DimZ, New Color3d(128, 128, 128, 30)) EgtAddPartToRawPart(nPartId, b3Part.Min, nRawId) EgtMoveToCornerRawPart(nRawId, New Point3d(dPosX, dPosY, 0), MCH_CR.BL) EgtResetCurrMachGroup() ' creo lo start point Dim ptStart As Point3d = b3Part.Center() - 0.6 * b3Part.DimY() * Vector3d.Y_AX() - 0.5 * b3Part.DimZ() * Vector3d.Z_AX() Dim nPtStartId As Integer = EgtCreateGeoPoint(nPartId, ptStart, GDB_RT.GLOB) If nPtStartId <> GDB_ID.NULL Then EgtSetName(nPtStartId, "StartPoint") EgtSetColor(nPtStartId, New Color3d(255, 0, 0)) End If ' aggiungo a lista pezzi e seleziono Dim NewPart As New Print3dPartVM(nPartId, sFile) PartList.Add(NewPart) SelPart = NewPart NotifyPropertyChanged(NameOf(SelPart)) End Sub Friend Sub SelPartFromId(nPartId As Integer) Dim PartToSel As Print3dPartVM = m_PartList.First(Function(x) x.nPartId = nPartId) If Not IsNothing(PartToSel) Then SelPart = PartToSel NotifyPropertyChanged(NameOf(SelPart)) End If End Sub Friend Sub SelLastPart() If PartList.Count > 0 Then SelPart = PartList.LastOrDefault() NotifyPropertyChanged(NameOf(SelPart)) End If End Sub Friend Sub SelFirstPart() If PartList.Count > 0 Then SelPart = PartList.FirstOrDefault() NotifyPropertyChanged(NameOf(SelPart)) End If End Sub #End Region ' Parts Manager #End Region ' METHODS #Region "COMMANDS" #Region "PartModify" ''' ''' Returns a command that do CPlaneTop. ''' Public ReadOnly Property PartModify_Command As ICommand Get If m_cmdPartModify Is Nothing Then m_cmdPartModify = New Command(AddressOf PartModify) End If Return m_cmdPartModify End Get End Property ''' ''' Execute the CPlaneTop. This method is invoked by the CPlaneTopCommand. ''' Public Sub PartModify() If IsNothing(m_SelPart) Then Return SelPage = Pages.MODIFYPART End Sub #End Region ' PartModify #Region "Machining" ''' ''' Returns a command that do CPlaneTop. ''' Public ReadOnly Property Machining_Command As ICommand Get If m_cmdMachining Is Nothing Then m_cmdMachining = New Command(AddressOf Machining) End If Return m_cmdMachining End Get End Property ''' ''' Execute the CPlaneTop. This method is invoked by the CPlaneTopCommand. ''' Public Sub Machining() If IsNothing(m_SelPart) OrElse IsNothing(CurrMachining) Then Return If IsNothing(m_SelMachining) Then MessageBox.Show("Select current Db Machining first!", "Warning", MessageBoxButton.OK, MessageBoxImage.Exclamation) Return End If SelPage = Pages.CURRMACHINING End Sub #End Region ' Machining #Region "PrintParamDb" ''' ''' Returns a command that do CPlaneTop. ''' Public ReadOnly Property PrintParamDb_Command As ICommand Get If m_cmdPrintParamDb Is Nothing Then m_cmdPrintParamDb = New Command(AddressOf PrintParamDb) End If Return m_cmdPrintParamDb End Get End Property ''' ''' Execute the CPlaneTop. This method is invoked by the CPlaneTopCommand. ''' Public Sub PrintParamDb() 'Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.PRINTPARAMDB) SelPage = Pages.MACHININGDB End Sub #End Region ' PrintParamDb #Region "MaterialDb" ''' ''' Returns a command that do CPlaneTop. ''' Public ReadOnly Property MaterialDb_Command As ICommand Get If m_cmdMaterialDb Is Nothing Then m_cmdMaterialDb = New Command(AddressOf MaterialDb) End If Return m_cmdMaterialDb End Get End Property ''' ''' Execute the CPlaneTop. This method is invoked by the CPlaneTopCommand. ''' Public Sub MaterialDb() 'Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.PRINTPARAMDB) SelPage = Pages.MATERIALDB End Sub #End Region ' MaterialDb #End Region ' COMMANDS End Class Public Class ModifyModeButton Inherits VMBase Private m_sName As String Public ReadOnly Property sName As String Get Return m_sName End Get End Property Private m_ModifyMode As ModifyModes Public ReadOnly Property ModifyMode As ModifyModes Get Return m_ModifyMode End Get End Property Sub New(sName As String, ModifyMode As ModifyModes) m_sName = sName m_ModifyMode = ModifyMode End Sub End Class