Imports System.Collections.ObjectModel Imports EgtUILib 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 Return m_bIsSelected End Get Set(value As Boolean) m_bIsSelected = value ' seleziono in scena EgtDeselectAll() If Not IsNothing(value) Then EgtSelectObj(m_nId) End If EgtDraw() ' segno come elemento selezionato in treeview Map.refModifyPartPanelVM.SetSelModifyEntity(Me) End Set End Property Private m_nId As Integer = GDB_ID.NULL Public ReadOnly Property nId As Integer Get Return m_nId End Get End Property Private m_sName As String Public ReadOnly Property sName As String Get Return m_sName End Get End Property Public ReadOnly Property ghName As String Get Return m_nId End Get End Property 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, OrigLayer As ModifyLayer) m_nId = nId m_sName = sName m_OrigLayer = OrigLayer ' aggiungo voci layer a contextmenu CreateContextMenu(OrigLayer) End Sub Friend Sub UpdateContextMenu(OrigLayer As ModifyLayer) m_MenuList.Clear() ' aggiungo voci layer a contextmenu CreateContextMenu(OrigLayer) End Sub 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 Friend Sub UpdateOrigLayer(NewLayer As ModifyLayer) m_OrigLayer = NewLayer End Sub End Class Public Class ModifyPart Inherits VMBase Private m_bIsSelected As Boolean Public Property bIsSelected As Boolean Get Return m_bIsSelected End Get Set(value As Boolean) m_bIsSelected = value Map.refModifyPartPanelVM.SetSelModifyPart(Me) End Set End Property Private m_PrintPart As Print3dPartVM Public ReadOnly Property PrintPart As Print3dPartVM Get Return m_PrintPart End Get End Property Private m_sName As String Public Property sName As String Get Return m_sName End Get Set(value As String) m_sName = value End Set End Property Public ReadOnly Property ghName As String Get Return m_PrintPart.sImportedFileName End Get End Property Private m_LayerList As New ObservableCollection(Of ModifyLayer) Public ReadOnly Property LayerList As ObservableCollection(Of ModifyLayer) Get Return m_LayerList End Get End Property Sub New(PrintPart As Print3dPartVM) 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 Public Class ModifyLayer Inherits VMBase Public Enum LayerType As Integer PRINT_SOLID = 1 MACH_START = 2 RIBS = 3 SHELL_NUMBER = 4 AUX_SOLIDS = 5 OTHERS = 6 End Enum Private m_nLayerId As Integer Private m_bIsSelected As Boolean Public Property bIsSelected As Boolean Get Return m_bIsSelected End Get Set(value As Boolean) m_bIsSelected = value Map.refModifyPartPanelVM.SetSelModifyLayer(Me) End Set End Property Private m_Type As LayerType Public Property Type As LayerType Get Return m_Type End Get Set(value As LayerType) m_Type = value End Set End Property Private m_sName As String Public Property sName As String Get Return m_sName End Get Set(value As String) m_sName = value End Set End Property Private m_EntityList As New ObservableCollection(Of ModifyEntity) Public Property EntityList As ObservableCollection(Of ModifyEntity) Get Return m_EntityList End Get Set(value As ObservableCollection(Of ModifyEntity)) m_EntityList = value End Set End Property Sub New(Type As LayerType, sName As String) m_Type = Type m_sName = sName End Sub Sub New(Type As LayerType, sName As String, PrintPart As Print3dPartVM) m_Type = Type m_sName = sName Select Case Type Case LayerType.PRINT_SOLID m_nLayerId = PrintPart.nPrintSolidLayerId Dim nEntityId As Integer = EgtGetFirstInGroup(m_nLayerId) 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, Me)) nEntityId = EgtGetNext(nEntityId) EgtGetName(nEntityId, sEntitytName) End While Case LayerType.RIBS m_nLayerId = PrintPart.nRibsLayerId Dim nEntityId As Integer = EgtGetFirstInGroup(m_nLayerId) 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