Imports System.IO Imports System.Collections.ObjectModel Imports EgtUILib Imports EgtWPFLib Imports System.ComponentModel Imports System.Threading Imports System.Windows.Threading Class MainWindow ' Mutex per avere una sola istanza del programma in esecuzione Private m_objMutex As New Mutex ' Dichiarazione della classe di connessione al CN Friend m_CNCommunication As CNCommunication ' Variabile per presenza collegamento al CN Friend m_bNCLink As Boolean = False ' Dichiarazione della MachineStatusBar Friend m_MachineStatusUC As MachineStatusUC ' Coefficiente di scalatura della finestra rispetto a standard Friend m_dMWinScale As Double = 1 ' Dichiarazione delle Page UserControl Friend m_WorkInProgressPageUC As WorkInProgressPageUC Friend m_CurrentProjectPageUC As CurrentProjectPageUC Friend m_DirectCutPageUC As DirectCutPageUC Friend m_CadCutPageUC As CadCutPageUC Friend m_OpenPage As OpenPageUC Friend m_PhotoPage As PhotoPageUC Friend m_RawPartPage As RawPartPageUC Friend m_DrawPageUC As DrawPageUC Friend m_ImportPageUC As ImportPageUC Friend m_SimulationPage As SimulationPageUC Friend m_FrameCutPageUC As FrameCutPageUC Friend m_MachinePageUC As MachinePageUC Friend m_OptionsPageUC As OptionsPageUC ' Dichiarazione variabili direttori Private m_sExeRoot As String = String.Empty Private m_sDataRoot As String = String.Empty Private m_sConfigDir As String = String.Empty Private m_sResourcesDir As String = String.Empty Private m_sTempDir As String = String.Empty Private m_sSaveDir As String = String.Empty Private m_sNamedSaveDir As String = String.Empty Private m_sCopyTemplateDir As String = String.Empty Private m_sCncDir As String = String.Empty Private m_sMachinesRoot As String = String.Empty Private m_sIniFile As String = String.Empty Private m_sMachIniFile As String = String.Empty Private m_nDebug As Integer = 0 Private m_sVersion As String = "1.1a1" 'Dichiarazione variabile contenente la lingua corrente Friend m_CurrLanguage As Language 'Dichiarazione lista delle lingue disponibili e lingua corrente Friend m_LanguagesList As New List(Of Language) ' Dichiarazione classe macchina Friend m_CurrentMachine As CurrentMachine ' Macchina corrente Private m_sCurrMachine As String = String.Empty ' Oggetto di gestione della macchina fotografica Friend m_Camera As New Camera ' Opzioni abilitate dalla licenza attiva associata alla chiave Private m_nKeyOptions As UInteger Friend Enum KEY_OPT As UInteger CUT_BASE = 1 ' Prodotto OmagCUT MAN_MANIP = 2 AUTO_MANIP = 4 MAN_PHOTO = 8 AUTO_PHOTO = 16 AUTO_NESTING = 32 ENABLE_MILL = 64 PROCUCTION_LINE = 128 OFFICE_BASE = 256 ' Prodotto OmagOFFICE VM_MULTI = 512 UNDER_CUT = 1024 CSV_SIMPLE = 2048 PHOTO_BASE = 4096 ' Prodotto OmagPHOTO TRF_IMPORT = 8192 End Enum ' Dichiarazione lista per ListBox della ImportPage Friend m_ImportItemList As New ObservableCollection(Of IconListBoxItem) Friend m_OpenItemList As New ObservableCollection(Of IconListBoxItem) Friend m_PhotoItemList As New ObservableCollection(Of IconListBoxItem) ' Riferimento alla pagina correntemente attiva Friend m_ActivePage As Pages Friend m_PrevActivePage As Pages ' Funziona solo per tornare indietro da grezzo e foto !! ' Timer per aggiornamento interfaccia Private m_IdleTimer As New DispatcherTimer ' Timer per linea di produzione Private m_ProdLineTimer As New DispatcherTimer ' Variabile che indica il tipo di pc su cui gira il programma Private m_bIsSiemensPc As Boolean = False Friend Enum Pages WorkInProgress DirectCut CadCut Photo Open RawPart Draw Import CSV Simulation FrameCut Machine Alarms Options End Enum Public Function GetExeRootDir() As String Return m_sExeRoot End Function Public Function GetIniFile() As String Return m_sIniFile End Function Public Function GetResourcesDir() As String Return m_sResourcesDir End Function Public Function GetTempDir() As String Return m_sTempDir End Function Public Function GetSaveDir() As String Return m_sSaveDir End Function Public Function GetNamedSaveDir() As String Return m_sNamedSaveDir End Function Public Function GetVeinMatchingDir() As String Return m_sDataRoot & "\" & VEINMATCHING_DIR End Function Public Function GetCamAutoDir() As String Return m_sDataRoot & "\" & CAMAUTO_DIR End Function Public Function GetCsvAutoDir() As String Return m_sDataRoot & "\" & CSVAUTO_DIR End Function Public Function GetTrfAutoDir() As String Return m_sDataRoot & "\" & TRFAUTO_DIR End Function Public Function GetCopyTemplateDir() As String Return m_sCopyTemplateDir End Function Public Function GetCncDir() As String Return m_sCncDir End Function Public Function GetMachinesRootDir() As String Return m_sMachinesRoot End Function Public Function GetCurrMachine() As String Return m_sCurrMachine End Function Public Function GetMachIniFile() As String Return m_sMachIniFile End Function Friend Function GetKeyOption(nKeyOpt As KEY_OPT) As Boolean Return ((m_nKeyOptions And nKeyOpt) <> 0) End Function Friend Function GetKeyOptions() As UInteger Return m_nKeyOptions End Function Friend Function GetVersion() As String Return m_sVersion End Function Public Function IsSiemensPc() As Boolean Return m_bIsSiemensPc End Function Private Sub MainWindow_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized ' Verifico sia l'unica istanza ManageSingleIstance() ' Imposto path di esecuzione m_sExeRoot = System.AppDomain.CurrentDomain.BaseDirectory.TrimEnd("\".ToCharArray()) ' Impostazione path radice per i dati If GetPrivateProfileString(S_DATA, K_DATAROOT, "", m_sDataRoot, m_sExeRoot & "\" & DAT_FILE_NAME) = 0 Then m_sDataRoot = m_sExeRoot End If ' Impostazione direttorio di configurazione m_sConfigDir = m_sDataRoot & "\" & CONF_DIR ' Impostazione direttorio delle risorse m_sResourcesDir = m_sDataRoot & "\" & RES_DIR ' Impostazione direttorio per file temporanei m_sTempDir = m_sDataRoot & "\" & TEMP_DIR EgtSetTempDir(m_sTempDir) ' Impostazione direttorio per file Cnc m_sCncDir = m_sDataRoot & "\" & CNC_DIR ' Impostazione path Ini file m_sIniFile = m_sConfigDir & "\" & INI_FILE_NAME EgtSetIniFile(m_sIniFile) ' Impostazione direttorio di salvataggio automatico If GetPrivateProfileString(S_GENERAL, K_SAVEDIR, "", m_sSaveDir, m_sIniFile) = 0 Then m_sSaveDir = m_sDataRoot & "\" & SAVE_DFL_DIR End If ' Impostazione direttorio di salvataggio dei progetti con nome If GetPrivateProfileString(S_GENERAL, K_SAVENAMEDIR, "", m_sNamedSaveDir, m_sIniFile) = 0 Then m_sNamedSaveDir = m_sDataRoot & "\" & SAVE_DFL_NAMEDIR End If ' Impostazione direttorio di salvataggio dei DXF delle dime (CopyTemplate) If GetPrivateProfileString(S_COPYTEMPLATE, K_CPTCURRDIR, "", m_sCopyTemplateDir, m_sIniFile) = 0 Then m_sCopyTemplateDir = m_sDataRoot & "\" & TEMPLATE_DFL_DIR End If ' Impostazione direttorio per le macchine If GetPrivateProfileString(S_MACH, K_MACHINESDIR, "", m_sMachinesRoot, m_sIniFile) = 0 Then m_sMachinesRoot = m_sDataRoot & "\" & MACHINES_DFL_DIR End If ' Recupero nome macchina corrente GetPrivateProfileString(S_MACH, K_CURRMACH, "", m_sCurrMachine, m_sIniFile) ' Impostazione path MachIni file m_sMachIniFile = m_sMachinesRoot & "\" & m_sCurrMachine & "\" & m_sCurrMachine & ".ini" ' Imposto tipo di chiave #If TRIAL Then EgtSetLockType(KEY_TYPE.ANY) #Else EgtSetLockType(KEY_TYPE.HW) #End If ' Leggo e imposto chiave di protezione Dim sLicFileName As String = String.Empty GetPrivateProfileString(S_GENERAL, K_LICENCE, LIC_FILE_NAME, sLicFileName, m_sIniFile) Dim sLicFile As String = m_sConfigDir & "\" & sLicFileName Dim sKey As String = String.Empty GetPrivateProfileString(S_LICENCE, K_KEY, "", sKey, sLicFile) EgtSetKey(sKey) ' Recupero opzioni della chiave Dim bKey As Boolean = EgtGetKeyOptions(9423, 16, 1, m_nKeyOptions) ' Verifico abilitazione prodotto Dim bProd As Boolean = GetKeyOption(KEY_OPT.CUT_BASE) ' Inizializzazione generale di EgtInterface m_nDebug = GetPrivateProfileInt(S_GENERAL, K_DEBUG, 0, m_sIniFile) m_sVersion = My.Application.Info.Version.Major.ToString() & "." & My.Application.Info.Version.Minor.ToString() & (ChrW(97 - 1 + My.Application.Info.Version.Build)).ToString() & My.Application.Info.Version.Revision.ToString() Dim sLogFile As String = m_sTempDir & "\" & GENLOG_FILE_NAME Dim sLogMsg As String = My.Application.Info.Title.ToString() & " ver. " & m_sVersion EgtInit(m_nDebug, sLogFile, sLogMsg) ' Leggo direttorio dei messaggi (se manca uso direttorio di configurazione) Dim sMsgDir As String = String.Empty If GetPrivateProfileString(S_GENERAL, K_MESSAGESDIR, "", sMsgDir, m_sIniFile) = 0 Then sMsgDir = m_sConfigDir End If ' Leggo elenco lingue disponibili da file ini Dim nIndex As Integer = 1 Dim ReadLanguage As Language = GetPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & nIndex, GetIniFile) While Not IsNothing(ReadLanguage) m_LanguagesList.Add(ReadLanguage) nIndex += 1 ReadLanguage = GetPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & nIndex, GetIniFile) End While ' Leggo file messaggi Dim sMsgFile As String = String.Empty GetPrivateProfileString(S_GENERAL, K_MESSAGES, "", sMsgFile, m_sIniFile) For i As Integer = 0 To m_LanguagesList.Count - 1 If m_LanguagesList(i).LanguageName = sMsgFile Then m_CurrLanguage = m_LanguagesList(i) End If Next Dim sMsgFilePath As String = sMsgDir & "\EgalTechIta.txt" If Not IsNothing(m_CurrLanguage) Then sMsgFilePath = sMsgDir & "\" & m_CurrLanguage.FileName End If If Not EgtLoadMessages(sMsgFilePath) Then EgtOutLog("Error in EgtLoadMessages") End If Dim sNfeDir As String = String.Empty GetPrivateProfileString(S_GEOMDB, K_NFEFONTDIR, "", sNfeDir, m_sIniFile) Dim sDefFont As String = String.Empty GetPrivateProfileString(S_GEOMDB, K_DEFAULTFONT, "", sDefFont, m_sIniFile) EgtSetFont(sNfeDir, sDefFont) ' Imposto dir di default per libreria Lua e lancio libreria di base Dim sLuaLibsDir As String = String.Empty GetPrivateProfileString(S_LUA, K_LIBSDIR, "", sLuaLibsDir, m_sIniFile) EgtSetLuaLibs(sLuaLibsDir) Dim sLuaBaseLib As String = String.Empty GetPrivateProfileString(S_LUA, K_BASELIB, "EgtBase", sLuaBaseLib, m_sIniFile) EgtLuaRequire(sLuaBaseLib) ' Imposto unità di misura per interfaccia utente Dim bMM As Boolean = (GetPrivateProfileInt(S_GENERAL, K_MMUNITS, 1, m_sIniFile) <> 0) EgtSetUiUnits(bMM) ' Imposto posizione e dimensioni della MainWindow Dim nFlag, nLeft, nTop, nWidth, nHeight As Integer GetPrivateProfileWinPos(S_GENERAL, K_WINPLACE, nFlag, nLeft, nTop, nWidth, nHeight, m_sIniFile) Me.WindowStartupLocation = Windows.WindowStartupLocation.Manual Me.Top = nTop Me.Left = nLeft Me.Height = nHeight Me.Width = nWidth WindowState = If(nFlag = 1, WindowState.Maximized, WindowState.Normal) m_dMWinScale = Math.Min(Me.Width / 1280, Me.Height / 832) ' Info su opzioni chiave EgtOutLog("KeyOptions : " & bKey.ToString() & " " & m_nKeyOptions.ToString() & " " & bProd.ToString()) ' Inizializzazione della libreria EgtWPFLib EgtWPFInit() ' Inizializzo classe macchina corrente m_CurrentMachine = New CurrentMachine ' Crezione della MachineStatusBar m_MachineStatusUC = New MachineStatusUC ' Creazione delle Page UserControl m_WorkInProgressPageUC = New WorkInProgressPageUC m_DirectCutPageUC = New DirectCutPageUC m_CadCutPageUC = New CadCutPageUC m_OpenPage = New OpenPageUC m_PhotoPage = New PhotoPageUC m_RawPartPage = New RawPartPageUC m_DrawPageUC = New DrawPageUC m_ImportPageUC = New ImportPageUC m_SimulationPage = New SimulationPageUC m_FrameCutPageUC = New FrameCutPageUC m_CurrentProjectPageUC = New CurrentProjectPageUC m_MachinePageUC = New MachinePageUC m_OptionsPageUC = New OptionsPageUC ' Creazione gestore comunicazione con macchina CN m_CNCommunication = New CNCommunication ' Imposto tipologia di pc su cui gira il programma m_bIsSiemensPc = If(GetPrivateProfileInt(S_GENERAL, K_SIEMENSPC, 0, GetIniFile()) = 0, False, True) ' Posizionamento nella griglia della MachineStatusBar If GetPrivateProfileInt(S_NUMERICALCONTROL, K_TYPE, 0, GetMachIniFile()) = 0 Then MainWindowGrid.ColumnDefinitions.RemoveAt(MainWindowGrid.ColumnDefinitions.Count - 1) MainWindowGrid.RowDefinitions.RemoveAt(MainWindowGrid.RowDefinitions.Count - 1) WorkInProgressBtn.IsEnabled = False Else If Not m_bIsSiemensPc Then m_MachineStatusUC.SetValue(Grid.RowProperty, 2) MainWindowGrid.ColumnDefinitions.RemoveAt(MainWindowGrid.ColumnDefinitions.Count - 1) Else m_MachineStatusUC.SetValue(Grid.ColumnProperty, 2) m_MachineStatusUC.SetValue(Grid.RowSpanProperty, 3) MainWindowGrid.RowDefinitions.RemoveAt(MainWindowGrid.RowDefinitions.Count - 1) End If End If If m_bIsSiemensPc Then Application.Current.Resources("FontSize_LowerCaseCharacter") = New FontSizeConverter().ConvertFrom(CStr("17")) Application.Current.Resources("ComboBox_Height") = New LengthConverter().ConvertFrom(CStr("35")) Application.Current.Resources("FontSize_GroupBoxHeader") = New LengthConverter().ConvertFrom(CStr("19")) Application.Current.Resources("CheckBox_Height") = New LengthConverter().ConvertFrom(CStr("35")) Application.Current.Resources("TextBoxInGroupBox_Margin") = New Thickness(2, 0, 9, 0) Application.Current.Resources("RightTextBoxInBorder_Margin") = New Thickness(1, 0, 12, 0) Application.Current.Resources("LeftTextBoxInBorder_Margin") = New Thickness(4, 0, 9, 0) Application.Current.Resources("LeftTextBoxNoBorder_Margin") = New Thickness(6, 0, 9, 0) Application.Current.Resources("RightComboBoxInBorder_Margin") = New Thickness(2, 0, 11, 0) Application.Current.Resources("MachRightTextBoxInBorder_Margin") = New Thickness(2, 0, 11, 0) Application.Current.Resources("MachLeftTextBoxInBorder_Margin") = New Thickness(4, 0, 9, 0) Application.Current.Resources("LeftComboBoxInBorder_Margin") = New Thickness(4, 0, 9, 0) Application.Current.Resources("MachToolLeftTextBoxNoBorder_Margin") = New Thickness(3, 0, 15, 0) Application.Current.Resources("ArrowImage_Height") = New LengthConverter().ConvertFrom(CStr("52")) Application.Current.Resources("ScaleImage_Height") = New LengthConverter().ConvertFrom(CStr("60")) Application.Current.Resources("MachineStatusImage_Height") = New LengthConverter().ConvertFrom(CStr("65")) Application.Current.Resources("SplitPageBtn_FontSize") = New LengthConverter().ConvertFrom(CStr("14")) End If ' Posizionemento nella griglia delle Page UserControl m_WorkInProgressPageUC.SetValue(Grid.ColumnProperty, 0) m_WorkInProgressPageUC.SetValue(Grid.RowProperty, 1) m_OpenPage.SetValue(Grid.ColumnProperty, 0) m_OpenPage.SetValue(Grid.RowProperty, 1) m_PhotoPage.SetValue(Grid.ColumnProperty, 0) m_PhotoPage.SetValue(Grid.RowProperty, 1) m_RawPartPage.SetValue(Grid.ColumnSpanProperty, 2) m_RawPartPage.SetValue(Grid.RowSpanProperty, 3) m_SimulationPage.SetValue(Grid.ColumnSpanProperty, 2) m_SimulationPage.SetValue(Grid.RowSpanProperty, 3) m_DrawPageUC.SetValue(Grid.ColumnProperty, 0) m_DrawPageUC.SetValue(Grid.RowProperty, 1) m_ImportPageUC.SetValue(Grid.ColumnProperty, 0) m_ImportPageUC.SetValue(Grid.RowProperty, 1) m_CurrentProjectPageUC.SetValue(Grid.ColumnProperty, 0) m_CurrentProjectPageUC.SetValue(Grid.RowProperty, 1) m_MachinePageUC.SetValue(Grid.ColumnProperty, 0) m_MachinePageUC.SetValue(Grid.RowProperty, 1) m_OptionsPageUC.SetValue(Grid.ColumnProperty, 0) m_OptionsPageUC.SetValue(Grid.RowProperty, 1) ' Posizionamento nella griglia di pagine e usercontrol di utilità m_WorkInProgressPageUC.SetValue(Grid.ColumnProperty, 0) m_WorkInProgressPageUC.SetValue(Grid.RowProperty, 1) ' Disabilita la possibilità di imitare il click del tasto destro del mouse tenendo premuto il dito sul touch ' NB: Se abilitato impedisce di utilizzare lo stato Pressed dei Button che quindi non si evidenziano quando premuti Stylus.SetIsPressAndHoldEnabled(Me, False) ' Imposto i messaggi letti dal file dei messaggi WorkInProgressBtn.Content = EgtMsg(MSG_GENERAL + 1) DirectCutBtn.Content = EgtMsg(MSG_GENERAL + 2) CadCutBtn.Content = EgtMsg(MSG_GENERAL + 3) FrameCutBtn.Content = EgtMsg(MSG_GENERAL + 4) MachineBtn.Content = EgtMsg(MSG_GENERAL + 5) ' Imposto OnIdle AddHandler m_IdleTimer.Tick, AddressOf OnIdle ' Imposto OnProdLine AddHandler m_ProdLineTimer.Tick, AddressOf OnProdLine End Sub Private Sub ManageSingleIstance() Dim bCreated As Boolean Try m_objMutex = New Mutex(False, "Global\OmagCut", bCreated) Catch bCreated = False End Try If Not bCreated Then ' porto in primo piano la prima istanza Dim bFound As Boolean = False ' processi del programma a 32 bit Dim localProc As Process() = Process.GetProcessesByName("OmagCutR32") For Each p As Process In localProc If p.Id <> Process.GetCurrentProcess().Id Then bFound = True ShowWindow(p.MainWindowHandle, 1) Exit For End If Next ' se non trovati processi a 32 bit provo a 64 bit If Not bFound Then localProc = Process.GetProcessesByName("OmagCutR64") For Each p As Process In localProc If p.Id <> Process.GetCurrentProcess().Id Then bFound = True ShowWindow(p.MainWindowHandle, SW.RESTORE) Exit For End If Next End If ' esco dal programma End End If End Sub Private Sub MainWindow_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles Me.Loaded ' Se il controllo numerico non è impostato a 0 If Not GetPrivateProfileInt(S_NUMERICALCONTROL, K_TYPE, 0, GetMachIniFile()) = 0 Then ' Aggiungo la MachineStatusBar alla MainWindow MainWindowGrid.Children.Add(m_MachineStatusUC) End If ' Preparo la macchina per la lavorazione in corso m_WorkInProgressPageUC.Prepare() m_WorkInProgressPageUC.UpdateTools() ' Se macchina fotografica abilitata, ne inizializzo il gestore #If Not TRIAL Then If GetKeyOption(MainWindow.KEY_OPT.MAN_PHOTO) Then m_Camera.Init() End If #End If ' Seleziono la Page di apertura MainWindowGrid.Children.Add(m_CurrentProjectPageUC) ' Lancio timer per aggiornamento interfaccia m_IdleTimer.Interval = TimeSpan.FromMilliseconds(100) m_IdleTimer.Start() End Sub Private Sub WorkInProgressBtn_Click(sender As Object, e As RoutedEventArgs) Handles WorkInProgressBtn.Click m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = True Case Pages.DirectCut WorkInProgressBtn.IsChecked = True DirectCutBtn.IsChecked = False m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_DirectCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_WorkInProgressPageUC) m_ActivePage = Pages.WorkInProgress Case Pages.CadCut And m_CadCutPageUC.m_CadCutMode = CadCutPageUC.CadCutModes.Nest And Not m_CadCutPageUC.m_NestPage.m_bRegister WorkInProgressBtn.IsChecked = True CadCutBtn.IsChecked = False m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_CadCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_WorkInProgressPageUC) m_ActivePage = Pages.WorkInProgress Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation, Pages.CadCut And (m_CadCutPageUC.m_CadCutMode <> CadCutPageUC.CadCutModes.Nest Or m_CadCutPageUC.m_NestPage.m_bRegister) WorkInProgressBtn.IsChecked = False CadCutBtn.IsChecked = True Case Pages.FrameCut WorkInProgressBtn.IsChecked = True FrameCutBtn.IsChecked = False m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_FrameCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_WorkInProgressPageUC) m_ActivePage = Pages.WorkInProgress Case Pages.Machine WorkInProgressBtn.IsChecked = False If Not ExitFromMachine() Then WorkInProgressBtn.IsChecked = False MachineBtn.IsChecked = True Exit Sub End If WorkInProgressBtn.IsChecked = True MachineBtn.IsChecked = False MainWindowGrid.Children.Remove(m_MachinePageUC) MainWindowGrid.Children.Add(m_WorkInProgressPageUC) m_ActivePage = Pages.WorkInProgress Case Pages.Options WorkInProgressBtn.IsChecked = True OptionsBtn.IsChecked = False MainWindowGrid.Children.Remove(m_OptionsPageUC) MainWindowGrid.Children.Add(m_WorkInProgressPageUC) m_ActivePage = Pages.WorkInProgress End Select End Sub Private Sub DirectCutBtn_Click(sender As Object, e As RoutedEventArgs) Handles DirectCutBtn.Click m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False DirectCutBtn.IsChecked = True MainWindowGrid.Children.Remove(m_WorkInProgressPageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_DirectCutPageUC) m_ActivePage = Pages.DirectCut Case Pages.DirectCut DirectCutBtn.IsChecked = True Case Pages.CadCut And m_CadCutPageUC.m_CadCutMode = CadCutPageUC.CadCutModes.Nest And Not m_CadCutPageUC.m_NestPage.m_bRegister DirectCutBtn.IsChecked = True CadCutBtn.IsChecked = False m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_CadCutPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_DirectCutPageUC) m_ActivePage = Pages.DirectCut Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation, Pages.CadCut And (m_CadCutPageUC.m_CadCutMode <> CadCutPageUC.CadCutModes.Nest Or m_CadCutPageUC.m_NestPage.m_bRegister) DirectCutBtn.IsChecked = False CadCutBtn.IsChecked = True Case Pages.FrameCut DirectCutBtn.IsChecked = True FrameCutBtn.IsChecked = False m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_FrameCutPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_DirectCutPageUC) m_ActivePage = Pages.DirectCut Case Pages.Machine DirectCutBtn.IsChecked = False If Not ExitFromMachine() Then DirectCutBtn.IsChecked = False MachineBtn.IsChecked = True Exit Sub End If DirectCutBtn.IsChecked = True MachineBtn.IsChecked = False MainWindowGrid.Children.Remove(m_MachinePageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_DirectCutPageUC) m_ActivePage = Pages.DirectCut Case Pages.Options DirectCutBtn.IsChecked = True OptionsBtn.IsChecked = False MainWindowGrid.Children.Remove(m_OptionsPageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_DirectCutPageUC) m_ActivePage = Pages.DirectCut End Select End Sub Private Sub CadCutBtn_Click(sender As Object, e As RoutedEventArgs) Handles CadCutBtn.Click m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False CadCutBtn.IsChecked = True MainWindowGrid.Children.Remove(m_WorkInProgressPageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_CadCutPageUC) m_ActivePage = Pages.CadCut Case Pages.DirectCut DirectCutBtn.IsChecked = False CadCutBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_DirectCutPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_CadCutPageUC) m_ActivePage = Pages.CadCut Case Pages.CadCut CadCutBtn.IsChecked = True Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation CadCutBtn.IsChecked = True Case Pages.FrameCut CadCutBtn.IsChecked = True FrameCutBtn.IsChecked = False m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_FrameCutPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_CadCutPageUC) m_ActivePage = Pages.CadCut Case Pages.Machine CadCutBtn.IsChecked = False If Not ExitFromMachine() Then CadCutBtn.IsChecked = False MachineBtn.IsChecked = True Exit Sub End If CadCutBtn.IsChecked = True MachineBtn.IsChecked = False MainWindowGrid.Children.Remove(m_MachinePageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_CadCutPageUC) m_ActivePage = Pages.CadCut Case Pages.Options CadCutBtn.IsChecked = True OptionsBtn.IsChecked = False MainWindowGrid.Children.Remove(m_OptionsPageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_CadCutPageUC) m_ActivePage = Pages.CadCut End Select End Sub Private Sub FrameCutBtn_Click(sender As Object, e As RoutedEventArgs) Handles FrameCutBtn.Click m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False FrameCutBtn.IsChecked = True MainWindowGrid.Children.Remove(m_WorkInProgressPageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_FrameCutPageUC) m_ActivePage = Pages.FrameCut Case Pages.DirectCut DirectCutBtn.IsChecked = False FrameCutBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_DirectCutPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_FrameCutPageUC) m_ActivePage = Pages.FrameCut Case Pages.CadCut CadCutBtn.IsChecked = False FrameCutBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_CadCutPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_FrameCutPageUC) m_ActivePage = Pages.FrameCut Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation CadCutBtn.IsChecked = True FrameCutBtn.IsChecked = False Case Pages.FrameCut FrameCutBtn.IsChecked = True Case Pages.Machine FrameCutBtn.IsChecked = False If Not ExitFromMachine() Then FrameCutBtn.IsChecked = False MachineBtn.IsChecked = True Exit Sub End If FrameCutBtn.IsChecked = True MachineBtn.IsChecked = False MainWindowGrid.Children.Remove(m_MachinePageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_FrameCutPageUC) m_ActivePage = Pages.FrameCut Case Pages.Options FrameCutBtn.IsChecked = True OptionsBtn.IsChecked = False MainWindowGrid.Children.Remove(m_OptionsPageUC) MainWindowGrid.Children.Add(m_CurrentProjectPageUC) m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_FrameCutPageUC) m_ActivePage = Pages.FrameCut End Select End Sub Private Sub MachineBtn_Click(sender As Object, e As RoutedEventArgs) Handles MachineBtn.Click m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False MachineBtn.IsChecked = True MainWindowGrid.Children.Remove(m_WorkInProgressPageUC) MainWindowGrid.Children.Add(m_MachinePageUC) m_ActivePage = Pages.Machine Case Pages.DirectCut DirectCutBtn.IsChecked = False MachineBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_DirectCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_MachinePageUC) m_ActivePage = Pages.Machine Case Pages.CadCut And m_CadCutPageUC.m_CadCutMode = CadCutPageUC.CadCutModes.Nest And Not m_CadCutPageUC.m_NestPage.m_bRegister CadCutBtn.IsChecked = False MachineBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_CadCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_MachinePageUC) m_ActivePage = Pages.Machine Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation, Pages.CadCut And (m_CadCutPageUC.m_CadCutMode <> CadCutPageUC.CadCutModes.Nest Or m_CadCutPageUC.m_NestPage.m_bRegister) CadCutBtn.IsChecked = True MachineBtn.IsChecked = False Case Pages.FrameCut FrameCutBtn.IsChecked = False MachineBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_FrameCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_MachinePageUC) m_ActivePage = Pages.Machine Case Pages.Machine MachineBtn.IsChecked = True Case Pages.Options MachineBtn.IsChecked = True OptionsBtn.IsChecked = False MainWindowGrid.Children.Remove(m_OptionsPageUC) MainWindowGrid.Children.Add(m_MachinePageUC) m_ActivePage = Pages.Machine End Select End Sub Private Sub OptionsBtn_Click(sender As Object, e As RoutedEventArgs) Handles OptionsBtn.Click m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False OptionsBtn.IsChecked = True MainWindowGrid.Children.Remove(m_WorkInProgressPageUC) MainWindowGrid.Children.Add(m_OptionsPageUC) m_ActivePage = Pages.Options Case Pages.DirectCut DirectCutBtn.IsChecked = False OptionsBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_DirectCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_OptionsPageUC) m_ActivePage = Pages.Options Case Pages.CadCut And m_CadCutPageUC.m_CadCutMode = CadCutPageUC.CadCutModes.Nest And Not m_CadCutPageUC.m_NestPage.m_bRegister CadCutBtn.IsChecked = False OptionsBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_CadCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_OptionsPageUC) m_ActivePage = Pages.Options Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation, Pages.CadCut And (m_CadCutPageUC.m_CadCutMode <> CadCutPageUC.CadCutModes.Nest Or m_CadCutPageUC.m_NestPage.m_bRegister) CadCutBtn.IsChecked = True OptionsBtn.IsChecked = False Case Pages.FrameCut FrameCutBtn.IsChecked = False OptionsBtn.IsChecked = True m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_FrameCutPageUC) MainWindowGrid.Children.Remove(m_CurrentProjectPageUC) MainWindowGrid.Children.Add(m_OptionsPageUC) m_ActivePage = Pages.Options Case Pages.Machine OptionsBtn.IsChecked = False If Not ExitFromMachine() Then OptionsBtn.IsChecked = False MachineBtn.IsChecked = True Exit Sub End If MachineBtn.IsChecked = False OptionsBtn.IsChecked = True MainWindowGrid.Children.Remove(m_MachinePageUC) MainWindowGrid.Children.Add(m_OptionsPageUC) m_ActivePage = Pages.Options Case Pages.Options OptionsBtn.IsChecked = True End Select End Sub Private Sub MainWindow_PreviewMouseDown(sender As Object, e As MouseButtonEventArgs) Handles Me.PreviewMouseDown ' Se sto fotografando, impedisco tutte le operazioni If m_Camera.m_bBusy And Not m_CurrentProjectPageUC.m_SceneButtons.IsMouseOver Then e.Handled = True Return End If ' Se già visualizzato errore, lo nascondo If m_CurrentProjectPageUC.OutMessageBrd.IsMouseOver Then m_CurrentProjectPageUC.ClearMessage() End If ' Condizioni che impediscono di clickare fuori dalla calcolatrice o tastiera quando una di queste è aperta If EgtWPFLib.EgtCalculator.GetbIsActive Then e.Handled = True Return End If If EgtWPFLib.EgtKeyboard.GetbIsActive Then e.Handled = True Return End If End Sub Private Sub MainWindow_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown 'If (m_NumericKeyboardWD.IsVisible And e.Key = Key.Enter) Then ' m_NumericKeyboardWD.Visibility = Windows.Visibility.Hidden 'End If End Sub Private Sub ExitBtn_Click(sender As Object, e As RoutedEventArgs) ' Se premuto Shift si fa minimizzazione If (Keyboard.Modifiers And ModifierKeys.Shift) > 0 Then Me.WindowState = Windows.WindowState.Minimized Return End If ' Lancio la chiusura Me.Close() End Sub Private Sub MyClosing(sender As Object, e As CancelEventArgs) Handles Me.Closing ' Verifico se stato simulazione consente di uscire If m_SimulationPage.GetSimExecuting() Then e.Cancel = True Return End If ' Verifica se progetto corrente da salvare Dim bPrjToSave As Boolean = False EgtSetCurrentContext(m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) If EgtGetModified() Then Dim SaveCurrProj As EgtMsgBox If IsSiemensPc() Then SaveCurrProj = New EgtMsgBox(Me, Me.ActualWidth / 17 * 5, EgtMsgBox.WidthType.PIXEL, "", EgtMsg(MSG_EGTMSGBOX + 1), EgtMsgBox.Buttons.YES_NO_CANCEL, EgtMsgBox.Icons.NULL) Else SaveCurrProj = New EgtMsgBox(Me, "", EgtMsg(MSG_EGTMSGBOX + 1), EgtMsgBox.Buttons.YES_NO_CANCEL, EgtMsgBox.Icons.NULL) End If Select Case SaveCurrProj.m_nPressedBtn Case 0 ' Annulla e.Cancel = True Return Case 1 ' Si bPrjToSave = True Case 2 ' No bPrjToSave = False End Select End If ' Uscita da pagina corrente definizione grezzo If Not ExitFromRaw() Then e.Cancel = True Return End If ' Uscita da pagina corrente CSV If Not ExitFromCsv() Then e.Cancel = True Return End If ' Uscita da pagina corrente di split If Not ExitFromSplit() Then e.Cancel = True Return End If ' Uscita da pagina corrente di simulazione If Not ExitFromSimulation() Then e.Cancel = True Return End If ' Uscita da pagina corrente di macchina If Not ExitFromMachine() Then e.Cancel = True Return End If ' Uscita da pagina tagli diretti If Not ExitFromDirectCut(sender, Nothing) Then e.Cancel = True Return End If ' Eventuale salvataggio progetto corrente If bPrjToSave Then EgtSetCurrentContext(m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) m_CurrentProjectPageUC.SaveNamedProject() m_CurrentProjectPageUC.SaveProject() End If ' Uscita MainWindowExit() End Sub Private Function ExitFromRaw() As Boolean ' Se non sono in definizione grezzo tutto ok If m_ActivePage <> Pages.RawPart Then Return True ' Mi assicuro di terminare correttamente le operazioni Return m_RawPartPage.ExitRawPart(True) End Function Private Function ExitFromCsv() As Boolean ' Salvo lo stato attuale della lista m_CadCutPageUC.m_CSVPage.SaveCsvPartList() Return True End Function Private Function ExitFromSplit() As Boolean ' Se non sono in split tutto ok If m_ActivePage <> Pages.CadCut Or m_CadCutPageUC.m_CadCutMode = CadCutPageUC.CadCutModes.Nest Then Return True ' Mi assicuro di terminare correttamente lo split m_CadCutPageUC.m_SplitPage.ExitSplit() Return True End Function Private Function ExitFromSimulation() As Boolean ' Se non sono in simulazione tutto ok If m_ActivePage <> Pages.Simulation Then Return True ' Mi assicuro di terminare correttamente la simulazione m_SimulationPage.ResetSimulation() Return True End Function Private Function ExitFromDirectCut(sender As Object, e As RoutedEventArgs) As Boolean ' Se non sono in tagli diretti tutto ok If m_ActivePage <> Pages.DirectCut Then Return True ' Concludo le attività in corso Select Case m_DirectCutPageUC.m_ActiveDirectCutPage Case DirectCutPageUC.DirectCutPages.SingleCut m_DirectCutPageUC.m_SingleCut.SingleCut_Unloaded(sender, e) Case DirectCutPageUC.DirectCutPages.MultipleCut m_DirectCutPageUC.m_MultipleCut.MultipleCut_Unloaded(sender, e) Case DirectCutPageUC.DirectCutPages.GridCut m_DirectCutPageUC.m_GridCut.GridCut_Unloaded(sender, e) Case DirectCutPageUC.DirectCutPages.CopyTemplate m_DirectCutPageUC.m_CopyTemplate.CopyTemplate_Unloaded(sender, e) Case DirectCutPageUC.DirectCutPages.FlatteningCut m_DirectCutPageUC.m_FlatteningCut.FlatteningCut_Unloaded(sender, e) Case DirectCutPageUC.DirectCutPages.SawTest m_DirectCutPageUC.m_SawTest.SawTest_Unloaded(sender, e) End Select Return True End Function Private Function ExitFromMachine() As Boolean ' Se non sono in machine tutto ok If m_ActivePage <> Pages.Machine Then Return True ' Concludo le attività in corso Select Case m_MachinePageUC.m_ActiveMachinePage Case MachinePageUC.MachinePages.Alarms Case MachinePageUC.MachinePages.ToolsDb ' Verifica ed eventuale salvataggio utensile corrente If Not m_MachinePageUC.m_ToolsDbPageUC.SaveCurrTool() Then Return False End If ' salvo il DB utensili EgtSetCurrentContext(m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) EgtTdbSave() Case MachinePageUC.MachinePages.MachiningDb ' Verifica ed eventuale salvataggio lavorazione corrente If Not m_MachinePageUC.m_MachiningDbPageUC.SaveCurrMachining() Then Return False End If ' salvo il DB utensili EgtSetCurrentContext(m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) EgtMdbSave() End Select Return True End Function Private Sub MainWindowExit() ' Chiudo comunicazione con CN If Not IsNothing(m_CNCommunication.m_CN) Then m_CNCommunication.m_CN.Stop_Connection() ' Chiudo il gestore della macchina fotografica m_Camera.Close() ' Terminazione generale di EgtInterface EgtExit() ' Rilascio mutex m_objMutex.Close() End Sub Private Sub MainWindow_ContentRendered(sender As Object, e As EventArgs) Handles Me.ContentRendered ' Verifico presenza del collegamento al CN m_bNCLink = (GetPrivateProfileInt(S_GENERAL, K_CNLINK, 0, m_sIniFile) <> 0) m_CNCommunication.CNCommunication_Initialization() ' Se linea di produzione abilitata e collegata, lancio relativo timer If m_bNCLink And m_CurrentMachine.bProdLine Then m_ProdLineTimer.Interval = TimeSpan.FromMilliseconds(2000) m_ProdLineTimer.Start() End If End Sub Private Sub EgtWPFInit() 'EgtBasicInfo EgtWPFLib.InitializeEgtWPFLib.EgtBasicInfo_Initialization("C:/EgtDev/OmagCUT", 1280, 1024, 15, 12, "/#Century Gothic", "/gothic.ttf", Application.Current.FindResource("FontSize_UpperCaseCharacter"), Application.Current.FindResource("FontSize_LowerCaseCharacter")) ' EgtMessageBox EgtWPFLib.InitializeEgtWPFLib.EgtMsgBox_Initialization(Application.Current.FindResource("OmagCut_WindowBorder"), Application.Current.FindResource("OmagCut_WindowGrayTextButton"), Nothing, Application.Current.FindResource("FontSize_UpperCaseCharacter"), Application.Current.FindResource("FontSize_LowerCaseCharacter")) 'Inizializzazione della libreria EgtWPFLib.InitializeEgtWPFLib.EgtPaths_Initialization() End Sub ' OnIdle Private Sub OnIdle() ' Recupero il tipo di progetto Dim nPrjType As Integer = m_CurrentProjectPageUC.GetCurrentProjectType() ' Aggiorno interfaccia CadCutBtn.IsEnabled = (nPrjType <> CurrentProjectPageUC.PRJ_TYPE.FRAMES) FrameCutBtn.IsEnabled = (nPrjType <> CurrentProjectPageUC.PRJ_TYPE.FLATS) End Sub ' Nomi dei file per OmagVIEW Const CURR_PROJ_NGE As String = "CurrProj.nge" Const CURR_PROJ_JPG As String = "CurrProj.jpg" Const CURR_PROJ_NEW As String = "CurrProj.new" ' Nomi dei file da OmagVIEW Const CURR_PROJ_LOCK As String = "CurrProj.lck" Const CURR_PROJ_EPL As String = "CurrProj.epl" Const CURR_PROJ_PPL As String = "CurrProj.ppl" ' OnProdLine Private Sub OnProdLine() ' Se OmagVIEW blocca, esco (riproverò al prossimo giro) Dim sLockFile As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_LOCK If My.Computer.FileSystem.FileExists(sLockFile) Then Return ' Se richieste modalità standard o speciali If m_CurrentMachine.nSaveProduced <> 3 Then StandardAndSpecialViewFileManagement() ' altrimenti modalità custom Else CustomViewFileManagement() End If ' Leggo variabile con indice progetto da copiare per OmagVIEW (standard E80025) m_CNCommunication.m_CN.n_DReadELS_handle = 0 m_CNCommunication.m_CN.ReadEls_Add_Parameter(m_CurrentMachine.sVarProjCopy, 1) Dim nVarCopy As Integer = 0 For I = 1 To 10 System.Threading.Thread.Sleep(50) If m_CNCommunication.m_CN.n_DReadELS_handle = 1 Then nVarCopy = CInt(m_CNCommunication.m_CN.d_DReadELS_value) Exit For End If Next ' Leggo variabile con ultimo progetto mandato a OmagView Dim nLastCopy As Integer = GetPrivateProfileInt(S_GENERAL, K_LASTPROJTOVIEW, 0, GetIniFile()) ' Se non nulla e diversa da ultimo copiato, verifico se eseguire la copia If nVarCopy <> 0 And nVarCopy <> nLastCopy Then ' Verifico esistenza progetto con numerazione equivalente e assenza file di lock Dim sNgeFile As String = GetSaveDir() & "\" & nVarCopy.ToString("D4") & ".nge" Dim sEplFile As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_EPL If My.Computer.FileSystem.FileExists(sNgeFile) And Not My.Computer.FileSystem.FileExists(sEplFile) Then Try ' Copio file di progetto nge Dim sNgeDest As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_NGE My.Computer.FileSystem.CopyFile(sNgeFile, sNgeDest, True) ' Se esiste file jpg omonimo, lo copio Dim sJpgFile As String = System.IO.Path.ChangeExtension(sNgeFile, ".jpg") If My.Computer.FileSystem.FileExists(sJpgFile) Then Dim sJpgDest As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_JPG My.Computer.FileSystem.CopyFile(sJpgFile, sJpgDest, True) End If ' Creo file per flag di nuovo progetto Dim sNewDest As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_NEW Dim nF As Integer = FreeFile() FileOpen(nF, sNewDest, OpenMode.Output) Print(nF, "Status") FileClose(nF) ' Se non è scarico speciale (tipo Henraux), dichiaro progetto copiato azzerando la relativa variabile in macchina ' Con scarico speciale non va azzerata, perchè si incrementa con pulsante allo scarico If Not m_CurrentMachine.bSpecialUnload Then m_CNCommunication.m_CN.DVariables_WriteVariables2(m_CurrentMachine.sVarProjCopy, "0") End If ' Salvo in INI indice del progetto copiato WritePrivateProfileString(S_GENERAL, K_LASTPROJTOVIEW, nVarCopy.ToString("D4"), GetIniFile()) ' Salvo in INI data e ora attuali di termine lavorazione e inizio scarico WritePrivateProfileString(S_GENERAL, K_DATETIMETOVIEW, My.Computer.Clock.LocalTime.ToString(), GetIniFile()) Catch ex As Exception EgtOutLog("Error copying files to OmagVIEW") ' Errore in copia file per OmagVIEW m_CurrentProjectPageUC.SetErrorMessage(EgtMsg(91117)) End Try End If End If End Sub Private Function StandardAndSpecialViewFileManagement() As Boolean ' Acquisizione eventuale file epl dei pezzi rovinati : ' lo sposto dal direttorio condiviso al direttorio dei rovinati e poi lo fondo in quello generale Dim sSouEplFile As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_EPL If My.Computer.FileSystem.FileExists(sSouEplFile) Then ' Flag gestione unico file dei rovinati Dim bSingleFile As Boolean = True ' Se gestione pezzi e rovinati prodotti If m_CurrentMachine.nSaveProduced <> 0 Then ' Recupero path di origine del relativo file OmagCUT Dim sCutDir As String = GetCutOrigDir(sSouEplFile) ' Se questo direttorio esiste bSingleFile = Not My.Computer.FileSystem.DirectoryExists(sCutDir) End If ' Se gestione pezzi rovinati con un unico file If bSingleFile Then Dim sRuPartsDir As String = String.Empty If GetPrivateProfileString(S_CSV, K_RUINEDPARTSDIR, "", sRuPartsDir, m_sIniFile) = 0 Then sRuPartsDir = m_sDataRoot & "\" & RUINEDPARTS_DFL_DIR End If Dim sDestEplFile = sRuPartsDir & "\" & CURR_PROJ_EPL ' Eseguo spostamento file Try My.Computer.FileSystem.MoveFile(sSouEplFile, sDestEplFile, True) Catch ex As Exception EgtOutLog("Error moving or erasing " & sSouEplFile) End Try ' Path del file generale dei rovinati Const CURR_RUINED_EPL As String = "RuinedParts.epl" Dim sRuinedFile As String = sRuPartsDir & "\" & CURR_RUINED_EPL ' Path della lista caricata per edit Dim sCurrCsvFile As String = String.Empty GetPrivateProfileString(S_CSV, K_CSVLASTFILE, "", sCurrCsvFile, m_sIniFile) ' Se lista corrente è quella dei pezzi rovinati, la salvo If String.Compare(sCurrCsvFile, sRuinedFile, True) = 0 Then m_CadCutPageUC.m_CSVPage.SaveCsvPartList() End If ' Leggo file generale dei rovinati Dim sDummy As String = String.Empty Dim CsvPartList As New List(Of CsvPart) ReadCsvPartList(sRuinedFile, sDummy, CsvPartList) ' Accodo eventuali nuovi pezzi rovinati leggendo dal file particolare ReadCsvPartList(sDestEplFile, sDummy, CsvPartList) ' Elimino pezzi non più da nestare RemoveNotToNestParts(CsvPartList) ' Scrivo file generale dei rovinati WriteCsvPartList(sRuinedFile, sRuinedFile, CsvPartList) ' Se lista corrente è quella dei rovinati, la rileggo If String.Compare(sCurrCsvFile, sRuinedFile, True) = 0 Then m_CadCutPageUC.m_CSVPage.UpdateCsvPartList() End If ' Cancello file particolare dei rovinati Try My.Computer.FileSystem.DeleteFile(sDestEplFile) Catch ex As Exception EgtOutLog("Error erasing " & sDestEplFile) End Try ' altrimenti, ogni commessa ha il suo file dei pezzi rovinati Else ' Sposto nel direttorio temporaneo Dim sDestEplFile = m_sTempDir & "\" & CURR_PROJ_EPL Try My.Computer.FileSystem.MoveFile(sSouEplFile, sDestEplFile, True) Catch ex As Exception EgtOutLog("Error moving or erasing " & sSouEplFile) End Try ' Recupero direttorio di origine del relativo file OmagCUT Dim sCutDir As String = GetCutOrigDir(sDestEplFile) ' Path del file generale dei pezzi rovinati Const CURR_RUINED_EPL As String = "Ruined.epl" Dim sRuinFile As String = sCutDir & "\" & CURR_RUINED_EPL ' Path della lista caricata per edit Dim sCurrCsvFile As String = String.Empty GetPrivateProfileString(S_CSV, K_CSVLASTFILE, "", sCurrCsvFile, m_sIniFile) ' Se lista corrente è quella dei rovinati, la salvo If String.Compare(sCurrCsvFile, sRuinFile, True) = 0 Then m_CadCutPageUC.m_CSVPage.SaveCsvPartList() End If ' Leggo file generale dei pezzi rovinati Dim sDummy As String = String.Empty Dim CsvPartList As New List(Of CsvPart) ReadCsvPartList(sRuinFile, sDummy, CsvPartList) ' Accodo eventuali nuovi pezzi rovinati leggendo dal file particolare ReadCsvPartList(sDestEplFile, sDummy, CsvPartList) ' Elimino pezzi non più da nestare RemoveNotToNestParts(CsvPartList) ' Scrivo file generale dei rovinati WriteCsvPartList(sRuinFile, sRuinFile, CsvPartList) ' Se lista corrente è quella dei rovinati, la rileggo If String.Compare(sCurrCsvFile, sRuinFile, True) = 0 Then m_CadCutPageUC.m_CSVPage.UpdateCsvPartList() End If ' Cancello file particolare dei rovinati Try My.Computer.FileSystem.DeleteFile(sDestEplFile) Catch ex As Exception EgtOutLog("Error erasing " & sDestEplFile) End Try End If End If ' Se richiesto, acquisizione eventuale file ppl dei pezzi prodotti : ' lo sposto dal direttorio condiviso al direttorio temporaneo, per poi fonderlo nello specifico dei prodotti Dim sSouPplFile As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_PPL If m_CurrentMachine.nSaveProduced <> 0 AndAlso My.Computer.FileSystem.FileExists(sSouPplFile) Then ' Sposto nel direttorio temporaneo Dim sDestPplFile = m_sTempDir & "\" & CURR_PROJ_PPL Try My.Computer.FileSystem.MoveFile(sSouPplFile, sDestPplFile, True) Catch ex As Exception EgtOutLog("Error moving or erasing " & sSouPplFile) End Try ' Definizione direttorio e nome file di destinazione a seconda della modalità Dim sDestDir As String = String.Empty Dim sDestFile As String = String.Empty If m_CurrentMachine.nSaveProduced = 1 Then ' Recupero path di origine del relativo file OmagCUT sDestDir = GetCutOrigDir(sDestPplFile) sDestFile = "Produced.epl" Else If GetPrivateProfileString(S_CSV, K_PRODUCEDPARTSDIR, "", sDestDir, m_sIniFile) = 0 Then sDestDir = m_sDataRoot & "\" & PRODUCEDPARTS_DFL_DIR End If sDestFile = System.DateTime.Now.ToString("yyyy_MM_dd") & ".epl" End If ' Se questo direttorio esiste If My.Computer.FileSystem.DirectoryExists(sDestDir) Then ' Path del file generale dei pezzi prodotti Dim sProdFile As String = sDestDir & "\" & sDestFile ' Path della lista caricata per edit Dim sCurrCsvFile As String = String.Empty GetPrivateProfileString(S_CSV, K_CSVLASTFILE, "", sCurrCsvFile, m_sIniFile) ' Se lista corrente è quella dei pezzi, la salvo If String.Compare(sCurrCsvFile, sProdFile, True) = 0 Then m_CadCutPageUC.m_CSVPage.SaveCsvPartList() End If ' Leggo file generale dei pezzi prodotti Dim sDummy As String = String.Empty Dim CsvPartList As New List(Of CsvPart) ReadCsvPartList(sProdFile, sDummy, CsvPartList) ' Accodo eventuali nuovi pezzi prodotti leggendo dal file particolare ReadCsvPartList(sDestPplFile, sDummy, CsvPartList) ' Scrivo file generale dei prodotti WriteCsvPartList(sProdFile, sProdFile, CsvPartList) ' Se lista corrente è quella dei prodotti, la rileggo If String.Compare(sCurrCsvFile, sProdFile, True) = 0 Then m_CadCutPageUC.m_CSVPage.UpdateCsvPartList() End If ' Cancello file particolare dei prodotti Try My.Computer.FileSystem.DeleteFile(sDestPplFile) Catch ex As Exception EgtOutLog("Error erasing " & sDestPplFile) End Try Else Dim sProdPartsDir As String = String.Empty If GetPrivateProfileString(S_CSV, K_PRODUCEDPARTSDIR, "", sProdPartsDir, m_sIniFile) = 0 OrElse Not My.Computer.FileSystem.DirectoryExists(sProdPartsDir) Then sProdPartsDir = m_sDataRoot & "\" & PRODUCEDPARTS_DFL_DIR End If Dim sTmpPplFile = sProdPartsDir & "\" & System.DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") & ".epl" My.Computer.FileSystem.MoveFile(sDestPplFile, sTmpPplFile, True) EgtOutLog("Error with " & sDestDir) End If End If Return True End Function Private Function CustomViewFileManagement() As Boolean ' Se non esiste file EPL, esco Dim sSouEplFile As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_EPL If Not My.Computer.FileSystem.FileExists(sSouEplFile) Then Return True ' Se non esiste file PPL, esco Dim sSouPplFile As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_PPL If Not My.Computer.FileSystem.FileExists(sSouPplFile) Then Return True ' Sposto file epl dei pezzi rovinati nel direttorio temporaneo Dim sDestEplFile = m_sTempDir & "\" & CURR_PROJ_EPL Try My.Computer.FileSystem.MoveFile(sSouEplFile, sDestEplFile, True) Catch ex As Exception EgtOutLog("Error moving or erasing " & sSouEplFile) End Try ' Sposto file ppl dei pezzi prodotti nel direttorio temporaneo Dim sDestPplFile = m_sTempDir & "\" & CURR_PROJ_PPL Try My.Computer.FileSystem.MoveFile(sSouPplFile, sDestPplFile, True) Catch ex As Exception EgtOutLog("Error moving or erasing " & sSouPplFile) End Try ' Leggo variabile con ultimo progetto mandato a OmagView Dim nLastCopy As Integer = GetPrivateProfileInt(S_GENERAL, K_LASTPROJTOVIEW, 0, GetIniFile()) ' Leggo variabile con data termine lavorazione e inizio scarico Dim sDateTime As String = String.Empty GetPrivateProfileString(S_GENERAL, K_DATETIMETOVIEW, "", sDateTime, GetIniFile()) ' Esecuzione dello script custom ExecReceivedViewScript(nLastCopy, sDateTime) ' Cancello file dei pezzi rovinati Try My.Computer.FileSystem.DeleteFile(sDestEplFile) Catch ex As Exception EgtOutLog("Error erasing " & sDestEplFile) End Try ' Cancello file dei pezzi prodotti Try My.Computer.FileSystem.DeleteFile(sDestPplFile) Catch ex As Exception EgtOutLog("Error erasing " & sDestPplFile) End Try Return True End Function Private Function ExecReceivedViewScript(nLastCopy As Integer, sDateTime As String) As Boolean ' Verifico esistenza script Dim sLuaPath As String = m_CurrentMachine.sMachDir() & "\Scripts\ReceivedView.lua" If Not My.Computer.FileSystem.FileExists(sLuaPath) Then Return True ' Definizione variabili EgtLuaCreateGlobTable("RVS") EgtLuaSetGlobBoolVar("RVS.NCLINK", m_bNCLink) EgtLuaSetGlobBoolVar("RVS.PRODLINE", m_CurrentMachine.bProdLine) EgtLuaSetGlobStringVar("RVS.LASTCOPY", nLastCopy.ToString("D4")) EgtLuaSetGlobStringVar("RVS.DATETIME", sDateTime) ' Esecuzione Dim nErr As Integer = 999 If EgtLuaExecFile(sLuaPath) AndAlso EgtLuaCallFunction("RVS.Exec") Then ' Verifica stato di errore EgtLuaGetGlobIntVar("RVS.ERR", nErr) End If EgtLuaResetGlobVar("RVS") If nErr <> 0 Then EgtOutLog("Error in ReceivedView : " & nErr.ToString()) m_CurrentProjectPageUC.SetErrorMessage(EgtMsg(90325)) 'Errore nel salvataggio delle statistiche End If Return (nErr = 0) End Function Private Function GetCutOrigDir(sPplFile As String) As String ' Recupero path di origine del relativo file OmagCUT Dim sCutPath As String = String.Empty GetPrivateProfileString("General", "Path", "", sCutPath, sPplFile) ' Ne ricavo direttorio di origine o il padre se si chiama MACCHINA Dim sCutDir As String Try sCutDir = Path.GetDirectoryName(sCutPath) If Path.GetFileName(sCutDir).ToUpper() = "MACCHINA" Then sCutDir = Path.GetDirectoryName(sCutDir) End If Catch ex As Exception sCutDir = "" End Try Return sCutDir End Function ' Evento che apre AboutBox quando viene clickato il logo Private Sub LogoBrd_MouseDown(sender As Object, e As MouseButtonEventArgs) Handles LogoBrd.MouseDown Dim AboutBox As New AboutBoxWD(Me) End Sub End Class