Imports System.IO Imports System.Collections.ObjectModel Imports EgtUILib Imports EgtWPFLib Imports EgtPHOTOLib 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 ' Variabile che definisce l'avvio forzato in modalità FRAME Friend m_OnlyFrame As Boolean = False Public Shared m_bShowSVGParkInd As Boolean = False ' 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 Friend m_IsClosingApplication As Integer = 0 ' 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_sCopyProjDir 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_sToolMakersDir As String = String.Empty Private m_sIniFile As String = String.Empty Private m_sMachIniFile As String = String.Empty Private m_sKitsFile As String = String.Empty Private m_sLogFile 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 ' Livello della licenza attiva associata alla chiave Private m_nKeyLevel As Integer = 0 ' Opzioni abilitate dalla licenza attiva associata alla chiave Private m_nKeyOptions As UInteger = 0 Friend Enum KEY_OPT As UInteger CUT_BASE = 2 ^ 0 ' 1 - Prodotto OmagCUT MAN_MANIP = 2 ^ 1 ' 2 AUTO_MANIP = 2 ^ 2 ' 4 MAN_PHOTO = 2 ^ 3 ' 8 AUTO_PHOTO = 2 ^ 4 ' 16 CSV_AUTO = 2 ^ 5 ' 32 ENABLE_MILL = 2 ^ 6 ' 64 PRODUCTION_LINE = 2 ^ 7 ' 128 OFFICE_BASE = 2 ^ 8 ' 256 - Prodotto OmagOFFICE VM_MULTI = 2 ^ 9 ' 512 UNDER_CUT = 2 ^ 10 ' 1024 CSV_SIMPLE = 2 ^ 11 ' 2048 PHOTO_BASE = 2 ^ 12 ' 4096 - Prodotto OmagPHOTO TRF_IMPORT = 2 ^ 13 ' 8192 MOVE_PARTS = 2 ^ 14 ' 16384 IMPORT_SLABDXF = 2 ^ 15 ' 32768 CURVED_FRAME = 2 ^ 16 ' 65536 ENABLE_WJ = 2 ^ 17 ' 131072 ENABLE_POLISHING = 2 ^ 18 ' 262144 OFFICE_TYPE = 2 ^ 19 ' 524288 REGISTRATION = 2 ^ 20 ' 1048576 SIMPLESTATISTICS = 2 ^ 21 ' 2097152 COMPOFRAME = 2 ^ 22 ' 4194304 CUT_LIGHT = 2 ^ 23 ' 8388608 End Enum ' Opzione nesting automatico Private m_bAutoNest As Boolean = False ' 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 ' Abilitazione parcheggio dei pezzi Private m_bEnabledDxfPark As Boolean = False ' Variabile che indica il colore corrente di ColorToSIdeAng in OptionsPageUC Friend m_brCurrentColor As Brush Friend Enum Pages WorkInProgress DirectCut CadCut Photo Open RawPart Draw Import CSV Simulation FrameCut Machine Alarms Options End Enum ' Elenco delle operazioni tagli diretti (decoficiato in CamAuto per riconoscere il tipo taglio diretto) Friend Enum FlagDirectCuts ManualMove = 1 SingleCut = 2 GridCut = 3 SingleDrill = 4 Flattening = 5 Squaring = 6 SawTest = 7 Polishing = 8 CopyTemplate = 9 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 GetConfigDir() As String Return m_sConfigDir 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 GetCopyProjDir() As String Return m_sCopyProjDir 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 GetRuinedPartsDir() As String 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 Return sRuPartsDir 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 GetToolMakersDir() As String Return m_sToolMakersDir End Function Public Function GetCurrMachine() As String Return m_sCurrMachine End Function Public Function GetMachIniFile() As String Return m_sMachIniFile End Function Public Function GetKitsFile() As String Return m_sKitsFile End Function Public Function GetLogFile() As String Return m_sLogFile End Function Friend Function GetKeyLevel() As Integer Return m_nKeyLevel 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 GetAutoNestingOption() As Boolean Return m_bAutoNest End Function Friend Function GetVersion() As String Return m_sVersion End Function Public Function IsSiemensPc() As Boolean Return m_bIsSiemensPc End Function Public Function EnabledDxfPark() As Boolean Return m_bEnabledDxfPark End Function Public Function GetDebug() As Integer Return m_nDebug 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 ' imposto nella libreria il riferimento del file config EgtWPFLib5.IniFile.m_sIniFile = m_sConfigDir & "\" & INI_FILE_NAME ' 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 copia dei progetti per modalità Ufficio If GetPrivateProfileString(S_GENERAL, K_COPYPROJDIR, "", m_sCopyProjDir, m_sIniFile) = 0 Then m_sCopyProjDir = m_sDataRoot & "\" & COPYPROJ_DFL_DIR 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 ' Impostazione direttorio costruttori di utensili If GetPrivateProfileString(S_MACH, K_TOOLMAKERSDIR, "", m_sToolMakersDir, m_sIniFile) = 0 Then m_sToolMakersDir = m_sDataRoot & "\" & TOOLMAKERS_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" ' Impostazione path Kit file m_sKitsFile = m_sMachinesRoot & "\" & m_sCurrMachine & "\" & MACHININGS_DIR & "\" & KITS_FILE ' 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) Dim sNestKey As String = "" EgtUILib.GetPrivateProfileString(S_LICENCE, K_NESTKEY, "", sNestKey, sLicFile) EgtSetNestKey(sNestKey) Dim bNetHwKey As Boolean = (GetPrivateProfileInt(S_GENERAL, K_NETKEY, 0, m_sIniFile) = 1) EgtSetNetHwKey(bNetHwKey) ' Impostazioni per chiave di rete Dim bNetKey As Boolean = (GetPrivateProfileInt(S_GENERAL, K_NETKEY, 0, m_sIniFile) = 1) EgtSetNetHwKey(bNetKey) Dim sLockId As String = "" EgtUILib.GetPrivateProfileString(S_LICENCE, K_LOCKID, "", sLockId, sLicFile) If Not String.IsNullOrEmpty(sLockId) Then EgtSetLockId(sLockId) End If ' Verifico abilitazione nesting automatico m_bAutoNest = Not String.IsNullOrWhiteSpace(sNestKey) ' Recupero opzioni della chiave Dim bKey As Boolean = EgtGetKeyLevel(9423, 3105, 1, m_nKeyLevel) And EgtGetKeyOptions(9423, 3105, 1, m_nKeyOptions) ' Verifico abilitazione prodotto Dim bProd As Boolean = GetKeyOption(KEY_OPT.CUT_BASE) ' Impostazione per programma OnlyFrame: solo se CUT_BASE non attivo If Not bProd Then m_OnlyFrame = GetKeyOption(KEY_OPT.CUT_LIGHT) End If ' 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() m_sLogFile = m_sTempDir & "\" & GENLOG_FILE_NAME Dim sLogMsg As String = My.Application.Info.Title.ToString() & " ver. " & m_sVersion EgtInit(m_nDebug, m_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 = If(nHeight = 0, 768, nHeight) Me.Width = If(nWidth = 0, 1366, 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() EgtTextBox.EnableKeybCalc = (GetPrivateProfileInt(S_GENERAL, K_VIRTUALKEYBOARD, 1, m_sIniFile) <> 0) ' Abilitazione parcheggio pezzi m_bEnabledDxfPark = ( GetPrivateProfileInt(S_GENERAL, K_ENABLEDXFPARK, 0, GetIniFile) <> 0) ' 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 ' Abilito il bottone per la gestione del comando di Check-Up-Start (posiziono utensile scelto prelavorazione) If GetPrivateProfileInt(S_GENERAL, "Test", 0, m_sIniFile) = 0 OrElse Not File.Exists(m_CurrentMachine.sMachDir() & "\DirectCmd\TestWork.lua") Then m_CadCutPageUC.m_ProjectMgr.TestBtn.Visibility = Visibility.Collapsed EgtOutLog("Warning: Missing file 'TestWork.lua' in folder 'DirectCmd', button 'TEST' collapsed!") Else m_CadCutPageUC.m_ProjectMgr.TestBtn.Visibility = Visibility.Visible 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(90001) ' IN LAVORO DirectCutBtn.Content = EgtMsg(90002) ' TAGLI DIRETTI CadCutBtn.Content = EgtMsg(90003) ' TAGLI CAD FrameCutBtn.Content = EgtMsg(90004) ' CORNICI MachineBtn.Content = EgtMsg(90005) ' MACCHINA ' Imposto OnIdle AddHandler m_IdleTimer.Tick, AddressOf OnIdle ' Imposto OnProdLine AddHandler m_ProdLineTimer.Tick, AddressOf OnProdLine ' Imposto riferimento a funzione delle textbox che disattiva scene in libreria EgtWPFLib.EgtTextBox.m_refScenesIsEnabled = AddressOf IsEnabledScenes ' --------------------------------- SLAB DB ------------------------------------------------------- If GetPrivateProfileInt(S_SCRAPS, K_ENABLESCRAPS, 0, GetIniFile()) <> 0 Then ' leggo il direttorio in cui cercare il database delle lastre Dim PhotDir As String = String.Empty GetPrivateProfileString(S_SCRAPS, K_PHOTODIR, "", PhotDir, GetIniFile()) ' verifico che esista il file "OmagPHOTOVb.sqlite" nel direttorio inidicato If System.IO.File.Exists(PhotDir.Trim & "\" & DB_FILENAME) Then If Not ManageDb.ConnectToDb(PhotDir.Trim & "\" & DB_FILENAME) Then EgtOutLog("Error connecting to DB: " & PhotDir.Trim & "\" & DB_FILENAME) ' coumico che il grezzo contiene un pezzo e quindi non può essere definito come grezzo m_CurrentProjectPageUC.ClearMessage() m_CurrentProjectPageUC.SetErrorMessage("Denied connection SlabDB") Else ' Impostazione direttorio per backup Dim BackUpDir As String = m_sDataRoot & "\BackUp" Directory.CreateDirectory(BackUpDir) EgtPHOTOLib.MainData.SetConfigDir(m_sConfigDir) EgtPHOTOLib.MainData.SetKeyLevel(m_nKeyLevel) EgtPHOTOLib.MainData.SetKeyOptions(CInt(m_nKeyOptions)) EgtPHOTOLib.MainData.SetPhotoDir(PhotDir) EgtPHOTOLib.MainData.SetBackUpDir(BackUpDir) EgtPHOTOLib.MainData.SetIsOMagCUT(True) Dim sLastBlock As String = String.Empty GetPrivateProfileString(S_SCRAPS, K_LASTBLOCK, "", sLastBlock, GetIniFile()) If Not String.IsNullOrEmpty(sLastBlock) Then EgtPHOTOLib.MainData.SetLastBlock(sLastBlock) End If If GetPrivateProfileInt(S_SCRAPS, K_ENABLE_PRINTER, 0, GetIniFile()) = 1 Then ' leggo nome file prn (per stampante zebra) Dim m_TemplateFilePrinter As String = String.Empty GetPrivateProfileString(S_SCRAPS, K_TEMPLATE, m_sDataRoot & "\Label\Default.prn", m_TemplateFilePrinter, GetIniFile()) ' leggo nome del direttorio in cui scrivere il file ini (per stampante zebra) -- solo se si desidera scrivere il file in un direttorio diverso Dim m_DatFilePrinter As String = String.Empty GetPrivateProfileString(S_SCRAPS, K_DAT, m_sDataRoot & "\Temp", m_DatFilePrinter, GetIniFile()) ' leggo nome file exe (per stampante zebra) Dim m_ZebraUtilitiesExe As String = String.Empty GetPrivateProfileString(S_SCRAPS, K_ZEBRAUTILITIES, System.AppDomain.CurrentDomain.BaseDirectory & "ZebraPrinterUtilitiesR32.exe", m_ZebraUtilitiesExe, GetIniFile()) EgtPHOTOLib.MainData.SetTemplateFilePrinter(m_TemplateFilePrinter) EgtPHOTOLib.MainData.SetDataFilePrinter(m_DatFilePrinter) EgtPHOTOLib.MainData.SetZebraPrinterExe(m_ZebraUtilitiesExe) EgtPHOTOLib.MainData.SetPrinterVisibility(True) Else EgtPHOTOLib.MainData.SetPrinterVisibility(False) End If ' è permessa una sola istanza alla volta del programma OmagCUT -> "(1)" : "(" & nIstance.ToString & ")" EgtPHOTOLib.MainData.SetUser(Environment.MachineName & "\" & Environment.UserName & " (1)") Dim sIdKey As String = String.Empty EgtGetKeyInfo(sIdKey) EgtPHOTOLib.MainData.SetKey(sIdKey) End If End If End If ' --------------------------------- SLAB DB ------------------------------------------------------- ExitBtn.ToolTip = "Exit" & vbCrLf & "Minimize (Shift)" 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() Dim sVal As String = String.Empty If m_CurrentMachine.GetUserNote("FsevLength", sVal, m_CurrentMachine.sCurrSaw) Then Dim dFsevLength As Double StringToDouble(sVal, dFsevLength) m_CurrentMachine.SetFsevLength(dFsevLength) End If If m_CurrentMachine.GetUserNote("FsevPerc", sVal, m_CurrentMachine.sCurrSaw) Then Dim dFsevPerc As Double StringToDouble(sVal, dFsevPerc) m_CurrentMachine.SetFsevPerc(dFsevPerc) End If ' 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() Dim sAssStatus As String = " discontinued" Dim nAssLeftDays As Integer ' MESSAGGIO... If EgtGetKeyAssLeftDays(nAssLeftDays) And nAssLeftDays >= 0 Then If nAssLeftDays > 0 Then sAssStatus = "expires within " & nAssLeftDays.ToString() & " days" 'sAssStatus = "to be renewed within " & nAssLeftDays.ToString() & " days" Else sAssStatus = "Expired" End If End If Dim bShowInfoAssistance As Boolean = True bShowInfoAssistance = (GetPrivateProfileInt(S_GENERAL, K_SHOWEXPIREASSITANCE, "1", GetIniFile) <> 0) ' Or nAssLeftDays = 358 If bShowInfoAssistance And ((nAssLeftDays <= 7 And nAssLeftDays >= 0) Or nAssLeftDays = 14 Or nAssLeftDays = 21 Or nAssLeftDays = 28) Then ' 91145=Avviso importante Dim sMsg_Title As String = EgtMsg(91145) ' 91146=Il contratto di aggiornamento della licenza in uso scadrà tra {0} giorni./n Dim sMsg_AssStatus As String = String.Format(EgtMsg(91146), nAssLeftDays.ToString()) ' 91147=Se desiderate rimanere aggiornati e continuare ad usufruire dei benefici del servizio, vi invitiamo a contattare la nostra assistenza al seguente indirizzo:/n Dim sMsg_RefAssistance As String = EgtMsg(91147) Dim sAssistance As String = String.Empty GetPrivateProfileString(S_GENERAL, "Assistances", "", sAssistance, GetIniFile) Dim sItems As String() = sAssistance.Split(","c) For Each Item As String In sItems sMsg_RefAssistance &= " -> " & Item.Trim & " /n" Next ' 91148=Grazie per la vostra collaborazione. Dim sMsg_ThankYou As String = EgtMsg(91148) Dim MyLicWn As New LicenseWindow(Me, sMsg_AssStatus & sMsg_RefAssistance & sMsg_ThankYou, sMsg_Title) MyLicWn.WindowStartupLocation = WindowStartupLocation.CenterOwner MyLicWn.Show() End If ' inizializzo End Sub #Region "Selezione dei bottoni IN LAVORO, TAGLI DIRETTI, TAGLI CAD, CORNICI, MACCHINA, OPZIONI" Private Sub WorkInProgressBtn_Click(sender As Object, e As RoutedEventArgs) Handles WorkInProgressBtn.Click m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False ' disbilito Test TestOff() ' disabilito DragRettangle DragRectangleOff() ' disabilito SplitCurv SplitCurvWJOff() ' disattivo StartCurv StartCurvWJOff() Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = True Case Pages.DirectCut WorkInProgressBtn.IsChecked = True DirectCutBtn.IsChecked = False EgtMdbSetGeneralParam(MCH_GP.SAFEZ, DirectCutPageUC.m_dZSafe) 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 Or m_CadCutPageUC.m_CadCutMode = CadCutPageUC.CadCutModes.FastGrid) 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.CadCut And (m_CadCutPageUC.m_CadCutMode <> CadCutPageUC.CadCutModes.Nest Or m_CadCutPageUC.m_NestPage.m_bRegister) ' Pages.Simulation: prma era inserito nell'elenco -> prima di procedere devo uscire dalla pagina della simulazione 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 Case Else WorkInProgressBtn.IsChecked = False End Select End Sub Private Sub DirectCutBtn_Click(sender As Object, e As RoutedEventArgs) Handles DirectCutBtn.Click ' carico la quota di svincolo di sicurezza dell'utensile EgtMdbGetGeneralParam(MCH_GP.SAFEZ, DirectCutPageUC.m_dZSafe) m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False TestOff() DragRectangleOff() SplitCurvWJOff() StartCurvWJOff() 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 Or m_CadCutPageUC.m_CadCutMode = CadCutPageUC.CadCutModes.FastGrid) 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.CadCut And (m_CadCutPageUC.m_CadCutMode <> CadCutPageUC.CadCutModes.Nest Or m_CadCutPageUC.m_NestPage.m_bRegister) ' Pages.Simulation: prma era inserito nell'elenco -> prima di procedere devo uscire dalla pagina della simulazione 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 Case Else WorkInProgressBtn.IsChecked = False End Select End Sub Private Sub CadCutBtn_Click(sender As Object, e As RoutedEventArgs) Handles CadCutBtn.Click m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False TestOff() DragRectangleOff() SplitCurvWJOff() StartCurvWJOff() 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 EgtMdbSetGeneralParam(MCH_GP.SAFEZ, DirectCutPageUC.m_dZSafe) 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: prma era inserito nell'elenco -> prima di procedere devo uscire dalla pagina della simulazione 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 Case Else CadCutBtn.IsChecked = False End Select End Sub Private Sub FrameCutBtn_Click(sender As Object, e As RoutedEventArgs) Handles FrameCutBtn.Click m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False TestOff() DragRectangleOff() SplitCurvWJOff() StartCurvWJOff() Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False FrameCutBtn.IsChecked = True EgtMdbSetGeneralParam(MCH_GP.SAFEZ, DirectCutPageUC.m_dZSafe) 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: quando sono nella simulazione devo uscire dalla pagina CadCutBtn.IsChecked = False FrameCutBtn.IsChecked = True 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 Case Else If FrameCutBtn.IsEnabled Then FrameCutBtn.IsChecked = False End Select End Sub Private Sub MachineBtn_Click(sender As Object, e As RoutedEventArgs) Handles MachineBtn.Click m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False TestOff() DragRectangleOff() SplitCurvWJOff() StartCurvWJOff() 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 EgtMdbSetGeneralParam(MCH_GP.SAFEZ, DirectCutPageUC.m_dZSafe) 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 Or m_CadCutPageUC.m_CadCutMode = CadCutPageUC.CadCutModes.FastGrid) 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.CadCut And (m_CadCutPageUC.m_CadCutMode <> CadCutPageUC.CadCutModes.Nest Or m_CadCutPageUC.m_NestPage.m_bRegister) ' Pages.Simulation: prma era inserito nell'elenco -> prima di procedere devo uscire dalla pagina della simulazione 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 Case Else MachineBtn.IsChecked = False End Select End Sub Private Sub OptionsBtn_Click(sender As Object, e As RoutedEventArgs) Handles OptionsBtn.Click m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False TestOff() DragRectangleOff() SplitCurvWJOff() StartCurvWJOff() 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 EgtMdbSetGeneralParam(MCH_GP.SAFEZ, DirectCutPageUC.m_dZSafe) 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 Or m_CadCutPageUC.m_CadCutMode = CadCutPageUC.CadCutModes.FastGrid) 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.CadCut And (m_CadCutPageUC.m_CadCutMode <> CadCutPageUC.CadCutModes.Nest Or m_CadCutPageUC.m_NestPage.m_bRegister) ' Pages.Simulation: prma era inserito nell'elenco -> prima di procedere devo uscire dalla pagina della simulazione 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 = False End Select End Sub #End Region ' Selezione dei bottoni IN LAVORO, TAGLII DIRETTI, TAGLI CAD, CORNICI, MACCHINA, OPZIONI 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() ' se è premuto il pulsante Shift allora provvedo ad aprire il file di Log If (Keyboard.Modifiers And ModifierKeys.Shift) > 0 Then ' Genero file CNC (lancio anche se errore in precedenza) Dim sTemoDirect As String = GetTempDir() & "\OmagCUTLog.txt" Try Process.Start("Notepad.exe", sTemoDirect) Catch ex As Exception EgtOutLog(ex.ToString) End Try End If 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(91101), EgtMsgBox.Buttons.YES_NO_CANCEL, EgtMsgBox.Icons.NULL) ' Salvare il progetto corrente? Else SaveCurrProj = New EgtMsgBox(Me, "", EgtMsg(91101), EgtMsgBox.Buttons.YES_NO_CANCEL, EgtMsgBox.Icons.NULL) ' Salvare il progetto corrente? 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 ' Inizio la chiusura del programma (se NUM_OLD verifico di aver terminato il processo DripFeed) EgtOutLog("Iniziato processo di chiusura programma") m_IsClosingApplication = If(m_CNCommunication.m_nNCType = 1, 1, 2) Dim nCount As Integer = 0 While m_IsClosingApplication <> 2 If nCount > 5 Then Exit While End If ' verifico che il processo DripFeed sia terminato EgtOutLog("Stato chiusura programma: " & m_IsClosingApplication.ToString) Thread.Sleep(100) nCount += 1 End While ' Uscita MainWindowExit() End Sub #Region "Uscita dalle pagine RAW, CSV, SPLIT, SIMULATION, TAGLI DIRETTI, MACCHINA, MAINWINDOW" 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 EgtMdbSetGeneralParam(MCH_GP.SAFEZ, DirectCutPageUC.m_dZSafe) EgtMdbSave() ' 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_ControlsDirectCutUC.m_ActiveDirectCutPage Case ControlsDirectCutUC.DirectCutPages.SingleCut m_DirectCutPageUC.m_ControlsDirectCutUC.m_SingleCut.SingleCut_Unloaded(sender, e) Case ControlsDirectCutUC.DirectCutPages.MultipleCut m_DirectCutPageUC.m_ControlsDirectCutUC.m_MultipleCut.MultipleCut_Unloaded(sender, e) Case ControlsDirectCutUC.DirectCutPages.GridCut m_DirectCutPageUC.m_ControlsDirectCutUC.m_GridCut.GridCut_Unloaded(sender, e) Case ControlsDirectCutUC.DirectCutPages.FlatteningCut m_DirectCutPageUC.m_ControlsDirectCutUC.m_FlatteningCut.FlatteningCut_Unloaded(sender, e) End Select Select Case m_DirectCutPageUC.m_ControlsDirectCutUC1.m_ActiveDirectCutPage Case ControlsDirectCutUC.DirectCutPages.CopyTemplate m_DirectCutPageUC.m_ControlsDirectCutUC1.m_CopyTemplate.CopyTemplate_Unloaded(sender, e) Case ControlsDirectCutUC.DirectCutPages.Polishing m_DirectCutPageUC.m_ControlsDirectCutUC1.m_Polishing.Polishing_Unloaded(sender, e) Case ControlsDirectCutUC1.DirectCutPages.SawTest m_DirectCutPageUC.m_ControlsDirectCutUC1.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() Case MachinePageUC.MachinePages.Polishings ' Verifica ed eventuale salvataggio lucidatura corrente If Not m_MachinePageUC.m_PolishingsPageUC.SaveKit() Then Return False End If Case MachinePageUC.MachinePages.WaterJet ' Verifica ed eventuale salvataggio Db Waterjet Dim m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow) Dim nPressedBtn As Integer = DirectCast(m_MachinePageUC.m_WaterJetPageUC.DataContext, WaterjetDbWindowVM_OmagCUT).CloseWaterjetDb_OmagCut(m_MainWindow) If nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.CANCEL Then Return False ElseIf nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.NO Then m_MachinePageUC.m_WaterJetPageUC.WaterJetPage_Reinitialize() End If 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 #End Region ' Uscita dalle pagine RAW, CSV, SPLIT, SIMULATION, TAGLI DIRETTI, MACCHINA, MAINWINDOW 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) And Not GetKeyOption(KEY_OPT.OFFICE_TYPE) 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() ElseIf m_CurrentMachine.bDemo Then m_ProdLineTimer.Interval = TimeSpan.FromMilliseconds(2000) m_ProdLineTimer.Start() End If ' di default attivo la pagina CadCut If m_OnlyFrame Then m_ActivePage = MainWindow.Pages.FrameCut Else m_ActivePage = MainWindow.Pages.CadCut End If ' seleziono il tipo di avvio m_CurrentProjectPageUC.StartProgram() ' aggiorno la grafica EgtZoom(ZM.ALL, True) End Sub Friend 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"), GetPrivateProfileInt(S_GENERAL, K_THEME, 0, GetIniFile())) ' 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() ' Verifico presenza testa H1 per lama/fresa (nel contesto principale) Dim nCurrCtx As Integer = EgtGetCurrentContext() EgtSetCurrentContext(m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) Dim bHeadH1 As Boolean = m_CurrentMachine.ExistsSawHead() EgtSetCurrentContext(nCurrCtx) ' Aggiorno interfaccia If m_OnlyFrame Then If nPrjType = CurrentProjectPageUC.PRJ_TYPE.FLATS And m_ActivePage <> Pages.RawPart And m_ActivePage <> Pages.DirectCut And m_ActivePage <> Pages.Simulation Then ' Attenzione! Licenza non abilitata per tagli CAD. Dim FrameWnd As New EgtMsgBox(Me, EgtMsg(91141), EgtMsg(91142), EgtMsgBox.Buttons.OK, EgtMsgBox.Icons.NULL) ' Cancello progetto salvato con nome da file ini WritePrivateProfileString(S_GENERAL, K_LASTNAMEPROJ, "", GetIniFile()) ' Scelta tavola della macchina Dim nTabInd As Integer = m_CadCutPageUC.m_ProjectMgr.ChooseTable() ' Creo nuovo progetto m_CurrentProjectPageUC.NewProject(nTabInd, False) ' FrameCutBtn_Click(Nothing, Nothing) CadCutBtn.IsEnabled = False Else FrameCutBtn.IsEnabled = True CadCutBtn.IsEnabled = False End If Else CadCutBtn.IsEnabled = (nPrjType <> CurrentProjectPageUC.PRJ_TYPE.FRAMES) FrameCutBtn.IsEnabled = (nPrjType <> CurrentProjectPageUC.PRJ_TYPE.FLATS) AndAlso bHeadH1 End If 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_CHANGE As String = "CurrProj.chg" Const CURR_PROJ_EPL As String = "CurrProj.epl" Const CURR_PROJ_PPL As String = "CurrProj.ppl" ' OnProdLine Private Sub OnProdLine() ' Se richiesto aggiornamento diametro lama If m_CurrentMachine.nProdLiSawProbe >= 1 Then SawProbing(1) If m_CurrentMachine.nProdLiSawProbe >= 2 Then SawProbing(2) ' Se OmagVIEW non previsto, esco If String.IsNullOrWhiteSpace(m_CurrentMachine.sLineDataDir) OrElse Not My.Computer.FileSystem.DirectoryExists(m_CurrentMachine.sLineDataDir) Then Return ' Se modalità custom, gestione dell'evento lastra terminata If m_CurrentMachine.nSaveProduced = 3 Then ' Leggo variabile con indice progetto terminato (E81025 per Henraux) m_CNCommunication.m_CN.n_DReadELS_handle = 0 m_CNCommunication.m_CN.ReadEls_Add_Parameter(m_CurrentMachine.sVarProjFinished, 1) Dim nVarFin As Integer = 0 For I As Integer = 1 To 4 If Not m_CurrentMachine.bDemo Then System.Threading.Thread.Sleep(50) End If If m_CNCommunication.m_CN.n_DReadELS_handle = 1 Then nVarFin = CInt(m_CNCommunication.m_CN.d_DReadELS_value) Exit For End If Next ' Leggo variabile con ultimo progetto finito di lavorare Dim nLastFinished As Integer = GetPrivateProfileInt(S_GENERAL, K_LASTPROJFINISHED, 0, GetIniFile()) ' Se nuovo progetto finito, ne salvo il tempo If nVarFin <> 0 And nVarFin <> nLastFinished Then ' Salvo in INI indice del progetto terminato WritePrivateProfileString(S_GENERAL, K_LASTPROJFINISHED, nVarFin.ToString("D4"), GetIniFile()) ' Salvo in INI data e ora attuali di termine lavorazione del progetto (solo gli ultimi 10 tramite modulo) Dim sKey As String = K_DATETIMEFINISHED & "." & (nVarFin Mod 10).ToString() Dim sDateTime As String = My.Computer.Clock.LocalTime.ToString("dd.MM.yyyy HH\:mm\:ss") WritePrivateProfileString(S_GENERAL, sKey, sDateTime, GetIniFile()) ' Eseguo script ExecFinishedProgScript(nVarFin, sDateTime) End If End If ' Se OmagVIEW blocca, esco (riproverò al prossimo giro) Dim sLockFile As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_LOCK Dim sNewFile As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_NEW If My.Computer.FileSystem.FileExists(sLockFile) OrElse My.Computer.FileSystem.FileExists(sNewFile) Then Return ' Verifico se richiesto cambio di progetto Dim nProjInd As Integer = 0 Dim nMove As Integer = 0 If ReadProjectChange(nProjInd, nMove) Then Dim nMaxProj As Integer = GetPrivateProfileInt(S_GENERAL, K_MAXPROJ, 100, GetIniFile()) Dim nLastProj As Integer = GetPrivateProfileInt(S_GENERAL, K_LASTPROJTOVIEW, 0, GetIniFile()) ' Se progetto valido, recupero il progetto del View If nProjInd > 0 Then ExecProjectUpdate(nProjInd) ' Se si vuole andare oltre ultimo, forzo ritrasmissione di questo If nProjInd = nLastProj And nMove = 1 Then nProjInd = If(nLastProj = 1, nMaxProj, nLastProj - 1) nMove = 1 End If ' altrimenti forzo trasmissione ultimo inviato Else nProjInd = If(nLastProj = 1, nMaxProj, nLastProj - 1) nMove = 1 End If ' Se richiesto cambio di progetto If nMove <> 0 Then ExecProjectChange(nProjInd, nMove) Return End If End If ' Se richieste modalità standard o speciali If m_CurrentMachine.nSaveProduced <> 3 Then StandardAndSpecialViewFileManagement() ' altrimenti modalità custom Else CustomViewFileManagement(nProjInd) 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 As Integer = 1 To 10 If Not m_CurrentMachine.bDemo Then System.Threading.Thread.Sleep(50) End If If m_CNCommunication.m_CN.n_DReadELS_handle = 1 Then nVarCopy = CInt(m_CNCommunication.m_CN.d_DReadELS_value) Exit For End If Next ' forzo la variabile CN - aggiornando il valore dell'indice del progetto in elaborazione If m_CurrentMachine.bDemo Then nVarCopy = GetPrivateProfileInt(S_GENERAL, K_LASTPROJ, 0, GetIniFile()) ' 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 NewWrt As New IO.StreamWriter(m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_NEW, False) NewWrt.WriteLine("Last") NewWrt.Close() ' 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 inizio scarico WritePrivateProfileString(S_GENERAL, K_DATETIMETOVIEW, My.Computer.Clock.LocalTime.ToString("dd.MM.yyyy HH\:mm\:ss"), GetIniFile()) Catch ex As Exception EgtOutLog("Error copying files to OmagVIEW") ' Errore in copia file per OmagVIEW m_CurrentProjectPageUC.SetErrorMessage(EgtMsg(91117)) ' Errore in copia file per OmagVIEW End Try End If End If End Sub Private Function SawProbing(nI As Integer) As Boolean ' Leggo da variabile CN se tastatura effettuata m_CNCommunication.m_CN.n_DReadELS_handle = 0 m_CNCommunication.m_CN.ReadEls_Add_Parameter(m_CurrentMachine.sProdLiProbingStateVar(nI), 1) Dim nProbingState As Integer = 0 For I As Integer = 1 To 5 System.Threading.Thread.Sleep(20) If m_CNCommunication.m_CN.n_DReadELS_handle = 1 Then nProbingState = CInt(m_CNCommunication.m_CN.d_DReadELS_value) Exit For End If Next If nProbingState <> 1 Then Return False ' Leggo da variabile CN posizione lama in TC Dim nTcPos As Integer = 0 If m_CurrentMachine.sProdLiProbingTcPosVar(nI) <> "0" Then m_CNCommunication.m_CN.n_DReadELS_handle = 0 m_CNCommunication.m_CN.ReadEls_Add_Parameter(m_CurrentMachine.sProdLiProbingTcPosVar(nI), 1) For I As Integer = 1 To 5 System.Threading.Thread.Sleep(20) If m_CNCommunication.m_CN.n_DReadELS_handle = 1 Then nTcPos = CInt(m_CNCommunication.m_CN.d_DReadELS_value) Exit For End If Next Else nTcPos = 100 End If If nTcPos = 0 Then Return False ' Leggo da variabile CN nuovo diametro lama m_CNCommunication.m_CN.n_DReadELS_handle = 0 m_CNCommunication.m_CN.ReadEls_Add_Parameter(m_CurrentMachine.sProdLiSawDiameterVar(nI), 1) Dim dDiam As Double = 0 For I As Integer = 1 To 5 System.Threading.Thread.Sleep(20) If m_CNCommunication.m_CN.n_DReadELS_handle = 1 Then dDiam = m_CNCommunication.m_CN.d_DReadELS_value Exit For End If Next If dDiam < EPS_SMALL Then Return False ' trasformo misura rilevata in mm If m_CNCommunication.GetMachineInInches() Then dDiam *= ONEINCH / 1000 Else dDiam *= ONEMM / 1000 End If ' Reset variabile CN di tastatura effettuata m_CNCommunication.m_CN.DVariables_WriteVariables2(m_CurrentMachine.sProdLiProbingStateVar(nI), "0") ' Aggiorno diametro lama Dim bFound As Boolean = False If nTcPos <> 100 Then Dim sTcPos As String = "T" & nTcPos.ToString() Dim sToolName As String = String.Empty Dim nType As Integer = MCH_TY.NONE Dim bNext As Boolean = EgtTdbGetFirstTool(MCH_TF.SAWBLADE, sToolName, nType) While bNext EgtTdbSetCurrTool(sToolName) Dim sToolTcPos As String = "" If EgtTdbGetCurrToolParam(MCH_TP.TCPOS, sToolTcPos) AndAlso sTcPos = sToolTcPos Then bFound = True Exit While End If bNext = EgtTdbGetNextTool(MCH_TF.SAWBLADE, sToolName, nType) End While Else Dim sToolName As String = m_CurrentMachine.sCurrSaw If nI = 2 Then sToolName &= "-2" End If EgtTdbSetCurrTool(sToolName) bFound = True End If If Not bFound Then Return False EgtTdbSetCurrToolParam(MCH_TP.DIAM, dDiam) EgtTdbSetCurrToolParam(MCH_TP.TOTDIAM, dDiam) EgtTdbSaveCurrTool() EgtTdbSave() Return True End Function Private Function ReadProjectChange(ByRef nProjInd As Integer, ByRef nMove As Integer) As Boolean ' Verifico presenza file di richiesta Dim sChangeFile As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_CHANGE If Not My.Computer.FileSystem.FileExists(sChangeFile) Then Return False ' Leggo i dati dal file Try Dim ChangeRdr As New IO.StreamReader(sChangeFile) Dim sProjInd As String = ChangeRdr.ReadLine() Dim sMove As String = ChangeRdr.ReadLine() ChangeRdr.Close() If Not Int32.TryParse(GetValueWithKey(sProjInd, "Proj"), nProjInd) Then nProjInd = 0 If Not Int32.TryParse(GetValueWithKey(sMove, "Move"), nMove) Then nMove = 0 Return True Catch Return False Finally ' Rimuovo segnalazione di cambio progetto Try My.Computer.FileSystem.DeleteFile(sChangeFile) Catch End Try End Try End Function Private Function ExecProjectUpdate(nProjInd As Integer) As Boolean Dim sSouFile As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_NGE Dim sDestFile As String = GetSaveDir() & "\" & nProjInd.ToString("D4") & ".nge" Try My.Computer.FileSystem.CopyFile(sSouFile, sDestFile, True) Return True Catch Return False End Try End Function Private Function ExecProjectChange(nProjInd As Integer, nMove As Integer) As Boolean ' Massimo indice di un progetto Dim nMaxProj As Integer = GetPrivateProfileInt(S_GENERAL, K_MAXPROJ, 100, GetIniFile()) ' Progetto corrente Dim nCurrProj As Integer = GetPrivateProfileInt(S_GENERAL, K_LASTPROJ, 0, GetIniFile()) ' Ultimo progetto inviato al View automaticamente Dim nLastProj As Integer = GetPrivateProfileInt(S_GENERAL, K_LASTPROJTOVIEW, 0, GetIniFile()) ' File da inviare Dim nNewProjInd As Integer = 0 Dim sNewFile As String = "" ' Se richiesto progetto precedente If nMove < 0 Then nNewProjInd = nProjInd - 1 ' Retrocedendo non posso arrivare all'ultimo progetto If nNewProjInd = nCurrProj Or nNewProjInd = nLastProj Then nNewProjInd = nProjInd While nNewProjInd > 0 Dim sFile As String = GetSaveDir() & "\" & nNewProjInd.ToString("D4") & ".nge" If My.Computer.FileSystem.FileExists(sFile) Then sNewFile = sFile Exit While End If nNewProjInd -= 1 End While If nNewProjInd = 0 Then nNewProjInd = nMaxProj While nNewProjInd > nCurrProj Dim sFile As String = GetSaveDir() & "\" & nNewProjInd.ToString("D4") & ".nge" If My.Computer.FileSystem.FileExists(sFile) Then sNewFile = sFile Exit While End If nNewProjInd -= 1 End While End If ' se altrimenti richiesto progetto successivo ElseIf nMove > 0 Then nNewProjInd = nProjInd + 1 If nProjInd > nLastProj Then While nNewProjInd <= nMaxProj Dim sFile As String = GetSaveDir() & "\" & nNewProjInd.ToString("D4") & ".nge" If My.Computer.FileSystem.FileExists(sFile) Then sNewFile = sFile Exit While End If nNewProjInd += 1 End While If nNewProjInd > nMaxProj Then nNewProjInd = 1 End If While nNewProjInd <= nLastProj Dim sFile As String = GetSaveDir() & "\" & nNewProjInd.ToString("D4") & ".nge" If My.Computer.FileSystem.FileExists(sFile) Then sNewFile = sFile Exit While End If nNewProjInd += 1 End While End If ' Se non trovato progetto da inviare If String.IsNullOrWhiteSpace(sNewFile) Then Return False ' Copio il progetto Try ' Copio file di progetto nge Dim sNgeDest As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_NGE My.Computer.FileSystem.CopyFile(sNewFile, sNgeDest, True) ' Se esiste file jpg omonimo, lo copio Dim sJpgFile As String = System.IO.Path.ChangeExtension(sNewFile, ".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 NewWrt As New IO.StreamWriter(m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_NEW, False) NewWrt.WriteLine(If(nNewProjInd = nLastProj, "Last", "Status")) NewWrt.Close() Catch ex As Exception EgtOutLog("Error change copying files to OmagVIEW") ' Errore in copia file per OmagVIEW m_CurrentProjectPageUC.SetErrorMessage(EgtMsg(91117)) ' Errore in copia file per OmagVIEW End Try Return True End Function 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 = GetRuinedPartsDir() 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 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(nProjInd As Integer) 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 ' Se non esiste file NGE, esco Dim sSouNgeFile As String = m_CurrentMachine.sLineDataDir & "\" & CURR_PROJ_NGE If Not My.Computer.FileSystem.FileExists(sSouNgeFile) 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 ' Sposto file nge dei pezzi prodotti nel direttorio temporaneo Dim sDestNgeFile = m_sTempDir & "\" & CURR_PROJ_NGE Try My.Computer.FileSystem.MoveFile(sSouNgeFile, sDestNgeFile, True) Catch ex As Exception EgtOutLog("Error moving or erasing " & sSouNgeFile) 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 inizio scarico Dim sDateTime As String = String.Empty GetPrivateProfileString(S_GENERAL, K_DATETIMETOVIEW, "", sDateTime, GetIniFile()) ' Verifico progetto restituito da View If nProjInd = 0 Then nProjInd = nLastCopy ' Leggo variabile con data termine lavorazione Dim sKey As String = K_DATETIMEFINISHED & "." & (nProjInd Mod 10).ToString() GetPrivateProfileString(S_GENERAL, sKey, sDateTime, sDateTime, GetIniFile()) ' Recupero direttorio per pezzi rovinati Dim sRuPartsDir As String = GetRuinedPartsDir() ' Esecuzione dello script custom ExecReceivedViewScript(nProjInd, sDateTime, sRuPartsDir) ' 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 ' Cancello file con le geometrie dei pezzi Try My.Computer.FileSystem.DeleteFile(sDestNgeFile) Catch ex As Exception EgtOutLog("Error erasing " & sDestNgeFile) End Try Return True End Function Friend Function ExecSentProgScript(bDirectCut As Boolean, Optional bAlreadySent As Boolean = False) As Boolean ' Verifico esistenza script Dim sLuaPath As String = m_CurrentMachine.sMachDir() & "\Scripts\SentProg.lua" If Not My.Computer.FileSystem.FileExists(sLuaPath) Then Return True ' Definizione variabili EgtLuaCreateGlobTable("SPS") EgtLuaSetGlobBoolVar("SPS.NCLINK", m_bNCLink) EgtLuaSetGlobBoolVar("SPS.PRODLINE", m_CurrentMachine.bProdLine) EgtLuaSetGlobBoolVar("SPS.ALREADYSENT", bAlreadySent) EgtLuaSetGlobBoolVar("SPS.DIRECTCUT", bDirectCut) ' Esecuzione Dim nErr As Integer = 999 If EgtLuaExecFile(sLuaPath) AndAlso EgtLuaCallFunction("SPS.Exec") Then ' Verifica stato di errore EgtLuaGetGlobIntVar("SPS.ERR", nErr) End If EgtLuaResetGlobVar("SPS") If nErr <> 0 Then EgtOutLog("Error in SentProg : " & nErr.ToString()) m_CurrentProjectPageUC.SetErrorMessage(EgtMsg(90325)) ' Errore nel salvataggio delle statistiche End If Return (nErr = 0) End Function Private Function ExecFinishedProgScript(nProjInd As Integer, sDateTime As String) As Boolean ' Verifico esistenza script Dim sLuaPath As String = m_CurrentMachine.sMachDir() & "\Scripts\FinishedProg.lua" If Not My.Computer.FileSystem.FileExists(sLuaPath) Then Return True ' Definizione variabili EgtLuaCreateGlobTable("FPS") EgtLuaSetGlobBoolVar("FPS.NCLINK", m_bNCLink) EgtLuaSetGlobBoolVar("FPS.PRODLINE", m_CurrentMachine.bProdLine) EgtLuaSetGlobStringVar("FPS.LASTCOPY", nProjInd.ToString("D4")) EgtLuaSetGlobStringVar("FPS.DATETIME", sDateTime) EgtLuaSetGlobIntVar("FPS.RUPARTSCNT", 0) ' Esecuzione Dim nErr As Integer = 999 Dim nRuPartsCnt As Integer = 0 If EgtLuaExecFile(sLuaPath) AndAlso EgtLuaCallFunction("FPS.Exec") Then ' Verifica stato di errore EgtLuaGetGlobIntVar("FPS.ERR", nErr) End If EgtLuaResetGlobVar("FPS") ' Contesto Scena del Progetto Dim nCurrCtx As Integer = EgtGetCurrentContext() EgtSetCurrentContext(m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) If nErr <> 0 Then EgtOutLog("Error in FinishedProg : " & nErr.ToString()) m_CurrentProjectPageUC.SetErrorMessage(EgtMsg(90325)) ' Errore nel salvataggio delle statistiche End If ' Ripristino contesto originale EgtSetCurrentContext(nCurrCtx) Return (nErr = 0) End Function Private Function ExecReceivedViewScript(nProjInd As Integer, sDateTime As String, sRuPartsDir 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", nProjInd.ToString("D4")) EgtLuaSetGlobStringVar("RVS.DATETIME", sDateTime) EgtLuaSetGlobStringVar("RVS.RUPARTSDIR", sRuPartsDir) EgtLuaSetGlobIntVar("RVS.RUPARTSCNT", 0) ' Esecuzione Dim nErr As Integer = 999 Dim nRuPartsCnt As Integer = 0 If EgtLuaExecFile(sLuaPath) AndAlso EgtLuaCallFunction("RVS.Exec") Then ' Verifica stato di errore EgtLuaGetGlobIntVar("RVS.ERR", nErr) ' Lettura numero pezzi rovinati eventualmente inseriti EgtLuaGetGlobIntVar("RVS.RUPARTSCNT", nRuPartsCnt) End If EgtLuaResetGlobVar("RVS") ' Contesto Scena del Progetto Dim nCurrCtx As Integer = EgtGetCurrentContext() EgtSetCurrentContext(m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) If nErr <> 0 Then EgtOutLog("Error in ReceivedView : " & nErr.ToString()) m_CurrentProjectPageUC.SetErrorMessage(EgtMsg(90325)) ' Errore nel salvataggio delle statistiche ElseIf nRuPartsCnt > 0 Then EgtOutLog("New Ruined Parts : " & nRuPartsCnt.ToString()) m_CurrentProjectPageUC.SetInfoMessage(EgtMsg(90327)) ' Inseriti Nuovi Pezzi Rovinati Dim nPartId As Integer = EgtGetLastPart() For nI As Integer = 1 To nRuPartsCnt EgtRemoveInfo(nPartId, INFO_PARTOK) ' ricreo la lista delle famiglie di pezzi presenti in parcheggio m_CadCutPageUC.m_NestPage.GetFamilyGroupInPark() m_CadCutPageUC.m_NestPage.StoreOnePart(nPartId, True) nPartId = EgtGetPrevPart(nPartId) Next ' Visualizzazione EgtZoom(ZM.ALL) End If ' Dichiaro progetto passato da View If nProjInd = m_CurrentProjectPageUC.GetCurrentProject() Then EgtSetInfo(EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_PROJMARK), INFO_UNLOADSAVED, 1) Else Dim nTmpCtx As Integer = EgtInitContext() If nTmpCtx <> 0 Then Dim sNgeFile As String = GetSaveDir() & "\" & nProjInd.ToString("D4") & ".nge" EgtOpenFile(sNgeFile) EgtSetInfo(EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_PROJMARK), INFO_UNLOADSAVED, 1) EgtSaveFile(sNgeFile, NGE.CMPTEXT) EgtDeleteContext(nTmpCtx) EgtSetCurrentContext(m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) End If End If ' Aggiorno Area da lavorare dei pezzi m_CurrentProjectPageUC.UpdateToProduceArea() m_CurrentProjectPageUC.ShowAreas() m_CurrentProjectPageUC.SaveProject() EgtDraw() ' Ripristino contesto originale EgtSetCurrentContext(nCurrCtx) 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 ' Se non premuto Shift -> AboutBox If (Keyboard.Modifiers And ModifierKeys.Shift) = 0 Then Dim AboutBox As New AboutBoxWD(Me) ' Altrimenti lancio cambio macchina (solo uso interno) Else If m_ActivePage = Pages.CadCut Or m_ActivePage = Pages.FrameCut Then ' Cambio macchina EgtLuaCreateGlobTable("CHM") EgtLuaExecFile(GetConfigDir() & "\ChangeMachine.lua") Dim nRestart As Integer = 0 EgtLuaGetGlobIntVar("CHM.RESTART", nRestart) EgtLuaResetGlobVar("CHM") ' Riavvio If nRestart = 1 Then Close() Process.Start(Application.ResourceAssembly.Location) End If End If End If End Sub ' Funzione che disabilita tutte le scene Private Sub IsEnabledScenes(IsEnabled As Boolean) If Not IsNothing(m_CurrentProjectPageUC.CurrentProjectScene) Then m_CurrentProjectPageUC.CurrentProjectScene.Enabled = IsEnabled If Not IsNothing(m_MachinePageUC.m_ToolsDbPageUC) Then m_MachinePageUC.m_ToolsDbPageUC.ToolScene.Enabled = IsEnabled If Not IsNothing(m_WorkInProgressPageUC) Then m_WorkInProgressPageUC.WorkInProgressScene.Enabled = IsEnabled If Not IsNothing(m_OpenPage) Then m_OpenPage.OpenScene.Enabled = IsEnabled If Not IsNothing(m_DrawPageUC) Then m_DrawPageUC.DrawScene.Enabled = IsEnabled If Not IsNothing(ProjectMgrUC.m_VeinMatchingWnd) Then ProjectMgrUC.m_VeinMatchingWnd.IsEnabled = IsEnabled End Sub ' spegne gli oggetti selezionati in fase di Check-Up-Start (bottone Test) Public Sub TestOff() ' deseleziono gli oggetti e spengo il bottone EgtDeselectObj(m_CadCutPageUC.m_NestPage.m_CurrSelectedCurv) EgtDeselectObj(m_CadCutPageUC.m_NestPage.m_CurrSelectedSawCurv) EgtResetMark(m_CadCutPageUC.m_NestPage.m_CurrSelectedSawCurv) m_CadCutPageUC.m_NestPage.m_CurrToolFromSelectedSawCurv = String.Empty m_CadCutPageUC.m_ProjectMgr.TestBtn.IsChecked = False Me.m_CadCutPageUC.m_NestPage.m_bSelectCurv = False End Sub ' spegne il comando per la mofica dei rettangoli Public Sub DragRectangleOff() m_CadCutPageUC.m_NestPage.DragRectangleBtn.IsChecked = False Me.m_CadCutPageUC.m_NestPage.m_bIsCheckedDragRectangle = False ShowParkedParts() End Sub Public Sub SplitCurvWJOff() m_CadCutPageUC.m_NestPage.SplitCurveWJBtn.IsChecked = False Me.m_CadCutPageUC.m_NestPage.m_bIsCheckedSplitCurveWJ = False m_CadCutPageUC.m_NestPage.ResetSplitCurvWJParam() End Sub Public Sub StartCurvWJOff() m_CadCutPageUC.m_NestPage.StartCurveWJBtn.IsChecked = False Me.m_CadCutPageUC.m_NestPage.m_bIsCheckedStartCurveWJ = False m_CadCutPageUC.m_NestPage.ResetStartCurvWJParam() End Sub End Class