From ccfc8f89e46d71cbbd65cc2ec17b4e34822d3da5 Mon Sep 17 00:00:00 2001 From: NicolaP Date: Mon, 23 May 2022 15:54:01 +0200 Subject: [PATCH] Gestione separazione tagli waterjet in pagina Nest --- CAM/CamAuto.vb | 28 ++++++++ CadCuts/CadCutPageUC.xaml.vb | 5 ++ CadCuts/NestPageUC.xaml | 5 +- CadCuts/NestPageUC.xaml.vb | 126 +++++++++++++++++++++++++++++++++-- MainWindow.xaml.vb | 14 ++++ Project/ProjectMgrUC.xaml.vb | 2 + 6 files changed, 175 insertions(+), 5 deletions(-) diff --git a/CAM/CamAuto.vb b/CAM/CamAuto.vb index 7c6b872..9187dc9 100644 --- a/CAM/CamAuto.vb +++ b/CAM/CamAuto.vb @@ -101,6 +101,34 @@ Friend Module CamAuto Return True End Function + Friend Function ResetAllSplitCurv() As Boolean + Dim bOk As Boolean = True + Dim nIdPart As Integer = EgtGetFirstPart() + While nIdPart <> GDB_ID.NULL + ' accedo al Layer OutLoop + Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP) + Dim nIdMy As Integer = EgtGetFirstInGroup(nIdLayerOutLoop) + While nIdMy <> GDB_ID.NULL + EgtRemoveInfo(nIdMy, "JoinEntity") + nIdMy = EgtGetNext(nIdMy) + End While + nIdPart = EgtGetNextPart(nIdPart) + End While + Dim nRawId As Integer = CamAuto.GetCurrentRaw() + nIdPart = EgtGetFirstPartInRawPart(nRawId) + While nIdPart <> GDB_ID.NULL + ' accedo al Layer OutLoop + Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP) + Dim nIdMy As Integer = EgtGetFirstInGroup(nIdLayerOutLoop) + While nIdMy <> GDB_ID.NULL + EgtRemoveInfo(nIdMy, "JoinEntity") + nIdMy = EgtGetNext(nIdMy) + End While + nIdPart = EgtGetNextPartInRawPart(nIdPart) + End While + Return bOk + End Function + Friend Function RemoveFinalEmptyPhases() As Boolean Dim nOpeId As Integer = EgtGetLastOperation() While nOpeId <> GDB_ID.NULL diff --git a/CadCuts/CadCutPageUC.xaml.vb b/CadCuts/CadCutPageUC.xaml.vb index 287cb20..8086801 100644 --- a/CadCuts/CadCutPageUC.xaml.vb +++ b/CadCuts/CadCutPageUC.xaml.vb @@ -108,6 +108,7 @@ Public Class CadCutPageUC Private Sub PhotoBtn_Click(sender As Object, e As RoutedEventArgs) Handles PhotoBtn.Click m_MainWindow.TestOff() m_MainWindow.DragRettangleOff() + m_MainWindow.SplitCurvWJOff() m_CurrProjPage.m_SceneButtons.MeasureBtn.IsChecked = False EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) ' Se macchina fotografica collegata, faccio una foto @@ -142,6 +143,7 @@ Public Class CadCutPageUC Private Sub RawPartBtn_Click(sender As Object, e As RoutedEventArgs) Handles RawPartBtn.Click m_MainWindow.TestOff() m_MainWindow.DragRettangleOff() + m_MainWindow.SplitCurvWJOff() m_CurrProjPage.CurrProjGrid.Visibility = Windows.Visibility.Hidden m_CurrProjPage.CurrentProjectPageGrid.Children.Remove(Me) m_CurrProjPage.CurrentProjectPageGrid.Children.Add(m_MainWindow.m_RawPartPage) @@ -168,6 +170,7 @@ Public Class CadCutPageUC Private Sub DrawBtn_Click(sender As Object, e As RoutedEventArgs) Handles DrawBtn.Click m_MainWindow.TestOff() m_MainWindow.DragRettangleOff() + m_MainWindow.SplitCurvWJOff() m_MainWindow.MainWindowGrid.Children.Remove(m_MainWindow.m_CurrentProjectPageUC) m_MainWindow.MainWindowGrid.Children.Add(m_MainWindow.m_DrawPageUC) m_MainWindow.m_ActivePage = MainWindow.Pages.Draw @@ -176,6 +179,7 @@ Public Class CadCutPageUC Private Sub ImportBtn_Click(sender As Object, e As RoutedEventArgs) Handles ImportBtn.Click m_MainWindow.TestOff() m_MainWindow.DragRettangleOff() + m_MainWindow.SplitCurvWJOff() m_MainWindow.MainWindowGrid.Children.Remove(m_MainWindow.m_CurrentProjectPageUC) m_MainWindow.MainWindowGrid.Children.Add(m_MainWindow.m_ImportPageUC) m_MainWindow.m_ActivePage = MainWindow.Pages.Import @@ -198,6 +202,7 @@ Public Class CadCutPageUC Private Sub SplitBtn_Click(sender As Object, e As RoutedEventArgs) Handles SplitBtn.Click m_MainWindow.DragRettangleOff() + m_MainWindow.SplitCurvWJOff() m_CurrProjPage.m_SceneButtons.MeasureBtn.IsChecked = False EgtDeselectObj(m_NestPage.m_CurrSelectedCurv) m_ProjectMgr.TestBtn.IsChecked = False diff --git a/CadCuts/NestPageUC.xaml b/CadCuts/NestPageUC.xaml index ba8a1fc..20a1e23 100644 --- a/CadCuts/NestPageUC.xaml +++ b/CadCuts/NestPageUC.xaml @@ -109,13 +109,16 @@ - + + + + diff --git a/CadCuts/NestPageUC.xaml.vb b/CadCuts/NestPageUC.xaml.vb index 6771c03..f0403cd 100644 --- a/CadCuts/NestPageUC.xaml.vb +++ b/CadCuts/NestPageUC.xaml.vb @@ -16,12 +16,15 @@ Public Class NestPageUC ' dati per DragRettangoli (estensio/accorciamento dei rettangoli trascinando un lato) Private m_bIsVisibleDragRettangle As Boolean = False Friend m_bIsCheckedDragRettangle As Boolean = False + ' dati per attivare disattivare le lavorazioni WaterJet + Private m_bIsVisibleSliptCurveWJ As Boolean = False + Friend m_bIsCheckedSplitCurveWJ As Boolean = False ' Id della curva e del taglio selezionati per eseguire il test Friend m_CurrSelectedCurv As Integer = GDB_ID.NULL Friend m_CurrSelectedSawCurv As Integer = GDB_ID.NULL - ' Id del rettangolo, del traglio e della curva da modificare tramite Drag + ' Id del rettangolo, del taglio e della curva da modificare tramite Drag Private m_nIdSelectedOutLoopRettangle As Integer = GDB_ID.NULL Private m_nIdSelectedRegionRettangle As Integer = GDB_ID.NULL Private m_nIdSelectedSawRettangle As Integer = GDB_ID.NULL @@ -33,6 +36,10 @@ Public Class NestPageUC Private m_sTextContent As String = String.Empty Private m_dRettangleIsModified As Boolean = False + ' Id dei lato WJ da separare tramite comando ON_OFF + Private m_nIdSelectedSideWJ As Integer = GDB_ID.NULL + Private m_nIdSelectedWaterJet As Integer = GDB_ID.NULL + Enum PART_POS As Integer IN_TABLE = -1 NONE_TABLE = 0 @@ -85,13 +92,21 @@ Public Class NestPageUC SelectAllBtn.ToolTip = EgtMsg(MSG_NESTPAGEUC + 4) 'Select All - Seleziona Tutto DeselectAllBtn.ToolTip = EgtMsg(MSG_NESTPAGEUC + 5) 'Deselect All - Deseleziona Tutto + Dim nColumsIn_UG1 As Integer = 2 ' gestisco la visualizzazione del comando PAN (per il drag dei rettangoli) m_bIsVisibleDragRettangle = (GetPrivateProfileInt(S_NEST, K_DRAG_RETTANGLE, 0, m_MainWindow.GetIniFile()) <> 0) If Not m_bIsVisibleDragRettangle Then - UG1.Columns = 1 + nColumsIn_UG1 = 1 DragRettanleBtn.Visibility = Visibility.Collapsed End If - + ' gestisco la visualizzazione del comando ON_OFF (per i tagli waterjet) + If m_MainWindow.m_CurrentMachine.WaterJettingActive Then + nColumsIn_UG1 += 1 + SplitCurveWJBtn.Visibility = Visibility.Visible + Else + SplitCurveWJBtn.Visibility = Visibility.Collapsed + End If + UG1.Columns = nColumsIn_UG1 End Sub Private Sub NestPage_Loaded(sender As Object, e As RoutedEventArgs) @@ -209,6 +224,73 @@ Public Class NestPageUC Return End Sub + ' funzione per la selezione dei lati su cui operare la separazione del tagli waterjet + Private Sub OnMyMouseDownSceneSplitCurv(sender As Object, e As System.Windows.Forms.MouseEventArgs) + ' Verifico di essere il gestore attivo e non in modalità registrazione + If Not m_bActive Or m_bRegister Then Return + ' Si può selezionare solo con il tasto sinistro e se il bottone TEST Attivo + If e.Button <> Windows.Forms.MouseButtons.Left Or + Not m_bIsCheckedSplitCurveWJ Then + Return + End If + ' Se esiste un elemento selezionato + EgtResetMark(m_nIdSelectedWaterJet) + ' Verifico se selezionato indicativo di pezzo + EgtSetObjFilterForSelWin(False, True, False, False, False) + Dim nSelMy As Integer + EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSelMy) + Dim nIdMy As Integer = EgtGetFirstObjInSelWin() + While nIdMy <> GDB_ID.NULL + Dim sLayer As String = String.Empty + ' layer di origine + Dim nIdParent As Integer = EgtGetParent(nIdMy) + ' recupero il nome del Layer + EgtGetName(nIdParent, sLayer) + ' solo se il nome del layer è quello associato ad un lato esterno allora procedo con l'evidenziazione + If sLayer = NAME_OUTLOOP Then + If EgtGetType(nIdMy) = GDB_TY.CRV_ARC OrElse EgtGetType(nIdMy) = GDB_TY.CRV_COMPO OrElse EgtGetType(nIdMy) = GDB_TY.CRV_LINE Then + If m_bIsCheckedSplitCurveWJ <> GDB_ID.NULL Or m_bIsCheckedSplitCurveWJ = nIdMy Then + EgtDeselectObj(m_bIsCheckedSplitCurveWJ) + End If + ' recupero il gruppo della lavorazione associata + Dim nIdParentPart As Integer = EgtGetParent(nIdParent) + Dim nIdPV As Integer = EgtGetFirstNameInGroup(nIdParentPart, "PV") + Dim nIdWJ As Integer = EgtGetFirstNameInGroup(nIdPV, "Waterjet" & nIdMy.ToString & "S") + ' verifico che la lavorazione associata sia di tipo waterjet + If Not EgtGetGroupObjs(nIdWJ) Then + m_nIdSelectedSideWJ = nIdMy + Dim sValInfo As String = "1" + If EgtGetInfo(nIdMy, "JoinEntity", sValInfo) Then + If sValInfo = "1" Then + ' separo il taglio + EgtSetInfo(nIdMy, "JoinEntity", 0) + Else + ' unisco il taglio + EgtSetInfo(nIdMy, "JoinEntity", 1) + End If + Else + ' se manca l'info allora il taglio sValInfo = "1" quindi separo il taglio + EgtSetInfo(nIdMy, "JoinEntity", 0) + End If + ' Ricalcolo tutte le lavorazioni + Dim nWarn As Integer = 0 + ResetAllMachinings(nWarn) + ' Aggiorno visualizzazione + nIdWJ = EgtGetFirstNameInGroup(nIdPV, "Waterjet" & nIdMy.ToString & "S") + m_nIdSelectedWaterJet = nIdWJ + EgtSetMark(nIdWJ) + EgtSelectObj(nIdMy) + EgtDraw() + Exit While + End If + + End If + End If + nIdMy = EgtGetNextObjInSelWin() + End While + Return + End Sub + #Region "DRAG RETTANGLE" ' funzione chiamata da OnMyMouseMoveScene: verifica che la selezione sia corretta (deve essere il lato di una figura rettangolare) @@ -511,6 +593,13 @@ Public Class NestPageUC #End Region ' Drag Rettangolo + Public Sub ResetSplitCurvWJParam() + EgtDeselectObj(m_nIdSelectedSideWJ) + EgtResetMark(m_nIdSelectedWaterJet) + m_nIdSelectedSideWJ = GDB_ID.NULL + m_nIdSelectedWaterJet = GDB_ID.NULL + End Sub + Private Sub OnMyMouseDownScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles m_CurrProjPage.OnMouseDownScene ' Verifico di essere il gestore attivo e non in modalità registrazione If Not m_bActive Or m_bRegister Then Return @@ -539,6 +628,12 @@ Public Class NestPageUC Return End If + ' se in modalità SlitCurveWJ (separazione dei tagli WaterJet) + If m_bIsCheckedSplitCurveWJ Then + OnMyMouseDownSceneSplitCurv(sender, e) + Return + End If + ' Per default no drag m_bDrag = False ' Verifico se selezionato indicativo di pezzo @@ -802,12 +897,18 @@ Public Class NestPageUC If Not m_bActive Then Return ' verifico che non sia attivo il comando Test If m_bSelectCurv Then Return - ' verifico che non sia attivo il comando di Drag dei rettangoli + ' verifico che sia attivo il comando di Drag dei rettangoli If m_bIsCheckedDragRettangle Then ' deseleziono gli oggeti, resetto le variabili usate, aggiorno il disegno ResetDragRettangleParam() Return End If + ' verifico che sia attivo il comando di modifica tagli waterjet + If m_bIsCheckedSplitCurveWJ Then + ' deseleziono gli oggeti, resetto le variabili usate, aggiorno il disegno + ResetSplitCurvWJParam() + Return + End If ' Se eseguito drag If Not m_bDragToStart Then @@ -1850,6 +1951,8 @@ Public Class NestPageUC Private Sub DragRettangle_Click() Handles DragRettanleBtn.Click If DragRettanleBtn.IsChecked Then m_bIsCheckedDragRettangle = True + SplitCurveWJBtn.IsChecked = False + m_bIsCheckedSplitCurveWJ = False Else m_bIsCheckedDragRettangle = False ResetDragRettangleParam() @@ -1859,6 +1962,21 @@ Public Class NestPageUC EgtDraw() End Sub + Private Sub SplitCurveWJBtn_Click() Handles SplitCurveWJBtn.Click + If SplitCurveWJBtn.IsChecked Then + m_bIsCheckedSplitCurveWJ = True + DragRettanleBtn.IsChecked = False + m_bIsCheckedDragRettangle = False + Else + m_bIsCheckedSplitCurveWJ = False + ' resetto i parametri di selezione dei lati + ResetSplitCurvWJParam() + m_CurrProjPage.ClearMessage() + ShowParkedParts() + End If + EgtDraw() + End Sub + Private Sub StorePartBtn_Click(sender As Object, e As RoutedEventArgs) Handles StorePartBtn.Click ' creo la lista delle famiglie di pezzi presenti in parcheggio GetFamilyGroupInPark() diff --git a/MainWindow.xaml.vb b/MainWindow.xaml.vb index 70a9d71..1171bfd 100644 --- a/MainWindow.xaml.vb +++ b/MainWindow.xaml.vb @@ -571,6 +571,8 @@ Class MainWindow TestOff() ' disabilito DragRettangle DragRettangleOff() + ' disabilito SplitCurv + SplitCurvWJOff() Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = True @@ -628,6 +630,7 @@ Class MainWindow m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False TestOff() DragRettangleOff() + SplitCurvWJOff() Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False @@ -682,6 +685,7 @@ Class MainWindow m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False TestOff() DragRettangleOff() + SplitCurvWJOff() Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False @@ -735,6 +739,7 @@ Class MainWindow m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False TestOff() DragRettangleOff() + SplitCurvWJOff() Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False @@ -789,6 +794,7 @@ Class MainWindow m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False TestOff() DragRettangleOff() + SplitCurvWJOff() Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False @@ -838,6 +844,7 @@ Class MainWindow m_CurrentProjectPageUC.m_SceneButtons.MeasureBtn.IsChecked = False TestOff() DragRettangleOff() + SplitCurvWJOff() Select Case m_ActivePage Case Pages.WorkInProgress WorkInProgressBtn.IsChecked = False @@ -1905,4 +1912,11 @@ Class MainWindow End Sub + Public Sub SplitCurvWJOff() + m_CadCutPageUC.m_NestPage.SplitCurveWJBtn.IsChecked = False + Me.m_CadCutPageUC.m_NestPage.m_bIsCheckedSplitCurveWJ = False + m_CadCutPageUC.m_NestPage.ResetSplitCurvWJParam() + + End Sub + End Class \ No newline at end of file diff --git a/Project/ProjectMgrUC.xaml.vb b/Project/ProjectMgrUC.xaml.vb index f415f76..b07d3d6 100644 --- a/Project/ProjectMgrUC.xaml.vb +++ b/Project/ProjectMgrUC.xaml.vb @@ -252,6 +252,8 @@ Public Class ProjectMgrUC EgtSetCurrentContext(m_CurrProjPage.CurrentProjectScene.GetCtx()) ' Cancello eventuali messaggi m_CurrProjPage.ClearMessage() + ' cancello tutti i tagli di separazione + ResetAllSplitCurv() ' Ricalcolo tutte le lavorazioni Dim nWarn As Integer = 0 ResetAllMachinings(nWarn)