Imports EgtUILib Imports EgtWPFLib5 Public Class MachiningTabVM Inherits VMBase #Region "FIELDS & PROPERTIES" ' Fase corrente Private m_nCurrPhase As Integer = 0 Public Property nCurrPhase As Integer Get Return m_nCurrPhase End Get Set(value As Integer) m_nCurrPhase = value End Set End Property ' Disposizione corrente Private m_nCurrDisposition As Integer = GDB_ID.NULL Public Property nCurrDisposition As Integer Get Return m_nCurrDisposition End Get Set(value As Integer) m_nCurrDisposition = value End Set End Property ' Premuto Prev Private m_bPrev As Boolean = False Public Property bPrev As Boolean Get Return m_bPrev End Get Set(value As Boolean) m_bPrev = value End Set End Property ' Pemuto Next Private m_bToNext As Boolean = False Public Property bToNext As Boolean Get Return m_bToNext End Get Set(value As Boolean) m_bToNext = value End Set End Property 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 Private m_bEnableOnAuxTab As Boolean = False Public ReadOnly Property bEnableOnAuxTab As Boolean Get Return m_bEnableOnAuxTab 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 Private m_FinalMoveRawModeV As FinalMoveRawModeV Public ReadOnly Property MachiningModeControl As ContentControl Get '' nascondo eventuale tavola di scarico 'EgtDisableModified() 'EgtSetStatus(OmagOFFICEMap.refFinalMoveRawModeVM.nAuxTabId, GDB_ST.OFF) 'EgtEnableModified() If m_MachiningMode = MachiningModeOpt.SPLIT Then Return m_SplitModeV Else If OmagOFFICEMap.refSplitModeVM.bOnAuxTab Then Return m_FinalMoveRawModeV Else Return m_MoveRawModeV End If 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 = Visibility.Visible 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 ' Creo la pagina per il modo FinalMoveRaw m_FinalMoveRawModeV = New FinalMoveRawModeV m_FinalMoveRawModeV.DataContext = New FinalMoveRawModeVM 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 ' Verifico se abilitato spostamento finale pezzi e se macchina lo consente m_bEnableOnAuxTab = Not m_bByHand AndAlso OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.MOVE_PARTS) AndAlso EgtGetTableId(AUX_TAB) <> GDB_ID.NULL ' 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 ' imposto la prima disposizione EgtSetCurrPhase(1) nCurrPhase = 1 ' Inizializzo pagina Split OmagOFFICEMap.refSplitModeVM.InitSplitRaw() ' Aggiorno possibilità di uscire ManageExit() Return True End Function ' verifica se la disposizione indicata è uno scarico sulla tavola ausiliaria Public Function IsDispUnloadOnAuxTab(nCurrDispId As Integer) As Integer ' verifico se la fase precedente è uno scarico su tavola ausiliaria Dim bVal As Integer = 0 EgtGetInfo(nCurrDispId, "Pat", bVal) Return bVal End Function ' recupero la prima disposizione disponibile tra l'elenco delle operazioni presenti Public Function GetNextDisposition(nCurrDisposId As Integer) As Integer Dim nDispId As Integer = nCurrDisposId While nDispId <> GDB_ID.NULL If EgtGetOperationType(nDispId) = MCH_OY.DISP Then Return nDispId End If nDispId = EgtGetNextOperation(nDispId) End While Return GDB_ID.NULL End Function Friend Function ExitMachining() As Boolean ' salvo movimenti di deposito If MachiningMode = MachiningModeOpt.MOVERAWPART And OmagOFFICEMap.refSplitModeVM.bOnAuxTab Then ' Nascondo eventuale tavola di scarico EgtDisableModified() EgtSetStatus(OmagOFFICEMap.refFinalMoveRawModeVM.nAuxTabId, GDB_ST.OFF) EgtEnableModified() OmagOFFICEMap.refMoveRawModeVM.ExitMoveRaw() OmagOFFICEMap.refSplitModeVM.InitSplitRaw() End If ' 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() ' gestione abilitazione dei pulsanti TAB: "Grezzo"RAW,"Disponi"NEST,"Lavora"(Attuale tab attivo),"Simula"SIMUL Dim bEnab As Boolean = (m_MachiningMode = MachiningModeOpt.SPLIT) Or OmagOFFICEMap.refSplitModeVM.bOnAuxTab OmagOFFICEMap.refOptionPanelVM.RawTabIsEnabled = bEnab OmagOFFICEMap.refOptionPanelVM.NestTabIsEnabled = bEnab OmagOFFICEMap.refOptionPanelVM.SimulTabIsEnabled = bEnab bPrev = False bToNext = False 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 m_bPrev = 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 ' recupero l'ID della disposizione corrente dalla fase m_nCurrDisposition = EgtGetPhaseDisposition(m_nCurrPhase) ' se non esiste significa che è stata eliminata, quindi recupero la fase precedente If m_nCurrDisposition = GDB_ID.NULL Then m_nCurrPhase = m_nCurrPhase - 1 m_nCurrDisposition = EgtGetPhaseDisposition(m_nCurrPhase) If IsDispUnloadOnAuxTab(m_nCurrDisposition) <> 0 Then EgtSetCurrPhase(m_nCurrPhase) m_bPrev = False m_bIsShow = True OmagOFFICEMap.refMoveRawModeVM.InitMoveRaw() EgtDraw() Return End If Else ' Passo alla pagina delle spezzature solo se non esiste prima una fased di deposito sulla tavola di scarico Dim nPrevDispId As Integer = EgtGetPrevOperation(m_nCurrDisposition) ' verifico se la fasa precedente è di tipo scarico If IsDispUnloadOnAuxTab(nPrevDispId) <> 0 Then EgtSetCurrPhase(m_nCurrPhase - 1) m_nCurrDisposition = nPrevDispId m_nCurrPhase -= 1 m_bPrev = False m_bIsShow = True OmagOFFICEMap.refMoveRawModeVM.InitMoveRaw() EgtDraw() Return End If End If '' Passo alla pagina delle spezzature solo se non esiste prima una fased di deposito sulla tavola di scarico 'Dim nPrevDispId As Integer = EgtGetPrevOperation(m_nCurrDisposition) '' verifico se la fasa precedente è di tipo scarico 'If IsDispUnloadOnAuxTab(nPrevDispId) <> 0 Then ' EgtSetCurrPhase(m_nCurrPhase - 1) ' m_nCurrDisposition = nPrevDispId ' m_nCurrPhase -= 1 ' m_bPrev = False ' m_bIsShow = True ' EgtDraw() ' Return 'End If ' Nascondo eventuale tavola ausiliaria If OmagOFFICEMap.refSplitModeVM.bOnAuxTab Then EgtDisableModified() EgtSetStatus(OmagOFFICEMap.refFinalMoveRawModeVM.nAuxTabId, GDB_ST.OFF) EgtEnableModified() EgtZoom(ZM.ALL, False) If Not m_bPrev Then ' Cancello eventuale manipolatore pezzi EgtDisableModified() RemoveVacuumCups() EgtEnableModified() ' ritorno a fase 1 EgtSetCurrPhase(1) OmagOFFICEMap.refMachiningTabVM.nCurrPhase = 1 ' Ripristino visualizzazione preview lavorazioni ShowAllPhasesMachiningPreview() End If End If ' 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 ' se sono nella pagina split allora devo passare alla pagina MoveRawPart If m_MachiningMode = MachiningModeOpt.SPLIT Then ' esco dalla pagina split OmagOFFICEMap.refSplitModeVM.ExitSplitRaw(False) ' inizializzo la pagina dei movimenti e assegno la nuova fase bOk = OmagOFFICEMap.refMoveRawModeVM.InitMoveRaw() Dim EnableNextBtn As Boolean = True ' in modalità di sola visualizzazione If m_bIsShow Then ' recupero la fase corrente Dim CurrDisposition As Integer = EgtGetPhaseDisposition(m_nCurrPhase) ' recupero l'operazione successiva Dim NextDisposition As Integer = GetNextDisposition(CurrDisposition) ' verifico che esista una If NextDisposition <> GDB_ID.NULL Then ' abilito il flag di tavola ausiliari se attiva OmagOFFICEMap.refSplitModeVM.bOnAuxTab = IsDispUnloadOnAuxTab(NextDisposition) <> 0 EnableNextBtn = True End If End If ' verifico se è abilitata la tavola ausiliaria If OmagOFFICEMap.refSplitModeVM.bOnAuxTab Then ' se sono all'ultima fase inizializzo i comandi per il parcheggio dei pezzi sulla tavola ausiliaria OmagOFFICEMap.refFinalMoveRawModeVM.Init() If m_bIsShow Then EnableNextBtn = True Else EnableNextBtn = False End If End If ' disabilito il pulsante per procedere (sono abilitati i TAB) NextIsEnabled = EnableNextBtn ' notifivo la modifica del ContentControl MachiningMode = MachiningModeOpt.MOVERAWPART AutoVisibility = Visibility.Hidden Else ' se verificata una interferenza allora esco bOk = OmagOFFICEMap.refMoveRawModeVM.ExitMoveRaw() If Not bOk Then Return ' se la disposizione corrente è sulla tavola ausiliaria allora lo sarà anche quella successiva If IsDispUnloadOnAuxTab(m_nCurrDisposition) <> 0 Then EgtSetCurrPhase(m_nCurrPhase + 1) m_nCurrDisposition = EgtGetNextOperation(m_nCurrDisposition) m_nCurrPhase += 1 m_bToNext = False m_bIsShow = True EgtDraw() ' abilitazione dei bottoni per la modifica... Return End If 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 #End Region ' EVENTS End Class