From 20fd722dee5fdf365e5ccd9c128a3eb835907e8a Mon Sep 17 00:00:00 2001 From: NicolaP Date: Thu, 30 Jun 2022 15:14:30 +0200 Subject: [PATCH] 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