Imports System.Collections.ObjectModel Imports EgtUILib Imports EgtWPFLib5 Public Class ModifyPartPanelVM Inherits VMBase 'Private m_nImportedPartId As Integer = GDB_ID.NULL 'Friend ReadOnly Property nImportedPartId As Integer ' Get ' Return m_nImportedPartId ' End Get 'End Property 'Private m_ImportedEntityList As New ObservableCollection(Of GeomEntity) 'Public Property ImportedEntityList As ObservableCollection(Of GeomEntity) ' Get ' Return m_ImportedEntityList ' End Get ' Set(value As ObservableCollection(Of GeomEntity)) ' m_ImportedEntityList = value ' End Set 'End Property 'Private m_SelImportedEntity As GeomEntity 'Public Property SelImportedEntity As GeomEntity ' Get ' Return m_SelImportedEntity ' End Get ' Set(value As GeomEntity) ' m_SelImportedEntity = value ' EgtDeselectAll() ' If Not IsNothing(m_SelImportedEntity) Then ' EgtSelectObj(m_SelImportedEntity.nId) ' End If ' EgtDraw() ' End Set 'End Property 'Friend Sub SetSelImportedEntity(nId As Integer) ' m_SelImportedEntity = Map.refImportPanelVM.ImportedEntityList.FirstOrDefault(Function(x) x.nId = nId) ' EgtDeselectAll() ' If Not IsNothing(m_SelImportedEntity) Then ' EgtSelectObj(m_SelImportedEntity.nId) ' End If ' EgtDraw() ' NotifyPropertyChanged(NameOf(SelImportedEntity)) 'End Sub Private m_ModifyPartList As New ObservableCollection(Of ModifyPart) Public ReadOnly Property ModifyPartList As ObservableCollection(Of ModifyPart) Get Return m_ModifyPartList End Get End Property Private m_SelModifyPart As ModifyPart Friend Sub SetSelModifyPart(SelModifyPart As ModifyPart) m_SelModifyPart = SelModifyPart m_SelModifyLayer = Nothing End Sub Public ReadOnly Property SelModifyPart As ModifyPart Get Return m_SelModifyPart End Get End Property Private m_SelModifyLayer As ModifyLayer Public ReadOnly Property SelModifyLayer As ModifyLayer Get Return m_SelModifyLayer End Get End Property Friend Sub SetSelModifyLayer(SelModifyLayer As ModifyLayer) m_SelModifyPart = m_ModifyPartList.FirstOrDefault(Function(x) x.LayerList.Contains(SelModifyLayer)) m_SelModifyLayer = SelModifyLayer End Sub Private m_SelModifyEntity As ModifyEntity Public ReadOnly Property SelModifyEntity As ModifyEntity Get Return m_SelModifyEntity End Get End Property Friend Sub SetSelModifyEntity(SelModifyEntity As ModifyEntity) For Each CurrPart In m_ModifyPartList Dim CurrLayer As ModifyLayer = CurrPart.LayerList.FirstOrDefault(Function(x) x.EntityList.Contains(SelModifyEntity)) If Not IsNothing(CurrLayer) Then m_SelModifyPart = CurrPart m_SelModifyLayer = CurrLayer Exit For End If Next m_SelModifyEntity = SelModifyEntity End Sub ' Definizione comandi Private m_cmdOk As ICommand Private m_cmdCancel As ICommand Sub New() ' Creo riferimento a questa classe in EgtCAM5Map Map.SetRefModifyPartPanelVM(Me) End Sub #Region "METHODS" Friend Sub Init() m_ModifyPartList.Clear() ' carico pezzi in lista For Each PrintPart In Map.refTopPanelVM.PartList m_ModifyPartList.Add(New ModifyPart(PrintPart)) Next End Sub #End Region ' METHODS #Region "COMMANDS" '#Region "SetReference" ' Public ReadOnly Property SetReference_Command As ICommand ' Get ' If m_cmdSetReference Is Nothing Then ' m_cmdSetReference = New Command(AddressOf SetReference) ' End If ' Return m_cmdSetReference ' End Get ' End Property ' Public Sub SetReference() ' If Not IsNothing(SelGeomEntity) Then ' Dim ChooseReferenceWndVM As New ChooseReferenceWndVM ' Dim ChooseReferenceWndV As New ChooseReferenceWndV(Application.Current.MainWindow, ChooseReferenceWndVM) ' If Not ChooseReferenceWndV.ShowDialog() Then Return ' SelGeomEntity.Reference = ChooseReferenceWndVM.SelReference ' End If ' End Sub '#End Region ' SetReference '#Region "AddPart" ' Public ReadOnly Property AddPart_Command As ICommand ' Get ' If m_cmdAddPart Is Nothing Then ' m_cmdAddPart = New Command(AddressOf AddPart) ' End If ' Return m_cmdAddPart ' End Get ' End Property ' Public Sub AddPart() ' m_ImportPartList.Add(New ImportPart) ' End Sub '#End Region ' AddPart '#Region "RemovePart" ' Public ReadOnly Property RemovePart_Command As ICommand ' Get ' If m_cmdRemovePart Is Nothing Then ' m_cmdRemovePart = New Command(AddressOf RemovePart) ' End If ' Return m_cmdRemovePart ' End Get ' End Property ' Public Sub RemovePart() ' If IsNothing(SelImportLayer) Then ' ' rimuovo pezzo ' m_ImportPartList.Remove(SelImportPart) ' Else ' ' rimuovo geometria ' Dim CurrEntity As GeomEntity = m_SelGeomEntity ' SelImportLayer.EntityList.Remove(m_SelGeomEntity) ' ' la rimetto in lista importati ' ImportedEntityList.Add(CurrEntity) ' End If ' End Sub '#End Region ' RemovePart #Region "Ok" Public ReadOnly Property Ok_Command As ICommand Get If m_cmdOk Is Nothing Then m_cmdOk = New Command(AddressOf Ok) End If Return m_cmdOk End Get End Property Public Sub Ok() 'Dim sErr As New List(Of String) '' verifico che tutti i pezzi abbiano una superficie da stampare nel layer apposito 'For Each CurrPart In m_ImportPartList ' For Each CurrLayer In CurrPart.LayerList ' Select Case CurrLayer.Type ' Case ImportLayer.LayerType.PRINT_SOLID ' If CurrLayer.EntityList.Count = 0 Then ' If sErr.Count > 0 Then sErr(sErr.Count - 1) &= Environment.NewLine ' sErr.Add(CurrPart.ghName & " - No print surface defined!") ' End If ' End Select ' Next 'Next 'If sErr.Count > 0 Then ' MessageBox.Show(String.Concat(sErr), "Error") ' Return 'Else ' ' Creo pezzi e layer necessari ' For Each ImportPart In m_ImportPartList ' Dim frImportedPart As New Frame3d ' EgtGetGroupGlobFrame(m_nImportedPartId, frImportedPart) ' Dim nPartId As Integer = EgtCreateGroup(GDB_ID.ROOT, frImportedPart) ' EgtSetName(nPartId, PART) ' Dim nFrameId As Integer = GDB_ID.NULL ' Dim b3PrintSolid As New BBox3d ' Dim nPrintPartLayerId As Integer = GDB_ID.NULL ' Dim PrintSolidEntity As GeomEntity = Nothing ' Dim nOriginalPartLayerId As Integer = GDB_ID.NULL ' Dim nRibsLayerId As Integer = GDB_ID.NULL ' Dim nShellNumberLayerId As Integer = GDB_ID.NULL ' Dim nAuxSolidsLayerId As Integer = GDB_ID.NULL ' Dim nMachStartLayerId As Integer = GDB_ID.NULL ' Dim nOthersLayerId As Integer = GDB_ID.NULL ' For Each ImportLayer In ImportPart.LayerList ' Select Case ImportLayer.Type ' Case ImportLayer.LayerType.PRINT_SOLID ' nPrintPartLayerId = EgtCreateGroup(nPartId) ' EgtSetName(nPrintPartLayerId, PRINT_SOLID) ' If ImportLayer.EntityList.Count > 0 Then ' PrintSolidEntity = ImportLayer.EntityList(0) ' EgtRelocateGlob(PrintSolidEntity.nId, nPrintPartLayerId, GDB_POS.LAST_SON) ' ' calcolo box superficie per creazione riferimento ' EgtGetBBoxGlob(PrintSolidEntity.nId, GDB_BB.STANDARD, b3PrintSolid) ' End If ' 'Case ImportLayer.LayerType.ORIGINAL_SOLID ' ' nOriginalPartLayerId = EgtCreateGroup(nPartId) ' ' EgtSetName(nOriginalPartLayerId, ORIGINAL_SOLID) ' ' For Each GeomEntity In ImportLayer.EntityList ' ' EgtRelocateGlob(GeomEntity.nId, nOriginalPartLayerId, GDB_POS.LAST_SON) ' ' Next ' Case ImportLayer.LayerType.MACH_START ' nMachStartLayerId = EgtCreateGroup(nPartId) ' EgtSetName(nMachStartLayerId, LAY_MACH_START) ' Dim nMachStartId As Integer = GDB_ID.NULL ' If ImportLayer.EntityList.Count > 0 Then ' For Each GeomEntity In ImportLayer.EntityList ' ' se punto o curva compo ' Dim EntityType As GDB_TY = EgtGetType(GeomEntity.nId) ' Select Case EntityType ' Case GDB_TY.GEO_POINT, GDB_TY.CRV_COMPO ' ' gli cambio layer ' EgtRelocateGlob(GeomEntity.nId, nMachStartLayerId, GDB_POS.LAST_SON) ' nMachStartId = GeomEntity.nId ' Case GDB_TY.CRV_ARC, GDB_TY.CRV_BEZ, GDB_TY.CRV_LINE ' ' altrimenti la trasformo in curva compo ' nMachStartId = EgtCreateCurveCompo(nMachStartLayerId, GeomEntity.nId, True) ' End Select ' EgtSetName(nMachStartId, START_GEOM) ' ' coloro l'entita' di rosso ' Dim c3Red As Color3d ' c3Red.FromColor(System.Drawing.Color.Red) ' EgtSetColor(nMachStartId, c3Red) ' Next ' Else ' ' 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) ' ' coloro l'entita' di rosso ' Dim c3Red As Color3d ' c3Red.FromColor(System.Drawing.Color.Red) ' EgtSetColor(nMachStartId, c3Red) ' End If ' Case ImportLayer.LayerType.RIBS ' nRibsLayerId = EgtCreateGroup(nPartId) ' EgtSetName(nRibsLayerId, LAY_RIBS) ' For Each GeomEntity In ImportLayer.EntityList ' EgtSetInfo(GeomEntity.nId, KEY_RIB_TYPE, RibEntity.RibTypes.FROMIMPORT) ' EgtRelocateGlob(GeomEntity.nId, nRibsLayerId, GDB_POS.LAST_SON) ' ' coloro l'entita' di viola ' Dim c3LightBlue As Color3d ' c3LightBlue.FromColor(System.Drawing.Color.MediumOrchid) ' EgtSetColor(GeomEntity.nId, c3LightBlue) ' Next ' Case ImportLayer.LayerType.SHELL_NUMBER ' nShellNumberLayerId = EgtCreateGroup(nPartId) ' EgtSetName(nShellNumberLayerId, LAY_SHELL_NBR) ' For Each GeomEntity In ImportLayer.EntityList ' EgtSetInfo(GeomEntity.nId, KEY_SHELLNBR_TYPE, ShellNumberEntity.ShellNumberTypes.FROMIMPORT) ' EgtRelocateGlob(GeomEntity.nId, nShellNumberLayerId, GDB_POS.LAST_SON) ' ' coloro l'entita' di verde ' Dim c3LightBlue As Color3d ' c3LightBlue.FromColor(System.Drawing.Color.Lime) ' EgtSetColor(GeomEntity.nId, c3LightBlue) ' Next ' Case ImportLayer.LayerType.AUX_SOLIDS ' nAuxSolidsLayerId = EgtCreateGroup(nPartId) ' EgtSetName(nAuxSolidsLayerId, LAY_AUX_SOLIDS) ' For Each GeomEntity In ImportLayer.EntityList ' EgtSetInfo(GeomEntity.nId, KEY_AUXSOLID_TYPE, RibEntity.RibTypes.FROMIMPORT) ' EgtRelocateGlob(GeomEntity.nId, nAuxSolidsLayerId, GDB_POS.LAST_SON) ' ' coloro l'entita' di oro ' Dim c3LightBlue As Color3d ' c3LightBlue.FromColor(System.Drawing.Color.DarkGoldenrod) ' EgtSetColor(GeomEntity.nId, c3LightBlue) ' Next ' Case ImportLayer.LayerType.OTHERS ' nOthersLayerId = EgtCreateGroup(nPartId) ' EgtSetName(nOthersLayerId, LAY_OTHERS) ' For Each GeomEntity In ImportLayer.EntityList ' EgtRelocateGlob(GeomEntity.nId, nOthersLayerId, GDB_POS.LAST_SON) ' Next ' End Select ' Next ' ' aggiungo riferimento ' Dim nReferenceLayerId As Integer = EgtCreateGroup(nPartId) ' EgtSetName(nReferenceLayerId, LAY_REFERENCE) ' ' Creo riferimento ' Dim ptOrig As New Point3d(b3PrintSolid.Min()) ' Select Case PrintSolidEntity.Reference ' Case ChooseReferenceWndVM.References.TL ' ptOrig += b3PrintSolid.DimY() * Vector3d.Y_AX ' Case ChooseReferenceWndVM.References.TR ' ptOrig += b3PrintSolid.DimY() * Vector3d.Y_AX + b3PrintSolid.DimX() * Vector3d.X_AX ' Case ChooseReferenceWndVM.References.BL ' Case ChooseReferenceWndVM.References.BR ' ptOrig += b3PrintSolid.DimX() * Vector3d.X_AX ' Case ChooseReferenceWndVM.References.TC ' ptOrig += b3PrintSolid.DimY() * Vector3d.Y_AX + b3PrintSolid.DimX() / 2 * Vector3d.X_AX ' Case ChooseReferenceWndVM.References.ML ' ptOrig += b3PrintSolid.DimY() / 2 * Vector3d.Y_AX ' Case ChooseReferenceWndVM.References.MR ' ptOrig += b3PrintSolid.DimY() / 2 * Vector3d.Y_AX + b3PrintSolid.DimX() * Vector3d.X_AX ' Case ChooseReferenceWndVM.References.TC ' ptOrig += b3PrintSolid.DimY() * Vector3d.Y_AX + b3PrintSolid.DimX() / 2 * Vector3d.X_AX ' Case ChooseReferenceWndVM.References.MR ' ptOrig += b3PrintSolid.DimY() / 2 * Vector3d.Y_AX + b3PrintSolid.DimX() * Vector3d.X_AX ' Case ChooseReferenceWndVM.References.BC ' ptOrig += b3PrintSolid.DimX() / 2 * Vector3d.X_AX ' Case ChooseReferenceWndVM.References.MC ' ptOrig += b3PrintSolid.DimY() / 2 * Vector3d.Y_AX + b3PrintSolid.DimX() / 2 * Vector3d.X_AX ' End Select ' Dim frPrintSolid As New Frame3d(ptOrig) ' nFrameId = EgtCreateGeoFrame(nReferenceLayerId, frPrintSolid, GDB_RT.GLOB) ' If nFrameId Then ' EgtSetName(nFrameId, FRAME_PART) ' EgtSetMode(nFrameId, GDB_MD.LOCKED) ' End If ' EgtSetInfo(nReferenceLayerId, KEY_REFERENCE, PrintSolidEntity.Reference) ' ' appoggio il pezzo sulla tavola ' EgtMove( nPartId, New Vector3d(0, 0, -b3PrintSolid.Min.z)) ' ' lo aggiungo a lista pezzi ' Dim sFilePath As String = "" ' EgtGetInfo(m_nImportedPartId, FILE_PATH, sFilePath) ' EgtSetInfo(nPartId, FILE_PATH, sFilePath) ' EgtSetInfo(nPartId, "PartOnTable", 1) ' Dim NewPart As New Print3dPartVM(nPartId, nPrintPartLayerId, PrintSolidEntity.nId, nOriginalPartLayerId, nReferenceLayerId, nFrameId, nMachStartLayerId, nRibsLayerId, nShellNumberLayerId, nAuxSolidsLayerId, nOthersLayerId, sFilePath) ' Map.refTopPanelVM.PartList.Add(NewPart) ' Next 'End If ''EgtAddMachGroup("3dPrint") ''EgtSetTable("Tab") ''Dim nRawId As Integer = EgtAddRawPart(b3PrintSolid.Min, b3PrintSolid.DimX, b3PrintSolid.DimY, b3PrintSolid.DimZ, New Color3d(128, 128, 128, 30)) ''EgtAddPartToRawPart(nPartId, b3PrintSolid.Min, nRawId) ''EgtMoveToCornerRawPart(nRawId, New Point3d(dPosX, dPosY, 0), MCH_CR.BL) ''EgtResetCurrMachGroup() '' seleziono ultimo pezzo aggiunto 'Map.refTopPanelVM.SelLastPart() '' elimino vecchio pezzo d'importazione 'EgtErase(m_nImportedPartId) 'EgtDraw() ' ripristino modalita' standard Map.refTopPanelVM.SelPage = Pages.MODIFY End Sub #End Region ' Ok #Region "Cancel" Public ReadOnly Property Cancel_Command As ICommand Get If m_cmdCancel Is Nothing Then m_cmdCancel = New Command(AddressOf Cancel) End If Return m_cmdCancel End Get End Property Public Sub Cancel() ' ripristino modalita' standard Map.refTopPanelVM.SelPage = Pages.MODIFY End Sub #End Region ' Cancel #End Region ' COMMANDS End Class