Imports EgtUILib Imports EgtWPFLib5 Public Class MachiningTabVM Inherits VMBase #Region "FIELDS & PROPERTIES" Enum MachiningModeOpt As Integer SPLIT MOVERAWPART End Enum Private m_MachiningMode As MachiningModeOpt Public Property MachiningMode As MachiningModeOpt Get Return m_MachiningMode End Get Set(value As MachiningModeOpt) m_MachiningMode = value NotifyPropertyChanged("MachiningModeControl") End Set End Property ' Tipo movimento dei grezzi (manuale o con testa ventosa) Private m_bByHand As Boolean = True Public ReadOnly Property ByHand As Boolean Get Return m_bByHand End Get End Property ' Flag di sola visualizzazione/modifica Private m_bIsShow As Boolean = False Public Property IsShow As Boolean Get Return m_bIsShow End Get Set(value As Boolean) m_bIsShow = value End Set End Property Private m_SplitModeV As SplitModeV Private m_MoveRawModeV As MoveRawModeV Public ReadOnly Property MachiningModeControl As ContentControl Get If m_MachiningMode = MachiningModeOpt.SPLIT Then Return m_SplitModeV Else Return m_MoveRawModeV End If End Get End Property Private m_PrevIsEnabled As Boolean Public Property PrevIsEnabled As Boolean Get Return m_PrevIsEnabled End Get Set(value As Boolean) m_PrevIsEnabled = value NotifyPropertyChanged("PrevIsEnabled") End Set End Property Private m_NextIsEnabled As Boolean Public Property NextIsEnabled As Boolean Get Return m_NextIsEnabled End Get Set(value As Boolean) m_NextIsEnabled = value NotifyPropertyChanged("NextIsEnabled") End Set End Property Private m_ModifyIsEnabled As Boolean Public Property ModifyIsEnabled As Boolean Get Return m_ModifyIsEnabled End Get Set(value As Boolean) m_ModifyIsEnabled = value NotifyPropertyChanged("ModifyIsEnabled") End Set End Property Private m_AutoIsEnabled As Boolean Public Property AutoIsEnabled As Boolean Get Return m_AutoIsEnabled End Get Set(value As Boolean) m_AutoIsEnabled = value NotifyPropertyChanged("AutoIsEnabled") End Set End Property Private m_AutoVisibility As Visibility Public Property AutoVisibility As Visibility Get Return m_AutoVisibility End Get Set(value As Visibility) m_AutoVisibility = value NotifyPropertyChanged("AutoVisibility") End Set End Property ' Definizione comandi Private m_cmdPrev As ICommand Private m_cmdNext As ICommand Private m_cmdModify As ICommand Private m_cmdAuto As ICommand #Region "Messages" Public ReadOnly Property ModifyMsg As String Get Return EgtMsg(MSG_SPLITPAGEUC + 17) End Get End Property Public ReadOnly Property AutoMsg As String Get Return EgtMsg(MSG_SPLITPAGEUC + 18) End Get End Property #End Region ' Messages #End Region ' FIELDS & PROPERTIES #Region "CONSTRUCTOR" Sub New() ' Creo riferimento a questa classe in OmagOFFICEMap OmagOFFICEMap.SetRefMachiningTabVM(Me) ' Creo pagina per modo Split m_SplitModeV = New SplitModeV m_SplitModeV.DataContext = New SplitModeVM ' Creo pagina per modo MoveRaw m_MoveRawModeV = New MoveRawModeV m_MoveRawModeV.DataContext = New MoveRawModeVM End Sub #End Region ' CONSTRUCTOR #Region "METHODS" Friend Function InitMachining() As Boolean EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx()) ' Disabilito Machine Panel (utensili, lavoraz...) OmagOFFICEMap.refMachinePanelVM.MachPanel_IsEnabled = False ' Inizio in modalità Split MachiningMode = MachiningModeOpt.SPLIT ' Leggo tipo movimento grezzi m_bByHand = (EgtGetHeadId(VACUUM_HEAD) = GDB_ID.NULL Or Not OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.AUTO_MANIP) Or (GetMainPrivateProfileInt(S_RAWMOVE, K_PERPENDICULAR, 0) <> 0)) ' Se movimento con ventosa, verifico se lama troppo grande If Not m_bByHand And Not CurrentMachine.IsVacuumMovePossible() Then m_bByHand = True ' Lama troppo grande per utilizzo ventosa OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_SPLITPAGEUC + 11), MSG_TYPE.WARNING) End If ' Carico eventuale manipolatore pezzi EgtDisableModified() LoadVacuumCups() EgtEnableModified() ' Se nessuna modifica, entro in modalità visualizzazione If EstCalc.GetOrderMachiningFlag() Then ' Imposto flag di visualizzazione m_bIsShow = True ' altrimenti riparto da capo Else ' Cancello tutto EraseMachinings(GDB_ID.NULL) ' Reinserisco tutte le lavorazioni AddMachinings(GDB_ID.NULL) ' Imposto flag di modifica m_bIsShow = False End If ' Inizializzo pagina Split OmagOFFICEMap.refSplitModeVM.InitSplitRaw() ' Aggiorno possibilità di uscire ManageExit() Return True End Function Friend Function ExitMachining() As Boolean ' Cancello eventuale manipolatore pezzi EgtDisableModified() RemoveVacuumCups() EgtEnableModified() ' Esco da pagina Split OmagOFFICEMap.refSplitModeVM.ExitSplitRaw() ' Riabilito Machine Panel (utensili, lavoraz...) OmagOFFICEMap.refMachinePanelVM.MachPanel_IsEnabled = True Return True End Function Private Sub ManageExit() Dim bEnab As Boolean = (m_MachiningMode = MachiningModeOpt.SPLIT) OmagOFFICEMap.refOptionPanelVM.RawTabIsEnabled = bEnab OmagOFFICEMap.refOptionPanelVM.NestTabIsEnabled = bEnab OmagOFFICEMap.refOptionPanelVM.SimulTabIsEnabled = bEnab End Sub #End Region ' METHODS #Region "COMMANDS" #Region "PrevCommand" Public ReadOnly Property PrevCommand As ICommand Get If m_cmdPrev Is Nothing Then m_cmdPrev = New Command(AddressOf Prev) End If Return m_cmdPrev End Get End Property Public Sub Prev(ByVal param As Object) Dim bOk As Boolean = True ' Dichiaro solo visualizzazione m_bIsShow = True If m_MachiningMode = MachiningModeOpt.SPLIT Then OmagOFFICEMap.refSplitModeVM.ExitSplitRaw(False) Else ' verifico collisione dei pezzi in fase di scarico bOk = OmagOFFICEMap.refMoveRawModeVM.ExitMoveRaw() End If ' se trovata interferenza tra grezzi (dopo movimentazione) esco If Not bOk Then Return ' Torno alla fase precedente EgtSetCurrPhase(EgtGetCurrPhase() - 1) ' Si va sempre in Split MachiningMode = MachiningModeOpt.SPLIT AutoVisibility = Visibility.Visible OmagOFFICEMap.refSplitModeVM.InitSplitRaw() ' Aggiorno possibilità di uscire ManageExit() End Sub #End Region ' PrevCommand #Region "NextCommand" Public ReadOnly Property NextCommand As ICommand Get If m_cmdNext Is Nothing Then m_cmdNext = New Command(AddressOf NextCmd) End If Return m_cmdNext End Get End Property Public Sub NextCmd(ByVal param As Object) Dim bOk As Boolean = True If m_MachiningMode = MachiningModeOpt.SPLIT Then OmagOFFICEMap.refSplitModeVM.ExitSplitRaw(False) MachiningMode = MachiningModeOpt.MOVERAWPART AutoVisibility = Visibility.Hidden bOk = OmagOFFICEMap.refMoveRawModeVM.InitMoveRaw() Else ' se verificata una interferenza allora esco bOk = OmagOFFICEMap.refMoveRawModeVM.ExitMoveRaw() If Not bOk Then Return MachiningMode = MachiningModeOpt.SPLIT AutoVisibility = Visibility.Visible OmagOFFICEMap.refSplitModeVM.InitSplitRaw() End If ' Se non ci sono interferenze tra i grezzi -> aggiorno possibilità di uscire If bOk Then ManageExit() End Sub #End Region ' NextCommand #Region "ModifyCommand" Public ReadOnly Property ModifyCommand As ICommand Get If m_cmdModify Is Nothing Then m_cmdModify = New Command(AddressOf Modify) End If Return m_cmdModify End Get End Property Public Sub Modify(ByVal param As Object) m_bIsShow = False If m_MachiningMode = MachiningModeOpt.SPLIT Then OmagOFFICEMap.refSplitModeVM.ChangeToModify() Else OmagOFFICEMap.refMoveRawModeVM.ChangeToModify() End If End Sub #End Region ' ModifyCommand #Region "AutoCommand" Public ReadOnly Property AutoCommand As ICommand Get If m_cmdAuto Is Nothing Then m_cmdAuto = New Command(AddressOf Auto) End If Return m_cmdAuto End Get End Property Public Sub Auto(ByVal param As Object) If m_MachiningMode = MachiningModeOpt.SPLIT Then OmagOFFICEMap.refSplitModeVM.ExecAuto() ' Ricarico pagina Split OmagOFFICEMap.refSplitModeVM.InitSplitRaw() End If End Sub #End Region ' AutoCommand #End Region ' COMMANDS #Region "EVENTS" Friend Sub OnMouseDownScene(sender As Object, e As Windows.Forms.MouseEventArgs) If m_MachiningMode = MachiningModeOpt.MOVERAWPART Then OmagOFFICEMap.refMoveRawModeVM.OnMouseDownScene(sender, e) ElseIf m_MachiningMode = MachiningModeOpt.SPLIT Then OmagOFFICEMap.refSplitModeVM.OnMouseDownScene(sender, e) End If End Sub Friend Sub OnMouseDownScene_DoubleClick(sender As Object, e As Windows.Forms.MouseEventArgs) If m_MachiningMode = MachiningModeOpt.SPLIT Then OmagOFFICEMap.refSplitModeVM.OnMouseDownScene_DoubleClick(sender, e) End If End Sub #End Region ' EVENTS End Class