Files
omagoffice/OptionPanel/MachiningTab/MachiningTabVM.vb
2022-11-07 16:39:34 +01:00

557 lines
18 KiB
VB.net

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