diff --git a/Icarus/Icarus.vbproj b/Icarus/Icarus.vbproj index 9c26b16..6dae7de 100644 --- a/Icarus/Icarus.vbproj +++ b/Icarus/Icarus.vbproj @@ -265,6 +265,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/ModifyPartPanelV.xaml b/Icarus/ModifyPartPanel/ModifyPartPanelV.xaml index e1368ae..5709294 100644 --- a/Icarus/ModifyPartPanel/ModifyPartPanelV.xaml +++ b/Icarus/ModifyPartPanel/ModifyPartPanelV.xaml @@ -60,11 +60,22 @@ + + + + + + diff --git a/Icarus/ModifyPartPanel/ModifyPartUtility.vb b/Icarus/ModifyPartPanel/ModifyPartUtility.vb index fbfa7fa..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,41 +47,57 @@ 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 - ' Definizione comandi - Private m_cmdImportedEntity As ICommand + Private m_MenuList As New List(Of MenuItemVm) + Public Property MenuList As List(Of MenuItemVm) + Get + Return m_MenuList + End Get + Set(value As List(Of MenuItemVm)) + m_MenuList = value + End Set + End Property - 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 + 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 @@ -91,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 @@ -110,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 @@ -122,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 @@ -142,7 +166,7 @@ Public Class ModifyLayer RIBS = 3 SHELL_NUMBER = 4 AUX_SOLIDS = 5 - OTHERS = 7 + OTHERS = 6 End Enum Private m_nLayerId As Integer @@ -200,32 +224,212 @@ Public Class ModifyLayer Case LayerType.PRINT_SOLID m_nLayerId = PrintPart.nPrintSolidLayerId Dim nEntityId As Integer = EgtGetFirstInGroup(m_nLayerId) - Dim sEnitytName As String = "" - EgtGetName(nEntityId, sEnitytName) - m_EntityList.Add(New ModifyEntity(nEntityId, sEnitytName)) + Dim sEntitytName As String = "" + EgtGetName(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 Case LayerType.RIBS m_nLayerId = PrintPart.nRibsLayerId Dim nEntityId As Integer = EgtGetFirstInGroup(m_nLayerId) - Dim sEnitytName As String = "" - EgtGetName(nEntityId, sEnitytName) - m_EntityList.Add(New ModifyEntity(nEntityId, sEnitytName)) + Dim sEntitytName As String = "" + EgtGetName(nEntityId, sEntitytName) + While nEntityId <> GDB_ID.NULL + 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, Me)) + End If + nEntityId = EgtGetNext(nEntityId) + EgtGetName(nEntityId, sEntitytName) + End While Case LayerType.SHELL_NUMBER m_nLayerId = PrintPart.nShellNumberLayerId + Dim nEntityId As Integer = EgtGetFirstInGroup(m_nLayerId) + Dim sEntitytName As String = "" + EgtGetName(nEntityId, sEntitytName) + While nEntityId <> GDB_ID.NULL + 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, Me)) + End If + nEntityId = EgtGetNext(nEntityId) + EgtGetName(nEntityId, sEntitytName) + End While Case LayerType.AUX_SOLIDS m_nLayerId = PrintPart.nAuxSolidsLayerId + Dim nEntityId As Integer = EgtGetFirstInGroup(m_nLayerId) + Dim sEntitytName As String = "" + EgtGetName(nEntityId, sEntitytName) + While nEntityId <> GDB_ID.NULL + '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, Me)) + 'End If + nEntityId = EgtGetNext(nEntityId) + EgtGetName(nEntityId, sEntitytName) + End While Case LayerType.OTHERS m_nLayerId = PrintPart.nOthersLayerId + 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, Me)) + nEntityId = EgtGetNext(nEntityId) + EgtGetName(nEntityId, sEntitytName) + End While End Select End Sub End Class + +Public Class MenuItemVm + Inherits VMBase + + ' 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 + Public Property Type As ModifyLayer.LayerType + Get + Return m_Type + End Get + Set(value As ModifyLayer.LayerType) + m_Type = value + End Set + End Property + + Public ReadOnly Property sMsg As String + Get + Dim sType As String = "" + Select Case m_Type + Case ModifyLayer.LayerType.PRINT_SOLID + sType = "Print" + Case ModifyLayer.LayerType.MACH_START + sType = "Layer Start" + Case ModifyLayer.LayerType.RIBS + sType = "Ribs" + Case ModifyLayer.LayerType.SHELL_NUMBER + sType = "Reduce shell number" + Case ModifyLayer.LayerType.AUX_SOLIDS + sType = "Filled Solids" + Case ModifyLayer.LayerType.OTHERS + sType = "Others" + End Select + Return "Move to " & sType + End Get + End Property + + ' Definizione comando + Private m_cmdCommand As ICommand + + 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" + + Public ReadOnly Property MenuItem_Command As ICommand + Get + If m_cmdCommand Is Nothing Then + m_cmdCommand = New Command(AddressOf Command) + End If + Return m_cmdCommand + End Get + End Property + + Public Sub Command() + ' 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 + +End Class \ No newline at end of file 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