From bccfb5ca36576a6a7b2ece77a3bcf6a1bbe79aef Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Wed, 17 Feb 2016 16:22:30 +0000 Subject: [PATCH] OmagCUT : - Aggiunta navigazione tra le pagine di scelta dei componenti. - Aggiunti componenti curvi. --- ConstMachIni.vb | 5 + DirectCutPageUC.xaml.vb | 8 +- DrawPageUC.xaml | 19 +- DrawPageUC.xaml.vb | 744 ++++++++++++++++--------------- MainComponentPageUC.xaml | 23 +- MainComponentPageUC.xaml.vb | 251 ++++++++--- ManualAxesMoveUC.xaml | 14 +- OmagCUTDictionary.xaml | 5 + RawPartPageUC.xaml.vb | 8 +- Resources/DownArrow.png | Bin 1190 -> 1353 bytes Resources/GenericView.png | Bin 1892 -> 1820 bytes Resources/LeftArrow.png | Bin 1473 -> 743 bytes Resources/RightArrow.png | Bin 1460 -> 1589 bytes Resources/UpArrow.png | Bin 1169 -> 1345 bytes SecondaryComponentPageUC.xaml.vb | 210 ++++----- 15 files changed, 739 insertions(+), 548 deletions(-) diff --git a/ConstMachIni.vb b/ConstMachIni.vb index 09bb7ec..7fe3947 100644 --- a/ConstMachIni.vb +++ b/ConstMachIni.vb @@ -72,6 +72,11 @@ Public Const S_MACH_INPROGRESS As String = "InProgress" Public Const K_PHASEVAR As String = "PhaseVar" + Public Const S_MACH_PROBING As String = "Probing" + Public Const K_PROBINGSTATEVAR As String = "ProbingStateVar" + Public Const K_SAWDIAMETER As String = "SawDiameter" + Public Const K_RAWTHICKNESS As String = "RawThickness" + Public Const S_MACH_MACH As String = "Mach" Public Const K_CURRSAW As String = "CurrSaw" Public Const K_CURRDRILL As String = "CurrDrill" diff --git a/DirectCutPageUC.xaml.vb b/DirectCutPageUC.xaml.vb index bc445da..74f07d8 100644 --- a/DirectCutPageUC.xaml.vb +++ b/DirectCutPageUC.xaml.vb @@ -157,8 +157,10 @@ Public Class DirectCutPageUC m_MainWindow.m_CNCommunication.m_CN.DGeneralFunctions_CycleStart() ' Creo MsgBox di attesa Dim MsgBoxStateInfo As New EgtMsgBox(m_MainWindow, EgtMsg(MSG_DIRECTCUTPAGEUC + 41), EgtMsg(MSG_DIRECTCUTPAGEUC + 42), True, EgtMsgBox.Icons.NULL) + Dim ProbingStateNameVar As String = String.Empty + GetPrivateProfileString(S_MACH_PROBING, K_PROBINGSTATEVAR, "", ProbingStateNameVar, m_MainWindow.GetMachIniFile()) m_MainWindow.m_CNCommunication.m_CN.n_DReadELS_handle = 0 - m_MainWindow.m_CNCommunication.m_CN.ReadEls_Add_Parameter("L108", 1) + m_MainWindow.m_CNCommunication.m_CN.ReadEls_Add_Parameter(ProbingStateNameVar, 1) ' Definisco flag tastatura Dim bProbingOk As Boolean = False For I = 0 To 120 @@ -187,8 +189,10 @@ Public Class DirectCutPageUC Next If bProbingOk Then ' Leggo spessore misurato + Dim SawDiameterNameVar As String = String.Empty + GetPrivateProfileString(S_MACH_PROBING, K_SAWDIAMETER, "", SawDiameterNameVar, m_MainWindow.GetMachIniFile()) m_MainWindow.m_CNCommunication.m_CN.n_DReadELS_handle = 0 - m_MainWindow.m_CNCommunication.m_CN.ReadEls_Add_Parameter("E80006", 1) + m_MainWindow.m_CNCommunication.m_CN.ReadEls_Add_Parameter(SawDiameterNameVar, 1) Dim SawDiam As Double = 0 For I = 0 To 20 If m_MainWindow.m_CNCommunication.m_CN.n_DReadELS_handle = 1 Then diff --git a/DrawPageUC.xaml b/DrawPageUC.xaml index a81523e..fd6d264 100644 --- a/DrawPageUC.xaml +++ b/DrawPageUC.xaml @@ -123,21 +123,28 @@ - - + - + + + + + + - - - diff --git a/DrawPageUC.xaml.vb b/DrawPageUC.xaml.vb index 932d458..eb39a1d 100644 --- a/DrawPageUC.xaml.vb +++ b/DrawPageUC.xaml.vb @@ -4,343 +4,374 @@ Imports EgtWPFLib Public Class DrawPageUC - ' Constants - Private Const NUM_VAR As Integer = 10 - Private Const LUA_CMP_VARS As String = "CMP" - Private Const LUA_CMP_DRAW As String = "CMP_Draw" - Private Const INFO_VAR As String = "Var" + ' Constants + Private Const NUM_VAR As Integer = 10 + Private Const LUA_CMP_VARS As String = "CMP" + Private Const LUA_CMP_DRAW As String = "CMP_Draw" + Private Const INFO_VAR As String = "Var" - 'Riferimento alla MainWindow - Private m_MainWindow As MainWindow = Application.Current.MainWindow + 'Riferimento alla MainWindow + Private m_MainWindow As MainWindow = Application.Current.MainWindow - 'Dichiarazione delle Page UserControl - Friend m_MainComponentPage As MainComponentPageUC + 'Dichiarazione delle Page UserControl + Friend m_MainComponentPage As MainComponentPageUC - ' Properties - Private m_sCompoDir As String = String.Empty - Private m_sCompoName As String = String.Empty - Private m_CVars(NUM_VAR - 1) As CompoVar - Private m_bDrawOk As Boolean = False - Private m_bFirst As Boolean = True + ' Properties + Private m_sCompoDir As String = String.Empty + Private m_sCompoName As String = String.Empty + Private m_CVars(NUM_VAR - 1) As CompoVar + Private m_bDrawOk As Boolean = False + Private m_bFirst As Boolean = True - ' Dichiarazione Scene - Friend WithEvents DrawScene As New Scene - Dim DrawSceneHost As New System.Windows.Forms.Integration.WindowsFormsHost + ' Dichiarazione Scene + Friend WithEvents DrawScene As New Scene + Dim DrawSceneHost As New System.Windows.Forms.Integration.WindowsFormsHost - 'Riferimento alla pagina correntemente attiva - Friend m_ActiveComponentPage As Pages + 'Riferimento alla pagina correntemente attiva + Friend m_ActiveComponentPage As Pages - ' Modalità aggiornamento variabili - Friend m_bShowVar As Boolean = False + ' Modalità aggiornamento variabili + Friend m_bShowVar As Boolean = False - Enum Pages - MainComponent - SecondaryComponent - Draw - End Enum + Enum Pages + MainComponent + SecondaryComponent + Draw + End Enum - Private Sub DrawPage_Initialized(sender As Object, e As EventArgs) + Private Sub DrawPage_Initialized(sender As Object, e As EventArgs) - 'Creazione delle Page UserControl - m_MainComponentPage = New MainComponentPageUC - 'Posizionemento nella griglia delle Page UserControl - m_MainComponentPage.SetValue(Grid.ColumnProperty, 0) - m_MainComponentPage.SetValue(Grid.RowSpanProperty, 2) + 'Creazione delle Page UserControl + m_MainComponentPage = New MainComponentPageUC + 'Posizionemento nella griglia delle Page UserControl + m_MainComponentPage.SetValue(Grid.ColumnProperty, 0) + m_MainComponentPage.SetValue(Grid.RowSpanProperty, 2) - 'Assegnazione scena all'host e posizionamento nella ImportPageGrid - DrawSceneHost.Child = DrawScene - DrawSceneHost.SetValue(Grid.ColumnProperty, 1) - DrawSceneHost.SetValue(Grid.RowProperty, 0) - Me.LeftButtonGrid.Children.Add(DrawSceneHost) + 'Assegnazione scena all'host e posizionamento nella ImportPageGrid + DrawSceneHost.Child = DrawScene + DrawSceneHost.SetValue(Grid.ColumnProperty, 1) + DrawSceneHost.SetValue(Grid.RowProperty, 0) + Me.LeftButtonGrid.Children.Add(DrawSceneHost) - 'Associazione tag textbox e label per visualizzare nome nella calcolatrice - TextBox1.Tag = Label1 - TextBox2.Tag = Label2 - TextBox3.Tag = Label3 - TextBox4.Tag = Label4 - TextBox5.Tag = Label5 - TextBox6.Tag = Label6 - TextBox7.Tag = Label7 - TextBox8.Tag = Label8 - TextBox9.Tag = Label9 - TextBox10.Tag = Label10 + 'Associazione tag textbox e label per visualizzare nome nella calcolatrice + TextBox1.Tag = Label1 + TextBox2.Tag = Label2 + TextBox3.Tag = Label3 + TextBox4.Tag = Label4 + TextBox5.Tag = Label5 + TextBox6.Tag = Label6 + TextBox7.Tag = Label7 + TextBox8.Tag = Label8 + TextBox9.Tag = Label9 + TextBox10.Tag = Label10 - 'Imposto i messaggi letti dal file dei messaggi + 'Imposto i messaggi letti dal file dei messaggi PartNumTxBl.Text = EgtMsg(MSG_DRAWPAGEUC + 1) 'Part Number - Numero pezzi - End Sub + End Sub - Private Sub DrawPage_Loaded(sender As Object, e As RoutedEventArgs) + Private Sub DrawPage_Loaded(sender As Object, e As RoutedEventArgs) - If m_bFirst Then - ' imposto colore di default - Dim DefColor As New Color3d(0, 0, 0) - GetPrivateProfileColor(S_GEOMDB, K_DEFAULTCOLOR, DefColor, m_MainWindow.GetIniFile()) - DrawScene.SetDefaultMaterial(DefColor) - ' imposto colori sfondo - Dim BackTopColor As New Color3d(192, 192, 192) - GetPrivateProfileColor(S_SCENE, K_BACKTOP, BackTopColor, m_MainWindow.GetIniFile()) - Dim BackBotColor As New Color3d(BackTopColor) - GetPrivateProfileColor(S_SCENE, K_BACKBOTTOM, BackBotColor, m_MainWindow.GetIniFile()) - DrawScene.SetViewBackground(BackTopColor, BackBotColor) - ' imposto colore di evidenziazione - Dim MarkColor As New Color3d(255, 255, 0) - GetPrivateProfileColor(S_SCENE, K_MARK, MarkColor, m_MainWindow.GetIniFile()) - DrawScene.SetMarkMaterial(MarkColor) - ' imposto colore per superfici selezionate - Dim SelSurfColor As New Color3d(255, 255, 192) - GetPrivateProfileColor(S_SCENE, K_SELSURF, SelSurfColor, m_MainWindow.GetIniFile()) - DrawScene.SetSelSurfMaterial(SelSurfColor) - ' imposto tipo e colore del rettangolo di zoom - Dim bOutline As Boolean = True - Dim ZwColor As New Color3d(0, 0, 0) - GetPrivateProfileZoomWin(S_SCENE, K_ZOOMWIN, bOutline, ZwColor, m_MainWindow.GetIniFile()) - DrawScene.SetZoomWinAttribs(bOutline, ZwColor) - ' imposto colore della linea di distanza - Dim DstLnColor As New Color3d(255, 0, 0) - GetPrivateProfileColor(S_SCENE, K_DISTLINE, DstLnColor, m_MainWindow.GetIniFile()) - DrawScene.SetDistLineMaterial(DstLnColor) - ' imposto parametri OpenGL - Dim nDriver As Integer = GetPrivateProfileInt(S_OPENGL, K_DRIVER, 3, m_MainWindow.GetIniFile()) - Dim b2Buff As Boolean = (GetPrivateProfileInt(S_OPENGL, K_DOUBLEBUFFER, 1, m_MainWindow.GetIniFile()) <> 0) - Dim nColorBits As Integer = GetPrivateProfileInt(S_OPENGL, K_COLORBITS, 32, m_MainWindow.GetIniFile()) - Dim nDepthBits As Integer = GetPrivateProfileInt(S_OPENGL, K_DEPTHBITS, 32, m_MainWindow.GetIniFile()) - DrawScene.SetViewAttributes(nDriver, b2Buff, nColorBits, nDepthBits) - ' inizializzo la scena (DB geometrico + visualizzazione) - DrawScene.Init() - ' Imposto griglia - LoadGridData() - ' leggo direttorio componenti - GetPrivateProfileString(S_COMPO, K_COMPODIR, "", m_sCompoDir, m_MainWindow.GetIniFile()) - m_bFirst = False - Else - EgtSetCurrentContext(DrawScene.GetCtx()) - End If + If m_bFirst Then + ' imposto colore di default + Dim DefColor As New Color3d(0, 0, 0) + GetPrivateProfileColor(S_GEOMDB, K_DEFAULTCOLOR, DefColor, m_MainWindow.GetIniFile()) + DrawScene.SetDefaultMaterial(DefColor) + ' imposto colori sfondo + Dim BackTopColor As New Color3d(192, 192, 192) + GetPrivateProfileColor(S_SCENE, K_BACKTOP, BackTopColor, m_MainWindow.GetIniFile()) + Dim BackBotColor As New Color3d(BackTopColor) + GetPrivateProfileColor(S_SCENE, K_BACKBOTTOM, BackBotColor, m_MainWindow.GetIniFile()) + DrawScene.SetViewBackground(BackTopColor, BackBotColor) + ' imposto colore di evidenziazione + Dim MarkColor As New Color3d(255, 255, 0) + GetPrivateProfileColor(S_SCENE, K_MARK, MarkColor, m_MainWindow.GetIniFile()) + DrawScene.SetMarkMaterial(MarkColor) + ' imposto colore per superfici selezionate + Dim SelSurfColor As New Color3d(255, 255, 192) + GetPrivateProfileColor(S_SCENE, K_SELSURF, SelSurfColor, m_MainWindow.GetIniFile()) + DrawScene.SetSelSurfMaterial(SelSurfColor) + ' imposto tipo e colore del rettangolo di zoom + Dim bOutline As Boolean = True + Dim ZwColor As New Color3d(0, 0, 0) + GetPrivateProfileZoomWin(S_SCENE, K_ZOOMWIN, bOutline, ZwColor, m_MainWindow.GetIniFile()) + DrawScene.SetZoomWinAttribs(bOutline, ZwColor) + ' imposto colore della linea di distanza + Dim DstLnColor As New Color3d(255, 0, 0) + GetPrivateProfileColor(S_SCENE, K_DISTLINE, DstLnColor, m_MainWindow.GetIniFile()) + DrawScene.SetDistLineMaterial(DstLnColor) + ' imposto parametri OpenGL + Dim nDriver As Integer = GetPrivateProfileInt(S_OPENGL, K_DRIVER, 3, m_MainWindow.GetIniFile()) + Dim b2Buff As Boolean = (GetPrivateProfileInt(S_OPENGL, K_DOUBLEBUFFER, 1, m_MainWindow.GetIniFile()) <> 0) + Dim nColorBits As Integer = GetPrivateProfileInt(S_OPENGL, K_COLORBITS, 32, m_MainWindow.GetIniFile()) + Dim nDepthBits As Integer = GetPrivateProfileInt(S_OPENGL, K_DEPTHBITS, 32, m_MainWindow.GetIniFile()) + DrawScene.SetViewAttributes(nDriver, b2Buff, nColorBits, nDepthBits) + ' inizializzo la scena (DB geometrico + visualizzazione) + DrawScene.Init() + ' Imposto griglia + LoadGridData() + ' leggo direttorio componenti + GetPrivateProfileString(S_COMPO, K_COMPODIR, "", m_sCompoDir, m_MainWindow.GetIniFile()) + m_bFirst = False + Else + EgtSetCurrentContext(DrawScene.GetCtx()) + End If - ' inibisco selezione diretta da Scene - DrawScene.SetStatusNull() - ' pulisco la scena e relativo db - EgtNewFile() - EgtDraw() + ' inibisco selezione diretta da Scene + DrawScene.SetStatusNull() + ' pulisco la scena e relativo db + EgtNewFile() + EgtDraw() - 'Seleziono la Tab e la Page di apertura - LeftButtonGrid.Children.Add(m_MainComponentPage) - m_ActiveComponentPage = Pages.MainComponent - InternComponentBtn.Visibility = Windows.Visibility.Hidden - AddBtn.Visibility = Windows.Visibility.Hidden - CancelBtn.Visibility = Windows.Visibility.Hidden - VariablesCompoGrid.Visibility = Windows.Visibility.Hidden + 'Seleziono la Tab e la Page di apertura + LeftButtonGrid.Children.Add(m_MainComponentPage) + m_ActiveComponentPage = Pages.MainComponent + InternComponentBtn.Visibility = Windows.Visibility.Hidden + AddBtn.Visibility = Windows.Visibility.Hidden + CancelBtn.Visibility = Windows.Visibility.Hidden + VariablesCompoGrid.Visibility = Windows.Visibility.Hidden + PartNumberGrd.Visibility = Windows.Visibility.Hidden - 'Valore di default del numero pezzi - PartNumTxBx.Text = 1 + 'Valore di default del numero pezzi + PartNumTxBx.Text = 1 - End Sub + End Sub - Private Sub LoadGridData() - Dim dSnapStep As Double = GetPrivateProfileDouble(S_GRID, K_SNAPSTEP, 10, m_MainWindow.GetIniFile()) - Dim nMinLineSStep As Integer = GetPrivateProfileInt(S_GRID, K_MINLINESSTEP, 1, m_MainWindow.GetIniFile()) - Dim nMajLineSStep As Integer = GetPrivateProfileInt(S_GRID, K_MAJLINESSTEP, 10, m_MainWindow.GetIniFile()) - Dim nExtSStep As Integer = GetPrivateProfileInt(S_GRID, K_EXTSSTEP, 50, m_MainWindow.GetIniFile()) - Dim MinLnColor As New Color3d(160, 160, 160) - GetPrivateProfileColor(S_GRID, K_MINLNCOLOR, MinLnColor, m_MainWindow.GetIniFile()) - Dim MajLnColor As New Color3d(160, 160, 160) - GetPrivateProfileColor(S_GRID, K_MAJLNCOLOR, MajLnColor, m_MainWindow.GetIniFile()) - EgtSetGridFrame(Frame3d.GLOB) - EgtSetGridGeo(dSnapStep, nMinLineSStep, nMajLineSStep, nExtSStep) - EgtSetGridColor(MinLnColor, MajLnColor) - Dim bShowGrid As Boolean = (GetPrivateProfileInt(S_GRID, K_SHOWGRID, 1, m_MainWindow.GetIniFile()) <> 0) - EgtSetGridShow(bShowGrid, False) - End Sub + Private Sub LoadGridData() + Dim dSnapStep As Double = GetPrivateProfileDouble(S_GRID, K_SNAPSTEP, 10, m_MainWindow.GetIniFile()) + Dim nMinLineSStep As Integer = GetPrivateProfileInt(S_GRID, K_MINLINESSTEP, 1, m_MainWindow.GetIniFile()) + Dim nMajLineSStep As Integer = GetPrivateProfileInt(S_GRID, K_MAJLINESSTEP, 10, m_MainWindow.GetIniFile()) + Dim nExtSStep As Integer = GetPrivateProfileInt(S_GRID, K_EXTSSTEP, 50, m_MainWindow.GetIniFile()) + Dim MinLnColor As New Color3d(160, 160, 160) + GetPrivateProfileColor(S_GRID, K_MINLNCOLOR, MinLnColor, m_MainWindow.GetIniFile()) + Dim MajLnColor As New Color3d(160, 160, 160) + GetPrivateProfileColor(S_GRID, K_MAJLNCOLOR, MajLnColor, m_MainWindow.GetIniFile()) + EgtSetGridFrame(Frame3d.GLOB) + EgtSetGridGeo(dSnapStep, nMinLineSStep, nMajLineSStep, nExtSStep) + EgtSetGridColor(MinLnColor, MajLnColor) + Dim bShowGrid As Boolean = (GetPrivateProfileInt(S_GRID, K_SHOWGRID, 1, m_MainWindow.GetIniFile()) <> 0) + EgtSetGridShow(bShowGrid, False) + End Sub - Public Sub SelectedComponent(sCompo As String) - ' Carico componente - LoadCurrentCompo(sCompo) - End Sub + Public Sub SelectedComponent(sCompo As String) + ' Carico componente + LoadCurrentCompo(sCompo) + End Sub - Private Sub LoadCurrentCompo(ByVal sCompo As String) - ' Verifico se cambiato - If sCompo = m_sCompoName Then - Return - End If - m_sCompoName = sCompo - ' Pulisco l'ambiente lua - ResetLuaVariables() - ' Carico il file ed eseguo in modalità anteprima - Dim bOk As Boolean = ExecCompoFile() - Dim sMsg As String = String.Empty - bOk = bOk AndAlso MakePreview(sMsg) - If Not bOk Then - EgtNewFile() - End If + Private Sub LoadCurrentCompo(ByVal sCompo As String) + ' Verifico se cambiato + If sCompo = m_sCompoName Then + Return + End If + m_sCompoName = sCompo + ' Pulisco l'ambiente lua + ResetLuaVariables() + ' Carico il file ed eseguo in modalità anteprima + Dim bOk As Boolean = ExecCompoFile() + Dim sMsg As String = String.Empty + bOk = bOk AndAlso MakePreview(sMsg) + If Not bOk Then + EgtNewFile() + End If MessageTxBl.Text = sMsg MessageGrid.Background = If(m_bDrawOk, Brushes.Transparent, Application.Current.FindResource("OmagCut_Red")) - DrawScene.ZoomAll() - ' se componenti con buchi interni visualizzo bottoni appositi - If sCompo = "Pianocucina.lua" Or sCompo = "Pianobagno.lua" Then - ShowInternalBtn() - End If - ' leggo variabili e aggiorno griglia - ReadAndShowVariables() - ' abilito bottoni Vista e Inserisci - OkBtn.IsEnabled = True - ' un pezzo da inserire - 'tbNbr.Text = "1" - End Sub + DrawScene.ZoomAll() + ' se componenti con buchi interni visualizzo bottoni appositi + If sCompo = "Pianocucina.lua" Or sCompo = "Pianobagno.lua" Then + ShowInternalBtn() + End If + ' leggo variabili e aggiorno griglia + ReadAndShowVariables() + ' abilito bottoni Vista e Inserisci + OkBtn.IsEnabled = True + ' un pezzo da inserire + 'tbNbr.Text = "1" + End Sub - Private Sub BackBtn_Click(sender As Object, e As RoutedEventArgs) Handles BackBtn.Click - DrawPage_Unloaded(sender, e) - DrawPage_Loaded(sender, e) - End Sub + Private Sub BackBtn_Click(sender As Object, e As RoutedEventArgs) Handles BackBtn.Click + DrawPage_Unloaded(sender, e) + ' Elimino nome del componente precedente + m_sCompoName = String.Empty + ' + If String.IsNullOrEmpty(m_MainComponentPage.m_SecondaryComponentPage.m_sCurrCompo) Then + DrawPage_Loaded(sender, e) + Else + LoadSecondaryPage() + End If + End Sub - Public Sub UpdateView() - ' verifico ci sia un componente corrente - If String.IsNullOrWhiteSpace(m_sCompoName) Then - Return - End If - ' aggiorno le variabili dalla griglia - UpdateVariables() - ' ricalcolo il disegno - Dim sMsg As String = String.Empty - MakePreview(sMsg) + Private Sub LoadSecondaryPage() + EgtSetCurrentContext(DrawScene.GetCtx()) + + ' inibisco selezione diretta da Scene + DrawScene.SetStatusNull() + ' pulisco la scena e relativo db + EgtNewFile() + EgtDraw() + + 'Seleziono la Tab e la Page di apertura + LeftButtonGrid.Children.Add(m_MainComponentPage.m_SecondaryComponentPage) + m_ActiveComponentPage = Pages.MainComponent + InternComponentBtn.Visibility = Windows.Visibility.Hidden + AddBtn.Visibility = Windows.Visibility.Hidden + CancelBtn.Visibility = Windows.Visibility.Hidden + VariablesCompoGrid.Visibility = Windows.Visibility.Hidden + PartNumberGrd.Visibility = Windows.Visibility.Hidden + + 'Valore di default del numero pezzi + PartNumTxBx.Text = 1 + + End Sub + + Public Sub UpdateView() + ' verifico ci sia un componente corrente + If String.IsNullOrWhiteSpace(m_sCompoName) Then + Return + End If + ' aggiorno le variabili dalla griglia + UpdateVariables() + ' ricalcolo il disegno + Dim sMsg As String = String.Empty + MakePreview(sMsg) MessageTxBl.Text = sMsg MessageGrid.Background = If(m_bDrawOk, Brushes.Transparent, Application.Current.FindResource("OmagCut_Red")) - ' aggiorno visualizzazione - EgtSetView(VT.TOP, False) - EgtZoom(ZM.ALL) - End Sub + ' aggiorno visualizzazione + EgtSetView(VT.TOP, False) + EgtZoom(ZM.ALL) + End Sub - Private Function ExecCompoFile() As Boolean - ' Costruisco path completa del componente - Dim sPath = m_sCompoDir & "\" & m_sCompoName - ' Carico il file - Return EgtLuaExecFile(sPath) - End Function + Private Function ExecCompoFile() As Boolean + ' Costruisco path completa del componente + Dim sPath = m_sCompoDir & "\" & m_sCompoName + ' Carico il file + Return EgtLuaExecFile(sPath) + End Function - Private Function ShowInternalBtn() As Boolean - InternComponentBtn.Visibility = Windows.Visibility.Visible - AddBtn.Visibility = Windows.Visibility.Visible - CancelBtn.Visibility = Windows.Visibility.Visible - Return True - End Function + Private Function ShowInternalBtn() As Boolean + InternComponentBtn.Visibility = Windows.Visibility.Visible + AddBtn.Visibility = Windows.Visibility.Visible + CancelBtn.Visibility = Windows.Visibility.Visible + Return True + End Function - Private Function ReadAndShowVariables() As Boolean - ' Recupero nome, tipo e valore delle variabili globali - For i As Integer = 1 To NUM_VAR - Dim CVar = New CompoVar - CVar.m_nInd = i - If CVar.NameTypeValueFromLua() Then - m_CVars(i - 1) = CVar - Else - m_CVars(i - 1) = Nothing - End If - Next + Private Function ReadAndShowVariables() As Boolean + ' Recupero nome, tipo e valore delle variabili globali + For i As Integer = 1 To NUM_VAR + Dim CVar = New CompoVar + CVar.m_nInd = i + If CVar.NameTypeValueFromLua() Then + m_CVars(i - 1) = CVar + Else + m_CVars(i - 1) = Nothing + End If + Next - ' Aggiorno la griglia dalle variabili - m_bShowVar = True + ' Aggiorno la griglia dalle variabili + m_bShowVar = True - ' Conto numero variabili definite e da nascondere - Dim nShow As Integer = GetDefinedVarCount() - Dim nHide As Integer = NUM_VAR - nShow + ' Conto numero variabili definite e da nascondere + Dim nShow As Integer = GetDefinedVarCount() + Dim nHide As Integer = NUM_VAR - nShow - For i As Integer = 1 To nHide - GetNameEdit(i).Visibility = Windows.Visibility.Hidden - GetValueEdit(i).Visibility = Windows.Visibility.Hidden - Next - For i As Integer = 1 To nShow - Dim j As Integer = nHide + i - GetNameEdit(j).Text = m_CVars(i - 1).m_sName - GetNameEdit(j).Visibility = Windows.Visibility.Visible + For i As Integer = 1 To nHide + GetNameEdit(i).Visibility = Windows.Visibility.Hidden + GetValueEdit(i).Visibility = Windows.Visibility.Hidden + Next + For i As Integer = 1 To nShow + Dim j As Integer = nHide + i + GetNameEdit(j).Text = m_CVars(i - 1).m_sName + GetNameEdit(j).Visibility = Windows.Visibility.Visible + GetValueEdit(j).Text = m_CVars(i - 1).ToString() + GetValueEdit(j).Visibility = Windows.Visibility.Visible + Next + m_bShowVar = False + Return True + End Function + + Private Function UpdateVariables() As Boolean + ' Conto numero variabili definite e da nascondere + Dim nShow As Integer = GetDefinedVarCount() + Dim nHide As Integer = NUM_VAR - nShow + ' aggiorno le variabili + For i As Integer = 1 To nShow + Dim j As Integer = nHide + i + ' interpreto il valore, se non riesco ripristino default + If Not m_CVars(i - 1).FromString(GetValueEdit(j).Text) Then GetValueEdit(j).Text = m_CVars(i - 1).ToString() - GetValueEdit(j).Visibility = Windows.Visibility.Visible - Next - m_bShowVar = False - Return True - End Function + End If + ' aggiorno la corrispondente variabile lua + If Not m_CVars(i - 1).ToLua() Then + Dim sErr As String = String.Empty + EgtLuaGetLastError(sErr) + EgtOutLog(sErr) + End If + Next + Return True + End Function - Private Function UpdateVariables() As Boolean - ' Conto numero variabili definite e da nascondere - Dim nShow As Integer = GetDefinedVarCount() - Dim nHide As Integer = NUM_VAR - nShow - ' aggiorno le variabili - For i As Integer = 1 To nShow - Dim j As Integer = nHide + i - ' interpreto il valore, se non riesco ripristino default - If Not m_CVars(i - 1).FromString(GetValueEdit(j).Text) Then - GetValueEdit(j).Text = m_CVars(i - 1).ToString() - End If - ' aggiorno la corrispondente variabile lua - If Not m_CVars(i - 1).ToLua() Then - Dim sErr As String = String.Empty - EgtLuaGetLastError(sErr) - EgtOutLog(sErr) - End If - Next - Return True - End Function + Private Function GetDefinedVarCount() As Integer + Dim nCount As Integer = 0 + For i As Integer = 1 To NUM_VAR + If m_CVars(i - 1) IsNot Nothing Then + nCount += 1 + End If + Next + Return nCount + End Function - Private Function GetDefinedVarCount() As Integer - Dim nCount As Integer = 0 - For i As Integer = 1 To NUM_VAR - If m_CVars(i - 1) IsNot Nothing Then - nCount += 1 - End If - Next - Return nCount - End Function + Private Function ResetLuaVariables() As Boolean + EgtLuaResetGlobVar(LUA_CMP_VARS) + EgtLuaResetGlobVar(LUA_CMP_DRAW) + Return False + End Function - Private Function ResetLuaVariables() As Boolean - EgtLuaResetGlobVar(LUA_CMP_VARS) - EgtLuaResetGlobVar(LUA_CMP_DRAW) - Return False - End Function + Private Function MakePreview(ByRef sMsg As String) As Boolean + If Not EgtLuaExecLine(LUA_CMP_DRAW & "(true)") Then + sMsg = "Error in component execution" + m_bDrawOk = False + Else + EgtLuaGetGlobStringVar(LUA_CMP_VARS & ".MSG", sMsg) + Dim nErr As Integer = 0 + EgtLuaGetGlobIntVar(LUA_CMP_VARS & ".ERR", nErr) + m_bDrawOk = (nErr = 0) + End If + Return m_bDrawOk + End Function - Private Function MakePreview(ByRef sMsg As String) As Boolean - If Not EgtLuaExecLine(LUA_CMP_DRAW & "(true)") Then - sMsg = "Error in component execution" - m_bDrawOk = False - Else - EgtLuaGetGlobStringVar(LUA_CMP_VARS & ".MSG", sMsg) - Dim nErr As Integer = 0 - EgtLuaGetGlobIntVar(LUA_CMP_VARS & ".ERR", nErr) - m_bDrawOk = (nErr = 0) - End If - Return m_bDrawOk - End Function - - Private Function MakeInsert(ByVal nNbr As Integer) As Boolean - ' ricarico componente corrente - ExecCompoFile() - ' aggiorno variabili - UpdateVariables() - ' Recupero flag per inserimento diretto in grezzo (altrimenti in parcheggio) - Dim bDirect As Boolean = (GetPrivateProfileInt(S_NEST, K_DIRECT, 0, m_MainWindow.GetIniFile()) <> 0) - ' elimino eventuali precedenti pezzi vuoti - EgtEraseEmptyParts() - ' eseguo inserimento - For i As Integer = 1 To nNbr - ' Inserisco il componente - If Not EgtLuaExecLine(LUA_CMP_DRAW & "(false)") Then - Dim sErr As String = String.Empty - EgtLuaGetLastError(sErr) - EgtOutLog(sErr) - Exit For - End If - ' Ne recupero l'Id - Dim nId2 As Integer = EgtGetLastPart() - ' Muovo la regione in Z per evitare problemi in visualizzazione - Dim nRegId = EgtGetFirstNameInGroup(nId2, NAME_REGION) - EgtMove(nRegId, New Vector3d(0, 0, DELTAZ_REG), GDB_RT.GLOB) - ' Aggiusto per lavorazioni - AdjustFlatPart(nId2) - ' Inserisco in parcheggio - m_MainWindow.m_CadCutPageUC.m_NestPage.StoreOnePart(nId2, True) - ' Se richiesto posizionamento diretto, lo eseguo - If bDirect Then - m_MainWindow.m_CadCutPageUC.m_NestPage.InsertOnePart(nId2) - End If - Next - Return True - End Function + Private Function MakeInsert(ByVal nNbr As Integer) As Boolean + ' ricarico componente corrente + ExecCompoFile() + ' aggiorno variabili + UpdateVariables() + ' Recupero flag per inserimento diretto in grezzo (altrimenti in parcheggio) + Dim bDirect As Boolean = (GetPrivateProfileInt(S_NEST, K_DIRECT, 0, m_MainWindow.GetIniFile()) <> 0) + ' elimino eventuali precedenti pezzi vuoti + EgtEraseEmptyParts() + ' eseguo inserimento + For i As Integer = 1 To nNbr + ' Inserisco il componente + If Not EgtLuaExecLine(LUA_CMP_DRAW & "(false)") Then + Dim sErr As String = String.Empty + EgtLuaGetLastError(sErr) + EgtOutLog(sErr) + Exit For + End If + ' Ne recupero l'Id + Dim nId2 As Integer = EgtGetLastPart() + ' Muovo la regione in Z per evitare problemi in visualizzazione + Dim nRegId = EgtGetFirstNameInGroup(nId2, NAME_REGION) + EgtMove(nRegId, New Vector3d(0, 0, DELTAZ_REG), GDB_RT.GLOB) + ' Aggiusto per lavorazioni + AdjustFlatPart(nId2) + ' Inserisco in parcheggio + m_MainWindow.m_CadCutPageUC.m_NestPage.StoreOnePart(nId2, True) + ' Se richiesto posizionamento diretto, lo eseguo + If bDirect Then + m_MainWindow.m_CadCutPageUC.m_NestPage.InsertOnePart(nId2) + End If + Next + Return True + End Function Private Function GetNameEdit(ByVal nInd As Integer) As TextBlock Select Case nInd @@ -367,30 +398,30 @@ Public Class DrawPageUC End Select End Function - Private Function GetValueEdit(ByVal nInd As Integer) As TextBox - Select Case nInd - Case 1 - Return TextBox1 - Case 2 - Return TextBox2 - Case 3 - Return TextBox3 - Case 4 - Return TextBox4 - Case 5 - Return TextBox5 - Case 6 - Return TextBox6 - Case 7 - Return TextBox7 - Case 8 - Return TextBox8 - Case 9 - Return TextBox9 - Case Else - Return TextBox10 - End Select - End Function + Private Function GetValueEdit(ByVal nInd As Integer) As TextBox + Select Case nInd + Case 1 + Return TextBox1 + Case 2 + Return TextBox2 + Case 3 + Return TextBox3 + Case 4 + Return TextBox4 + Case 5 + Return TextBox5 + Case 6 + Return TextBox6 + Case 7 + Return TextBox7 + Case 8 + Return TextBox8 + Case 9 + Return TextBox9 + Case Else + Return TextBox10 + End Select + End Function Private Sub EgtTextBox_EgtOpening(sender As Object, e As RoutedEventArgs) Handles TextBox9.EgtOpening, TextBox10.EgtOpening Dim SelectedTextBox As TextBox = e.Source @@ -432,46 +463,45 @@ Public Class DrawPageUC End Select End Sub - Private Sub OkBtn_Click(sender As Object, e As RoutedEventArgs) Handles OkBtn.Click - ' se errore esco - If Not m_bDrawOk Then - Return - End If - ' Leggo numero di pezzi da inserire - Dim InsNbr As Integer = Int32.Parse(PartNumTxBx.Text) - ' Passo al contesto principale - EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) - ' Inserisco il componente nel DB geometrico principale - MakeInsert(InsNbr) - ' Aggiorno ambiente principale - EgtZoom(ZM.ALL) - 'Istruzioni per chiudere ImportPageUC e aprire CadCutPageUC - m_MainWindow.MainWindowGrid.Children.Remove(m_MainWindow.m_DrawPageUC) - m_MainWindow.MainWindowGrid.Children.Add(m_MainWindow.m_CurrentProjectPageUC) - m_MainWindow.m_ActivePage = MainWindow.Pages.CadCut + Private Sub OkBtn_Click(sender As Object, e As RoutedEventArgs) Handles OkBtn.Click + ' se errore esco + If Not m_bDrawOk Then + Return + End If + ' Leggo numero di pezzi da inserire + Dim InsNbr As Integer = Int32.Parse(PartNumTxBx.Text) + ' Passo al contesto principale + EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) + ' Inserisco il componente nel DB geometrico principale + MakeInsert(InsNbr) + ' Aggiorno ambiente principale + EgtZoom(ZM.ALL) + 'Istruzioni per chiudere ImportPageUC e aprire CadCutPageUC + m_MainWindow.MainWindowGrid.Children.Remove(m_MainWindow.m_DrawPageUC) + m_MainWindow.MainWindowGrid.Children.Add(m_MainWindow.m_CurrentProjectPageUC) + m_MainWindow.m_ActivePage = MainWindow.Pages.CadCut - End Sub + End Sub - Private Sub ExitBtn_Click(sender As Object, e As RoutedEventArgs) Handles ExitBtn.Click - 'Istruzioni per chiudere ImportPageUC e aprire CadCutPageUC - m_MainWindow.MainWindowGrid.Children.Remove(m_MainWindow.m_DrawPageUC) - m_MainWindow.MainWindowGrid.Children.Add(m_MainWindow.m_CurrentProjectPageUC) - m_MainWindow.m_ActivePage = MainWindow.Pages.CadCut - End Sub + Private Sub ExitBtn_Click(sender As Object, e As RoutedEventArgs) Handles ExitBtn.Click + 'Istruzioni per chiudere ImportPageUC e aprire CadCutPageUC + m_MainWindow.MainWindowGrid.Children.Remove(m_MainWindow.m_DrawPageUC) + m_MainWindow.MainWindowGrid.Children.Add(m_MainWindow.m_CurrentProjectPageUC) + m_MainWindow.m_ActivePage = MainWindow.Pages.CadCut + End Sub - Private Sub DrawPage_Unloaded(sender As Object, e As RoutedEventArgs) - 'Seleziono la Tab e la Page di apertura - Select Case m_ActiveComponentPage - Case Pages.MainComponent - LeftButtonGrid.Children.Remove(m_MainComponentPage) - Case Pages.SecondaryComponent - LeftButtonGrid.Children.Remove(m_MainComponentPage.m_SecondaryComponentPage) - Case Else - End Select + Private Sub DrawPage_Unloaded(sender As Object, e As RoutedEventArgs) + 'Seleziono la Tab e la Page di apertura + Select Case m_ActiveComponentPage + Case Pages.MainComponent + LeftButtonGrid.Children.Remove(m_MainComponentPage) + Case Pages.SecondaryComponent + LeftButtonGrid.Children.Remove(m_MainComponentPage.m_SecondaryComponentPage) + Case Else + End Select - ' Pulisco l'ambiente lua - ResetLuaVariables() - m_sCompoName = String.Empty + ' Pulisco l'ambiente lua + ResetLuaVariables() End Sub diff --git a/MainComponentPageUC.xaml b/MainComponentPageUC.xaml index 077dfee..8c0b11e 100644 --- a/MainComponentPageUC.xaml +++ b/MainComponentPageUC.xaml @@ -123,17 +123,18 @@ - + + + + + + + diff --git a/MainComponentPageUC.xaml.vb b/MainComponentPageUC.xaml.vb index a5bd552..ce903de 100644 --- a/MainComponentPageUC.xaml.vb +++ b/MainComponentPageUC.xaml.vb @@ -8,8 +8,14 @@ Public Class MainComponentPageUC 'Dichiarazione delle Page UserControl Friend m_SecondaryComponentPage As SecondaryComponentPageUC + ' Flag che indica se è attiva la prima o la seconda pagina + Friend m_bIsFirstPage As Boolean + Friend CurrentBtn As Button = Nothing + ' Variabile che contiene il nome del componente selezionato + Friend m_sCurrCompoFam As String = String.Empty + Private Sub MainComponentPage_Initialized(sender As Object, e As EventArgs) 'Creazione delle Page UserControl @@ -18,71 +24,19 @@ Public Class MainComponentPageUC m_SecondaryComponentPage.SetValue(Grid.ColumnProperty, 0) m_SecondaryComponentPage.SetValue(Grid.RowSpanProperty, 2) - ' Creazione converter da String a ImageSource - Dim ImageConverter As New ImageSourceConverter - Dim ThicknessConverter As New ThicknessConverter - - 'Assegnazione immagine e testo ai Button - Dim nCompoNumber As Integer = GetPrivateProfileInt("Compo", "Count", 0, m_MainWindow.GetIniFile()) - For index As Integer = 1 To nCompoNumber - Dim CustomThickness As Thickness = ThicknessConverter.ConvertFromString("0") - Dim nCompoName As Integer = GetPrivateProfileInt("Compo" & index, "Name", 0, m_MainWindow.GetIniFile()) - Dim sCompoImage As String = "" - Dim sCompoImageSource As ImageSource - - 'verifico presenza immagine e la aggiungo - If GetPrivateProfileString("Compo" & index, "Image", "", sCompoImage, m_MainWindow.GetIniFile()) <> 0 Then - Try - sCompoImageSource = ImageConverter.ConvertFromString(m_MainWindow.GetResourcesDir() & "\" & sCompoImage) - GetImage(index).Height = 65 - GetImage(index).Width = 65 - GetImage(index).Source = sCompoImageSource - Catch ex As Exception - EgtOutLog("Error loading image " & sCompoImage) - sCompoImage = String.Empty - GetImage(index).Height = 0 - GetImage(index).Width = 0 - CustomThickness.Right = 0 - GetImage(index).Margin = CustomThickness - End Try - Else - 'Se non c'è l'immagine azzero la distanza tra testo e immagine - CustomThickness.Right = 0 - GetImage(index).Margin = CustomThickness - End If - - 'verifico presenza testo - If nCompoName > 0 Then - Dim sCompoName As String = EgtMsg(MSG_COMPONENTPAGEUC + nCompoName) - 'verifico presenza immagine - If sCompoImage.Length > 0 Then - 'se la lunghezza del testo è maggiore di 15 lo taglio - If sCompoName.Length > 15 Then - sCompoName = sCompoName.Substring(0, 15) - End If - GetLabel(index).Text = sCompoName - 'Se ci sono sia testo che immagine imposto un margine di 10 - CustomThickness.Right = 10 - GetImage(index).Margin = CustomThickness - Else - 'se l'immagine non c'è e il testo è maggiore di 20 lo taglio - If sCompoName.Length > 20 Then - sCompoName = sCompoName.Substring(0, 20) - End If - GetLabel(index).Text = sCompoName - End If - Else - 'Se non c'è testo azzero la distanza tra testo e immagine - CustomThickness.Right = 0 - GetImage(index).Margin = CustomThickness - End If - - Next + ' Leggo messaggi da file ini + LabelCompo9.Text = EgtMsg(MSG_COMPONENTPAGEUC + 9) End Sub Private Sub UserControl_Loaded(sender As Object, e As RoutedEventArgs) + m_bIsFirstPage = True + LoadPage() CurrentBtn = Nothing + Compo9.SetValue(Grid.ColumnProperty, 0) + Compo9.SetValue(Grid.ColumnSpanProperty, 2) + ImageCompo9.Visibility = Windows.Visibility.Hidden + LabelCompo9.Visibility = Windows.Visibility.Visible End Sub Private Function GetButton(ByVal nInd As Integer) As Button @@ -154,9 +108,65 @@ Public Class MainComponentPageUC End Select End Function - Private Sub Compo_Click(sender As Object, e As RoutedEventArgs) Handles Compo1.Click, Compo2.Click, Compo3.Click, Compo4.Click, Compo5.Click, Compo6.Click, Compo7.Click, Compo8.Click, Compo9.Click + Friend Function GetIndexFromButton(Button As Button) As Integer + Select Case Button.Name + Case "Compo1" + If m_bIsFirstPage Then + Return 1 + Else + Return 9 + End If + Case "Compo2" + If m_bIsFirstPage Then + Return 2 + Else + Return 10 + End If + Case "Compo3" + If m_bIsFirstPage Then + Return 3 + Else + Return 11 + End If + Case "Compo4" + If m_bIsFirstPage Then + Return 4 + Else + Return 12 + End If + Case "Compo5" + If m_bIsFirstPage Then + Return 5 + Else + Return 13 + End If + Case "Compo6" + If m_bIsFirstPage Then + Return 6 + Else + Return 14 + End If + Case "Compo7" + If m_bIsFirstPage Then + Return 7 + Else + Return 15 + End If + Case Else + If m_bIsFirstPage Then + Return 8 + Else + Return 16 + End If + End Select + End Function + + Private Sub Compo_Click(sender As Object, e As RoutedEventArgs) Handles Compo1.Click, Compo2.Click, Compo3.Click, Compo4.Click, Compo5.Click, Compo6.Click, Compo7.Click, Compo8.Click CurrentBtn = e.Source - Dim nCount As Integer = GetPrivateProfileInt(CurrentBtn.Name, "Count", 0, m_MainWindow.GetIniFile()) + Dim CompoName As String = "Compo" & GetIndexFromButton(CurrentBtn).ToString + m_sCurrCompoFam = CompoName + m_SecondaryComponentPage.m_sCurrCompo = String.Empty + Dim nCount As Integer = GetPrivateProfileInt(CompoName, "Count", 0, m_MainWindow.GetIniFile()) If nCount > 1 Then m_MainWindow.m_DrawPageUC.LeftButtonGrid.Children.Remove(Me) m_MainWindow.m_DrawPageUC.m_ActiveComponentPage = DrawPageUC.Pages.SecondaryComponent @@ -165,10 +175,11 @@ Public Class MainComponentPageUC Dim nCompoName As Integer Dim sCompo As String = String.Empty Dim sCompoImage As String = String.Empty - GetPrivateProfileCompo(CurrentBtn.Name, "Compo1", nCompoName, sCompo, sCompoImage, m_MainWindow.GetIniFile()) + GetPrivateProfileCompo(CompoName, "Compo1", nCompoName, sCompo, sCompoImage, m_MainWindow.GetIniFile()) m_MainWindow.m_DrawPageUC.LeftButtonGrid.Children.Remove(Me) m_MainWindow.m_DrawPageUC.VariablesCompoGrid.Visibility = Windows.Visibility.Visible + m_MainWindow.m_DrawPageUC.PartNumberGrd.Visibility = Windows.Visibility.Visible ' Carico componente m_MainWindow.m_DrawPageUC.SelectedComponent(sCompo) End If @@ -199,4 +210,118 @@ Public Class MainComponentPageUC End Function + Private Sub ClearButton(nCount As Integer) + Dim nEndIndex As Integer + If m_bIsFirstPage Then + nEndIndex = If(nCount < 8, nCount, 8) + Else + nEndIndex = If(nCount < 16, nCount - 8, 8) + End If + For index As Integer = 1 To nEndIndex + GetLabel(index).Text = String.Empty + GetImage(index).Source = Nothing + GetButton(index).Visibility = Windows.Visibility.Visible + Next + For index As Integer = nEndIndex + 1 To 8 + GetLabel(index).Text = String.Empty + GetImage(index).Source = Nothing + GetButton(index).Visibility = Windows.Visibility.Hidden + Next + End Sub + + Private Sub LoadPage() + Dim nDeltaSecondPage As Integer = 8 + ' Leggo numero di componenti presenti + Dim nCompoNumber As Integer = GetPrivateProfileInt("Compo", "Count", 0, m_MainWindow.GetIniFile()) + ' Calcolo indici a seconda della pagina in cui sono + If m_bIsFirstPage Then + ClearButton(nCompoNumber) + nDeltaSecondPage = 0 + Else + ClearButton(nCompoNumber) + nDeltaSecondPage = 8 + End If + + ' Creazione converter da String a ImageSource + Dim ImageConverter As New ImageSourceConverter + Dim ThicknessConverter As New ThicknessConverter + + 'Assegnazione immagine e testo ai Button + For index = 1 To 8 + Dim CustomThickness As Thickness = ThicknessConverter.ConvertFromString("0") + Dim nCompoName As Integer = GetPrivateProfileInt("Compo" & index + nDeltaSecondPage, "Name", 0, m_MainWindow.GetIniFile()) + Dim sCompoImage As String = "" + Dim sCompoImageSource As ImageSource + + 'verifico presenza immagine e la aggiungo + If GetPrivateProfileString("Compo" & index + nDeltaSecondPage, "Image", "", sCompoImage, m_MainWindow.GetIniFile()) <> 0 Then + Try + sCompoImageSource = ImageConverter.ConvertFromString(m_MainWindow.GetResourcesDir() & "\" & sCompoImage) + GetImage(index).Height = 65 + GetImage(index).Width = 65 + GetImage(index).Source = sCompoImageSource + Catch ex As Exception + EgtOutLog("Error loading image " & sCompoImage) + sCompoImage = String.Empty + GetImage(index).Height = 0 + GetImage(index).Width = 0 + CustomThickness.Right = 0 + GetImage(index).Margin = CustomThickness + End Try + Else + 'Se non c'è l'immagine azzero la distanza tra testo e immagine + CustomThickness.Right = 0 + GetImage(index).Margin = CustomThickness + End If + + 'verifico presenza testo + If nCompoName > 0 Then + Dim sCompoName As String = EgtMsg(MSG_COMPONENTPAGEUC + nCompoName) + 'verifico presenza immagine + If sCompoImage.Length > 0 Then + 'se la lunghezza del testo è maggiore di 15 lo taglio + If sCompoName.Length > 15 Then + sCompoName = sCompoName.Substring(0, 15) + End If + GetLabel(index).Text = sCompoName + 'Se ci sono sia testo che immagine imposto un margine di 10 + CustomThickness.Right = 10 + GetImage(index).Margin = CustomThickness + Else + 'se l'immagine non c'è e il testo è maggiore di 20 lo taglio + If sCompoName.Length > 20 Then + sCompoName = sCompoName.Substring(0, 20) + End If + GetLabel(index).Text = sCompoName + End If + Else + 'Se non c'è testo azzero la distanza tra testo e immagine + CustomThickness.Right = 0 + GetImage(index).Margin = CustomThickness + End If + + Next + + End Sub + + ' Gestione bottone altri componenti + Private Sub Compo9_Click(sender As Object, e As RoutedEventArgs) Handles Compo9.Click + If m_bIsFirstPage Then + m_bIsFirstPage = False + LoadPage() + Compo9.SetValue(Grid.ColumnProperty, 1) + Compo9.SetValue(Grid.ColumnSpanProperty, 1) + ImageCompo9.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("/Resources/NumericKeyboardArrow.png", UriKind.Relative)) + ImageCompo9.Visibility = Windows.Visibility.Visible + LabelCompo9.Visibility = Windows.Visibility.Hidden + Else + m_bIsFirstPage = True + LoadPage() + Compo9.SetValue(Grid.ColumnProperty, 0) + Compo9.SetValue(Grid.ColumnSpanProperty, 2) + ImageCompo9.Visibility = Windows.Visibility.Hidden + LabelCompo9.Visibility = Windows.Visibility.Visible + End If + End Sub + End Class diff --git a/ManualAxesMoveUC.xaml b/ManualAxesMoveUC.xaml index 1ee5bbf..5e6e7bc 100644 --- a/ManualAxesMoveUC.xaml +++ b/ManualAxesMoveUC.xaml @@ -13,7 +13,7 @@ - + @@ -57,19 +57,19 @@ - diff --git a/OmagCUTDictionary.xaml b/OmagCUTDictionary.xaml index ff65324..a5af85a 100644 --- a/OmagCUTDictionary.xaml +++ b/OmagCUTDictionary.xaml @@ -118,6 +118,11 @@ + + diff --git a/RawPartPageUC.xaml.vb b/RawPartPageUC.xaml.vb index dc10a27..9f087df 100644 --- a/RawPartPageUC.xaml.vb +++ b/RawPartPageUC.xaml.vb @@ -561,8 +561,10 @@ Public Class RawPartPageUC m_MainWindow.m_CNCommunication.m_CN.DGeneralFunctions_CycleStart() ' Creo MsgBox di attesa Dim MsgBoxStateInfo As New EgtMsgBox(m_MainWindow, EgtMsg(MSG_RAWPARTPAGEUC + 25), EgtMsg(MSG_RAWPARTPAGEUC + 26), True, EgtMsgBox.Icons.NULL) + Dim ProbingStateNameVar As String = String.Empty + GetPrivateProfileString(S_MACH_PROBING, K_PROBINGSTATEVAR, "", ProbingStateNameVar, m_MainWindow.GetMachIniFile()) m_MainWindow.m_CNCommunication.m_CN.n_DReadELS_handle = 0 - m_MainWindow.m_CNCommunication.m_CN.ReadEls_Add_Parameter("L108", 1) + m_MainWindow.m_CNCommunication.m_CN.ReadEls_Add_Parameter(ProbingStateNameVar, 1) ' Definisco flag tastatura Dim bProbingOk As Boolean = False For I = 0 To 120 @@ -591,8 +593,10 @@ Public Class RawPartPageUC Next If bProbingOk Then ' Leggo spessore misurato + Dim RawThicknessNameVar As String = String.Empty + GetPrivateProfileString(S_MACH_PROBING, K_PROBINGSTATEVAR, "", RawThicknessNameVar, m_MainWindow.GetMachIniFile()) m_MainWindow.m_CNCommunication.m_CN.n_DReadELS_handle = 0 - m_MainWindow.m_CNCommunication.m_CN.ReadEls_Add_Parameter("E80004", 1) + m_MainWindow.m_CNCommunication.m_CN.ReadEls_Add_Parameter(RawThicknessNameVar, 1) Dim RawThickness As Double = 0 For I = 0 To 20 If m_MainWindow.m_CNCommunication.m_CN.n_DReadELS_handle = 1 Then diff --git a/Resources/DownArrow.png b/Resources/DownArrow.png index 05bdcd85345ef44a1909034b9a78a30594de27eb..c3363d5f65be00e0ec1b48af54518b301401bafe 100644 GIT binary patch delta 1270 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 delta 1875 zcmV-Z2dwy<4&)9tiBL{Q4GJ0x0000DNk~Le0001o0001o2nGNE06gbP3IG5A32;bR za{vGr5&!@f5&>tQ(o&HjD1Y%uL_t(|+U%XNZ`(!`htEkm8E7382@13Ys7wVqRPK~5 zQkMo<5(DjQc`qRQFR=9w#5NFgl{{v$x){h(D?ou}vooaVRI^(V4|OsGK?=0JCqK&P zGeye^i-vdK4*6z%_N_PfT|2{K>bZQXh?4P<_5?w@#x_)Gr`NQ4s(kg$) zD};Gs7$oT847cpku*+P*+vT-YyDZ@xVY`C>(N>qZsG8P2Dm%R39OGR=fM}iL5EA%Q zog~S5eO2Fsa|GfP%YPcwJoWAJSORVxVP8KZVC)tgcFDfChjUcF(&*+mg*d~eU3xai zM>!vDoZ}9Xqx5i&>bgZ&a|<7ePE~*P!14BANRqkjGUzz`ssW2z9GBY)zd1TcUj_e2$70LSQ5 z_?|gAxdj-MvLkIfU>s@k2^g`%p_PeyHFcrtb1ZdAEfH$q$gZ-sz2SsB12~3ScdC<=;RHA`*N~y4<+=tT298Yb^uCmaOW+~ECC^0CD^wk;srvAIa)=W}=yd5)}WTrFWZkz>|1k4c=D#F3W1dj4BK z1~@{PLweU8Ql^BVZcca5pXVZdh2#i0-fcCe8B#QlxPPlq%uVrcO6j}-9PjRslHEWh z(_jLJXioq{s>f=1`^71wZ+0Ve*9gHmTrl>>RVfyVmMOl+Mppg~JLqlTQ~R03fg>s? zLV=@E#21Myfz;*?{LYG$pY@5egi)ob{((wXr_NDS8UT;GAO%Ftr$=2nCMB z3#NeKw|_gj!$MDnj7bh0GZewW@$lLG)Lg%@m*W;vQFI7)L~!W6HICQ+dMSSnyb5HX z=OR+V9G`QHK)CkirSZTJr&uGr@xn10QfB{t?d})1=n>kt*QF5PNM0WT25=Or0~o+@ zMsH@W9GSqca{$Mb`sstudX%apq$7QM__MqD;(u3S2^^Wed438G^F6U-Sjlww-uv$6 zEkX$#Cro9{#dg)}!! z@}S|Y8ESJ(?+bAJ&w%{tB%t%>J#k5Y?Qipx={!J!?7R5N;r^2A zZmVQTaLB3mh1e!B2LXrPw8aIaUDBbmYGlnss9>HBne%wi8qZn5IWqScc!_D7@B)Xc zO=o>s%UlE;L-*);6~-zd1`b#5jDN6JiIod*1mGTWK4RePS|`lFG0r_2);*R9^~H5L z#4q(K-T7m-c1JFn-PBz-?e-(tPsni&QO8M61(dGd4jaV|hn_WEaCX(nKNwd0;pK&0 z&AP7ZvTgT2A@q^Mp@2NGKqTg5O5km~{kz@2Px#}_IsEFyg`ul6$WVc1Vt@IfnvCw6 z)02vqc>XMKWPr%?gTg{1LY!*Hcu@WH4@Tzlh=khzLQX*NvsP@Q`;nf0}X-6o@G0*U^GMdUY7`M zDe7nvy2O748dv2Ygb+dqA%qY@2qAHeuw}7 diff --git a/Resources/LeftArrow.png b/Resources/LeftArrow.png index 37d36874c6e26f50c6a3c684c73c3132f145f1c1..debed55399771ac508fc64bc988038908436b6ef 100644 GIT binary patch delta 718 zcmV;<0x|u;3+DwPiBL{Q4GJ0x0000DNk~Le0000%0000%2nGNE0FL*`MUgfqe*%d~ zL_t(|+T>g9ZNfkdJyjhbBcvOo8>Aa#1iAs;AWVQd0o@?oAngS02CzZcAia}pHHv_H z2@!{FOBVbHNPe-OpYOxD`?Ab?<&4|Td++_n``UYM4S<#Rjsg$g8*6~%1VDMBJQ$Ep zJ0KyrE%01LB{Kx1&;Y=e0-9<8e~^~4(;9fN~UT2+1MJQLG^(H$@hU<$>I?EJk=hwJb(RPPHtqi3iNeVir3wl2a{< z5wW9M79-=aYFW&^zFeSVf82%5S#1uh#2cW_4_Zah6v9K-6I2XKrB!_}B}mmuaTsJ1 zAxTmD19LS)Y%nsx56FmYf*+7M!UR9Gk+x}qA96q`n&1aywb=weAhoZaACTHN!4F8= zG{FzZ9)k&fKo(+6@I$O^n&1aybH)TeAd9Y3_<@h}iQCaaQa;8He|*HhqY+*lmmn#B ziXZp}%ziMoXY@ZJ2^Brm$z)o)|8vf((Q{%!a1KA#$A`PmWsYbN&>gJUlD%jUIDl(+ zs1^Ys<;|Bb@9%Dbi(DFP?yhwqwMCw?e1cNUsatTX+-e%UE-6LU2z(W2=M-NmAGb}u z4ciYiLZ+P?coT>3Bt^3_%$+eSDEOOh>Hi5Z00a!t?&O3bIRF3v07*qoM6N<$f{F4m ATL1t6 delta 1453 zcmV;e1ycIw1;Gn8iBL{Q4GJ0x0000DNk~Le0001o0001o2nGNE06gbP3IG5A32;bR za{vGr5&!@f5&>tQ(o&HjCw~P_NklA0tbwDsU`Vxie#e*CfHIE_6yVrBwu;Z_eb7tZc|fMI{QhkasMP%jf+6b1^veTB zdDW0CW0dlH035|&^nVo%C~z3_8PZO=z=86*immqpM;ui{JjMm@1aRcR=!JHIfTM71 z?eaDNN4{!YyZWD-0Eb~PGR3iV2^{vuRt?=eU7nu!{TIJY+}md+jaCPrp%RZTJs8rO zT=?*8CR>0{CZM5fVA|SAxN3}*PME-OUi24D2c?xL7!qOF?R19kK;L->oYzr9;b4|-%dU)9tVzitA@nm8mq@8*EbZjLa2aZA!j{`?x)sPG#QyN<*U}3~_5RX$is(c3VIB*n-cpNwitH#(7 zkK;K?d7^)mDoJ>vs!NYc}z!3nE zmY{LP_wXOa;MnpX8n=-ig@r??>7FC!KeQGXuY>0h}VIm5)k5b;Mh6du74DcL%eRqbL9L-=7`s+93|~#;fU9P zqXH0V2^v>?5C35djxGN|ypHE6^&iCRRF2a2Lc9(fl_FlJtyH!b;&m!VX?r1F2aZZW zh}VH*=XkqPI8L(hy6J}w6R%S_s@luK5w8PB1t8Z-<83cB|Itq5_mtZ{5wGJpO8p1% zI)9a;w7tk^J7c^BjxtS^{6|0Bo(eb&RS(UlKVF1ZrPcQO;r5z%j!*U%d{KdT7S$z+n)OrQrH#*t$_%$aV7Jb0U*x%SedWUncy5p4 zZ9)haojRQQy(H~L<2kqUEg+)zGgOZKt4H0{>x}{eIO+o;pSq4M13_De6I)EUA5JCtcgb+dqA%vQ)-vSH(5~vf@j8=#|00000NkvXX Hu0mjf$m6jk diff --git a/Resources/RightArrow.png b/Resources/RightArrow.png index 16ad61bbba3777cc170d3e41e0a3413961b18ff5..3e4023316e272caaef0b43b776b83609d216ede6 100644 GIT binary patch delta 1569 zcmV++2HyF!3$+X(iBL{Q4GJ0x0000DNk~Le0001y0001z2nGNE07XnFjgdAef7eMw zK~#9!?45ye+CUUUZ;}SwK~w@Is07@B+ySm2as{LV+yU+YcYr&<9pDZeF>{J97%)it z@k#&f%uSd$#_?(A{w{yN6aoM}@zeS5Up4EdS+7t5biuq?@6FmqA^~s~Ce2zz;=Cto z$<}~VD4JC_YqLk3O>!FT){LzJe<^OF-dXJtXB$tVGWoZ&csc8 zWLu+;{OX+f0iCmsr_4E|xJkZ$&X)SoIkQNVLprBRS(+yAGi8g%t#g(K%GE-2;j#TA zMR~-QufoTNg-WcG_Xh(nSMwvbd=|fMsj;@${^6fI>jSp@n)Z8^{CsTxe*jS@?&>=Q z?lL+3&_@F$QJsO1-zLHx9KjE^;3(djbsJw-*nUXV70=Cjh_4sMf*ul$yu7}|@SQpEs$Ji+Ax< zD$qycC(({PtAso%EtA^*e`z?KQ3BuWhPr&%*mn8%`)z3iwiN##x7hx1kf@0NHtq6n zH1xQ1pkFfn94}HWCB>G6AXBdJ+ zA7T4J9{PwONc53JA29@pK9cAoY(M%)qK_DYL?2~WCV^9Z#1JIWiM)NKvs&z!*`zRC@-9H9*Qwg$K2b7tq& zZ4C=;1u}+3TSI-jV~{Z{+8T@oIf6wCf_oD=(?J$(4aTJ%!J-Ah{TdyiGO*rt;LfqG zbdcJ5mw}k8D_FEOh`Bm~h4m)h;RqJio0zLJJFm9hf5cp!L2bQ>xjKV|^+pFdv-4`} zT?OJDu5^&PP!czOAawtXHb`%A`tIz1&e2l5p#6}i?#+a zS7&x!U2@7m%+(bv+8XE}N2r6otzj`j1Twbs>b8ajDM7|MNZr;b12I=uuxM-Wn1l>a zMLkhpf8pn-+Zx0>G84J2rdSy03X8S|G1p8jvPh2uvUa3<_e+yt##-Y=qKh1 zp?VRj3dB3W9-)>O5Q>;9IH_@}F9tQ(o&HjD1SjoL_t(|+U%XnaT7rhhDQ_uI0Kdp>@x?}34j!Vr3~JLY7tkdYLB5dt-;4lD$EWyh{+S{<*uc5J^HjU9^>KTsQ)>g{+^0Ofj4{_X8Exo5n zy;b-~n*`n3BOF882__KS#j!fJ7ef})A|SF&uGqktBQJY>g?s&1+zmQh!r5EgVB1dg{kDy!*Qq(0*B|cebs|Ue^y1E52aa}txU$!QqrKeN>(m_G>W^t~V6PK7x}}$8 zaA2}@op%HYTzCvu#oZN1?fQtFH# zn&UVan)di49o1k$ubhLSc@)#a5*VbFtv#;Mwhq!B2afuvA!lPumFkR{#cSmC>5xUh z9)BltJagOnU=<9PaHO*^wCwSj`T;o_r zQ}(#~nge^hyIyDLKa{CO+$g*s_P7-|!gi;(Os1R-E)(&+Cn(tChTz!MIE_xAV2>NC zIU4#9s~u3*2htPvxZ%iAr!tLsgh0H8yMGE$u*aRkv8$(J9(O@`6R^jDqXrZ$O*A^D zA&Whv)pB8v14nzgvB!a`OfKzl;AmE7%(x7|LE8!( zjrA~;GeO^gb+dqA%qY@C147Y0ACffi2002ovPDHLkV1hWBs_p;) diff --git a/Resources/UpArrow.png b/Resources/UpArrow.png index dd8238262489694c94a5567a8af8377f53233458..a296f360ad51c5db66d18d91a6ac49fa5767278b 100644 GIT binary patch delta 1261 zcmViBL{Q4GJ0x0000DNk~Le0001y0001z2nGNE07XnFjgdAeMdL|C zK~#9!?46IT+At7@txmuQ9)S@u0wZJux4XP+=DU2cH}@E_mVJb1qB-G{g`{L~q*;gJU9qyZKGC=xWXLMloAV2In+6CIU>& zvsHx?F04h@d2mbwsDG#ZlhLBa5@R{2&qRRH9Xct0R%~`_^qzWXS9F7=SD0QHb!#IZ z2k%5UEW4UT1DX%ffSmQjanP(+xwYPY;QT21TL z3mdl{x}6A!7j$p9P%RqF!FXZ2p9rwrtnBIcf@<`Xx|;~FoI32eDv5hagYmjdy<8aW zW?S$55$kHT>3@j;>lD4FpS!EkQyN`kTPC5LSeV7FTW3?vx~J64M1XbKx_9et@B0cF zw%SC1ceWdU?>4+{eRG;m1X%0oYMN#lHo@||O%lUB^Q@iv_U^qO=&R9FQmc5ar}udF z>UryAFf5itOn$7-+9&X?^3_^3C9>z~o&8wByUSO~!hc#m$WUbRYs|qQU-{LP_WCSR zhZ>QNe66U>Qu}#xI(1V+Be74_jsAEUT{Ianv^#Qt1`#NE;ZVYnIAMdemket zs_jzfZ)aJ2$*|@!G?nSlP{i&fWQN-K$KnvZr!6f@ol?>b0CtQ(o&HjC{7+pL_t(|+U%XZb=xo$MggA;pb?Y}tU8UnKq60IWdo~D zA*DziZ4hSyQ(hoU;o2HOBXEQO5uB64mPO)+0N%al@Tf^-{#?8de1vJGlK}-Kf70^t z+vBC#CY*^Q7o38BVth9rPiFgNCE<)HrIF%sYCi7G_P-FF*}gt}`LIO}xneBMhpiZ| zMM-0}&qk6CIpjz&aZ)VL_~!>FNQ)c-CY>%urak|wjhPK{)GLO)xNDEEXk8UKAV*y> zVyneGz}Iz7kOn!*7h_>Qew>(ee-35qqNYQRGR3fy&fADTV(+TR9y!XIblPf>qM21~ zPefNJ#!{W`UBsfgo`|kUiixWhixGF@pepK#TvQ^4jgP01#js4(@!8CV%8`c{_Cl;P z+_hE}-V@OUOA)en5p%LyY)?cNDn_i{MJ$T!iRc2wh~2x0MR7e5U62$he|r}(W2Ts% zh%Q8orHbFX_@x^eyvN zin|wn{?rK)`)(-Pbs{=bF;es{?8NZ;tv*Cf`yyJ7guRQcxe%)!`!#n}Bz6_cswbi| z5+g;%{0h_x0ArOiYQh=!xi&rAXDgScU8@l)B%=$dRyj zaUEj>x|mrfsCc9GMDz$!RF&Pi&y|Xiqt;n}tvwN)@B~)hFR1MpHKU5^IEoxK=dpx& zm5z9Fs-DS9=!xhECqzUKK*IUZjFe~kweA31(T%)+Z$U!62i61({M+ReRU#I_15hr4(otH<-C zQ|udp-#Fj)BEDD0f3>e6*#(!QuXSg}NP`9^1+fuuWpC*NMoJS)ju6pedlxe)FM16m z$;J+*0F}GfV7%zLlfKcim-dS2kdxH_6=WApjsVfZAG`76Q-FC)R5^Zo9^is&JeYZ^ zNEsxDv#%S=eyO;}7Cu#X7hR43(Xt>~Mj2F1DmiwZJ4&>qe?4c-kY3UtIf$0}BgLn3 z5G|EQimx0*OU04mB?r+`ccl1M4x**vNC_c_Z?w$0_E96H^?Bm$D@Qx>sHiIJ9Nb~3U@3obLly!W0f6~0R