From 84690ddf32b3c770f4dedb12abaa08829a1d071e Mon Sep 17 00:00:00 2001 From: NicolaP Date: Wed, 29 Jun 2022 15:08:28 +0200 Subject: [PATCH 1/8] Inizio gestione arrotondamento FiloTop --- Constants/ConstGen.vb | 3 +- Constants/ConstIni.vb | 1 + DrawImport/DrawPageUC.xaml.vb | 42 +++++++------ DrawImport/FiloTopUC.xaml | 8 ++- DrawImport/FiloTopUC.xaml.vb | 115 +++++++++++++++++++++++++++++++++- 5 files changed, 146 insertions(+), 23 deletions(-) diff --git a/Constants/ConstGen.vb b/Constants/ConstGen.vb index 48b33e9..b08da3d 100644 --- a/Constants/ConstGen.vb +++ b/Constants/ConstGen.vb @@ -214,7 +214,8 @@ Module ConstGen Public Const INFO_DEPTH As String = "Depth" Public Const INFO_WIDTH As String = "Width" Public Const INFO_DEPTH2 As String = "Depth2" - Public CONST INFO_AGG2 As String = "Agg2" + Public Const INFO_AGG2 As String = "Agg2" + Public Const INFO_ROUNDOFF As String = "RoundOff" ' Info in entità da tagliare per taglio ristretto Public Const INFO_STRICT As String = "Strict" ' Info in entità da tagliare per angolo di lato e tallone diff --git a/Constants/ConstIni.vb b/Constants/ConstIni.vb index 59e27a1..ae935ea 100644 --- a/Constants/ConstIni.vb +++ b/Constants/ConstIni.vb @@ -142,6 +142,7 @@ Module ConstIni Public Const K_UNDERDRILLDEPTH As String = "UnderDrillDepth" Public Const K_FILOTOPOFFSET As String = "FiloTopOffset" Public Const K_FILOTOPDEPTH As String = "FiloTopDepth" + Public Const K_ROUNDOFF As String = "RoundOff" Public Const S_NEST As String = "Nest" Public Const K_DIRECT As String = "Direct" diff --git a/DrawImport/DrawPageUC.xaml.vb b/DrawImport/DrawPageUC.xaml.vb index 712beab..ab93fc1 100644 --- a/DrawImport/DrawPageUC.xaml.vb +++ b/DrawImport/DrawPageUC.xaml.vb @@ -41,6 +41,8 @@ Public Class DrawPageUC Friend m_bDrawOk As Boolean = False Private m_bFirst As Boolean = True + Private m_SelListHole As New List(Of Integer) + ' questa variabile serve per risalire al nome della componente che ospita i componenti interni att Friend m_sMainCompo As String = String.Empty @@ -428,6 +430,7 @@ Public Class DrawPageUC End Sub Private Sub OnMouseDownSceneFiloTop(e As System.Windows.Forms.MouseEventArgs) + m_SelListHole.Clear() ' Verifico se selezionato indicativo di pezzo EgtSetObjFilterForSelWin(False, False, True, False, False) Dim nSel As Integer @@ -462,21 +465,22 @@ Public Class DrawPageUC EgtDeselectObj(nId) EgtDeselectObj(nLayId) Dim sLayName As String = "" - If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo( nLayId, INFO_FILOTOP) Then - EgtRemoveInfo( nLayId, INFO_FILOTOP) - EgtRemoveInfo( nLayId, INFO_OFFSET) - EgtRemoveInfo( nLayId, INFO_DEPTH) - EgtResetColor( nLayId) + If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) Then + EgtRemoveInfo(nLayId, INFO_FILOTOP) + EgtRemoveInfo(nLayId, INFO_OFFSET) + EgtRemoveInfo(nLayId, INFO_DEPTH) + EgtResetColor(nLayId) End If Else Dim sLayName As String = "" - If EgtGetName( nLayId, sLayName) AndAlso sLayName = NAME_INLOOP Then - EgtSelectObj( nId) - EgtSelectObj( nLayId) - EgtSetInfo( nLayId, INFO_FILOTOP, 1) - EgtSetInfo( nLayId, INFO_OFFSET, m_FiloTopUC.FiloTopOffset) - EgtSetInfo( nLayId, INFO_DEPTH, m_FiloTopUC.FiloTopDepth) - EgtSetColor( nLayId, New Color3d(255, 255, 255)) + If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP Then + EgtSelectObj(nId) + EgtSelectObj(nLayId) + EgtSetInfo(nLayId, INFO_FILOTOP, 1) + EgtSetInfo(nLayId, INFO_OFFSET, m_FiloTopUC.FiloTopOffset) + EgtSetInfo(nLayId, INFO_DEPTH, m_FiloTopUC.FiloTopDepth) + EgtSetColor(nLayId, New Color3d(255, 255, 255)) + m_SelListHole.Add(nLayId) End If End If EgtDraw() @@ -484,6 +488,7 @@ Public Class DrawPageUC End If nId = EgtGetNextObjInSelWin() End While + m_FiloTopUC.CreateFiloTopPreView(m_SelListHole) End Sub Private Sub OnShowDistanceVector(sender As Object, vtDist As Vector3d) Handles DrawScene.OnShowDistanceVector @@ -1375,20 +1380,21 @@ Public Class DrawPageUC m_PrevSideAnglePage = Pages.AlzFront LeftButtonGrd.Children.Remove(m_CompoDimension.m_AlzFrontPage) End If - VariablesGrd.Children.Add( m_FiloTopUC) + VariablesGrd.Children.Add(m_FiloTopUC) SideAngleBtn.IsEnabled = False EngraveBtn.IsEnabled = False DripCutBtn.IsEnabled = False MessageGrid.Visibility = Windows.Visibility.Hidden BackBtn.Visibility = Windows.Visibility.Hidden - MessageTxBx.Text = EgtMsg( MSG_DRAWPAGEUC + 6) ' Selezionare un contorno + MessageTxBx.Text = EgtMsg(MSG_DRAWPAGEUC + 6) ' Selezionare un contorno MessageBrd.Background = Application.Current.FindResource("OmagCut_Green") ' In ogni caso, nascondo layer delle misure - Dim PartId As Integer = EgtGetFirstInGroup( GDB_ID.ROOT) - EgtSetStatus(EgtGetFirstNameInGroup( PartId, COMPO_LAYER_AUX), GDB_ST.OFF) - EgtSetStatus(EgtGetFirstNameInGroup( PartId, COMPO_LAYER_QUOTATURE), GDB_ST.OFF) - EgtSetStatus(EgtGetFirstNameInGroup( PartId, COMPO_LAYER_ETICHETTE), GDB_ST.OFF) + Dim PartId As Integer = EgtGetFirstInGroup(GDB_ID.ROOT) + EgtSetStatus(EgtGetFirstNameInGroup(PartId, COMPO_LAYER_AUX), GDB_ST.OFF) + EgtSetStatus(EgtGetFirstNameInGroup(PartId, COMPO_LAYER_QUOTATURE), GDB_ST.OFF) + EgtSetStatus(EgtGetFirstNameInGroup(PartId, COMPO_LAYER_ETICHETTE), GDB_ST.OFF) Else + m_SelListHole.Clear() VariablesGrd.Children.Remove( m_FiloTopUC) If m_PrevSideAnglePage = Pages.CompoDimension Then VariablesGrd.Children.Add( m_CompoDimension) diff --git a/DrawImport/FiloTopUC.xaml b/DrawImport/FiloTopUC.xaml index 75d6f89..cb94ae1 100644 --- a/DrawImport/FiloTopUC.xaml +++ b/DrawImport/FiloTopUC.xaml @@ -41,7 +41,11 @@ FontSize="{DynamicResource FontSize_LowerCaseCharacter}"/> - - + + + diff --git a/DrawImport/FiloTopUC.xaml.vb b/DrawImport/FiloTopUC.xaml.vb index 58c2cba..34c00be 100644 --- a/DrawImport/FiloTopUC.xaml.vb +++ b/DrawImport/FiloTopUC.xaml.vb @@ -7,6 +7,8 @@ Public Class FiloTopUC ' Riferimento alla pagina che ha aperto SideAngleUC Private m_CallingPage As MainWindow.Pages + Private m_SelList As New List(Of Integer) + ' Offset della sfilettatura Private m_dFiloTopOffset As Double = 0 Friend ReadOnly Property FiloTopOffset As Double @@ -23,6 +25,13 @@ Public Class FiloTopUC End Get End Property + ' esegue l'arrotindamento sugli angoli del percorso utensile + Private m_bCornerradius As Boolean = False + Friend ReadOnly Property bCornerRadius As Boolean + Get + Return m_bCornerradius + End Get + End Property Private Sub FiloTopUC_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded ' Imposto riferimenti ad altre pagine @@ -43,14 +52,18 @@ Public Class FiloTopUC End If ' Gestisco visualizzazione dei parametri - Parameter2TxBl.Visibility = Windows.Visibility.Visible + ParameterTxBl.Visibility = Windows.Visibility.Visible Parameter2TxBx.Visibility = Windows.Visibility.Visible + Parameter3TxBl.Visibility = Windows.Visibility.Visible ' Aggiorno valori m_dFiloTopOffset = GetPrivateProfileDouble( S_SIDES, K_FILOTOPOFFSET, 5, m_MainWindow.GetIniFile()) ParameterTxBx.Text = LenToString( m_dFiloTopOffset, 3) m_dFiloTopDepth = GetPrivateProfileDouble( S_SIDES, K_FILOTOPDEPTH, 5, m_MainWindow.GetIniFile()) - Parameter2TxBx.Text = LenToString( m_dFiloTopDepth, 3) + Parameter2TxBx.Text = LenToString(m_dFiloTopDepth, 3) + m_bCornerradius = GetPrivateProfileInt(S_SIDES, K_ROUNDOFF, 0, m_MainWindow.GetIniFile()) <> 0 + Parameter3ChBx.IsChecked = m_bCornerradius + m_SelList.Clear() End Sub Private Sub FiloTopUC_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded @@ -74,6 +87,8 @@ Public Class FiloTopUC End While nPartId = EgtGetNextPart(nPartId) End While + ' aggiorno la preview + CreateFiloTopPreView(m_SelList) End Sub Private Sub Parameter2TxBx_EgtClosed(sender As Object, e As EventArgs) Handles Parameter2TxBx.EgtClosed @@ -95,4 +110,100 @@ Public Class FiloTopUC End While End Sub + Private Sub Parameter3ChBx_Checked() Handles Parameter3ChBx.Checked, Parameter3ChBx.Unchecked + ' Assegno il valore + m_bCornerradius = Parameter3ChBx.IsChecked + WritePrivateProfileString(S_SIDES, K_ROUNDOFF, If(m_bCornerradius, "1", "0"), m_MainWindow.GetIniFile()) + ' Aggiorno le info del profilo + Dim nPartId As Integer = EgtGetFirstPart() + While nPartId <> GDB_ID.NULL + Dim nLayId As Integer = EgtGetFirstLayer(nPartId) + While nLayId <> GDB_ID.NULL + Dim sLayName As String = "" + If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) Then + EgtSetInfo(nLayId, INFO_ROUNDOFF, If(m_bCornerradius, "1", "0")) + End If + nLayId = EgtGetNextLayer(nLayId) + End While + nPartId = EgtGetNextPart(nPartId) + End While + ' aggiorno la preview + CreateFiloTopPreView(m_SelList) + End Sub + + Public Sub CreateFiloTopPreView(SelList As List(Of Integer)) + m_SelList = SelList + If m_SelList.Count < 1 Then Return + Dim nPartId As Integer = EgtGetFirstPart() + While nPartId <> GDB_ID.NULL + Dim nLayId As Integer = EgtGetFirstLayer(nPartId) + While nLayId <> GDB_ID.NULL + Dim sLayName As String = "" + If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) Then + ' ---------------------- Inizio GESTIONE PREVIEW percorso ------------------------------- + Dim bIsSelected As Boolean = m_SelList.Find(Function(value As Integer) + Return value = nLayId + End Function) + If Not bIsSelected Then + Return + End If + + Dim nLayFiloTop As Integer = GDB_ID.NULL + Dim nInLoopRef As Integer = GDB_ID.NULL + nLayFiloTop = EgtGetFirstNameInGroup(nPartId, "FiloTop") + EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef) + ' cerco il Layer associato all'InLoop corrente + While (nLayFiloTop <> GDB_ID.NULL AndAlso nInLoopRef <> nLayId) + nLayFiloTop = EgtGetNextName(nLayFiloTop, "FiloTop") + EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef) + End While + + ' se non esiste il Layer + If nLayFiloTop = GDB_ID.NULL Then + ' lo creo + nLayFiloTop = EgtCreateGroup(nPartId) + EgtSetName(nLayFiloTop, "FiloTop") + EgtSetInfo(nLayFiloTop, "InLoopRef", nLayId) + End If + + Dim nIdCompoCurve As Integer = GDB_ID.NULL + ' cancello un eventuale curva composita creata in precedenza + nIdCompoCurve = EgtGetFirstNameInGroup(nLayFiloTop, "OffsetPreView") + If nIdCompoCurve <> GDB_ID.NULL Then + EgtErase(nIdCompoCurve) + End If + + Dim nCompoCurve As New List(Of Integer) + ' costruisco il percorso chiuso dati i lati di contorno + Dim nLine As Integer = EgtGetFirstInGroup(nLayId) + While nLine <> GDB_ID.NULL + nCompoCurve.Add(nLine) + nLine = EgtGetNext(nLine) + End While + Dim PtNearStart As Point3d + Dim sInfoRoundOff As String = String.Empty + EgtGetInfo(nLayId, INFO_ROUNDOFF, sInfoRoundOff) + ' se non trovo nessuna info allora leggo il valore attualmente attivo nella componente + If String.IsNullOrEmpty(sInfoRoundOff) Then + sInfoRoundOff = If(m_bCornerradius, "1", "0") + End If + nIdCompoCurve = EgtCreateCurveCompoByChain(nLayFiloTop, nCompoCurve.ToArray, PtNearStart, False) + EgtSetName(nIdCompoCurve, "OffsetPreView") + + ' leggo che tipo di offset applicare (Round, Extend) + If sInfoRoundOff <> "1" Then + EgtOffsetCurve(nIdCompoCurve, -m_dFiloTopOffset, OFF_TYPE.EXTEND) + Else + EgtOffsetCurve(nIdCompoCurve, -m_dFiloTopOffset, OFF_TYPE.FILLET) + End If + ' ---------------------- Fine GESTIONE PREVIEW percorso ------------------------------- + End If + nLayId = EgtGetNextLayer(nLayId) + End While + nPartId = EgtGetNextPart(nPartId) + End While + EgtDraw() + EgtSaveFile("c:\EgtData\OmagCUT\Temp\FiloTop.nge", NGE.BIN) + End Sub + End Class From 20fd722dee5fdf365e5ccd9c128a3eb835907e8a Mon Sep 17 00:00:00 2001 From: NicolaP Date: Thu, 30 Jun 2022 15:14:30 +0200 Subject: [PATCH 2/8] Migliorata gestione filotop associata --- DrawImport/CompoDimensionUC.xaml.vb | 38 +++++++ DrawImport/DrawPageUC.xaml.vb | 17 ++- DrawImport/FiloTopUC.xaml.vb | 155 +++++++++++++++++++--------- 3 files changed, 158 insertions(+), 52 deletions(-) diff --git a/DrawImport/CompoDimensionUC.xaml.vb b/DrawImport/CompoDimensionUC.xaml.vb index 95012b2..cbaf611 100644 --- a/DrawImport/CompoDimensionUC.xaml.vb +++ b/DrawImport/CompoDimensionUC.xaml.vb @@ -336,6 +336,7 @@ Public Class CompoDimensionUC Dim nCmpInfo As Integer = 0 If EgtGetInfo(nId, "ID", nCmpInfo) AndAlso nCmp = nCmpInfo Then EgtSetStatus(nId, GDB_ST.OFF) + UpdateInLoopReference(nCmp) Exit While End If nId = EgtGetNextName(nId, "HoleLabels") @@ -379,5 +380,42 @@ Public Class CompoDimensionUC EgtDraw() End Sub + Private Sub UpdateInLoopReference(nCmp As Integer) + ' aggiorno il layer "FiloTop" + Dim nIdInLoop As Integer = EgtGetFirstNameInGroup(EgtGetFirstGroupInGroup(GDB_ID.ROOT), "InLoop") + While nIdInLoop <> GDB_ID.NULL + Dim nCmpInfoIL As Integer = 0 + If EgtGetInfo(nIdInLoop, "ID", nCmpInfoIL) AndAlso nCmp = nCmpInfoIL Then + Dim nLayFiloTop As Integer = GDB_ID.NULL + EgtGetInfo(nIdInLoop, "FiloTopRef", nLayFiloTop) + If nLayFiloTop <> GDB_ID.NULL Then + Dim LocalList As New List(Of Integer) From {nIdInLoop} + m_DrawPage.m_FiloTopUC.CreateFiloTopPreView(LocalList) + EgtSetStatus(nLayFiloTop, GDB_ST.ON_) + Exit While + End If + End If + nIdInLoop = EgtGetNextName(nIdInLoop, "InLoop") + End While + End Sub + + ' riceve la info "ID" della componente + Public Sub SetStatusVisibilityInLoopReference(nCmp As Integer, Status As GDB_ST) + ' aggiorno il layer "FiloTop" + Dim nIdInLoop As Integer = EgtGetFirstNameInGroup(EgtGetFirstGroupInGroup(GDB_ID.ROOT), "InLoop") + While nIdInLoop <> GDB_ID.NULL + Dim nCmpInfoIL As Integer = 0 + If EgtGetInfo(nIdInLoop, "ID", nCmpInfoIL) AndAlso nCmp = nCmpInfoIL Then + Dim nLayFiloTop As Integer = GDB_ID.NULL + EgtGetInfo(nIdInLoop, "FiloTopRef", nLayFiloTop) + If nLayFiloTop <> GDB_ID.NULL Then + EgtSetStatus(nLayFiloTop, Status) + Exit While + End If + End If + nIdInLoop = EgtGetNextName(nIdInLoop, "InLoop") + End While + End Sub + #End Region ' METHODS for InternalCompo End Class diff --git a/DrawImport/DrawPageUC.xaml.vb b/DrawImport/DrawPageUC.xaml.vb index ab93fc1..b3bbf90 100644 --- a/DrawImport/DrawPageUC.xaml.vb +++ b/DrawImport/DrawPageUC.xaml.vb @@ -42,6 +42,7 @@ Public Class DrawPageUC Private m_bFirst As Boolean = True Private m_SelListHole As New List(Of Integer) + Private m_DeselectListHole As New List(Of Integer) ' questa variabile serve per risalire al nome della componente che ospita i componenti interni att Friend m_sMainCompo As String = String.Empty @@ -362,6 +363,8 @@ Public Class DrawPageUC Dim nCmpInfo As Integer = 0 If EgtGetInfo(nHLId, "ID", nCmpInfo) AndAlso nCmp = nCmpInfo Then EgtSetStatus(nHLId, GDB_ST.ON_) + ' nascondo eventuali FiloTop + m_CompoDimension.SetStatusVisibilityInLoopReference(nCmp, GDB_ST.OFF) Exit While End If nHLId = EgtGetNextName(nHLId, "HoleLabels") @@ -430,7 +433,6 @@ Public Class DrawPageUC End Sub Private Sub OnMouseDownSceneFiloTop(e As System.Windows.Forms.MouseEventArgs) - m_SelListHole.Clear() ' Verifico se selezionato indicativo di pezzo EgtSetObjFilterForSelWin(False, False, True, False, False) Dim nSel As Integer @@ -471,6 +473,8 @@ Public Class DrawPageUC EgtRemoveInfo(nLayId, INFO_DEPTH) EgtResetColor(nLayId) End If + m_DeselectListHole.Add(nLayId) + m_SelListHole.Remove(nLayId) Else Dim sLayName As String = "" If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP Then @@ -481,6 +485,7 @@ Public Class DrawPageUC EgtSetInfo(nLayId, INFO_DEPTH, m_FiloTopUC.FiloTopDepth) EgtSetColor(nLayId, New Color3d(255, 255, 255)) m_SelListHole.Add(nLayId) + m_DeselectListHole.Remove(nLayId) End If End If EgtDraw() @@ -489,6 +494,7 @@ Public Class DrawPageUC nId = EgtGetNextObjInSelWin() End While m_FiloTopUC.CreateFiloTopPreView(m_SelListHole) + m_FiloTopUC.EraseFiloTopPreview(m_DeselectListHole) End Sub Private Sub OnShowDistanceVector(sender As Object, vtDist As Vector3d) Handles DrawScene.OnShowDistanceVector @@ -1367,6 +1373,8 @@ Public Class DrawPageUC End Sub Private Sub FiloTopBtn_Click(sender As Object, e As RoutedEventArgs) Handles FiloTopBtn.Click + m_SelListHole.Clear() + m_DeselectListHole.Clear() m_SceneButtons.MeasureBtn.IsChecked = False If FiloTopBtn.IsChecked Then ' Imposto modalità @@ -1394,12 +1402,11 @@ Public Class DrawPageUC EgtSetStatus(EgtGetFirstNameInGroup(PartId, COMPO_LAYER_QUOTATURE), GDB_ST.OFF) EgtSetStatus(EgtGetFirstNameInGroup(PartId, COMPO_LAYER_ETICHETTE), GDB_ST.OFF) Else - m_SelListHole.Clear() - VariablesGrd.Children.Remove( m_FiloTopUC) + VariablesGrd.Children.Remove(m_FiloTopUC) If m_PrevSideAnglePage = Pages.CompoDimension Then - VariablesGrd.Children.Add( m_CompoDimension) + VariablesGrd.Children.Add(m_CompoDimension) ElseIf m_PrevSideAnglePage = Pages.InternalComponent Then - LeftButtonGrd.Children.Add( m_CompoDimension.m_InternalCompoPage) + LeftButtonGrd.Children.Add(m_CompoDimension.m_InternalCompoPage) End If SideAngleBtn.IsEnabled = m_bEnableSideAngle EngraveBtn.IsEnabled = True diff --git a/DrawImport/FiloTopUC.xaml.vb b/DrawImport/FiloTopUC.xaml.vb index 34c00be..efaf1e0 100644 --- a/DrawImport/FiloTopUC.xaml.vb +++ b/DrawImport/FiloTopUC.xaml.vb @@ -88,7 +88,7 @@ Public Class FiloTopUC nPartId = EgtGetNextPart(nPartId) End While ' aggiorno la preview - CreateFiloTopPreView(m_SelList) + CreateFiloTopPreView(m_SelList, False) End Sub Private Sub Parameter2TxBx_EgtClosed(sender As Object, e As EventArgs) Handles Parameter2TxBx.EgtClosed @@ -110,7 +110,7 @@ Public Class FiloTopUC End While End Sub - Private Sub Parameter3ChBx_Checked() Handles Parameter3ChBx.Checked, Parameter3ChBx.Unchecked + Private Sub Parameter3ChBx_Checked() Handles Parameter3ChBx.Click ' Assegno il valore m_bCornerradius = Parameter3ChBx.IsChecked WritePrivateProfileString(S_SIDES, K_ROUNDOFF, If(m_bCornerradius, "1", "0"), m_MainWindow.GetIniFile()) @@ -121,17 +121,17 @@ Public Class FiloTopUC While nLayId <> GDB_ID.NULL Dim sLayName As String = "" If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) Then - EgtSetInfo(nLayId, INFO_ROUNDOFF, If(m_bCornerradius, "1", "0")) + EgtSetInfo(nLayId, INFO_ROUNDOFF, If(m_bCornerradius, 1, 0)) End If nLayId = EgtGetNextLayer(nLayId) End While nPartId = EgtGetNextPart(nPartId) End While - ' aggiorno la preview - CreateFiloTopPreView(m_SelList) + ' aggiorno la preview (False = blocco la lettura dei dati della componente) + CreateFiloTopPreView(m_SelList, False) End Sub - Public Sub CreateFiloTopPreView(SelList As List(Of Integer)) + Public Sub CreateFiloTopPreView(SelList As List(Of Integer), Optional bReadInfo As Boolean = True) m_SelList = SelList If m_SelList.Count < 1 Then Return Dim nPartId As Integer = EgtGetFirstPart() @@ -139,15 +139,105 @@ Public Class FiloTopUC Dim nLayId As Integer = EgtGetFirstLayer(nPartId) While nLayId <> GDB_ID.NULL Dim sLayName As String = "" - If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) Then + ' verifico che lemento corrente appartenga all'elenco degli elementi selezionati + Dim bIsSelected As Boolean = m_SelList.Find(Function(value As Integer) + Return value = nLayId + End Function) + If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) AndAlso bIsSelected Then ' ---------------------- Inizio GESTIONE PREVIEW percorso ------------------------------- - Dim bIsSelected As Boolean = m_SelList.Find(Function(value As Integer) - Return value = nLayId - End Function) - If Not bIsSelected Then - Return + Dim nLayFiloTop As Integer = GDB_ID.NULL + Dim nInLoopRef As Integer = GDB_ID.NULL + nLayFiloTop = EgtGetFirstNameInGroup(nPartId, "FiloTop") + EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef) + ' verifico il Layer "FiloTop" sia associato all'InLoop corrente + While (nLayFiloTop <> GDB_ID.NULL AndAlso nInLoopRef <> nLayId) + nLayFiloTop = EgtGetNextName(nLayFiloTop, "FiloTop") + EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef) + End While + + ' se non esiste il Layer "FiloTop" + If nLayFiloTop = GDB_ID.NULL Then + ' lo creo + nLayFiloTop = EgtCreateGroup(nPartId) + EgtSetName(nLayFiloTop, "FiloTop") + EgtSetInfo(nLayFiloTop, "InLoopRef", nLayId) + EgtSetInfo(nLayId, "FiloTopRef", nLayFiloTop) End If + ' carico i dati del filo top selezionato + If bReadInfo Then + EgtGetInfo(nLayFiloTop, INFO_OFFSET, m_dFiloTopOffset) + ParameterTxBx.Text = LenToString(m_dFiloTopOffset, 3) + EgtGetInfo(nLayFiloTop, INFO_DEPTH, m_dFiloTopDepth) + Parameter2TxBx.Text = LenToString(m_dFiloTopDepth, 3) + Dim nVal As Integer = If(m_bCornerradius, 1, 0) + EgtGetInfo(nLayFiloTop, INFO_ROUNDOFF, nVal) + Parameter3ChBx.IsChecked = If(nVal = 1, True, False) + m_bCornerradius = Parameter3ChBx.IsChecked + End If + + ' procedo alla creazione della curva + Dim nIdCompoCurve As Integer = GDB_ID.NULL + ' cancello un eventuale curva composita creata in precedenza + nIdCompoCurve = EgtGetFirstNameInGroup(nLayFiloTop, "OffsetPreView") + If nIdCompoCurve <> GDB_ID.NULL Then + EgtErase(nIdCompoCurve) + End If + Dim nCompoCurve As New List(Of Integer) + ' costruisco il percorso chiuso dati i lati di contorno + Dim nLine As Integer = EgtGetFirstInGroup(nLayId) + While nLine <> GDB_ID.NULL + nCompoCurve.Add(nLine) + nLine = EgtGetNext(nLine) + End While + Dim PtNearStart As Point3d + Dim nInfoRoundOff As Integer = If(m_bCornerradius, 1, 0) + + nIdCompoCurve = EgtCreateCurveCompoByChain(nLayFiloTop, nCompoCurve.ToArray, PtNearStart, False) + EgtSetName(nIdCompoCurve, "OffsetPreView") + + ' salvo i dati nel layer FiloTop + EgtSetInfo(nLayFiloTop, INFO_OFFSET, m_dFiloTopOffset) + EgtSetInfo(nLayFiloTop, INFO_DEPTH, m_dFiloTopDepth) + EgtSetInfo(nLayFiloTop, INFO_ROUNDOFF, nInfoRoundOff) + + Dim bOk As Boolean = False + ' leggo che tipo di offset applicare (Round, Extend) + If nInfoRoundOff <> 1 Then + bOk = EgtOffsetCurve(nIdCompoCurve, -m_dFiloTopOffset, OFF_TYPE.EXTEND) + Else + bOk = EgtOffsetCurve(nIdCompoCurve, -m_dFiloTopOffset, OFF_TYPE.FILLET) + End If + + ' se la generazione della curva non va a buon fine + If Not bOk Then + EgtErase(nLayFiloTop) + EgtRemoveInfo(nLayId, "FiloTopRef") + EgtOutLog("Error in generation OffsetPreView in TopEgde ") + End If + ' ---------------------- Fine GESTIONE PREVIEW percorso ------------------------------- + End If + nLayId = EgtGetNextLayer(nLayId) + End While + nPartId = EgtGetNextPart(nPartId) + End While + EgtDraw() + End Sub + + ' riceve la lista dei LayerFiloTop che devono essere eliminati + Public Sub EraseFiloTopPreview(EraseList As List(Of Integer)) + Dim m_EraseList As List(Of Integer) = EraseList + If m_EraseList.Count < 1 Then Return + Dim nPartId As Integer = EgtGetFirstPart() + While nPartId <> GDB_ID.NULL + Dim nLayId As Integer = EgtGetFirstLayer(nPartId) + While nLayId <> GDB_ID.NULL + Dim sLayName As String = "" + Dim bIsSelected As Boolean = m_EraseList.Find(Function(value As Integer) + Return value = nLayId + End Function) + If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso bIsSelected Then + ' ---------------------- Inizio GESTIONE PREVIEW percorso ------------------------------- Dim nLayFiloTop As Integer = GDB_ID.NULL Dim nInLoopRef As Integer = GDB_ID.NULL nLayFiloTop = EgtGetFirstNameInGroup(nPartId, "FiloTop") @@ -160,41 +250,12 @@ Public Class FiloTopUC ' se non esiste il Layer If nLayFiloTop = GDB_ID.NULL Then - ' lo creo - nLayFiloTop = EgtCreateGroup(nPartId) - EgtSetName(nLayFiloTop, "FiloTop") - EgtSetInfo(nLayFiloTop, "InLoopRef", nLayId) - End If - - Dim nIdCompoCurve As Integer = GDB_ID.NULL - ' cancello un eventuale curva composita creata in precedenza - nIdCompoCurve = EgtGetFirstNameInGroup(nLayFiloTop, "OffsetPreView") - If nIdCompoCurve <> GDB_ID.NULL Then - EgtErase(nIdCompoCurve) - End If - - Dim nCompoCurve As New List(Of Integer) - ' costruisco il percorso chiuso dati i lati di contorno - Dim nLine As Integer = EgtGetFirstInGroup(nLayId) - While nLine <> GDB_ID.NULL - nCompoCurve.Add(nLine) - nLine = EgtGetNext(nLine) - End While - Dim PtNearStart As Point3d - Dim sInfoRoundOff As String = String.Empty - EgtGetInfo(nLayId, INFO_ROUNDOFF, sInfoRoundOff) - ' se non trovo nessuna info allora leggo il valore attualmente attivo nella componente - If String.IsNullOrEmpty(sInfoRoundOff) Then - sInfoRoundOff = If(m_bCornerradius, "1", "0") - End If - nIdCompoCurve = EgtCreateCurveCompoByChain(nLayFiloTop, nCompoCurve.ToArray, PtNearStart, False) - EgtSetName(nIdCompoCurve, "OffsetPreView") - - ' leggo che tipo di offset applicare (Round, Extend) - If sInfoRoundOff <> "1" Then - EgtOffsetCurve(nIdCompoCurve, -m_dFiloTopOffset, OFF_TYPE.EXTEND) + ' esco + Return Else - EgtOffsetCurve(nIdCompoCurve, -m_dFiloTopOffset, OFF_TYPE.FILLET) + ' lo elimino + EgtErase(nLayFiloTop) + EraseList.Remove(nLayId) End If ' ---------------------- Fine GESTIONE PREVIEW percorso ------------------------------- End If @@ -203,7 +264,7 @@ Public Class FiloTopUC nPartId = EgtGetNextPart(nPartId) End While EgtDraw() - EgtSaveFile("c:\EgtData\OmagCUT\Temp\FiloTop.nge", NGE.BIN) End Sub + End Class From 82426db72a7cdef00cbb45572ddd0b5af2c81f9b Mon Sep 17 00:00:00 2001 From: NicolaP Date: Thu, 30 Jun 2022 18:59:59 +0200 Subject: [PATCH 3/8] Correzione scrittura codice --- DrawImport/FiloTopUC.xaml.vb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DrawImport/FiloTopUC.xaml.vb b/DrawImport/FiloTopUC.xaml.vb index efaf1e0..bb4da9b 100644 --- a/DrawImport/FiloTopUC.xaml.vb +++ b/DrawImport/FiloTopUC.xaml.vb @@ -142,7 +142,7 @@ Public Class FiloTopUC ' verifico che lemento corrente appartenga all'elenco degli elementi selezionati Dim bIsSelected As Boolean = m_SelList.Find(Function(value As Integer) Return value = nLayId - End Function) + End Function) <> 0 If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) AndAlso bIsSelected Then ' ---------------------- Inizio GESTIONE PREVIEW percorso ------------------------------- Dim nLayFiloTop As Integer = GDB_ID.NULL @@ -235,7 +235,7 @@ Public Class FiloTopUC Dim sLayName As String = "" Dim bIsSelected As Boolean = m_EraseList.Find(Function(value As Integer) Return value = nLayId - End Function) + End Function) <> 0 If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso bIsSelected Then ' ---------------------- Inizio GESTIONE PREVIEW percorso ------------------------------- Dim nLayFiloTop As Integer = GDB_ID.NULL From 6d82b6efeefeb6b2d3e306090026d52b5534457a Mon Sep 17 00:00:00 2001 From: NicolaP Date: Mon, 4 Jul 2022 12:39:19 +0200 Subject: [PATCH 4/8] Definizione grezzo e aree rovinate tramite posizione Lama --- RawPhoto/RawPartPageUC.xaml.vb | 321 ++++++++++++++++++++++++++++++++- 1 file changed, 313 insertions(+), 8 deletions(-) diff --git a/RawPhoto/RawPartPageUC.xaml.vb b/RawPhoto/RawPartPageUC.xaml.vb index 37e88f4..ffc47f1 100644 --- a/RawPhoto/RawPartPageUC.xaml.vb +++ b/RawPhoto/RawPartPageUC.xaml.vb @@ -45,9 +45,9 @@ Public Class RawPartPageUC ' Layer per crocette temporanee Private m_nTempLay As Integer = GDB_ID.NULL ' Definizione lista modalità di definizione grezzo per ComboBox - Private m_RawModeList(2) As String - Private m_RawModeDamagedList(1) As String - Private m_RawModeListEx(3) As String + Private m_RawModeList(3) As String + Private m_RawModeDamagedList(2) As String + Private m_RawModeListEx(4) As String ' Variabile che indica la zona danneggiata selezionata Private m_nSelDmg As Integer ' Array per modalità per punti @@ -63,6 +63,8 @@ Public Class RawPartPageUC Private m_CurveXDamagedAreaList As New List(Of Integer) ' Flag che indica se è in corso la definizione tramite laser o se il grezzo è già chiuso Private m_bIsRawDefiningByLaser As Boolean = False + ' Flag che indica se è in corso la definizione tramite lama o se il grezzo è già chiuso + Private m_bIsRawDefiningBySaw As Boolean = False ' Flag di tastatura in corso Private m_bProbingOn As Boolean = False ' Flag inserimento punti laser da disegno @@ -99,6 +101,8 @@ Public Class RawPartPageUC FROM_PHOTO = 3 DAMAGED = 4 DAMAGED_BY_LASER = 5 + DAMAGED_BY_SAW = 6 + FROM_SAW = 7 End Enum Private Sub RawPartPage_Initialized(sender As Object, e As EventArgs) @@ -123,14 +127,17 @@ Public Class RawPartPageUC m_RawModeList(0) = EgtMsg(MSG_RAWPARTPAGEUC + 1) 'Rettangolo m_RawModeList(1) = EgtMsg(MSG_RAWPARTPAGEUC + 2) 'Per Punti m_RawModeList(2) = EgtMsg(MSG_RAWPARTPAGEUC + 30) 'Da Laser + m_RawModeList(3) = EgtMsg(MSG_DIRECTCUTPAGEUC + 24) 'Da Lama m_RawModeListEx(0) = EgtMsg(MSG_RAWPARTPAGEUC + 1) 'Rettangolo m_RawModeListEx(1) = EgtMsg(MSG_RAWPARTPAGEUC + 2) 'Per Punti m_RawModeListEx(2) = EgtMsg(MSG_RAWPARTPAGEUC + 30) 'Da Laser - m_RawModeListEx(3) = EgtMsg(MSG_RAWPARTPAGEUC + 35) 'Da Fotografia + m_RawModeListEx(3) = EgtMsg(MSG_DIRECTCUTPAGEUC + 24) 'Da Lama + m_RawModeListEx(4) = EgtMsg(MSG_RAWPARTPAGEUC + 35) 'Da Fotografia RawModeCmBx.ItemsSource = m_RawModeList ' lista per selezione RawModeDamaged m_RawModeDamagedList(0) = EgtMsg(MSG_RAWPARTPAGEUC + 2) 'Per Punti m_RawModeDamagedList(1) = EgtMsg(MSG_RAWPARTPAGEUC + 30) 'Da Laser + m_RawModeDamagedList(2) = EgtMsg(MSG_DIRECTCUTPAGEUC + 24) 'Da Lama RawModeDamagedCmBx.ItemsSource = m_RawModeDamagedList ' Nascondo bottone tastatura lastra se disattivato da file .ini @@ -310,8 +317,8 @@ Public Class RawPartPageUC Dim nSolidId = EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, NAME_RAW_SOLID) Dim nKerfId = EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, NAME_KERF) '----------------------------------------- INIZIO ------------------ se decido di inserire i punti laser manualmente -------------------------------------------------- - ' se decido di inserire i punti laser manualmente - If m_bFromDraw And m_ActiveRawMode = RAWMODE.FROM_LASER Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER Then + ' se decido di inserire i punti laser manualmente (in assenza di collegamento con CN) + If m_bFromDraw And (m_ActiveRawMode = RAWMODE.FROM_LASER Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER Or RAWMODE.FROM_SAW Or RAWMODE.DAMAGED_BY_SAW) Then ' Rimuovo eventuali crocette create acquisendo i punti nel disegno EgtEmptyGroup(m_nTempLay) ' Acquisisco punto da disegno @@ -696,6 +703,16 @@ Public Class RawPartPageUC CloseDamagedAreaByLaser() End If End If + If m_ActiveRawMode = RAWMODE.FROM_SAW Then + If m_bIsRawDefiningBySaw Then + CloseRawBySaw() + End If + End If + If m_ActiveRawMode = RAWMODE.DAMAGED_BY_SAW Then + If m_bIsRawDefiningBySaw Then + CloseDamagedAreaBySaw() + End If + End If ' Apro pagina di selezione della lavorazione prima di chiudere il grezzo m_ChooseMachiningPage = New ChooseMachining(m_MainWindow) '--------------------------- SELEZIONE LAVORAZIONI --------------------------------- @@ -779,6 +796,8 @@ Public Class RawPartPageUC Case 0 ' Rettangolo ' Se ero in modalità da laser VerifyLaserDefining() + ' Se ero in modalità da Lama + VerifySawDefinig() ' Verificos e sto realmente cambiando modalità Dim bChanging As Boolean = (m_ActiveRawMode <> RAWMODE.RECTANGLE) ' Imposto nuova modalità @@ -790,6 +809,8 @@ Public Class RawPartPageUC Case 1 ' Punti ' Se ero in modalità da laser VerifyLaserDefining() + ' Se ero in modalità da Lama + VerifySawDefinig() ' Imposto nuova modalità m_ActiveRawMode = RAWMODE.BY_POINTS ' Riattivo i controlli in base a quale modalità di inserimento contorni è attiva @@ -797,6 +818,8 @@ Public Class RawPartPageUC UpdateCircles() EgtDraw() Case 2 ' Da laser + ' Se ero in modalità da Lama + VerifySawDefinig() ' Imposto nuova modalità m_ActiveRawMode = RAWMODE.FROM_LASER RemoveCircles() @@ -811,10 +834,29 @@ Public Class RawPartPageUC ' Disattivo il bottone CloseBtn.IsEnabled = False OkBtn.IsEnabled = False - Case 3 ' Da fotografia + Case 3 ' Da Lama ' Se ero in modalità da laser VerifyLaserDefining() ' Imposto nuova modalità + m_ActiveRawMode = RAWMODE.FROM_SAW + RemoveCircles() + LoadFromMachine() + ' Azzero lista e punto di partenza + m_CurveXKerfList.Clear() + m_bptLast = False + ' Segno flag che indica definizione grezzo con laser in corso + m_bIsRawDefiningBySaw = True + ' Riattivo i controlli in base a quale modalità di inserimento contorni è attiva + RawModeView() + ' Disattivo il bottone + CloseBtn.IsEnabled = False + OkBtn.IsEnabled = False + Case 4 ' Da fotografia + ' Se ero in modalità da laser + VerifyLaserDefining() + ' Se ero in modalità da Lama + VerifySawDefinig() + ' Imposto nuova modalità m_ActiveRawMode = RAWMODE.FROM_PHOTO ' Riattivo i controlli in base a quale modalità di inserimento contorni è attiva RawModeView() @@ -822,6 +864,7 @@ Public Class RawPartPageUC ' Creo il grezzo dal contorno riconosciuto nella fotografia CreateRawFromPhotoContour() EgtDraw() + End Select End Sub @@ -831,6 +874,8 @@ Public Class RawPartPageUC m_ActiveRawMode = RAWMODE.DAMAGED Case 1 ' Da laser m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER + Case 2 ' Da Lama + m_ActiveRawMode = RAWMODE.DAMAGED_BY_SAW End Select RawModeView() EgtDraw() @@ -927,11 +972,43 @@ Public Class RawPartPageUC ' Disattivo bottoni zone rovinate e foto DamagedAreaGpBx.Visibility = Windows.Visibility.Hidden ConfirmPhotoBtn.Visibility = Windows.Visibility.Hidden + Case RAWMODE.DAMAGED_BY_SAW + RawModeCmBx.IsEnabled = True + RawModeDamagedCmBx.Visibility = Visibility.Visible + LengthTxBx.IsEnabled = False + WidthTxBx.IsEnabled = False + OffsetXTxBx.IsEnabled = False + OffsetYTxBx.IsEnabled = False + ' Visualizzo bottoni per laser + PointsGpBx.Visibility = Windows.Visibility.Visible + PointsGpBx.SetValue(Grid.RowSpanProperty, 2) + AddBtn.SetValue(Grid.RowSpanProperty, 1) + RemoveBtn.SetValue(Grid.RowSpanProperty, 1) + CloseBtn.Visibility = Windows.Visibility.Visible + ' Disattivo bottoni zone rovinate e foto + DamagedAreaGpBx.Visibility = Windows.Visibility.Hidden + ConfirmPhotoBtn.Visibility = Windows.Visibility.Hidden + Case RAWMODE.FROM_SAW + RawModeCmBx.IsEnabled = True + RawModeDamagedCmBx.Visibility = Visibility.Collapsed + LengthTxBx.IsEnabled = False + WidthTxBx.IsEnabled = False + OffsetXTxBx.IsEnabled = False + OffsetYTxBx.IsEnabled = False + ' Visualizzo bottoni per lama + PointsGpBx.Visibility = Windows.Visibility.Visible + PointsGpBx.SetValue(Grid.RowSpanProperty, 2) + AddBtn.SetValue(Grid.RowSpanProperty, 1) + RemoveBtn.SetValue(Grid.RowSpanProperty, 1) + CloseBtn.Visibility = Windows.Visibility.Visible + ' Disattivo bottoni zone rovinate e foto + DamagedAreaGpBx.Visibility = Windows.Visibility.Hidden + ConfirmPhotoBtn.Visibility = Windows.Visibility.Hidden End Select End Sub Private Sub OutlineBtn_Click(sender As Object, e As RoutedEventArgs) Handles OutlineBtn.Click - If m_ActiveRawMode = RAWMODE.DAMAGED Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER Then + If m_ActiveRawMode = RAWMODE.DAMAGED Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_SAW Then ' m_ActiveRawMode = RAWMODE.BY_POINTS m_ActiveRawMode = m_PrecActiveRawMode RawModeCmBx.SelectedIndex = m_ActiveRawMode @@ -946,6 +1023,9 @@ Public Class RawPartPageUC If m_PrecActiveRawMode = RAWMODE.FROM_LASER Then m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER RawModeDamagedCmBx.SelectedIndex = 1 + ElseIf m_PrecActiveRawMode = RAWMODE.FROM_SAW Then + m_ActiveRawMode = RAWMODE.DAMAGED_BY_SAW + RawModeDamagedCmBx.SelectedIndex = 2 Else m_ActiveRawMode = RAWMODE.DAMAGED RawModeDamagedCmBx.SelectedIndex = 0 @@ -1010,6 +1090,54 @@ Public Class RawPartPageUC End If AddBtn.IsChecked = False EgtDraw() + Case RAWMODE.FROM_SAW + Dim ptAcquired As Point3d + ' Se inserimento manuale dei punti laser + If m_bFromDraw Then + If Not IsNothing(m_ptPrev) Then + ptAcquired = m_ptPrev + ptAcquired.ToLoc(New Frame3d(m_ptTableMin)) + Else + m_CurrProjPage.SetErrorMessage(EgtMsg(90532)) ' Errore nell'acquisizione del punto + Return + End If + ' altrimenti da macchina + Else + If Not AcquireSawPoint(ptAcquired) Then + m_CurrProjPage.SetErrorMessage(EgtMsg(90532)) ' Errore nell'acquisizione del punto + Return + End If + End If + ' Limito il punto a stare nella tavola con franco pari al kerf + If ptAcquired.x < m_RawKerf Then ptAcquired.x = m_RawKerf + SAFE_RAW_DIST + If ptAcquired.y < m_RawKerf Then ptAcquired.y = m_RawKerf + SAFE_RAW_DIST + If ptAcquired.x > m_dTableLength - m_RawKerf Then ptAcquired.x = m_dTableLength - m_RawKerf - SAFE_RAW_DIST + If ptAcquired.y > m_dTableWidth - m_RawKerf Then ptAcquired.y = m_dTableWidth - m_RawKerf - SAFE_RAW_DIST + ' Aggiusto Z punto movimentato (è in locale al tavolo) + ptAcquired.z = m_CurrentMachine.dAdditionalTable + m_RawHeight + 'Porto il punto nel riferimento del grezzo + Dim frRaw As New Frame3d + EgtGetGroupGlobFrame(m_CurrProjPage.m_nRawId, frRaw) + ptAcquired.LocToLoc(New Frame3d(m_ptTableMin), frRaw) + m_ptPrev.LocToLoc(New Frame3d(m_ptTableMin), frRaw) + If m_bptLast Then + If Point3d.SameApprox(ptAcquired, m_ptLast) Then + AddBtn.IsChecked = False + Exit Sub + End If + Dim NewLine As Integer = EgtCreateLine(m_CurrProjPage.m_nRawId, m_ptLast, ptAcquired) + EgtSetColor(NewLine, m_KerfCol) + m_CurveXKerfList.Add(NewLine) + Else + m_bptLast = True + End If + m_ptLast = ptAcquired + If m_CurveXKerfList.Count > 1 Then + OkBtn.IsEnabled = True + CloseBtn.IsEnabled = True + End If + AddBtn.IsChecked = False + EgtDraw() Case RAWMODE.DAMAGED ' Verifico ci sia almeno una zona rovinata If EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, NAME_DAMAGED) = GDB_ID.NULL Then @@ -1068,6 +1196,54 @@ Public Class RawPartPageUC End If AddBtn.IsChecked = False EgtDraw() + Case RAWMODE.DAMAGED_BY_SAW + Dim ptAcquired As Point3d + ' Se inserimento manuale dei punti laser + If m_bFromDraw Then + If Not IsNothing(m_ptPrev) Then + ptAcquired = m_ptPrev + ptAcquired.ToLoc(New Frame3d(m_ptTableMin)) + Else + m_CurrProjPage.SetErrorMessage(EgtMsg(90532)) ' Errore nell'acquisizione del punto + Return + End If + ' altrimenti da macchina + Else + If Not AcquireSawPoint(ptAcquired) Then + m_CurrProjPage.SetErrorMessage(EgtMsg(90532)) ' Errore nell'acquisizione del punto + Return + End If + End If + ' Limito il punto a stare nella tavola con franco pari al kerf + If ptAcquired.x < m_RawKerf Then ptAcquired.x = m_RawKerf + SAFE_RAW_DIST + If ptAcquired.y < m_RawKerf Then ptAcquired.y = m_RawKerf + SAFE_RAW_DIST + If ptAcquired.x > m_dTableLength - m_RawKerf Then ptAcquired.x = m_dTableLength - m_RawKerf - SAFE_RAW_DIST + If ptAcquired.y > m_dTableWidth - m_RawKerf Then ptAcquired.y = m_dTableWidth - m_RawKerf - SAFE_RAW_DIST + ' Aggiusto Z punto movimentato (è in locale al tavolo) + ptAcquired.z = m_CurrentMachine.dAdditionalTable + m_RawHeight + 'Porto il punto nel riferimento del grezzo + Dim frRaw As New Frame3d + EgtGetGroupGlobFrame(m_CurrProjPage.m_nRawId, frRaw) + ptAcquired.LocToLoc(New Frame3d(m_ptTableMin), frRaw) + m_ptPrev.LocToLoc(New Frame3d(m_ptTableMin), frRaw) + If m_bptLast Then + If Point3d.SameApprox(ptAcquired, m_ptLast) Then + AddBtn.IsChecked = False + Exit Sub + End If + Dim NewLine As Integer = EgtCreateLine(m_CurrProjPage.m_nRawId, m_ptLast, ptAcquired) + EgtSetColor(NewLine, m_KerfCol) + m_CurveXDamagedAreaList.Add(NewLine) + Else + m_bptLast = True + End If + m_ptLast = ptAcquired + If m_CurveXDamagedAreaList.Count > 1 Then + OkBtn.IsEnabled = True + CloseBtn.IsEnabled = True + End If + AddBtn.IsChecked = False + EgtDraw() End Select End Sub @@ -1099,6 +1275,28 @@ Public Class RawPartPageUC Return True End Function + Private Function AcquireSawPoint(ByRef ptAcquired As Point3d) As Boolean + Dim ptTipP1 As Point3d + ' Recupero la posizione macchina + Dim dL1, dL2, dL3, dR1, dR2 As Double + If Not m_MainWindow.m_CNCommunication.GetAxesPositions(dL1, dL2, dL3, dR1, dR2) Then + Return False + End If + ' Recupero dati utensile e testa corrente + Dim sTool As String = "" + Dim sHead As String = "" + Dim nExit As Integer = 0 + EgtGetCalcTool(sTool, sHead, nExit) + ' Trasformo in posizione punta utensile in basso + If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, ptTipP1) Then + Return False + End If + ' Porto il tip nell'origine tavola + ptAcquired = ptTipP1 + ptAcquired.ToLoc(New Frame3d(m_ptTableMin)) + Return True + End Function + Private Sub RemoveBtn_Click(sender As Object, e As RoutedEventArgs) Handles RemoveBtn.Click Select Case m_ActiveRawMode Case RAWMODE.RECTANGLE @@ -1126,6 +1324,26 @@ Public Class RawPartPageUC End If RemoveBtn.IsChecked = False EgtDraw() + Case RAWMODE.FROM_SAW + If m_CurveXKerfList.Count > 0 Then + If m_CurveXKerfList.Count = 1 Then + ' Aggiorno ptLast con primo punto + EgtStartPoint(m_CurveXKerfList(m_CurveXKerfList.Count - 1), m_ptLast) + ' Cancello ultima linea + EgtErase(m_CurveXKerfList(m_CurveXKerfList.Count - 1)) + m_CurveXKerfList.RemoveAt(m_CurveXKerfList.Count - 1) + Else + ' Cancello ultima linea + EgtErase(m_CurveXKerfList(m_CurveXKerfList.Count - 1)) + m_CurveXKerfList.RemoveAt(m_CurveXKerfList.Count - 1) + ' Aggiorno ptLast + EgtEndPoint(m_CurveXKerfList(m_CurveXKerfList.Count - 1), m_ptLast) + End If + Else + m_bptLast = False + End If + RemoveBtn.IsChecked = False + EgtDraw() Case RAWMODE.DAMAGED ' Verifico ci sia almeno una zona rovinata If EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, NAME_DAMAGED) = GDB_ID.NULL Then @@ -1976,6 +2194,27 @@ Public Class RawPartPageUC End If End Sub + Private Sub VerifySawDefinig() + If m_bIsRawDefiningBySaw Then + If m_CurveXKerfList.Count > 1 Then + CloseRawBySaw() + Else + ' Elimino tutti i segmenti disegnati + For Each nEntityId As Integer In m_CurveXKerfList + If EgtGetType(nEntityId) = GDB_TY.CRV_LINE Then + EgtErase(nEntityId) + End If + Next + ' Azzero lista e punto di partenza + m_CurveXKerfList.Clear() + ' Creo rettangolo + UpdateRawPart() + End If + m_bIsRawDefiningBySaw = False + End If + End Sub + + Private Sub LoadFromMachine() ' Elimino grezzo già presente EgtErase(EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, NAME_RAW_SOLID)) @@ -1993,6 +2232,10 @@ Public Class RawPartPageUC Select Case m_ActiveRawMode Case RAWMODE.DAMAGED_BY_LASER CloseDamagedAreaByLaser() + Case RAWMODE.DAMAGED_BY_SAW + CloseDamagedAreaBySaw() + Case RAWMODE.FROM_SAW + CloseRawBySaw() Case Else CloseRawByLaser() End Select @@ -2036,6 +2279,42 @@ Public Class RawPartPageUC CloseBtn.IsEnabled = False End Sub + Private Sub CloseRawBySaw() + ' Verifico ci siano punti + If m_CurveXKerfList.Count() = 0 Then Return + ' Recupero punto iniziale prima linea del grezzo + Dim ptStart As Point3d + EgtStartPoint(m_CurveXKerfList(0), ptStart) + m_CurveXKerfList.Add(EgtCreateLine(m_CurrProjPage.m_nRawId, m_ptLast, ptStart)) + ' Trasformo lista di curve in un array + Dim CurveXKerfArray As Integer() = m_CurveXKerfList.ToArray + ' Creo contorno kerf + Dim nKerfId As Integer = EgtCreateCurveCompoByChain(m_CurrProjPage.m_nRawId, m_CurveXKerfList.Count, CurveXKerfArray, ptStart, True) + EgtSetName(nKerfId, NAME_KERF) + EgtSetColor(nKerfId, m_KerfCol) + ' Pulisco lista entità del grezzo + m_CurveXKerfList.Clear() + ' Aggiorno il grezzo comprese dimensioni e posizione + UpdateRawPartKerf() + ' Salvo il valore del kerf (sempre in mm) + Dim dKerf As Double = 0 + StringToLen(KerfTxBx.Text, dKerf) + If dKerf < 0 Then + EgtSetInfo(m_CurrProjPage.m_nRawId, KEY_INVERT_KERF, -1) + Else + EgtSetInfo(m_CurrProjPage.m_nRawId, KEY_INVERT_KERF, 1) + End If + EgtSetInfo(m_CurrProjPage.m_nRawId, KEY_KERF, m_RawKerf) + ' Segno flag che indica fine della definizione + m_bIsRawDefiningBySaw = False + ' Elimino primo punto per prossimo grezzo + m_bptLast = False + ' Aggiorno visualizzazione + EgtDraw() + ' Disattivo il bottone chiudi grezzo + CloseBtn.IsEnabled = False + End Sub + #Region "Damaged Area" Private Sub AddNewDamagedArea() @@ -2092,6 +2371,32 @@ Public Class RawPartPageUC CloseBtn.IsEnabled = False End Sub + Private Sub CloseDamagedAreaBySaw() + ' Verifico ci siano punti + If m_CurveXDamagedAreaList.Count() = 0 Then Return + ' Recupero punto iniziale prima linea del grezzo + Dim ptStart As Point3d + EgtStartPoint(m_CurveXDamagedAreaList(0), ptStart) + ' creao la linea che va dal primo punto all'ultimo + m_CurveXDamagedAreaList.Add(EgtCreateLine(m_CurrProjPage.m_nRawId, m_ptLast, ptStart)) + ' Trasformo lista di curve in un array + Dim CurveXDamagedAreaArray As Integer() = m_CurveXDamagedAreaList.ToArray + ' Creo contorno kerf + Dim nDmgId As Integer = EgtCreateCurveCompoByChain(m_CurrProjPage.m_nRawId, m_CurveXDamagedAreaList.Count, CurveXDamagedAreaArray, ptStart, True) + EgtSetName(nDmgId, NAME_DAMAGED) + EgtSetColor(nDmgId, m_KerfCol) + ' Pulisco lista entità del grezzo + m_CurveXDamagedAreaList.Clear() + ' Segno flag che indica fine della definizione + m_bIsRawDefiningBySaw = False + ' Elimino primo punto per prossimo grezzo + m_bptLast = False + ' Aggiorno visualizzazione + EgtDraw() + ' Disattivo il bottone chiudi grezzo + CloseBtn.IsEnabled = False + End Sub + Private Sub RemoveDamagedArea() ' Elimino area rovinata selezionata EgtErase(m_nSelDmg) From 3bf1a876880acf3973b6d4ccb07d050c2228d160 Mon Sep 17 00:00:00 2001 From: NicolaP Date: Mon, 4 Jul 2022 15:18:49 +0200 Subject: [PATCH 5/8] Correzione gestione uscita Area Danneggiata e Elimina Area con Laser e Lama --- RawPhoto/RawPartPageUC.xaml.vb | 55 ++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/RawPhoto/RawPartPageUC.xaml.vb b/RawPhoto/RawPartPageUC.xaml.vb index ffc47f1..d48db68 100644 --- a/RawPhoto/RawPartPageUC.xaml.vb +++ b/RawPhoto/RawPartPageUC.xaml.vb @@ -316,9 +316,10 @@ Public Class RawPartPageUC ' Verifico cosa selezionato Dim nSolidId = EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, NAME_RAW_SOLID) Dim nKerfId = EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, NAME_KERF) + '----------------------------------------- INIZIO ------------------ se decido di inserire i punti laser manualmente -------------------------------------------------- ' se decido di inserire i punti laser manualmente (in assenza di collegamento con CN) - If m_bFromDraw And (m_ActiveRawMode = RAWMODE.FROM_LASER Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER Or RAWMODE.FROM_SAW Or RAWMODE.DAMAGED_BY_SAW) Then + If m_bFromDraw AndAlso (m_ActiveRawMode = RAWMODE.FROM_LASER Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER Or m_ActiveRawMode = RAWMODE.FROM_SAW Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_SAW) Then ' Rimuovo eventuali crocette create acquisendo i punti nel disegno EgtEmptyGroup(m_nTempLay) ' Acquisisco punto da disegno @@ -343,6 +344,7 @@ Public Class RawPartPageUC Return End If '----------------------------------------- FINE ------------------ se decido di inserire i punti laser manualmente -------------------------------------------------- + ' recupero elemento selezionato nella scena EgtSetObjFilterForSelWin(True, True, True, True, True) Dim nSel As Integer EgtSelect(e.Location, 2 * Scene.DIM_SEL, 2 * Scene.DIM_SEL, nSel) @@ -356,8 +358,7 @@ Public Class RawPartPageUC m_bDrag = EgtUnProjectPoint(e.Location, m_ptPrev) m_nDragEnt = -1 m_dDragPar = -1 - ElseIf sName = NAME_KERF And - (m_ActiveRawMode = RAWMODE.RECTANGLE Or m_ActiveRawMode = RAWMODE.BY_POINTS) Then + ElseIf sName = NAME_KERF And (m_ActiveRawMode = RAWMODE.RECTANGLE Or m_ActiveRawMode = RAWMODE.BY_POINTS) Then m_bDrag = EgtUnProjectPoint(e.Location, m_ptPrev) Dim dDist, dU As Double If Not EgtPointCurveDist(m_ptPrev.Loc(nKerfId), nKerfId, nKerfId, dDist, dU) Then @@ -367,7 +368,7 @@ Public Class RawPartPageUC m_dDragPar = dU ' Privilegio il kerf, pertanto esco Exit While - ElseIf sName = NAME_DAMAGED And (m_ActiveRawMode = RAWMODE.DAMAGED Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER) Then + ElseIf sName = NAME_DAMAGED And (m_ActiveRawMode = RAWMODE.DAMAGED Or m_ActiveRawMode = RAWMODE.BY_POINTS) Then m_bDrag = EgtUnProjectPoint(e.Location, m_ptPrev) Dim dDist, dU As Double If Not EgtPointCurveDist(m_ptPrev.Loc(nSelId), nSelId, nSelId, dDist, dU) Then @@ -384,6 +385,7 @@ Public Class RawPartPageUC End If nSelId = EgtGetNextObjInSelWin() End While + ' se drag e modalità punti If m_bDrag And m_ActiveRawMode = RAWMODE.BY_POINTS Then ' se aggiungi punto @@ -420,7 +422,7 @@ Public Class RawPartPageUC End If End If ' se drag e modalità zona danneggiata - ElseIf m_bDrag And (m_ActiveRawMode = RAWMODE.DAMAGED Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER) Then + ElseIf m_bDrag And (m_ActiveRawMode = RAWMODE.DAMAGED Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_LASER Or m_ActiveRawMode = RAWMODE.DAMAGED_BY_SAW) Then ' se aggiungi zona rovinata If m_nPtDmgMode = DMGMODE.ADD Then AddNewDamagedArea() @@ -672,6 +674,8 @@ Public Class RawPartPageUC Private Sub OkBtn_Click(sender As Object, e As RoutedEventArgs) Handles OkBtn.Click ' Non è possibile uscire con tastatura in corso If m_bProbingOn Then Return + ' reimposto il comando OutLine + OutlineBtn_Click(Nothing, Nothing) ' Se confermata uscita If ExitRawPart(True) Then m_MainWindow.m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(Me) @@ -1354,6 +1358,46 @@ Public Class RawPartPageUC DeleteBtn.IsChecked = False m_nPtMode = If(RemoveBtn.IsChecked(), PTMODE.REMOVE, PTMODE.MOVE) m_nPtDmgMode = DMGMODE.NONE + Case RAWMODE.DAMAGED_BY_LASER + If m_CurveXDamagedAreaList.Count > 0 Then + If m_CurveXDamagedAreaList.Count = 1 Then + ' Aggiorno ptLast con primo punto + EgtStartPoint(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1), m_ptLast) + ' Cancello ultima linea + EgtErase(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1)) + m_CurveXDamagedAreaList.RemoveAt(m_CurveXDamagedAreaList.Count - 1) + Else + ' Cancello ultima linea + EgtErase(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1)) + m_CurveXDamagedAreaList.RemoveAt(m_CurveXDamagedAreaList.Count - 1) + ' Aggiorno ptLast + EgtEndPoint(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1), m_ptLast) + End If + Else + m_bptLast = False + End If + RemoveBtn.IsChecked = False + EgtDraw() + Case RAWMODE.DAMAGED_BY_SAW + If m_CurveXDamagedAreaList.Count > 0 Then + If m_CurveXDamagedAreaList.Count = 1 Then + ' Aggiorno ptLast con primo punto + EgtStartPoint(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1), m_ptLast) + ' Cancello ultima linea + EgtErase(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1)) + m_CurveXDamagedAreaList.RemoveAt(m_CurveXDamagedAreaList.Count - 1) + Else + ' Cancello ultima linea + EgtErase(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1)) + m_CurveXDamagedAreaList.RemoveAt(m_CurveXDamagedAreaList.Count - 1) + ' Aggiorno ptLast + EgtEndPoint(m_CurveXDamagedAreaList(m_CurveXDamagedAreaList.Count - 1), m_ptLast) + End If + Else + m_bptLast = False + End If + RemoveBtn.IsChecked = False + EgtDraw() End Select End Sub @@ -2214,7 +2258,6 @@ Public Class RawPartPageUC End If End Sub - Private Sub LoadFromMachine() ' Elimino grezzo già presente EgtErase(EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, NAME_RAW_SOLID)) From 0717546ad09c9795746a9bc0329fe031803b734b Mon Sep 17 00:00:00 2001 From: NicolaP Date: Mon, 4 Jul 2022 17:56:33 +0200 Subject: [PATCH 6/8] Gestione macchine WaterJet --- RawPhoto/RawPartPageUC.xaml.vb | 38 ++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/RawPhoto/RawPartPageUC.xaml.vb b/RawPhoto/RawPartPageUC.xaml.vb index d48db68..6931b2d 100644 --- a/RawPhoto/RawPartPageUC.xaml.vb +++ b/RawPhoto/RawPartPageUC.xaml.vb @@ -127,17 +127,32 @@ Public Class RawPartPageUC m_RawModeList(0) = EgtMsg(MSG_RAWPARTPAGEUC + 1) 'Rettangolo m_RawModeList(1) = EgtMsg(MSG_RAWPARTPAGEUC + 2) 'Per Punti m_RawModeList(2) = EgtMsg(MSG_RAWPARTPAGEUC + 30) 'Da Laser - m_RawModeList(3) = EgtMsg(MSG_DIRECTCUTPAGEUC + 24) 'Da Lama + If m_MainWindow.m_CurrentMachine.bSaw Then + m_RawModeList(3) = EgtMsg(MSG_DIRECTCUTPAGEUC + 24) 'Da Lama + Else + ' se non insrisco "Lama" allora ridimensiono il vettore + ReDim Preserve m_RawModeList(2) + End If m_RawModeListEx(0) = EgtMsg(MSG_RAWPARTPAGEUC + 1) 'Rettangolo m_RawModeListEx(1) = EgtMsg(MSG_RAWPARTPAGEUC + 2) 'Per Punti m_RawModeListEx(2) = EgtMsg(MSG_RAWPARTPAGEUC + 30) 'Da Laser - m_RawModeListEx(3) = EgtMsg(MSG_DIRECTCUTPAGEUC + 24) 'Da Lama - m_RawModeListEx(4) = EgtMsg(MSG_RAWPARTPAGEUC + 35) 'Da Fotografia + If m_MainWindow.m_CurrentMachine.bSaw Then + m_RawModeListEx(3) = EgtMsg(MSG_DIRECTCUTPAGEUC + 24) 'Da Lama + m_RawModeListEx(4) = EgtMsg(MSG_RAWPARTPAGEUC + 35) 'Da Fotografia + Else + ' se non insrisco "Lama" allora ridimensiono il vettore + m_RawModeListEx(3) = EgtMsg(MSG_RAWPARTPAGEUC + 35) 'Da Fotografia + ReDim Preserve m_RawModeListEx(3) + End If RawModeCmBx.ItemsSource = m_RawModeList ' lista per selezione RawModeDamaged m_RawModeDamagedList(0) = EgtMsg(MSG_RAWPARTPAGEUC + 2) 'Per Punti m_RawModeDamagedList(1) = EgtMsg(MSG_RAWPARTPAGEUC + 30) 'Da Laser - m_RawModeDamagedList(2) = EgtMsg(MSG_DIRECTCUTPAGEUC + 24) 'Da Lama + If m_MainWindow.m_CurrentMachine.bSaw Then + m_RawModeDamagedList(2) = EgtMsg(MSG_DIRECTCUTPAGEUC + 24) 'Da Lama + Else + ReDim Preserve m_RawModeDamagedList(1) + End If RawModeDamagedCmBx.ItemsSource = m_RawModeDamagedList ' Nascondo bottone tastatura lastra se disattivato da file .ini @@ -839,6 +854,21 @@ Public Class RawPartPageUC CloseBtn.IsEnabled = False OkBtn.IsEnabled = False Case 3 ' Da Lama + If Not m_MainWindow.m_CurrentMachine.bSaw Then ' Da fotografia + ' Se ero in modalità da laser + VerifyLaserDefining() + ' Se ero in modalità da Lama + VerifySawDefinig() + ' Imposto nuova modalità + m_ActiveRawMode = RAWMODE.FROM_PHOTO + ' Riattivo i controlli in base a quale modalità di inserimento contorni è attiva + RawModeView() + RemoveCircles() + ' Creo il grezzo dal contorno riconosciuto nella fotografia + CreateRawFromPhotoContour() + EgtDraw() + Exit Select + End If ' Se ero in modalità da laser VerifyLaserDefining() ' Imposto nuova modalità From 367a8c9fc326acc96cb63d22702628d44ffc33d1 Mon Sep 17 00:00:00 2001 From: NicolaP Date: Tue, 5 Jul 2022 17:13:42 +0200 Subject: [PATCH 7/8] Nuova gestione libreria EgtWPFLib5 --- Machine/CurrentMachine.vb | 4 +-- Machine/MachinePageUC.xaml.vb | 36 ++++++++++---------- Machine/WaterJetPageUC.xaml.vb | 6 ++-- Machine/WaterjetDbWindowVM.vb | 60 ++++++++++++++++++++++++++++++++++ MainWindow.xaml.vb | 6 ++-- OmagCUT.vbproj | 1 + 6 files changed, 87 insertions(+), 26 deletions(-) create mode 100644 Machine/WaterjetDbWindowVM.vb diff --git a/Machine/CurrentMachine.vb b/Machine/CurrentMachine.vb index f61cfd3..cfad857 100644 --- a/Machine/CurrentMachine.vb +++ b/Machine/CurrentMachine.vb @@ -1327,7 +1327,7 @@ Public Class CurrentMachine ' Leggo valori da file Data e li carico nelle proprietà Dim sFilePath As String = sMachDir & "\" & MACHININGS_DIR & "\" & WATERJETDB_FILE Dim Local_MaterialList = New ObservableCollection(Of EgtWPFLib5.WjMaterial) - Local_MaterialList = EgtWPFLib5.WaterjetDbWindowVM.LoadWjMaterials(sFilePath) + Local_MaterialList = WaterjetDbWindowVM_OmagCUT.LoadWjMaterials(sFilePath) ' definisco la lista delle qualità (solo se è vuota) If m_Qualities.Count < 1 Then m_Qualities.Add("Q1") @@ -1358,7 +1358,7 @@ Public Class CurrentMachine ' Leggo valori da file Data e li carico nelle proprietà Dim sFilePath As String = sMachDir & "\" & MACHININGS_DIR & "\" & WATERJETDB_FILE Dim Local_MaterialList = New ObservableCollection(Of EgtWPFLib5.WjMaterial) - Local_MaterialList = EgtWPFLib5.WaterjetDbWindowVM.LoadWjMaterials(sFilePath) + Local_MaterialList = WaterjetDbWindowVM_OmagCUT.LoadWjMaterials(sFilePath) Dim sItems() As String = sCurMat.Split("."c) If sItems.Count > 1 Then Dim sMat As String = sItems(0) diff --git a/Machine/MachinePageUC.xaml.vb b/Machine/MachinePageUC.xaml.vb index 3fb1078..d725942 100644 --- a/Machine/MachinePageUC.xaml.vb +++ b/Machine/MachinePageUC.xaml.vb @@ -145,12 +145,12 @@ Public Class MachinePageUC m_ActiveMachinePage = MachinePages.Alarms Case MachinePages.WaterJet ' Verifica ed eventuale salvataggio Db Waterjet - Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, EgtWPFLib5.WaterjetDbWindowVM).CloseWaterjetDb_OmagCut(m_MainWindow) - If nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.CANCEL Then + Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, WaterjetDbWindowVM_OmagCUT).CloseWaterjetDb_OmagCut(m_MainWindow) + If nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.CANCEL Then AlarmsBtn.IsChecked = False WaterJetBtn.IsChecked = True Return - ElseIf nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.NO Then + ElseIf nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.NO Then m_WaterJetPageUC.WaterJetPage_Reinitialize() End If ' passo alla pagina Dati Macchina @@ -215,12 +215,12 @@ Public Class MachinePageUC m_ActiveMachinePage = MachinePages.ToolsDb Case MachinePages.WaterJet 'Verifica ed eventuale salvataggio Db Waterjet - Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, EgtWPFLib5.WaterjetDbWindowVM).CloseWaterjetDb_OmagCut(m_MainWindow) - If nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.CANCEL Then + Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, WaterjetDbWindowVM_OmagCUT).CloseWaterjetDb_OmagCut(m_MainWindow) + If nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.CANCEL Then ToolsDBBtn.IsChecked = False WaterJetBtn.IsChecked = True Return - ElseIf nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.NO Then + ElseIf nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.NO Then m_WaterJetPageUC.WaterJetPage_Reinitialize() End If ' passo alla pagina Dati Macchina @@ -285,12 +285,12 @@ Public Class MachinePageUC m_ActiveMachinePage = MachinePages.MachiningDb Case MachinePages.WaterJet ' Verifica ed eventuale salvataggio Db Waterjet - Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, EgtWPFLib5.WaterjetDbWindowVM).CloseWaterjetDb_OmagCut(m_MainWindow) - If nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.CANCEL Then + Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, WaterjetDbWindowVM_OmagCUT).CloseWaterjetDb_OmagCut(m_MainWindow) + If nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.CANCEL Then MachiningDBBtn.IsChecked = False WaterJetBtn.IsChecked = True Return - ElseIf nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.NO Then + ElseIf nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.NO Then m_WaterJetPageUC.WaterJetPage_Reinitialize() End If ' passo alla pagina Dati Macchina @@ -358,12 +358,12 @@ Public Class MachinePageUC PolishingsBtn.IsChecked = True Case MachinePages.WaterJet ' Verifica ed eventuale salvataggio Db Waterjet - Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, EgtWPFLib5.WaterjetDbWindowVM).CloseWaterjetDb_OmagCut(m_MainWindow) - If nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.CANCEL Then + Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, WaterjetDbWindowVM_OmagCUT).CloseWaterjetDb_OmagCut(m_MainWindow) + If nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.CANCEL Then PolishingsBtn.IsChecked = False WaterJetBtn.IsChecked = True Return - ElseIf nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.NO Then + ElseIf nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.NO Then m_WaterJetPageUC.WaterJetPage_Reinitialize() End If ' passo alla pagina Dati Macchina @@ -513,12 +513,12 @@ Public Class MachinePageUC m_ActiveMachinePage = MachinePages.MachineCN Case MachinePages.WaterJet ' Verifica ed eventuale salvataggio Db Waterjet - Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, EgtWPFLib5.WaterjetDbWindowVM).CloseWaterjetDb_OmagCut(m_MainWindow) - If nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.CANCEL Then + Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, WaterjetDbWindowVM_OmagCUT).CloseWaterjetDb_OmagCut(m_MainWindow) + If nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.CANCEL Then TestingPageBtn.IsChecked = False WaterJetBtn.IsChecked = True Return - ElseIf nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.NO Then + ElseIf nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.NO Then m_WaterJetPageUC.WaterJetPage_Reinitialize() End If ' passo alla pagina Dati Macchina @@ -593,12 +593,12 @@ Public Class MachinePageUC m_ActiveMachinePage = MachinePages.Statistics Case MachinePages.WaterJet ' Verifica ed eventuale salvataggio Db Waterjet - Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, EgtWPFLib5.WaterjetDbWindowVM).CloseWaterjetDb_OmagCut(m_MainWindow) - If nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.CANCEL Then + Dim nPressedBtn As Integer = DirectCast(m_WaterJetPageUC.DataContext, WaterjetDbWindowVM_OmagCUT).CloseWaterjetDb_OmagCut(m_MainWindow) + If nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.CANCEL Then StatisticsBtn.IsChecked = False WaterJetBtn.IsChecked = True Return - ElseIf nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.NO Then + ElseIf nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.NO Then m_WaterJetPageUC.WaterJetPage_Reinitialize() End If ' passo alla pagina Dati Macchina diff --git a/Machine/WaterJetPageUC.xaml.vb b/Machine/WaterJetPageUC.xaml.vb index be33a3d..ea728f2 100644 --- a/Machine/WaterJetPageUC.xaml.vb +++ b/Machine/WaterJetPageUC.xaml.vb @@ -8,18 +8,18 @@ Public Class WaterJetPageUC ' Riferimento alla MainWindow Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow) - Private m_refWaterjetDbWindowVM As EgtWPFLib5.WaterjetDbWindowVM + Private m_refWaterjetDbWindowVM As WaterjetDbWindowVM_OmagCUT Private m_sOrigNewMaterial As String = String.Empty Private m_sOrigNewSubMaterial As String = String.Empty Private Sub WaterJetPage_Initialized(sender As Object, e As EventArgs) - m_refWaterjetDbWindowVM = New EgtWPFLib5.WaterjetDbWindowVM(m_MainWindow.m_CurrentMachine.sMachDir) + m_refWaterjetDbWindowVM = New WaterjetDbWindowVM_OmagCUT(m_MainWindow.m_CurrentMachine.sMachDir) Me.DataContext = m_refWaterjetDbWindowVM EgtWPFLib.Utility.MainWindow = m_MainWindow End Sub Public Sub WaterJetPage_Reinitialize() - m_refWaterjetDbWindowVM = New EgtWPFLib5.WaterjetDbWindowVM(m_MainWindow.m_CurrentMachine.sMachDir) + m_refWaterjetDbWindowVM = New WaterjetDbWindowVM_OmagCUT(m_MainWindow.m_CurrentMachine.sMachDir) Me.DataContext = m_refWaterjetDbWindowVM End Sub diff --git a/Machine/WaterjetDbWindowVM.vb b/Machine/WaterjetDbWindowVM.vb new file mode 100644 index 0000000..2f97eac --- /dev/null +++ b/Machine/WaterjetDbWindowVM.vb @@ -0,0 +1,60 @@ +Imports System.Collections.ObjectModel +Imports System.IO +Imports EgtUILib +Imports EgtWPFLib5 +Imports EgtWPFLib + +Public Class WaterjetDbWindowVM_OmagCUT + Inherits EgtWPFLib5.WaterjetDbWindowVM + + Public Function CloseWaterjetDb_OmagCut(MainWindow As Window) As SaveWndBtnEnum + If bIsModified Then + Dim SaveWjDbWnd As New EgtMsgBox(MainWindow, "", EgtMsg(31759), EgtMsgBox.Buttons.YES_NO_CANCEL, EgtMsgBox.Icons.NULL) + Select Case SaveWjDbWnd.m_nPressedBtn + Case 1 ' Yes + WriteWaterjetDb() + bIsModified = False + Return SaveWndBtnEnum.YES + Case 2 ' No + Return SaveWndBtnEnum.NO + Case Else ' Cancel + Return SaveWndBtnEnum.CANCEL + End Select + Else + Dim bExitFor As Boolean = False + For Each Material As EgtWPFLib5.WjMaterial In MaterialList + If Not IsNothing(Material.SubMaterialList) Then + For Each SubMaterial As EgtWPFLib5.WjSubMaterial In Material.SubMaterialList + If Not IsNothing(SubMaterial.ParamList) Then + For Each QParam As EgtWPFLib5.WjParam In SubMaterial.ParamList + bExitFor = QParam.IsModified() + If bExitFor Then Exit For + Next + End If + If bExitFor Then Exit For + Next + End If + If bExitFor Then Exit For + Next + If bExitFor Then + Dim SaveWjDbWnd As New EgtMsgBox(MainWindow, "", EgtMsg(31759), EgtMsgBox.Buttons.YES_NO_CANCEL, EgtMsgBox.Icons.NULL) + Select Case SaveWjDbWnd.m_nPressedBtn + Case 1 ' Yes + WriteWaterjetDb() + bIsModified = False + Return SaveWndBtnEnum.YES + Case 2 ' No + Return SaveWndBtnEnum.NO + Case Else ' Cancel + Return SaveWndBtnEnum.CANCEL + End Select + End If + End If + Return SaveWndBtnEnum.YES + End Function + + Sub New(sMachDir As String) + MyBase.New(sMachDir) + End Sub + +End Class diff --git a/MainWindow.xaml.vb b/MainWindow.xaml.vb index d5b960c..9e76cd7 100644 --- a/MainWindow.xaml.vb +++ b/MainWindow.xaml.vb @@ -1092,10 +1092,10 @@ Class MainWindow 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, EgtWPFLib5.WaterjetDbWindowVM).CloseWaterjetDb_OmagCut(m_MainWindow) - If nPressedBtn = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.CANCEL Then + 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 = EgtWPFLib5.WaterjetDbWindowVM.SaveWndBtnEnum.NO Then + ElseIf nPressedBtn = WaterjetDbWindowVM_OmagCUT.SaveWndBtnEnum.NO Then m_MachinePageUC.m_WaterJetPageUC.WaterJetPage_Reinitialize() End If End Select diff --git a/OmagCUT.vbproj b/OmagCUT.vbproj index 5589832..aa1d3ec 100644 --- a/OmagCUT.vbproj +++ b/OmagCUT.vbproj @@ -205,6 +205,7 @@ ImportExportToolWD.xaml + WaterJetPageUC.xaml From 64e3fd83dedd85920c6d72595af73ecc7037d221 Mon Sep 17 00:00:00 2001 From: NicolaP Date: Tue, 5 Jul 2022 17:41:07 +0200 Subject: [PATCH 8/8] Aggiunto commento nuova libreria --- Machine/WaterjetDbWindowVM.vb | 1 + 1 file changed, 1 insertion(+) diff --git a/Machine/WaterjetDbWindowVM.vb b/Machine/WaterjetDbWindowVM.vb index 2f97eac..90ba80d 100644 --- a/Machine/WaterjetDbWindowVM.vb +++ b/Machine/WaterjetDbWindowVM.vb @@ -4,6 +4,7 @@ Imports EgtUILib Imports EgtWPFLib5 Imports EgtWPFLib +' nuova libreria EgtWPFLib5 ver 2.4g1 Public Class WaterjetDbWindowVM_OmagCUT Inherits EgtWPFLib5.WaterjetDbWindowVM