Imports System.Collections.ObjectModel Imports System.Windows.Forms.VisualStyles.VisualStyleElement Imports EgtUILib Imports EgtWPFLib5 Public Class PartManager_GeomEntity Inherits VMBase ' layer sotto cui e' questa entita' Private m_OrigLayer As ManagePart_Layer Friend ReadOnly Property OrigLayer As ManagePart_Layer 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.refManagePartPanelVM.SetSelPartManager_GeomEntity(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 Property sName As String Get Return m_sName End Get Set(value As String) m_sName = value SetTextBoxVisibility(False) NotifyPropertyChanged(NameOf(sName)) If Map.refManagePartPanelVM.Type = ManagePartPanelVM.ManagePartType.MODIFY Then EgtSetInfo(m_nId, ENTITY_NAME, value) End If Map.refManagePartPanelVM.SetIsEnabled(True) End Set End Property Public ReadOnly Property ghName As String Get Return m_nId End Get End Property Private m_MenuList As New ObservableCollection(Of GeomEntity_MenuItem) Public Property MenuList As ObservableCollection(Of GeomEntity_MenuItem) Get Return m_MenuList End Get Set(value As ObservableCollection(Of GeomEntity_MenuItem)) m_MenuList = value End Set End Property Private m_UserShouldEditValueNow As Boolean = False Public Property UserShouldEditValueNow As Boolean Get Return m_UserShouldEditValueNow End Get Set(value As Boolean) m_UserShouldEditValueNow = value End Set End Property Friend Sub SetUserShouldEditValueNow() m_UserShouldEditValueNow = True NotifyPropertyChanged(NameOf(UserShouldEditValueNow)) m_UserShouldEditValueNow = False NotifyPropertyChanged(NameOf(UserShouldEditValueNow)) End Sub Private m_TextBox_Visibility As Visibility = Visibility.Collapsed Public ReadOnly Property TextBox_Visibility As Visibility Get Return m_TextBox_Visibility End Get End Property Private m_TextBlock_Visibility As Visibility = Visibility.Visible Public ReadOnly Property TextBlock_Visibility As Visibility Get Return m_TextBlock_Visibility End Get End Property ' Definizione comandi Private m_cmdGeomEntityDoubleClick As ICommand Sub New(OrigLayer As ManagePart_Layer, nId As Integer) m_nId = nId Dim sName As String = "" EgtGetInfo(m_nId, ENTITY_NAME, sName) m_sName = If(String.IsNullOrWhiteSpace(sName), m_nId, sName) m_OrigLayer = OrigLayer ' aggiungo voci layer a contextmenu UpdateContextMenu() End Sub Friend Sub UpdateContextMenu() m_MenuList.Clear() Select Case Map.refManagePartPanelVM.Type Case ManagePartPanelVM.ManagePartType.IMPORT Dim bIsSurface As Boolean = False For Each ProjectPart In Map.refManagePartPanelVM.ManagerPartList ' verifico in quali layer puo' andare questo elemento Dim EntityType As GDB_TY = EgtGetType(nId) Dim nPrintSolidCount As Integer = 0 Dim ManageLayer As ManagePart_Layer = ProjectPart.LayerList.FirstOrDefault(Function(x) x.Type = ManagePart_Layer.LayerType.PRINT_SOLID) If Not IsNothing(ManageLayer) Then nPrintSolidCount = ManageLayer.EntityList.Count End If Select Case EntityType Case GDB_TY.GEO_POINT, GDB_TY.CRV_COMPO, GDB_TY.CRV_ARC, GDB_TY.CRV_BEZ, GDB_TY.CRV_LINE If Not IsNothing(OrigLayer) Then ' recupero i layer If Not ProjectPart Is OrigLayer.OrigPart OrElse OrigLayer.Type <> ManagePart_Layer.LayerType.MACH_START Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.MACH_START, ProjectPart)) If Not ProjectPart Is OrigLayer.OrigPart OrElse OrigLayer.Type <> ManagePart_Layer.LayerType.OTHERS Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.OTHERS, ProjectPart)) Else m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.MACH_START, ProjectPart)) m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.OTHERS, ProjectPart)) End If Case GDB_TY.SRF_MESH bIsSurface = True If Not IsNothing(OrigLayer) Then ' verifico se volume chiuso If nPrintSolidCount = 0 AndAlso (Not ProjectPart Is OrigLayer.OrigPart OrElse OrigLayer.Type <> ManagePart_Layer.LayerType.PRINT_SOLID) Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.PRINT_SOLID, ProjectPart)) If Not ProjectPart Is OrigLayer.OrigPart OrElse OrigLayer.Type <> ManagePart_Layer.LayerType.SHELL_NUMBER Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.SHELL_NUMBER, ProjectPart)) If Not ProjectPart Is OrigLayer.OrigPart OrElse OrigLayer.Type <> ManagePart_Layer.LayerType.AUX_SOLIDS Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.AUX_SOLIDS, ProjectPart)) If Not ProjectPart Is OrigLayer.OrigPart OrElse OrigLayer.Type <> ManagePart_Layer.LayerType.RIBS Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.RIBS, ProjectPart)) If Not ProjectPart Is OrigLayer.OrigPart OrElse OrigLayer.Type <> ManagePart_Layer.LayerType.OTHERS Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.OTHERS, ProjectPart)) Else If nPrintSolidCount = 0 Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.PRINT_SOLID, ProjectPart)) m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.SHELL_NUMBER, ProjectPart)) m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.AUX_SOLIDS, ProjectPart)) m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.RIBS, ProjectPart)) m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.OTHERS, ProjectPart)) End If End Select Next If bIsSurface Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.NEWPART)) m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.CHANGENAME)) m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.DELETE)) Case ManagePartPanelVM.ManagePartType.MODIFY Dim bIsSurface As Boolean = False For Each ProjectPart In Map.refTopPanelVM.PartList ' verifico in quali layer puo' andare questo elemento Dim EntityType As GDB_TY = EgtGetType(nId) Dim nPrintSolidCount As Integer = EgtGetGroupObjs(ProjectPart.nPrintSolidLayerId) Select Case EntityType Case GDB_TY.GEO_POINT, GDB_TY.CRV_COMPO, GDB_TY.CRV_ARC, GDB_TY.CRV_BEZ, GDB_TY.CRV_LINE If Not IsNothing(OrigLayer) Then ' recupero i layer If ProjectPart.nPartId <> OrigLayer.OrigPart.PrintPart.nPartId OrElse OrigLayer.Type <> ManagePart_Layer.LayerType.MACH_START Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.MACH_START, ProjectPart)) If ProjectPart.nPartId <> OrigLayer.OrigPart.PrintPart.nPartId OrElse OrigLayer.Type <> ManagePart_Layer.LayerType.OTHERS Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.OTHERS, ProjectPart)) Else m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.MACH_START, ProjectPart)) m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.OTHERS, ProjectPart)) End If Case GDB_TY.SRF_MESH bIsSurface = True If Not IsNothing(OrigLayer) Then ' verifico se volume chiuso If nPrintSolidCount = 0 AndAlso (ProjectPart.nPartId <> OrigLayer.OrigPart.PrintPart.nPartId OrElse OrigLayer.Type <> ManagePart_Layer.LayerType.PRINT_SOLID) Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.PRINT_SOLID, ProjectPart)) If ProjectPart.nPartId <> OrigLayer.OrigPart.PrintPart.nPartId OrElse OrigLayer.Type <> ManagePart_Layer.LayerType.SHELL_NUMBER Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.SHELL_NUMBER, ProjectPart)) If ProjectPart.nPartId <> OrigLayer.OrigPart.PrintPart.nPartId OrElse OrigLayer.Type <> ManagePart_Layer.LayerType.AUX_SOLIDS Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.AUX_SOLIDS, ProjectPart)) If ProjectPart.nPartId <> OrigLayer.OrigPart.PrintPart.nPartId OrElse OrigLayer.Type <> ManagePart_Layer.LayerType.RIBS Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.RIBS, ProjectPart)) If ProjectPart.nPartId <> OrigLayer.OrigPart.PrintPart.nPartId OrElse OrigLayer.Type <> ManagePart_Layer.LayerType.OTHERS Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.OTHERS, ProjectPart)) Else If nPrintSolidCount = 0 Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.PRINT_SOLID, ProjectPart)) m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.SHELL_NUMBER, ProjectPart)) m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.AUX_SOLIDS, ProjectPart)) m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.RIBS, ProjectPart)) m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.OTHERS, ProjectPart)) End If End Select Next If bIsSurface Then m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.NEWPART)) m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.CHANGENAME)) m_MenuList.Add(New GeomEntity_MenuItem(Me, ManagePart_Layer.LayerType.DELETE)) End Select End Sub Friend Sub UpdateOrigLayer(NewLayer As ManagePart_Layer) m_OrigLayer = NewLayer End Sub Friend Sub SetTextBoxVisibility(bValue As Boolean) m_TextBox_Visibility = If(bValue, Visibility.Visible, Visibility.Collapsed) m_TextBlock_Visibility = If(Not bValue, Visibility.Visible, Visibility.Collapsed) NotifyPropertyChanged(NameOf(TextBox_Visibility)) NotifyPropertyChanged(NameOf(TextBlock_Visibility)) If bValue Then SetUserShouldEditValueNow() End Sub #Region "COMMANDS" #Region "GeomEntityDoubleClick" Public ReadOnly Property GeomEntityDoubleClick_Command As ICommand Get If m_cmdGeomEntityDoubleClick Is Nothing Then m_cmdGeomEntityDoubleClick = New Command(AddressOf GeomEntityDoubleClick) End If Return m_cmdGeomEntityDoubleClick End Get End Property Public Sub GeomEntityDoubleClick() If Not IsNothing(Map.refManagePartPanelVM.SelManagerLayer) Then Map.refManagePartPanelVM.ImportedEntityList.Remove(Me) ' aggiorno riferimenti layer e context menu UpdateOrigLayer(Map.refManagePartPanelVM.SelManagerLayer) UpdateContextMenu() Map.refManagePartPanelVM.SelManagerLayer.EntityList.Add(Me) End If End Sub #End Region ' ImportedEntity #End Region ' COMMANDS End Class Public Class ManagePart_Part 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.refManagePartPanelVM.SetSelManagerPart(Me) End Set End Property Private m_nId As Integer Public ReadOnly Property nId As Integer Get Return m_nId End Get 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 SetTextBoxVisibility(False) NotifyPropertyChanged(NameOf(sName)) If Map.refManagePartPanelVM.Type = ManagePartPanelVM.ManagePartType.MODIFY Then m_PrintPart.UpdateName(value) EgtSetInfo(m_PrintPart.nPartId, PART_NAME, value) End If Map.refManagePartPanelVM.SetIsEnabled(True) End Set End Property Private m_MenuList As New List(Of ManagerPart_MenuItem) Public Property MenuList As List(Of ManagerPart_MenuItem) Get Return m_MenuList End Get Set(value As List(Of ManagerPart_MenuItem)) m_MenuList = value End Set End Property Private m_LayerList As New ObservableCollection(Of ManagePart_Layer) Public ReadOnly Property LayerList As ObservableCollection(Of ManagePart_Layer) Get Return m_LayerList End Get End Property Private m_UserShouldEditValueNow As Boolean = False Public Property UserShouldEditValueNow As Boolean Get Return m_UserShouldEditValueNow End Get Set(value As Boolean) m_UserShouldEditValueNow = value End Set End Property Friend Sub SetUserShouldEditValueNow() m_UserShouldEditValueNow = True NotifyPropertyChanged(NameOf(UserShouldEditValueNow)) m_UserShouldEditValueNow = False NotifyPropertyChanged(NameOf(UserShouldEditValueNow)) End Sub Private m_TextBox_Visibility As Visibility = Visibility.Collapsed Public ReadOnly Property TextBox_Visibility As Visibility Get Return m_TextBox_Visibility End Get End Property Private m_TextBlock_Visibility As Visibility = Visibility.Visible Public ReadOnly Property TextBlock_Visibility As Visibility Get Return m_TextBlock_Visibility End Get End Property Sub New(PrintPart As Print3dPartVM) m_PrintPart = PrintPart 'NotifyPropertyChanged(NameOf(sName)) If Map.refManagePartPanelVM.ManagerPartList.Count = 0 Then m_nId = 1 Else m_nId = Map.refManagePartPanelVM.ManagerPartList.Max(Function(x) x.nId) + 1 End If If Not IsNothing(PrintPart) Then m_sName = m_PrintPart.sName m_LayerList.Add(New ManagePart_Layer(Me, ManagePart_Layer.LayerType.PRINT_SOLID, "Print", PrintPart)) m_LayerList.Add(New ManagePart_Layer(Me, ManagePart_Layer.LayerType.MACH_START, "Layer Start", PrintPart)) m_LayerList.Add(New ManagePart_Layer(Me, ManagePart_Layer.LayerType.RIBS, "Ribs", PrintPart)) m_LayerList.Add(New ManagePart_Layer(Me, ManagePart_Layer.LayerType.SHELL_NUMBER, "Reduce Shell Number", PrintPart)) m_LayerList.Add(New ManagePart_Layer(Me, ManagePart_Layer.LayerType.AUX_SOLIDS, "Filled Solids", PrintPart)) m_LayerList.Add(New ManagePart_Layer(Me, ManagePart_Layer.LayerType.OTHERS, "Others", PrintPart)) Else m_sName = "Part" & m_nId m_LayerList.Add(New ManagePart_Layer(Me, ManagePart_Layer.LayerType.PRINT_SOLID, "Print")) m_LayerList.Add(New ManagePart_Layer(Me, ManagePart_Layer.LayerType.MACH_START, "Layer Start")) m_LayerList.Add(New ManagePart_Layer(Me, ManagePart_Layer.LayerType.RIBS, "Ribs")) m_LayerList.Add(New ManagePart_Layer(Me, ManagePart_Layer.LayerType.SHELL_NUMBER, "Reduce Shell Number")) m_LayerList.Add(New ManagePart_Layer(Me, ManagePart_Layer.LayerType.AUX_SOLIDS, "Filled Solids")) m_LayerList.Add(New ManagePart_Layer(Me, ManagePart_Layer.LayerType.OTHERS, "Others")) End If ' creo context menu per cambio nome ed eliminazione m_MenuList.Add(New ManagerPart_MenuItem(Me, ManagerPart_MenuItem.PartMenuCmd.CHANGENAME)) m_MenuList.Add(New ManagerPart_MenuItem(Me, ManagerPart_MenuItem.PartMenuCmd.DELETE)) End Sub Friend Sub SetTextBoxVisibility(bValue As Boolean) m_TextBox_Visibility = If(bValue, Visibility.Visible, Visibility.Collapsed) m_TextBlock_Visibility = If(Not bValue, Visibility.Visible, Visibility.Collapsed) NotifyPropertyChanged(NameOf(TextBox_Visibility)) NotifyPropertyChanged(NameOf(TextBlock_Visibility)) If bValue Then SetUserShouldEditValueNow() End Sub End Class Public Class ManagePart_Layer Inherits VMBase Public Enum LayerType As Integer PRINT_SOLID = 1 'REFERENCE = 2 MACH_START = 3 RIBS = 4 SHELL_NUMBER = 5 AUX_SOLIDS = 6 OTHERS = 7 CHANGENAME = 15 DELETE = 16 NEWPART = 17 End Enum ' enita' di origine Private m_OrigPart As ManagePart_Part Public ReadOnly Property OrigPart As ManagePart_Part Get Return m_OrigPart End Get End Property Private m_nLayerId As Integer Friend ReadOnly Property nLayerId As Integer Get Return m_nLayerId 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 Map.refManagePartPanelVM.SetSelManagerLayer(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_MenuList As New List(Of ManagerLayer_MenuItem) Public Property MenuList As List(Of ManagerLayer_MenuItem) Get Return m_MenuList End Get Set(value As List(Of ManagerLayer_MenuItem)) m_MenuList = value End Set End Property Private m_EntityList As New ObservableCollection(Of PartManager_GeomEntity) Public Property EntityList As ObservableCollection(Of PartManager_GeomEntity) Get Return m_EntityList End Get Set(value As ObservableCollection(Of PartManager_GeomEntity)) m_EntityList = value End Set End Property Sub New(OrigPart As ManagePart_Part, Type As LayerType, sName As String) m_OrigPart = OrigPart m_Type = Type m_sName = sName If Map.refManagePartPanelVM.Type = ManagePartPanelVM.ManagePartType.MODIFY Then ' creo context menu per importazione solido da stampare m_MenuList.Add(New ManagerLayer_MenuItem(Me, ManagerLayer_MenuItem.LayerMenuCmd.IMPORTPRINT)) End If End Sub Sub New(OrigPart As ManagePart_Part, Type As LayerType, sName As String, PrintPart As Print3dPartVM) m_OrigPart = OrigPart m_Type = Type m_sName = sName Select Case Type Case LayerType.PRINT_SOLID m_nLayerId = PrintPart.nPrintSolidLayerId Dim nEntityId As Integer = EgtGetFirstInGroup(m_nLayerId) If nEntityId <> GDB_ID.NULL Then m_EntityList.Add(New PartManager_GeomEntity(Me, nEntityId)) End If ' se sono in modifica If Map.refManagePartPanelVM.Type = ManagePartPanelVM.ManagePartType.MODIFY Then ' creo context menu per importazione solido da stampare m_MenuList.Add(New ManagerLayer_MenuItem(Me, ManagerLayer_MenuItem.LayerMenuCmd.IMPORTPRINT)) End If Case LayerType.MACH_START m_nLayerId = PrintPart.nMachStartLayerId Dim nEntityId As Integer = EgtGetFirstInGroup(m_nLayerId) While nEntityId <> GDB_ID.NULL m_EntityList.Add(New PartManager_GeomEntity(Me, nEntityId)) nEntityId = EgtGetNext(nEntityId) End While Case LayerType.RIBS m_nLayerId = PrintPart.nRibsLayerId Dim nEntityId As Integer = EgtGetFirstInGroup(m_nLayerId) 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 PartManager_GeomEntity(Me, nEntityId)) End If nEntityId = EgtGetNext(nEntityId) End While Case LayerType.SHELL_NUMBER m_nLayerId = PrintPart.nShellNumberLayerId Dim nEntityId As Integer = EgtGetFirstInGroup(m_nLayerId) 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 PartManager_GeomEntity(Me, nEntityId)) End If nEntityId = EgtGetNext(nEntityId) End While Case LayerType.AUX_SOLIDS m_nLayerId = PrintPart.nAuxSolidsLayerId Dim nEntityId As Integer = EgtGetFirstInGroup(m_nLayerId) While nEntityId <> GDB_ID.NULL Dim FIlledSolidType As Integer = FilledSolidEntity.FilledSolidTypes.FROMDRAW EgtGetInfo(nEntityId, KEY_AUXSOLID_TYPE, FIlledSolidType) If FIlledSolidType = FilledSolidEntity.FilledSolidTypes.FROMIMPORT Then m_EntityList.Add(New PartManager_GeomEntity(Me, nEntityId)) End If nEntityId = EgtGetNext(nEntityId) End While Case LayerType.OTHERS m_nLayerId = PrintPart.nOthersLayerId Dim nEntityId As Integer = EgtGetFirstInGroup(m_nLayerId) While nEntityId <> GDB_ID.NULL m_EntityList.Add(New PartManager_GeomEntity(Me, nEntityId)) nEntityId = EgtGetNext(nEntityId) End While End Select End Sub End Class Public Class GeomEntity_MenuItem Inherits VMBase ' enita' di origine Private m_OrigEntity As PartManager_GeomEntity ' pezzo in cui spostare Private m_GeomPart As Print3dPartVM Private m_Part As ManagePart_Part ' tipo del layer indicato Private m_Type As ManagePart_Layer.LayerType Public Property Type As ManagePart_Layer.LayerType Get Return m_Type End Get Set(value As ManagePart_Layer.LayerType) m_Type = value End Set End Property Public ReadOnly Property sMsg As String Get Dim sType As String = "" Select Case m_Type Case ManagePart_Layer.LayerType.PRINT_SOLID sType = "Print" Case ManagePart_Layer.LayerType.MACH_START sType = "Layer Start" Case ManagePart_Layer.LayerType.RIBS sType = "Ribs" Case ManagePart_Layer.LayerType.SHELL_NUMBER sType = "Reduce shell number" Case ManagePart_Layer.LayerType.AUX_SOLIDS sType = "Filled Solids" Case ManagePart_Layer.LayerType.OTHERS sType = "Others" Case ManagePart_Layer.LayerType.NEWPART Return "Create New Part" Case ManagePart_Layer.LayerType.CHANGENAME Return "Change Name" Case ManagePart_Layer.LayerType.DELETE Return "Delete Entity" End Select Dim PartName As String = "" If Map.refManagePartPanelVM.ManagerPartList.Count > 1 Then Dim NewPart As ManagePart_Part = Nothing Select Case Map.refManagePartPanelVM.Type Case ManagePartPanelVM.ManagePartType.IMPORT NewPart = Map.refManagePartPanelVM.ManagerPartList.FirstOrDefault(Function(x) x Is m_Part) Case ManagePartPanelVM.ManagePartType.MODIFY NewPart = Map.refManagePartPanelVM.ManagerPartList.FirstOrDefault(Function(x) x.PrintPart.nPartId = m_GeomPart.nPartId) End Select If Not IsNothing(NewPart) Then PartName = " (" & NewPart.sName & ")" End If End If Return "Move to " & sType & PartName End Get End Property ' Definizione comando Private m_cmdCommand As ICommand Sub New(OrigEntity As PartManager_GeomEntity, Type As ManagePart_Layer.LayerType, GeomPart As Print3dPartVM) m_OrigEntity = OrigEntity m_Type = Type m_GeomPart = GeomPart End Sub Sub New(OrigEntity As PartManager_GeomEntity, Type As ManagePart_Layer.LayerType, Part As ManagePart_Part) m_OrigEntity = OrigEntity m_Type = Type m_Part = Part End Sub Sub New(OrigEntity As PartManager_GeomEntity, Type As ManagePart_Layer.LayerType) m_OrigEntity = OrigEntity m_Type = Type End Sub #Region "Command" 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() If m_Type = ManagePart_Layer.LayerType.CHANGENAME Then m_OrigEntity.SetTextBoxVisibility(True) Map.refManagePartPanelVM.SetIsEnabled(True) Return ElseIf m_Type = ManagePart_Layer.LayerType.DELETE Then If MessageBox.Show("Are you sure you want to delete this entity?", "Delete confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then EgtErase(m_OrigEntity.nId) ' se l'entita' e' gia' in lista pezzi If Not IsNothing(m_OrigEntity.OrigLayer) Then ' elimino dalla lista pezzi m_OrigEntity.OrigLayer.EntityList.Remove(m_OrigEntity) Else ' altrimenti lo elimino dalla lista entita' importate Map.refManagePartPanelVM.ImportedEntityList.Remove(m_OrigEntity) End If ' se e' presente elimino flag di spostamento a 45 gradi Dim nPartId As Integer = EgtGetParent(EgtGetParent(m_OrigEntity.nId)) EgtRemoveInfo(nPartId, KEY_MOVEDPART) EgtDraw() ' aggiorno riferimenti nel context menu item Map.refManagePartPanelVM.UpdateAllEntityContextMenu() ' Imposto flag di ricalcolo slice If Map.refManagePartPanelVM.Type = ManagePartPanelVM.ManagePartType.MODIFY Then EgtSetInfo(Map.refTopPanelVM.SelPart.nPartId, MAC_TORECALC_SLICE, True) End If End If Return ElseIf m_Type = ManagePart_Layer.LayerType.NEWPART Then Select Case Map.refManagePartPanelVM.Type Case ManagePartPanelVM.ManagePartType.IMPORT Dim NewPart As ManagePart_Part = New ManagePart_Part(Nothing) Map.refManagePartPanelVM.ManagerPartList.Add(NewPart) ' se l'entita' e' gia' in lista pezzi If Not IsNothing(m_OrigEntity.OrigLayer) Then ' elimino dalla lista pezzi m_OrigEntity.OrigLayer.EntityList.Remove(m_OrigEntity) Else ' altrimenti lo elimino dalla lista entita' importate Map.refManagePartPanelVM.ImportedEntityList.Remove(m_OrigEntity) End If If Not IsNothing(NewPart) Then Dim NewLayer As ManagePart_Layer = NewPart.LayerList.FirstOrDefault(Function(x) x.Type = ManagePart_Layer.LayerType.PRINT_SOLID) If Not IsNothing(NewLayer) Then NewLayer.EntityList.Add(m_OrigEntity) ' aggiorno riferimenti nell'entita' m_OrigEntity.UpdateOrigLayer(NewLayer) ' aggiorno colore EgtSetColor(m_OrigEntity.nId, GetColor(LayerType.PRINTPART)) End If End If ' aggiorno i contextmenu di tutti gli entity Map.refManagePartPanelVM.UpdateAllEntityContextMenu() Case ManagePartPanelVM.ManagePartType.MODIFY ' recupero path da vecchio pezzo Dim sFilePath As String = "" EgtGetInfo(m_OrigEntity.OrigLayer.OrigPart.PrintPart.nPartId, FILE_PATH, sFilePath) 'Dim frImportedPart As New Frame3d 'EgtGetGroupGlobFrame(m_nImportedPartId, frImportedPart) ' creo pezzo Dim nPartId As Integer = EgtCreateGroup(GDB_ID.ROOT) ', frImportedPart) EgtSetName(nPartId, PART) Dim nFrameId As Integer = GDB_ID.NULL Dim b3PrintSolid As New BBox3d ' creo layer solido di stampa Dim nPrintPartLayerId As Integer = EgtCreateGroup(nPartId) EgtSetName(nPrintPartLayerId, PRINT_SOLID) EgtSetColor(nPrintPartLayerId, GeomEntityColors.c3Print) EgtRelocateGlob(m_OrigEntity.nId, nPrintPartLayerId, GDB_POS.LAST_SON) ' calcolo box superficie per creazione riferimento EgtGetBBoxGlob(m_OrigEntity.nId, GDB_BB.STANDARD, b3PrintSolid) ' creo layer mach start Dim nMachStartLayerId As Integer = EgtCreateGroup(nPartId) EgtSetName(nMachStartLayerId, LAY_MACH_START) EgtSetColor(nMachStartLayerId, GeomEntityColors.c3MachStart) Dim nMachStartId As Integer = GDB_ID.NULL ' creo punto di partenza Dim ptStart As Point3d = b3PrintSolid.Center() - 0.6 * b3PrintSolid.DimY() * Vector3d.Y_AX() - 0.5 * b3PrintSolid.DimZ() * Vector3d.Z_AX() nMachStartId = EgtCreateGeoPoint(nMachStartLayerId, ptStart, GDB_RT.GLOB) EgtSetName(nMachStartId, START_GEOM) ' creo layer ribs Dim nRibsLayerId As Integer = EgtCreateGroup(nPartId) EgtSetName(nRibsLayerId, LAY_RIBS) EgtSetColor(nRibsLayerId, GeomEntityColors.c3Rib) ' creo layer shell number Dim nShellNumberLayerId As Integer = EgtCreateGroup(nPartId) EgtSetName(nShellNumberLayerId, LAY_SHELL_NBR) EgtSetColor(nShellNumberLayerId, GeomEntityColors.c3ShellNumber) ' creo layer aux Dim nAuxSolidsLayerId As Integer = EgtCreateGroup(nPartId) EgtSetName(nAuxSolidsLayerId, LAY_AUX_SOLIDS) EgtSetColor(nAuxSolidsLayerId, GeomEntityColors.c3AuxSolids) ' creo layer others Dim nOthersLayerId As Integer = EgtCreateGroup(nPartId) EgtSetName(nOthersLayerId, LAY_OTHERS) EgtSetColor(nOthersLayerId, GeomEntityColors.c3Others) ' aggiungo riferimento Dim nPartReferenceLayerId As Integer = EgtCreateGroup(nPartId) EgtSetName(nPartReferenceLayerId, LAY_PARTREFERENCE) Dim nReferenceLayerId As Integer = EgtCreateGroup(nPartId) EgtSetName(nReferenceLayerId, LAY_REFERENCE) EgtSetInfo(nReferenceLayerId, KEY_REFERENCE, ReferenceBtn.References.BL) ' appoggio il pezzo sulla tavola EgtMove(nPartId, New Vector3d(0, 0, -b3PrintSolid.Min.z)) ' lo aggiungo a lista pezzi EgtSetInfo(nPartId, FILE_PATH, sFilePath) EgtSetInfo(nPartId, "PartOnTable", 1) Dim NewPart As New Print3dPartVM(nPartId, nPrintPartLayerId, nPartReferenceLayerId, nReferenceLayerId, nFrameId, nMachStartLayerId, nRibsLayerId, nShellNumberLayerId, nAuxSolidsLayerId, nOthersLayerId, sFilePath) Map.refTopPanelVM.PartList.Add(NewPart) ' aggiorno riferimento Map.refReferencePanelVM.UpdateFramePosition(NewPart) Dim ManagePart_Part As ManagePart_Part = New ManagePart_Part(NewPart) ' elimino da posizione originale m_OrigEntity.OrigLayer.EntityList.Remove(m_OrigEntity) EgtSetInfo(nPartId, PART_NAME, ManagePart_Part.sName) ' lo aggiungo a lista Map.refManagePartPanelVM.ManagerPartList.Add(ManagePart_Part) ' aggiorno riferimenti nel context menu item Map.refManagePartPanelVM.UpdateAllEntityContextMenu() ' Imposto flag di ricalcolo slice EgtSetInfo(Map.refTopPanelVM.SelPart.nPartId, MAC_TORECALC_SLICE, True) End Select ' aggiorno visibilita' da check di categoria Dim PrintViewlayer As ViewLayer = Map.refViewLayerManagerVM.LayerList.FirstOrDefault(Function(x) x.Type = ViewLayer.ViewLayerType.PRINT_SOLID) EgtSetStatus(m_OrigEntity.nId, If(IsNothing(PrintViewlayer.bIsVisible) OrElse PrintViewlayer.bIsVisible, GDB_ST.ON_, GDB_ST.OFF)) EgtDraw() Return End If Select Case Map.refManagePartPanelVM.Type Case ManagePartPanelVM.ManagePartType.IMPORT ' se l'entita' e' gia' in lista pezzi If Not IsNothing(m_OrigEntity.OrigLayer) Then ' elimino dalla lista pezzi m_OrigEntity.OrigLayer.EntityList.Remove(m_OrigEntity) Else ' altrimenti lo elimino dalla lista entita' importate Map.refManagePartPanelVM.ImportedEntityList.Remove(m_OrigEntity) End If Dim NewPart As ManagePart_Part = Map.refManagePartPanelVM.ManagerPartList.FirstOrDefault(Function(x) x Is m_Part) If Not IsNothing(NewPart) Then Dim NewLayer As ManagePart_Layer = 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) ' aggiorno colore EgtSetColor(m_OrigEntity.nId, GetColor(m_Type)) ' aggiorno visibilita' da check di categoria Dim PrintViewlayer As ViewLayer = Map.refViewLayerManagerVM.LayerList.FirstOrDefault(Function(x) x.Type = m_Type) EgtSetStatus(m_OrigEntity.nId, If(IsNothing(PrintViewlayer.bIsVisible) OrElse PrintViewlayer.bIsVisible, GDB_ST.ON_, GDB_ST.OFF)) EgtDraw() End If End If ' aggiorno riferimenti nel context menu item Map.refManagePartPanelVM.UpdateAllEntityContextMenu() Case ManagePartPanelVM.ManagePartType.MODIFY Dim bIsMovedPartOrRib As Boolean = False ' recupero layer da pezzo Dim nLayerId As Integer = GDB_ID.NULL Select Case m_Type Case ManagePart_Layer.LayerType.PRINT_SOLID nLayerId = m_GeomPart.nPrintSolidLayerId Case ManagePart_Layer.LayerType.MACH_START nLayerId = m_GeomPart.nMachStartLayerId Case ManagePart_Layer.LayerType.RIBS nLayerId = m_GeomPart.nRibsLayerId Case ManagePart_Layer.LayerType.SHELL_NUMBER nLayerId = m_GeomPart.nShellNumberLayerId Case ManagePart_Layer.LayerType.AUX_SOLIDS nLayerId = m_GeomPart.nAuxSolidsLayerId Case ManagePart_Layer.LayerType.OTHERS nLayerId = m_GeomPart.nOthersLayerId End Select ' sposto entita' If EgtRelocateGlob(m_OrigEntity.nId, nLayerId) Then ' elimino info vecchio layer Select Case m_OrigEntity.OrigLayer.Type Case ManagePart_Layer.LayerType.PRINT_SOLID 'EgtResetMark(m_OrigEntity.nId) ' se e' presente flag di spostamento a 45 gradi Dim nPartId As Integer = EgtGetParent(EgtGetParent(m_OrigEntity.nId)) Dim vtMoved As Vector3d If EgtGetInfo(nPartId, KEY_MOVEDPART, vtMoved) Then ' lo sposto e rimuovo info EgtMove(m_OrigEntity.nId, -vtMoved, GDB_RT.GLOB) EgtRemoveInfo(nPartId, KEY_MOVEDPART) End If bIsMovedPartOrRib = True Case ManagePart_Layer.LayerType.MACH_START Case ManagePart_Layer.LayerType.RIBS EgtRemoveInfo(m_OrigEntity.nId, KEY_RIB_TYPE) EgtRemoveInfo(m_OrigEntity.nId, RIB_ID) bIsMovedPartOrRib = True Case ManagePart_Layer.LayerType.SHELL_NUMBER EgtRemoveInfo(m_OrigEntity.nId, KEY_SHELLNBR_TYPE) Case ManagePart_Layer.LayerType.AUX_SOLIDS EgtRemoveInfo(m_OrigEntity.nId, KEY_AUXSOLID_TYPE) Case ManagePart_Layer.LayerType.OTHERS End Select ' sposto in lista m_OrigEntity.OrigLayer.EntityList.Remove(m_OrigEntity) Dim bUpdateAllContextMenu As Boolean = False Dim NewPart As ManagePart_Part = Map.refManagePartPanelVM.ManagerPartList.FirstOrDefault(Function(x) x.PrintPart.nPartId = m_GeomPart.nPartId) If Not IsNothing(NewPart) Then Dim NewLayer As ManagePart_Layer = NewPart.LayerList.FirstOrDefault(Function(x) x.Type = m_Type) If Not IsNothing(NewLayer) Then NewLayer.EntityList.Add(m_OrigEntity) bUpdateAllContextMenu = (m_OrigEntity.OrigLayer.Type = ManagePart_Layer.LayerType.PRINT_SOLID) OrElse (NewLayer.Type = ManagePart_Layer.LayerType.PRINT_SOLID) ' aggiorno riferimenti nell'entita' m_OrigEntity.UpdateOrigLayer(NewLayer) End If End If ' aggiungo info nuovo layer Select Case m_Type Case ManagePart_Layer.LayerType.PRINT_SOLID EgtSetName(m_OrigEntity.nId, PRINT_SOLID) ' rimuovo eventuale nota spostamento per 45 gradi EgtRemoveInfo(m_OrigEntity.OrigLayer.OrigPart.nId, KEY_MOVEDPART) bIsMovedPartOrRib = True Case ManagePart_Layer.LayerType.MACH_START EgtSetName(m_OrigEntity.nId, LAY_MACH_START) Case ManagePart_Layer.LayerType.RIBS EgtSetName(m_OrigEntity.nId, LAY_RIBS) EgtSetInfo(m_OrigEntity.nId, KEY_RIB_TYPE, RibEntity.RibTypes.FROMIMPORT) EgtSetInfo(m_OrigEntity.nId, RIB_ID, RibPanelVM.GetNextRibIndex()) bIsMovedPartOrRib = True Case ManagePart_Layer.LayerType.SHELL_NUMBER EgtSetName(m_OrigEntity.nId, LAY_SHELL_NBR) EgtSetInfo(m_OrigEntity.nId, KEY_SHELLNBR_TYPE, ShellNumberEntity.ShellNumberTypes.FROMIMPORT) Case ManagePart_Layer.LayerType.AUX_SOLIDS EgtSetName(m_OrigEntity.nId, LAY_AUX_SOLIDS) EgtSetInfo(m_OrigEntity.nId, KEY_AUXSOLID_TYPE, RibEntity.RibTypes.FROMIMPORT) Case ManagePart_Layer.LayerType.OTHERS EgtSetName(m_OrigEntity.nId, LAY_OTHERS) End Select ' resetto colore entita' EgtResetColor(m_OrigEntity.nId) ' se spostato un Rib, aggiorno posizione riferimento e pezzo If bIsMovedPartOrRib Then Map.refReferencePanelVM.UpdateFramePosition(NewPart.PrintPart) Map.refDispositionPanelVM.UpdateZPos() Map.refSliceManagerVM.UpdateDimensions() End If EgtDraw() ' aggiorno riferimenti nel context menu item If bUpdateAllContextMenu Then Map.refManagePartPanelVM.UpdateAllEntityContextMenu() Else m_OrigEntity.UpdateContextMenu() End If End If ' Imposto flag di ricalcolo slice EgtSetInfo(Map.refTopPanelVM.SelPart.nPartId, MAC_TORECALC_SLICE, True) End Select End Sub #End Region ' Command End Class Public Class ManagerPart_MenuItem Inherits VMBase Public Enum PartMenuCmd CHANGENAME = 1 DELETE = 2 End Enum Private m_OrigPart As ManagePart_Part ' tipo del comando Private m_Type As PartMenuCmd Public Property Type As PartMenuCmd Get Return m_Type End Get Set(value As PartMenuCmd) m_Type = value End Set End Property Public ReadOnly Property sMsg As String Get Select Case m_Type Case PartMenuCmd.CHANGENAME Return "Change Name" Case Else ' PartMenuCmd.DELETE Return "Delete Part" End Select End Get End Property ' Definizione comando Private m_cmdCommand As ICommand Sub New(OrigPart As ManagePart_Part, Type As PartMenuCmd) m_OrigPart = OrigPart m_Type = Type End Sub #Region "Command" 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() Select Case m_Type Case PartMenuCmd.CHANGENAME m_OrigPart.SetTextBoxVisibility(True) Map.refManagePartPanelVM.SetIsEnabled(True) Case PartMenuCmd.DELETE If Map.refManagePartPanelVM.ManagerPartList.Count <= 1 Then Return Select Case Map.refManagePartPanelVM.Type Case ManagePartPanelVM.ManagePartType.IMPORT For Each Layer In m_OrigPart.LayerList For EntityIndex = Layer.EntityList.Count - 1 To 0 Step -1 Dim Entity As PartManager_GeomEntity = Layer.EntityList(EntityIndex) ' le rimuovo da lista entita' pezzo Layer.EntityList.Remove(Entity) ' la rimetto in lista importati Map.refManagePartPanelVM.ImportedEntityList.Add(Entity) Next Next ' elimino pezzo da lista Map.refManagePartPanelVM.ManagerPartList.Remove(m_OrigPart) Case ManagePartPanelVM.ManagePartType.MODIFY ' elimino pezzo geometrico EgtErase(m_OrigPart.PrintPart.nPartId) ' elimino pezzo da lista Map.refManagePartPanelVM.ManagerPartList.Remove(m_OrigPart) Dim bSelFirstPart As Boolean = m_OrigPart.PrintPart.nPartId = Map.refTopPanelVM.SelPart.nPartId ' elimino pezzo da lista Top Map.refTopPanelVM.PartList.Remove(m_OrigPart.PrintPart) EgtDraw() If bSelFirstPart Then Map.refTopPanelVM.SelFirstPart() End Select ' aggiorno riferimenti nel context menu item Map.refManagePartPanelVM.UpdateAllEntityContextMenu() ' Imposto flag di ricalcolo slice If Not IsNothing(Map.refTopPanelVM.SelPart) Then ' in prima importazione non c'e' alcun pezzo selezionato EgtSetInfo(Map.refTopPanelVM.SelPart.nPartId, MAC_TORECALC_SLICE, True) End If End Select End Sub #End Region ' Command End Class Public Class ManagerLayer_MenuItem Inherits VMBase Public Enum LayerMenuCmd IMPORTPRINT = 1 End Enum Private m_OrigLayer As ManagePart_Layer Friend ReadOnly Property OrigLayer As ManagePart_Layer Get Return m_OrigLayer End Get End Property ' tipo del comando Private m_Type As LayerMenuCmd Public Property Type As LayerMenuCmd Get Return m_Type End Get Set(value As LayerMenuCmd) m_Type = value End Set End Property Public ReadOnly Property sMsg As String Get Select Case m_Type Case Else ' PartMenuCmd.IMPORTPRINT Return "Import Print" End Select End Get End Property ' Definizione comando Private m_cmdCommand As ICommand Sub New(OrigLayer As ManagePart_Layer, Type As LayerMenuCmd) m_OrigLayer = OrigLayer m_Type = Type End Sub #Region "Command" 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() If Map.refSceneHostVM.MainController.GetStep <> 0 Then Return Select Case m_Type Case Else ' PartMenuCmd.IMPORTPRINT Dim bDeleteOldPrint As Boolean = False If m_OrigLayer.EntityList.Count > 0 Then If MessageBox.Show("Importing a new print solid the current one will be deleted. Are you sure you want to proced?", "Warning", MessageBoxButton.YesNo, MessageBoxImage.Warning) <> MessageBoxResult.Yes Then Return Else bDeleteOldPrint = True End If End If Map.refSceneHostVM.InsertPrint(Me) End Select End Sub #End Region ' Command End Class