Imports System.Collections.ObjectModel Imports System.IO Imports EgtBEAMWALL.Core Imports EgtUILib Imports EgtWPFLib5 Public Class MachinePanelVM Inherits EgtWPFLib5.MachinePanelVM #Region "FIELDS & PROPERTIES" ' Radice del direttorio delle macchine Private m_sMachinesRoot As String ' Macchina correntemente selezionata e quindi attiva Private m_SelectedMachine As Machine = Nothing Public Overrides Property SelectedMachine As Machine Get Return m_SelectedMachine End Get Set(value As Machine) If value IsNot m_SelectedMachine Then ' imposto macchina in DbGeometrico If EgtSetCurrMachine(value.Name) Then m_SelectedMachine = value End If ' Salvo impostazione macchina corrente SaveCurrentMachine() NotifyPropertyChanged(NameOf(SelectedMachine)) ' inizializzo la macchina selezionata come macchina corrente Dim nMachType As MachineType = DirectCast(m_SelectedMachine, MyMachine).nType SectionXMaterial.SetType(nMachType) InitCurrentMachine(Map.refMainWindowVM.MainWindowM.sMachinesRoot, value.Name, nMachType) ' mostro bottone tabella beam o wall a seconda del tipo m_BeamTable_Visibility = If(nMachType = MachineType.BEAM OrElse nMachType = MachineType.BOTH, Visibility.Visible, Visibility.Collapsed) m_WallTable_Visibility = If(nMachType = MachineType.WALL OrElse nMachType = MachineType.BOTH, Visibility.Visible, Visibility.Collapsed) NotifyPropertyChanged(NameOf(BeamTable_Visibility)) NotifyPropertyChanged(NameOf(WallTable_Visibility)) ' carico i Parametri Q da mostrare (Beam, Wall o entrambi) in base al tipo di macchina selezionata If Not IsNothing(Map.refConfigurationPageVM) Then ' carico i parametri Q dei Process letti dall'ini Map.refConfigurationPageVM.GetQParamsList() ' carico la lista di tutti i parametri Q ciclando su ogni Process di PRCList If Not IsNothing(Map.refConfigurationPageVM.QBTLParamVMList) Then Map.refConfigurationPageVM.QBTLParamVMList.Clear() End If For Each PRCItem In Map.refConfigurationPageVM.PRCList For Each QBTLParam In PRCItem.QBTLParamVMList Map.refConfigurationPageVM.QBTLParamVMList.Add(QBTLParam) Next Next NotifyPropertyChanged(NameOf(Map.refConfigurationPageVM.QBTLParamVMList)) End If ' aggiorno nome macchina in statusbar Map.refMyStatusBarVM.RefreshMachName() End If End Set End Property Private m_MachPanel_IsEnabled As Boolean = True Public Property MachPanel_IsEnabled As Boolean Get Return m_MachPanel_IsEnabled End Get Set(value As Boolean) m_MachPanel_IsEnabled = value NotifyPropertyChanged("MachPanel_IsEnabled") End Set End Property Private m_BeamTable_Visibility As Visibility Public ReadOnly Property BeamTable_Visibility As Visibility Get Return m_BeamTable_Visibility End Get End Property Private m_WallTable_Visibility As Visibility Public ReadOnly Property WallTable_Visibility As Visibility Get Return m_WallTable_Visibility End Get End Property #Region "Messages" Public ReadOnly Property ToolDBMsg As String Get Return EgtMsg(MSG_MACHINEPAGEUC + 6) End Get End Property Public ReadOnly Property MachiningDbMsg As String Get Return EgtMsg(MSG_MACHINEPAGEUC + 7) End Get End Property Public ReadOnly Property SetUpMsg As String Get Return EgtMsg(MSG_ALARMSPAGEUC + 33) End Get End Property #End Region ' Messages #Region "ToolTip" Public ReadOnly Property ToolDBToolTip As String Get Return EgtMsg(5003) End Get End Property Public ReadOnly Property MachiningDbToolTip As String Get Return EgtMsg(5004) End Get End Property Public ReadOnly Property SetUpToolTip As String Get Return EgtMsg(31501) End Get End Property #End Region ' ToolTip ' Definizione comandi Private m_cmdBeamTable As ICommand Private m_cmdWallTable As ICommand #End Region 'FIELDS & PROPERTIES #Region "CONSTRUCTOR" Sub New() ' Creo riferimento a questa classe in Map Map.SetRefMachinePanelVM(Me) ' recupero cartella radice delle macchine m_sMachinesRoot = Map.refMainWindowVM.MainWindowM.sMachinesRoot ' Carica macchine da cartella delle macchine MyMachine.MachineListInit(m_sMachinesRoot, MachineList) End Sub #End Region ' CONSTRUCTOR #Region "METHODS" Friend Sub LoadCurrentMachine() If MachineList.Count = 0 Then Return Dim CurrMachine As Machine = Nothing Dim CurrMachineName As String = String.Empty GetMainPrivateProfileString(S_MACH, K_CURRMACH, String.Empty, CurrMachineName) Dim bFound As Boolean = False If Not String.IsNullOrEmpty(CurrMachineName) Then For Each Mach In MachineList If Mach.Name = CurrMachineName Then bFound = True CurrMachine = Mach Exit For End If Next End If If Not bFound And MachineList.Count > 0 Then CurrMachine = MachineList(0) End If If Not IsNothing(CurrMachine) Then If EgtSetCurrMachine(CurrMachine.Name) Then SelectedMachine = CurrMachine End If End If End Sub Friend Sub SaveCurrentMachine() If IsNothing(m_SelectedMachine) Then Return WriteMainPrivateProfileString(S_MACH, K_CURRMACH, SelectedMachine.Name) End Sub Friend Sub UpdateCurrentMachine() 'EgtSetCurrentContext(IniFile.m_ProjectSceneContext) Dim sMachName As String = String.Empty If EgtGetCurrMachineName(sMachName) Then For Each Mach In MachineList If Mach.Name = sMachName Then SelectedMachine = Mach Exit For End If Next End If End Sub Friend Function BeamMachDb() As Boolean ' Assegno le path Dim sBaseDir As String = m_sMachinesRoot & "\" & m_SelectedMachine.Name & "\" & "Beam" ' verifico se ci sono i file ini Dim sMachTypePath As String = sBaseDir & "\MachiningTypes.ini" Dim sTabTemplPath As String = sBaseDir & "\BeamTableTemplate.ini" If File.Exists(sMachTypePath) AndAlso File.Exists(sTabTemplPath) Then ' apro finestra di gestione lavorazioni travi Dim sTitle = EgtMsg(9000) 'Tabelle delle lavorazioni delle travi Dim BeamMchsWinVM As New MyBeamMachiningsWindowVM(sTitle, sBaseDir, sMachTypePath, sTabTemplPath) Dim BeamMchsWinV As New BeamMachiningsWindowV(Application.Current.MainWindow, BeamMchsWinVM) BeamMchsWinV.ShowDialog() Else ' Impossibile aprire l'Editor delle lavorazioni delle travi.
Mancano i file di configurazione. - Errore MessageBox.Show(EgtMsg(9009), EgtMsg(9008), MessageBoxButton.OK, MessageBoxImage.Stop) End If Return True End Function Friend Function WallMachDb() As Boolean ' Assegno le path Dim sBaseDir As String = m_sMachinesRoot & "\" & m_SelectedMachine.Name & "\" & "Wall" ' verifico se ci sono i file ini Dim sMachTypePath As String = sBaseDir & "\MachiningTypes.ini" Dim sTabTemplPath As String = sBaseDir & "\WallTableTemplate.ini" If File.Exists(sMachTypePath) AndAlso File.Exists(sTabTemplPath) Then ' apro finestra di gestione lavorazioni pareti Dim sTitle = EgtMsg(9010) 'Tabelle delle lavorazioni delle pareti Dim WallMchsWinVM As New MyBeamMachiningsWindowVM(sTitle, sBaseDir, sMachTypePath, sTabTemplPath, False) Dim WallMchsWinV As New BeamMachiningsWindowV(Application.Current.MainWindow, WallMchsWinVM) WallMchsWinV.ShowDialog() Else ' Impossibile aprire l'Editor delle lavorazioni delle pareti.
Mancano i file di configurazione. - Errore MessageBox.Show(EgtMsg(9011), EgtMsg(9008), MessageBoxButton.OK, MessageBoxImage.Stop) End If Return True End Function Public Overrides Sub ToolDb(ByVal param As Object) If Not VerifyMachinesDir(m_sMachinesRoot) Then Return ' ricarico il database per intercettare eventuali aggiornamenti fatti da altre istanze del programma (se la cartella Machines è condivisa) If Not EgtTdbReload() Then EgtOutLog("Impossible reloading tool Db") MessageBox.Show(EgtMsg(MSG_TOOLDBERRORS + 30), EgtMsg(MSG_MESSAGEBOX + 1), MessageBoxButton.OK, MessageBoxImage.Error) Return End If Dim ToolDbWindowVM As New MyToolDbWindowVM(CurrentMachine.sMachDir, CurrentMachine.sMachIniFile, Map.refSceneHostVM.MainScene.GetCtx(), "Beam") Dim ToolDbWindowV As New ToolDbWindowV(Application.Current.MainWindow, ToolDbWindowVM) If ToolDbWindowVM.MatType <> 0 Then ToolDbWindowV.Height = 640 ToolDbWindowV.Width = 1024 ToolDbWindowV.ShowDialog() Else Exit Sub End If End Sub Public Overrides Sub MachDb(ByVal param As Object) If Not VerifyMachinesDir(m_sMachinesRoot) Then Return ' ricarico il database per intercettare eventuali aggiornamenti fatti da altre istanze del programma (se la cartella Machines è condivisa) If Not EgtMdbReload() Then EgtOutLog("Impossible reloading machining Db") MessageBox.Show(EgtMsg(MSG_MACHININGDBERRORS + 8), EgtMsg(MSG_MESSAGEBOX + 1), MessageBoxButton.OK, MessageBoxImage.Error) Return End If Dim MachDbWindowVM As New EgtWPFLib5.MachiningDbWindowVM(CurrentMachine.sMachIniFile, Map.refSceneHostVM.MainScene.GetCtx(), "Stone") Dim MachDbWindowV As New EgtWPFLib5.MachiningDbWindowV(Application.Current.MainWindow, MachDbWindowVM) If EgtWPFLib5.MachiningTreeViewItem.m_MatType <> 0 Then MachDbWindowV.Height = 768 MachDbWindowV.Width = 1024 MachDbWindowV.ShowDialog() Else Exit Sub End If End Sub Public Overrides Sub SetUp(ByVal param As Object) ' verifico che il file di configurazione attrezzaggio (lua) della macchina esista If Not File.Exists(CurrentMachine.sMachDir & "\Scripts\" & SETUP_LUA) Then EgtOutLog("SetUp error: SetUp configuration file doesn't exist ") MessageBox.Show(EgtMsg(MSG_SETUPERRORS + 7), EgtMsg(MSG_SETUPERRORS + 1), MessageBoxButton.OK, MessageBoxImage.Error) Return End If ' carico Lua che contiene le funzioni per ottenere le posizioni valide dell'utensile selezionato, ' e testa e uscita dell'utensile attrezzato EgtLuaExecFile(CurrentMachine.sMachDir & "\Scripts\" & SETUP_LUA) ' verifico che le teste riportate in configurazione esistano Dim Index As Integer = 1 Dim nErr As Integer = 0 While nErr = 0 Dim sHead As String = String.Empty nErr = 999 EgtLuaSetGlobIntVar("STU.INDEX", Index) EgtLuaCallFunction("STU.GetTcPosHeadGroupFromPos") ' Leggo variabili EgtLuaGetGlobStringVar("STU.HEAD", sHead) EgtLuaGetGlobIntVar("STU.ERR", nErr) If nErr = 0 Then If EgtGetHeadExitCount(sHead) = 0 Then MessageBox.Show(EgtMsg(MSG_SETUPERRORS + 8), EgtMsg(MSG_SETUPERRORS + 1), MessageBoxButton.OK, MessageBoxImage.Error) Return End If End If Index += 1 End While ' Reset lua EgtLuaResetGlobVar("STU") Dim SetUpWindow As New SetUpWindowV(Application.Current.MainWindow, New SetUpWindowVM(CurrentMachine.sMachDir, CurrentMachine.sMachineName)) SetUpWindow.Height = 614 SetUpWindow.Width = 1024 SetUpWindow.ShowDialog() End Sub #End Region #Region "COMMANDS" #Region "BeamTable" ''' ''' Returns a command that do Exec. ''' Public ReadOnly Property BeamTable_Command As ICommand Get If m_cmdBeamTable Is Nothing Then m_cmdBeamTable = New Command(AddressOf BeamMachDb) End If Return m_cmdBeamTable End Get End Property #End Region ' BeamTable #Region "WallTable" ''' ''' Returns a command that do Exec. ''' Public ReadOnly Property WallTable_Command As ICommand Get If m_cmdWallTable Is Nothing Then m_cmdWallTable = New Command(AddressOf WallMachDb) End If Return m_cmdWallTable End Get End Property #End Region ' WallTable #End Region ' COMMANDS End Class