Files
2024-07-31 10:05:03 +02:00

346 lines
10 KiB
VB.net

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