From 90adb8b2001090fdd8b4e354dee64fda22d38288 Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Thu, 27 Oct 2022 10:19:47 +0200 Subject: [PATCH] - Completata implementazione ModifyPartPanel - Corretto slice senza parametri di lavorazione - Corretta aggiunta di piu' none in lista lavorazioni - Aggiunto modulo per gestione colori delle superfici --- Icarus/Icarus.vbproj | 1 + Icarus/ImportPanel/ImportPanelVM.vb | 19 ++- Icarus/ModifyPartPanel/ModifyPartUtility.vb | 179 +++++++++++++++----- Icarus/SliceManager/SliceManagerVM.vb | 2 +- Icarus/TopPanel/TopPanelVM.vb | 2 +- Icarus/Utility/GeomEntityColors.vb | 57 +++++++ 6 files changed, 209 insertions(+), 51 deletions(-) create mode 100644 Icarus/Utility/GeomEntityColors.vb diff --git a/Icarus/Icarus.vbproj b/Icarus/Icarus.vbproj index cb6340f..4b75db0 100644 --- a/Icarus/Icarus.vbproj +++ b/Icarus/Icarus.vbproj @@ -262,6 +262,7 @@ + diff --git a/Icarus/ImportPanel/ImportPanelVM.vb b/Icarus/ImportPanel/ImportPanelVM.vb index 0a40424..fedd54f 100644 --- a/Icarus/ImportPanel/ImportPanelVM.vb +++ b/Icarus/ImportPanel/ImportPanelVM.vb @@ -224,7 +224,8 @@ Public Class ImportPanelVM Return Else ' Creo pezzi e layer necessari - For Each ImportPart In m_ImportPartList + For ImportPartIndex = 0 To m_ImportPartList.Count - 1 + Dim ImportPart As ImportPart = m_ImportPartList(ImportPartIndex) Dim frImportedPart As New Frame3d EgtGetGroupGlobFrame(m_nImportedPartId, frImportedPart) Dim nPartId As Integer = EgtCreateGroup(GDB_ID.ROOT, frImportedPart) @@ -328,6 +329,20 @@ Public Class ImportPanelVM For Each GeomEntity In ImportLayer.EntityList EgtRelocateGlob(GeomEntity.nId, nOthersLayerId, GDB_POS.LAST_SON) Next + If ImportPartIndex = 0 Then + For Each GeomEntity In ImportedEntityList + ' se curva + Dim EntityType As GDB_TY = EgtGetType(GeomEntity.nId) + Select Case EntityType + Case GDB_TY.CRV_ARC, GDB_TY.CRV_BEZ, GDB_TY.CRV_LINE + ' la trasformo in curva compo + EgtCreateCurveCompo(nOthersLayerId, GeomEntity.nId, True) + Case Else + ' altrimenti la sposto solamente + EgtRelocateGlob(GeomEntity.nId, nOthersLayerId, GDB_POS.LAST_SON) + End Select + Next + End If End Select Next ' aggiungo riferimento @@ -366,7 +381,7 @@ Public Class ImportPanelVM End If EgtSetInfo(nReferenceLayerId, KEY_REFERENCE, PrintSolidEntity.Reference) ' appoggio il pezzo sulla tavola - EgtMove( nPartId, New Vector3d(0, 0, -b3PrintSolid.Min.z)) + EgtMove(nPartId, New Vector3d(0, 0, -b3PrintSolid.Min.z)) ' lo aggiungo a lista pezzi Dim sFilePath As String = "" EgtGetInfo(m_nImportedPartId, FILE_PATH, sFilePath) diff --git a/Icarus/ModifyPartPanel/ModifyPartUtility.vb b/Icarus/ModifyPartPanel/ModifyPartUtility.vb index d2dca66..3d522c6 100644 --- a/Icarus/ModifyPartPanel/ModifyPartUtility.vb +++ b/Icarus/ModifyPartPanel/ModifyPartUtility.vb @@ -5,6 +5,14 @@ Imports EgtWPFLib5 Public Class ModifyEntity Inherits VMBase + ' layer sotto cui e' questa entita' + Private m_OrigLayer As ModifyLayer + Friend ReadOnly Property OrigLayer As ModifyLayer + Get + Return m_OrigLayer + End Get + End Property + Private m_bIsSelected As Boolean Public Property bIsSelected As Boolean Get @@ -39,7 +47,7 @@ Public Class ModifyEntity Public ReadOnly Property ghName As String Get - Return m_nId & If(Not String.IsNullOrWhiteSpace(m_sName), " - " & m_sName, "") + Return m_nId End Get End Property @@ -53,40 +61,43 @@ Public Class ModifyEntity End Set End Property - ' Definizione comandi - Private m_cmdImportedEntity As ICommand - - Sub New(nId As Integer, sName As String) + Sub New(nId As Integer, sName As String, OrigLayer As ModifyLayer) m_nId = nId m_sName = sName + m_OrigLayer = OrigLayer ' aggiungo voci layer a contextmenu - m_MenuList.Add(New MenuItemVm(Me, ModifyLayer.LayerType.RIBS)) - + CreateContextMenu(OrigLayer) End Sub -#Region "COMMANDS" - -#Region "ImportedEntity" - - Public ReadOnly Property ImportedEntity_DoubleClick As ICommand - Get - If m_cmdImportedEntity Is Nothing Then - m_cmdImportedEntity = New Command(AddressOf ImportedEntity) - End If - Return m_cmdImportedEntity - End Get - End Property - - Public Sub ImportedEntity() - If Not IsNothing(Map.refImportPanelVM.SelImportLayer) Then - 'Map.refModifyPartPanelVM.ImportedEntityList.Remove(Me) - Map.refModifyPartPanelVM.SelModifyLayer.EntityList.Add(Me) - End If + Friend Sub UpdateContextMenu(OrigLayer As ModifyLayer) + m_MenuList.Clear() + ' aggiungo voci layer a contextmenu + CreateContextMenu(OrigLayer) End Sub -#End Region ' ImportedEntity + Friend Sub CreateContextMenu(OrigLayer As ModifyLayer) + For Each ProjectPart In Map.refTopPanelVM.PartList + ' verifico in quali layer puo' andare questo elemento + Dim EntityType As GDB_TY = EgtGetType(nId) + Select Case EntityType + Case GDB_TY.GEO_POINT, GDB_TY.CRV_COMPO, GDB_TY.CRV_ARC, GDB_TY.CRV_BEZ, GDB_TY.CRV_LINE + ' recupero i layer + If OrigLayer.Type <> ModifyLayer.LayerType.MACH_START Then m_MenuList.Add(New MenuItemVm(Me, OrigLayer, ModifyLayer.LayerType.MACH_START, ProjectPart)) + If OrigLayer.Type <> ModifyLayer.LayerType.OTHERS Then m_MenuList.Add(New MenuItemVm(Me, OrigLayer, ModifyLayer.LayerType.OTHERS, ProjectPart)) + Case GDB_TY.SRF_MESH + ' verifico se volume chiuso + If OrigLayer.Type <> ModifyLayer.LayerType.PRINT_SOLID Then m_MenuList.Add(New MenuItemVm(Me, OrigLayer, ModifyLayer.LayerType.PRINT_SOLID, ProjectPart)) + If OrigLayer.Type <> ModifyLayer.LayerType.SHELL_NUMBER Then m_MenuList.Add(New MenuItemVm(Me, OrigLayer, ModifyLayer.LayerType.SHELL_NUMBER, ProjectPart)) + If OrigLayer.Type <> ModifyLayer.LayerType.AUX_SOLIDS Then m_MenuList.Add(New MenuItemVm(Me, OrigLayer, ModifyLayer.LayerType.AUX_SOLIDS, ProjectPart)) + If OrigLayer.Type <> ModifyLayer.LayerType.RIBS Then m_MenuList.Add(New MenuItemVm(Me, OrigLayer, ModifyLayer.LayerType.RIBS, ProjectPart)) + If OrigLayer.Type <> ModifyLayer.LayerType.OTHERS Then m_MenuList.Add(New MenuItemVm(Me, OrigLayer, ModifyLayer.LayerType.OTHERS, ProjectPart)) + End Select + Next + End Sub -#End Region ' COMMANDS + Friend Sub UpdateOrigLayer(NewLayer As ModifyLayer) + m_OrigLayer = NewLayer + End Sub End Class @@ -104,10 +115,10 @@ Public Class ModifyPart End Set End Property - Private m_nId As Integer - Public ReadOnly Property nId As Integer + Private m_PrintPart As Print3dPartVM + Public ReadOnly Property PrintPart As Print3dPartVM Get - Return m_nId + Return m_PrintPart End Get End Property @@ -123,7 +134,7 @@ Public Class ModifyPart Public ReadOnly Property ghName As String Get - Return If(Not String.IsNullOrWhiteSpace(m_sName), m_nId & " - " & m_sName, "Part" & m_nId) + Return m_PrintPart.sImportedFileName End Get End Property @@ -135,13 +146,13 @@ Public Class ModifyPart End Property Sub New(PrintPart As Print3dPartVM) - 'm_nId = If(Map.refImportPanelVM.ImportPartList.Count = 0, 1, Map.refImportPanelVM.ImportPartList.Max(Function(x) x.m_nId) + 1) - m_LayerList.Add(New ModifyLayer(ImportLayer.LayerType.PRINT_SOLID, "Print", PrintPart)) - m_LayerList.Add(New ModifyLayer(ImportLayer.LayerType.MACH_START, "Layer Start", PrintPart)) - m_LayerList.Add(New ModifyLayer(ImportLayer.LayerType.RIBS, "Ribs", PrintPart)) - m_LayerList.Add(New ModifyLayer(ImportLayer.LayerType.SHELL_NUMBER, "Reduce Shell Number", PrintPart)) - m_LayerList.Add(New ModifyLayer(ImportLayer.LayerType.AUX_SOLIDS, "Filled Solids", PrintPart)) - m_LayerList.Add(New ModifyLayer(ImportLayer.LayerType.OTHERS, "Others", PrintPart)) + m_PrintPart = PrintPart + m_LayerList.Add(New ModifyLayer(ModifyLayer.LayerType.PRINT_SOLID, "Print", PrintPart)) + m_LayerList.Add(New ModifyLayer(ModifyLayer.LayerType.MACH_START, "Layer Start", PrintPart)) + m_LayerList.Add(New ModifyLayer(ModifyLayer.LayerType.RIBS, "Ribs", PrintPart)) + m_LayerList.Add(New ModifyLayer(ModifyLayer.LayerType.SHELL_NUMBER, "Reduce Shell Number", PrintPart)) + m_LayerList.Add(New ModifyLayer(ModifyLayer.LayerType.AUX_SOLIDS, "Filled Solids", PrintPart)) + m_LayerList.Add(New ModifyLayer(ModifyLayer.LayerType.OTHERS, "Others", PrintPart)) End Sub End Class @@ -215,14 +226,14 @@ Public Class ModifyLayer Dim nEntityId As Integer = EgtGetFirstInGroup(m_nLayerId) Dim sEntitytName As String = "" EgtGetName(nEntityId, sEntitytName) - m_EntityList.Add(New ModifyEntity(nEntityId, sEntitytName)) + m_EntityList.Add(New ModifyEntity(nEntityId, sEntitytName, Me)) Case LayerType.MACH_START m_nLayerId = PrintPart.nMachStartLayerId Dim nEntityId As Integer = EgtGetFirstInGroup(m_nLayerId) Dim sEntitytName As String = "" EgtGetName(nEntityId, sEntitytName) While nEntityId <> GDB_ID.NULL - m_EntityList.Add(New ModifyEntity(nEntityId, sEntitytName)) + m_EntityList.Add(New ModifyEntity(nEntityId, sEntitytName, Me)) nEntityId = EgtGetNext(nEntityId) EgtGetName(nEntityId, sEntitytName) End While @@ -235,7 +246,7 @@ Public Class ModifyLayer Dim RibType As Integer = RibEntity.RibTypes.FROMDRAW EgtGetInfo(nEntityId, KEY_RIB_TYPE, RibType) If RibType = RibEntity.RibTypes.FROMIMPORT Then - m_EntityList.Add(New ModifyEntity(nEntityId, sEntitytName)) + m_EntityList.Add(New ModifyEntity(nEntityId, sEntitytName, Me)) End If nEntityId = EgtGetNext(nEntityId) EgtGetName(nEntityId, sEntitytName) @@ -249,7 +260,7 @@ Public Class ModifyLayer Dim ShellType As Integer = ShellNumberEntity.ShellNumberTypes.FROMDRAW EgtGetInfo(nEntityId, KEY_SHELLNBR_TYPE, ShellType) If ShellType = ShellNumberEntity.ShellNumberTypes.FROMIMPORT Then - m_EntityList.Add(New ModifyEntity(nEntityId, sEntitytName)) + m_EntityList.Add(New ModifyEntity(nEntityId, sEntitytName, Me)) End If nEntityId = EgtGetNext(nEntityId) EgtGetName(nEntityId, sEntitytName) @@ -263,7 +274,7 @@ Public Class ModifyLayer 'Dim ShellType As Integer = ShellNumberEntity.ShellNumberTypes.FROMDRAW 'EgtGetInfo(nEntityId, KEY_SHELLNBR_TYPE, ShellType) 'If ShellType = ShellNumberEntity.ShellNumberTypes.FROMIMPORT Then - m_EntityList.Add(New ModifyEntity(nEntityId, sEntitytName)) + m_EntityList.Add(New ModifyEntity(nEntityId, sEntitytName, Me)) 'End If nEntityId = EgtGetNext(nEntityId) EgtGetName(nEntityId, sEntitytName) @@ -274,7 +285,7 @@ Public Class ModifyLayer Dim sEntitytName As String = "" EgtGetName(nEntityId, sEntitytName) While nEntityId <> GDB_ID.NULL - m_EntityList.Add(New ModifyEntity(nEntityId, sEntitytName)) + m_EntityList.Add(New ModifyEntity(nEntityId, sEntitytName, Me)) nEntityId = EgtGetNext(nEntityId) EgtGetName(nEntityId, sEntitytName) End While @@ -288,6 +299,10 @@ Public Class MenuItemVm ' enita' di origine Private m_OrigEntity As ModifyEntity + Private m_OrigLayer As ModifyLayer + + ' pezzo in cui spostare + Private m_Part As Print3dPartVM ' tipo del layer indicato Private m_Type As ModifyLayer.LayerType @@ -324,9 +339,11 @@ Public Class MenuItemVm ' Definizione comando Private m_cmdCommand As ICommand - Sub New(OrigEntity As ModifyEntity, Type As ModifyLayer.LayerType) + Sub New(OrigEntity As ModifyEntity, OrigLayer As ModifyLayer, Type As ModifyLayer.LayerType, Part As Print3dPartVM) m_OrigEntity = OrigEntity + m_OrigLayer = OrigLayer m_Type = Type + m_Part = Part End Sub #Region "Cancel" @@ -341,8 +358,76 @@ Public Class MenuItemVm End Property Public Sub Command() - ' recupero layer in cui spostare l'elemento - + ' recupero layer da pezzo + Dim nLayerId As Integer = GDB_ID.NULL + Select Case m_Type + Case ModifyLayer.LayerType.PRINT_SOLID + nLayerId = m_Part.nPrintSolidLayerId + Case ModifyLayer.LayerType.MACH_START + nLayerId = m_Part.nMachStartLayerId + Case ModifyLayer.LayerType.RIBS + nLayerId = m_Part.nRibsLayerId + Case ModifyLayer.LayerType.SHELL_NUMBER + nLayerId = m_Part.nShellNumberLayerId + Case ModifyLayer.LayerType.AUX_SOLIDS + nLayerId = m_Part.nAuxSolidsLayerId + Case ModifyLayer.LayerType.OTHERS + nLayerId = m_Part.nOthersLayerId + End Select + ' sposto entita' + If EgtRelocateGlob(m_OrigEntity.nId, nLayerId) Then + ' elimino info vecchio layer + Select Case m_OrigLayer.Type + Case ModifyLayer.LayerType.PRINT_SOLID + EgtResetMark(m_OrigEntity.nId) + Case ModifyLayer.LayerType.MACH_START + Case ModifyLayer.LayerType.RIBS + EgtRemoveInfo(m_OrigEntity.nId, KEY_RIB_TYPE) + Case ModifyLayer.LayerType.SHELL_NUMBER + EgtRemoveInfo(m_OrigEntity.nId, KEY_SHELLNBR_TYPE) + Case ModifyLayer.LayerType.AUX_SOLIDS + EgtRemoveInfo(m_OrigEntity.nId, KEY_AUXSOLID_TYPE) + Case ModifyLayer.LayerType.OTHERS + End Select + ' sposto in lista + m_OrigLayer.EntityList.Remove(m_OrigEntity) + Dim NewPart As ModifyPart = Map.refModifyPartPanelVM.ModifyPartList.FirstOrDefault(Function(x) x.PrintPart.nPartId = m_Part.nPartId) + If Not IsNothing(NewPart) Then + Dim NewLayer As ModifyLayer = NewPart.LayerList.FirstOrDefault(Function(x) x.Type = m_Type) + If Not IsNothing(NewLayer) Then + NewLayer.EntityList.Add(m_OrigEntity) + ' aggiorno riferimenti nell'entita' + m_OrigEntity.UpdateOrigLayer(NewLayer) + End If + End If + ' aggiungo info nuovo layer + Select Case m_Type + Case ModifyLayer.LayerType.PRINT_SOLID + EgtSetName(m_OrigEntity.nId, PRINT_SOLID) + EgtSetColor(m_OrigEntity.nId, c3Print) + Case ModifyLayer.LayerType.MACH_START + EgtSetName(m_OrigEntity.nId, LAY_MACH_START) + EgtSetColor(m_OrigEntity.nId, c3MachStart) + Case ModifyLayer.LayerType.RIBS + EgtSetName(m_OrigEntity.nId, LAY_RIBS) + EgtSetInfo(m_OrigEntity.nId, KEY_RIB_TYPE, RibEntity.RibTypes.FROMIMPORT) + EgtSetColor(m_OrigEntity.nId, c3Rib) + Case ModifyLayer.LayerType.SHELL_NUMBER + EgtSetName(m_OrigEntity.nId, LAY_SHELL_NBR) + EgtSetInfo(m_OrigEntity.nId, KEY_SHELLNBR_TYPE, ShellNumberEntity.ShellNumberTypes.FROMIMPORT) + EgtSetColor(m_OrigEntity.nId, c3ShellNumber) + Case ModifyLayer.LayerType.AUX_SOLIDS + EgtSetName(m_OrigEntity.nId, LAY_AUX_SOLIDS) + EgtSetInfo(m_OrigEntity.nId, KEY_AUXSOLID_TYPE, RibEntity.RibTypes.FROMIMPORT) + EgtSetColor(m_OrigEntity.nId, c3AuxSolids) + Case ModifyLayer.LayerType.OTHERS + EgtSetName(m_OrigEntity.nId, LAY_OTHERS) + EgtSetColor(m_OrigEntity.nId, c3Others) + End Select + EgtDraw() + ' aggiorno riferimenti nel context menu item + m_OrigEntity.UpdateContextMenu(m_OrigEntity.OrigLayer) + End If End Sub #End Region ' Cancel diff --git a/Icarus/SliceManager/SliceManagerVM.vb b/Icarus/SliceManager/SliceManagerVM.vb index d414ca5..2bfdc93 100644 --- a/Icarus/SliceManager/SliceManagerVM.vb +++ b/Icarus/SliceManager/SliceManagerVM.vb @@ -496,7 +496,7 @@ Public Class SliceManagerVM m_bCalculating = False Return End If - If IsNothing(Map.refTopPanelVM.SelMachining) Then + If IsNothing(Map.refTopPanelVM.SelMachining) OrElse IsNothing(Map.refTopPanelVM.CurrMachining) OrElse Map.refTopPanelVM.CurrMachining.dCurrStrandH <= 0 Then MessageBox.Show("No print parameters set!", "Error", MessageBoxButton.OK, MessageBoxImage.Error) m_bCalculating = False Return diff --git a/Icarus/TopPanel/TopPanelVM.vb b/Icarus/TopPanel/TopPanelVM.vb index d2c0f26..4e6c414 100644 --- a/Icarus/TopPanel/TopPanelVM.vb +++ b/Icarus/TopPanel/TopPanelVM.vb @@ -267,7 +267,7 @@ Public Class TopPanelVM m_MachiningList.Remove(MachiningIndex.Empty()) End If ' se nuova lavorazione e' none - If SelMachining.sGUID = Guid.Empty Then + If SelMachining.sGUID = Guid.Empty AndAlso Not MachiningList.Any(Function(x) x.sGUID = MachiningIndex.Empty.sGUID) Then ' aggiungo lavorazione vuota MachiningList.Insert(0, MachiningIndex.Empty()) End If diff --git a/Icarus/Utility/GeomEntityColors.vb b/Icarus/Utility/GeomEntityColors.vb new file mode 100644 index 0000000..2f007f6 --- /dev/null +++ b/Icarus/Utility/GeomEntityColors.vb @@ -0,0 +1,57 @@ +Imports EgtUILib + +Module GeomEntityColors + + Private m_c3Print As Color3d + Public ReadOnly Property c3Print As Color3d + Get + Return m_c3Print + End Get + End Property + + Private m_c3MachStart As Color3d + Public ReadOnly Property c3MachStart As Color3d + Get + Return m_c3MachStart + End Get + End Property + + Private m_c3Rib As Color3d + Public ReadOnly Property c3Rib As Color3d + Get + Return m_c3Rib + End Get + End Property + + Private m_c3ShellNumber As Color3d + Public ReadOnly Property c3ShellNumber As Color3d + Get + Return m_c3ShellNumber + End Get + End Property + + Private m_c3AuxSolids As Color3d + Public ReadOnly Property c3AuxSolids As Color3d + Get + Return m_c3AuxSolids + End Get + End Property + + Private m_c3Others As Color3d + Public ReadOnly Property c3Others As Color3d + Get + Return m_c3Others + End Get + End Property + + Sub New() + ' imposto colori superfici + m_c3Print.FromColor(System.Drawing.Color.Yellow) + m_c3MachStart.FromColor(System.Drawing.Color.Red) + m_c3Rib.FromColor(System.Drawing.Color.MediumOrchid) + m_c3ShellNumber.FromColor(System.Drawing.Color.Lime) + m_c3AuxSolids.FromColor(System.Drawing.Color.DarkGoldenrod) + m_c3Others.FromColor(System.Drawing.Color.LightGray) + End Sub + +End Module