From 8d548dee9c2ccc212077ea897ba8859bb55a4944 Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Tue, 27 Dec 2022 13:38:40 +0100 Subject: [PATCH] - aggiunta EdgeAnalysis per la ricerca dei bordi aperti dei solidi - bloccato altri comandi quando in simulazione --- Icarus/Constants/Const3dPrint.vb | 1 + Icarus/InstrumentPanel/MyInstrumentPanelVM.vb | 122 ++++++++++++++++++ Icarus/SimulationPanel/SimulationPanelVM.vb | 18 ++- Icarus/StatusBar/StatusBarV.xaml | 10 +- Icarus/TopPanel/TopPanelVM.vb | 12 ++ 5 files changed, 159 insertions(+), 4 deletions(-) diff --git a/Icarus/Constants/Const3dPrint.vb b/Icarus/Constants/Const3dPrint.vb index 36a1163..d039c52 100644 --- a/Icarus/Constants/Const3dPrint.vb +++ b/Icarus/Constants/Const3dPrint.vb @@ -19,6 +19,7 @@ Public Const RESULT_READ_PROG = "ResultReadProg" Public Const KEY_CALC_SOLIDS = "CalcSolids" Public Const KEY_HAS_SOLIDS = "Solids" + Public Const LAY_CHUNKS = "Chunks" ' parametri calcolo tempi, F ed S diff --git a/Icarus/InstrumentPanel/MyInstrumentPanelVM.vb b/Icarus/InstrumentPanel/MyInstrumentPanelVM.vb index 3628a6c..2b2def1 100644 --- a/Icarus/InstrumentPanel/MyInstrumentPanelVM.vb +++ b/Icarus/InstrumentPanel/MyInstrumentPanelVM.vb @@ -6,6 +6,20 @@ Imports EgtWPFLib5 Public Class MyInstrumentPanelVM Inherits InstrumentPanelVM + Private m_PrevSelObjs As New List(Of Integer) + Friend ReadOnly Property PrevSelObjs As List(Of Integer) + Get + Return m_PrevSelObjs + End Get + End Property + + Private m_PrevPage As Pages + Friend ReadOnly Property PrevPage As Pages + Get + Return m_PrevPage + End Get + End Property + Private m_InstrumentPanel_IsEnabled As Boolean = True Public Property InstrumentPanel_IsEnabled As Boolean Get @@ -16,6 +30,114 @@ Public Class MyInstrumentPanelVM End Set End Property + Private m_bEdgeAnalysis_IsChecked As Boolean + Public Property bEdgeAnalysis_IsChecked As Boolean + Get + Return m_bEdgeAnalysis_IsChecked + End Get + Set(value As Boolean) + ' verifico che non sia in corso un altro comando + If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return + m_bEdgeAnalysis_IsChecked = value + If value Then + ' salvo pagina precedente ed imposto pagina nulla + m_PrevPage = Map.refTopPanelVM.SelPage + Map.refTopPanelVM.SelPage = Pages.NULL + ' disabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma + Map.refProjManagerVM.SetProjCmdIsEnabled(False) + Map.refTopPanelVM.SetTopPanelIsEnabled(False) + Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(False) + Map.refSliceManagerVM.SetButtonsIsEnabled(False) + Map.refSliderManagerVM.SetLayerIndexIsEnabled(False) + Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(False) + ' Disabilito segnalazione modificato + Dim DisableMgr As New DisableModifiedMgr + ' salvo selezione precedente e deseleziono altri oggetti + Dim nSelObjId As Integer = EgtGetFirstSelectedObj() + While nSelObjId <> GDB_ID.NULL + m_PrevSelObjs.Add(nSelObjId) + nSelObjId = EgtGetNextSelectedObj() + End While + ' eseguo comando su tutti i pezzi + Dim sResult As String = "Chunk Number for every part:" + For Each CurrPart In Map.refTopPanelVM.PartList + EgtDeselectAll() + Dim nPrintSolidId As Integer = EgtGetFirstInGroup(CurrPart.nPrintSolidLayerId) + Dim nChunkLayerId As Integer = EgtGetFirstNameInGroup(CurrPart.nPartId, LAY_CHUNKS) + If nChunkLayerId = GDB_ID.NULL Then + nChunkLayerId = EgtCreateGroup(CurrPart.nPartId) + EgtSetName(nChunkLayerId, LAY_CHUNKS) + End If + EgtSelectObj(nPrintSolidId) + EgtSetCurrPartLayer(CurrPart.nPartId, nChunkLayerId) + ' estraggo bordi superficie + Dim nCount As Integer = 0 + If EgtGetType(nPrintSolidId) = GDB_TY.SRF_FRGN Then + For nChunk As Integer = 0 To EgtSurfFrChunkCount(nPrintSolidId) - 1 + EgtExtractSurfFrChunkLoops(nPrintSolidId, nChunk, nChunkLayerId, nCount) + Next + ElseIf EgtGetType(nPrintSolidId) = GDB_TY.SRF_MESH Then + EgtExtractSurfTmLoops(nPrintSolidId, nChunkLayerId, nCount) + ElseIf EgtGetType(nPrintSolidId) = GDB_TY.SRF_BEZ Then + EgtExtractSurfBezierLoops(nPrintSolidId, nChunkLayerId, nCount) + End If + sResult &= Environment.NewLine & CurrPart.sName & " = " & nCount + Next + EgtDeselectAll() + ' li seleziono per evidenziarli + For Each CurrPart In Map.refTopPanelVM.PartList + Dim nChunkLayerId As Integer = EgtGetFirstNameInGroup(CurrPart.nPartId, LAY_CHUNKS) + Dim nChunkId As Integer = EgtGetFirstInGroup(nChunkLayerId) + While nChunkId <> GDB_ID.NULL + EgtSelectObj(nChunkId) + nChunkId = EgtGetNext(nChunkId) + End While + Next + EgtDraw() + ' Ripristino stato segnalazione modifica + DisableMgr.ReEnable() + MessageBox.Show(sResult) + Else + ' Disabilito segnalazione modificato + Dim DisableMgr As New DisableModifiedMgr + ' cancello tutti i gruppi con i chunk + For Each CurrPart In Map.refTopPanelVM.PartList + Dim nChunkLayerId As Integer = EgtGetFirstNameInGroup(CurrPart.nPartId, LAY_CHUNKS) + If nChunkLayerId <> GDB_ID.NULL Then EgtErase(nChunkLayerId) + Next + ' ripristino selezioni precedenti + For Each Id In m_PrevSelObjs + EgtSelectObj(Id) + Next + ' Ripristino stato segnalazione modifica + DisableMgr.ReEnable() + EgtDraw() + ' ripristino pagina precedente + Map.refTopPanelVM.SelPage = m_PrevPage + ' riabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma + Map.refProjManagerVM.SetProjCmdIsEnabled(True) + Map.refTopPanelVM.SetTopPanelIsEnabled(True) + Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(True) + Map.refSliceManagerVM.SetButtonsIsEnabled(True) + Map.refSliderManagerVM.SetLayerIndexIsEnabled(True) + Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(True) + End If + End Set + End Property + + Private m_bEdgeAnalysis_IsEnabled As Boolean = True + Public Property bEdgeAnalysis_IsEnabled As Boolean + Get + Return m_bEdgeAnalysis_IsEnabled + End Get + Set(value As Boolean) + m_bEdgeAnalysis_IsEnabled = value + End Set + End Property + Friend Sub SetEdgeAnalysisIsEnabled(value As Boolean) + m_bEdgeAnalysis_IsEnabled = value + NotifyPropertyChanged(NameOf(bEdgeAnalysis_IsEnabled)) + End Sub #Region "CONSTRUCTORS" diff --git a/Icarus/SimulationPanel/SimulationPanelVM.vb b/Icarus/SimulationPanel/SimulationPanelVM.vb index 50765bb..bc7b974 100644 --- a/Icarus/SimulationPanel/SimulationPanelVM.vb +++ b/Icarus/SimulationPanel/SimulationPanelVM.vb @@ -154,6 +154,14 @@ Public Class SimulationPanelVM Map.refViewLayerManagerVM.SetViewLayerManagerVisibility(False) ' disattivo comandi progetto Map.refProjManagerVM.SetProjCmdIsEnabled(False) + ' disabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma + Map.refProjManagerVM.SetProjCmdIsEnabled(False) + Map.refTopPanelVM.SetTopPanelIsEnabled(False) + Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(False) + Map.refSliceManagerVM.SetButtonsIsEnabled(False) + Map.refSliderManagerVM.SetLayerIndexIsEnabled(False) + Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(False) + Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(False) End Sub Private Function LoadCurrTools() As Boolean @@ -198,8 +206,14 @@ Public Class SimulationPanelVM Map.refViewLayerManagerVM.SetViewLayerManagerVisibility(True) ' disattivo comandi progetto Map.refProjManagerVM.SetProjCmdIsEnabled(True) - '' Riabilito Machine Panel (utensili, lavoraz...) - 'OmagOFFICEMap.refMachinePanelVM.MachPanel_IsEnabled = True + ' riabilito ProjManager, TopPanel, TFS, Slider, bottoni e uscita dal programma + Map.refProjManagerVM.SetProjCmdIsEnabled(True) + Map.refTopPanelVM.SetTopPanelIsEnabled(True) + Map.refViewLayerManagerVM.SetViewLayerManagerIsEnabled(True) + Map.refSliceManagerVM.SetButtonsIsEnabled(True) + Map.refSliderManagerVM.SetLayerIndexIsEnabled(True) + Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(True) + Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(True) End Sub #End Region ' METHODS diff --git a/Icarus/StatusBar/StatusBarV.xaml b/Icarus/StatusBar/StatusBarV.xaml index 7c8aa1f..664897f 100644 --- a/Icarus/StatusBar/StatusBarV.xaml +++ b/Icarus/StatusBar/StatusBarV.xaml @@ -109,10 +109,16 @@ + Style="{StaticResource ToolBar_ToggleButton}" + IsChecked="{Binding GetDistIsChecked}"> + + + diff --git a/Icarus/TopPanel/TopPanelVM.vb b/Icarus/TopPanel/TopPanelVM.vb index aa471aa..4f3b09e 100644 --- a/Icarus/TopPanel/TopPanelVM.vb +++ b/Icarus/TopPanel/TopPanelVM.vb @@ -409,6 +409,7 @@ Public Class TopPanelVM Map.refSliceManagerVM.SetButtonsIsEnabled(False) Map.refSliderManagerVM.SetLayerIndexIsEnabled(False) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(False) + Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(False) ' imposto pagina Map.refLeftPanelVM.SetSelPanel(LeftPanelVM.Panels.IMPORT) ''Map.refImportPanelVM.Init() @@ -422,6 +423,7 @@ Public Class TopPanelVM Map.refSliceManagerVM.SetButtonsIsEnabled(True) Map.refSliderManagerVM.SetLayerIndexIsEnabled(True) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(True) + Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(True) Return True End Function @@ -443,6 +445,7 @@ Public Class TopPanelVM Map.refSliderManagerVM.SetSliderVisibility(True) Map.refSliderManagerVM.SetLayerIndexToMax() Map.refViewLayerManagerVM.UpdateIsVisibleFromIni() + Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(False) EgtDeselectAll() End Sub @@ -450,6 +453,7 @@ Public Class TopPanelVM Map.refSliceManagerVM.UpdateState(False) Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.NULL) Map.refSliderManagerVM.SetSliderVisibility(False) + Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(True) SelPart = SelPart Return True End Function @@ -471,6 +475,7 @@ Public Class TopPanelVM Map.refSliceManagerVM.SetButtonsIsEnabled(False) Map.refSliderManagerVM.SetLayerIndexIsEnabled(False) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(False) + Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(False) ' imposto pagina Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.MATERIALDB) End Sub @@ -483,6 +488,7 @@ Public Class TopPanelVM Map.refSliceManagerVM.SetButtonsIsEnabled(True) Map.refSliderManagerVM.SetLayerIndexIsEnabled(True) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(True) + Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(True) Return True End Function @@ -494,6 +500,7 @@ Public Class TopPanelVM Map.refSliceManagerVM.SetButtonsIsEnabled(False) Map.refSliderManagerVM.SetLayerIndexIsEnabled(False) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(False) + Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(False) ' imposto pagina Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.PRINTPARAMDB) End Sub @@ -506,6 +513,7 @@ Public Class TopPanelVM Map.refSliceManagerVM.SetButtonsIsEnabled(True) Map.refSliderManagerVM.SetLayerIndexIsEnabled(True) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(True) + Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(True) Return True End Function @@ -517,6 +525,7 @@ Public Class TopPanelVM Map.refSliceManagerVM.SetButtonsIsEnabled(False) Map.refSliderManagerVM.SetLayerIndexIsEnabled(False) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(False) + Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(False) ' imposto pagina Map.refRightPanelVM.SetSelPanel(RightPanelVM.Panels.CURRPRINTPARAM) End Sub @@ -529,6 +538,7 @@ Public Class TopPanelVM Map.refSliceManagerVM.SetButtonsIsEnabled(True) Map.refSliderManagerVM.SetLayerIndexIsEnabled(True) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(True) + Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(True) Return True End Function @@ -539,6 +549,7 @@ Public Class TopPanelVM Map.refSliceManagerVM.SetButtonsIsEnabled(False) Map.refSliderManagerVM.SetLayerIndexIsEnabled(False) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(False) + Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(False) ' tolgo mark da pezzo selezionato If Not IsNothing(SelPart) Then EgtResetMark(SelPart.nPrintSolidId) @@ -554,6 +565,7 @@ Public Class TopPanelVM Map.refSliceManagerVM.SetButtonsIsEnabled(True) Map.refSliderManagerVM.SetLayerIndexIsEnabled(True) Map.refSliderManagerVM.SetLayerAdvancementIsEnabled(True) + Map.refInstrumentPanelVM.SetEdgeAnalysisIsEnabled(True) ' ripristino mark su pezzo selezionato If Not IsNothing(SelPart) Then EgtSetMark(SelPart.nPrintSolidId)