Imports System.Collections.ObjectModel Imports EgtUILib Imports EgtWPFLib5 Public Class ReferencePanelVM Inherits VMBase Private m_ReferenceList As New List(Of ReferenceBtn)({New ReferenceBtn(ReferenceBtn.References.TL), New ReferenceBtn(ReferenceBtn.References.TC), New ReferenceBtn(ReferenceBtn.References.TR), New ReferenceBtn(ReferenceBtn.References.ML), New ReferenceBtn(ReferenceBtn.References.MC), New ReferenceBtn(ReferenceBtn.References.MR), New ReferenceBtn(ReferenceBtn.References.BL), New ReferenceBtn(ReferenceBtn.References.BC), New ReferenceBtn(ReferenceBtn.References.BR)}) Public Property ReferenceList As List(Of ReferenceBtn) Get Return m_ReferenceList End Get Set(value As List(Of ReferenceBtn)) m_ReferenceList = value End Set End Property Private m_SelReference As ReferenceBtn.References Public Property ghSelReference As ReferenceBtn Get Return m_ReferenceList.FirstOrDefault(Function(x) x.Type = m_SelReference) End Get Set(value As ReferenceBtn) m_SelReference = value.Type EgtSetInfo(Map.refTopPanelVM.SelPart.nReferenceLayerId, KEY_REFERENCE, value.Type) UpdateFramePosition() End Set End Property Public Property FromImport_IsChecked As Boolean Get Return m_SelReference = ReferenceBtn.References.FROM_IMPORT End Get Set(value As Boolean) If value Then m_SelReference = ReferenceBtn.References.FROM_IMPORT NotifyPropertyChanged(NameOf(ghSelReference)) EgtSetInfo(Map.refTopPanelVM.SelPart.nReferenceLayerId, KEY_REFERENCE, ReferenceBtn.References.FROM_IMPORT) UpdateFramePosition() End If End Set End Property ' Definizione comandi Private m_cmdFromImport As ICommand #Region "CONSTRUCTORS" Sub New() ' Creo riferimento a questa classe in EgtCAM5Map Map.SetRefReferencePanelVM(Me) End Sub #End Region ' CONSTRUCTORS #Region "METHODS" Friend Sub Init() Dim nReference As Integer = 3 EgtGetInfo(Map.refTopPanelVM.SelPart.nReferenceLayerId, KEY_REFERENCE, nReference) m_SelReference = nReference NotifyPropertyChanged(NameOf(ghSelReference)) End Sub Friend Sub UpdateFramePosition(Optional SelPart As Print3dPartVM = Nothing) Dim SelReference As Integer = ReferenceBtn.References.BL If IsNothing(SelPart) Then SelPart = Map.refTopPanelVM.SelPart End If EgtGetInfo(SelPart.nReferenceLayerId, KEY_REFERENCE, SelReference) ' elimino precedente EgtEmptyGroup(SelPart.nReferenceLayerId) ' Creo riferimento Dim frPrintSolid As New Frame3d() If SelReference = ReferenceBtn.References.FROM_IMPORT Then EgtGetGlobFrame(SelPart.nPrintSolidId, frPrintSolid) frPrintSolid.Setup(New Point3d(frPrintSolid.Orig.x, frPrintSolid.Orig.y, 0)) Else Dim b3ToBePrintSolid As BBox3d = Map.refDispositionPanelVM.GetSolidForReferenceBBox(SelPart) ' Creo riferimento Dim ptOrig As New Point3d(b3ToBePrintSolid.Min()) Select Case SelReference Case ReferenceBtn.References.TL ptOrig += b3ToBePrintSolid.DimY() * Vector3d.Y_AX Case ReferenceBtn.References.TR ptOrig += b3ToBePrintSolid.DimY() * Vector3d.Y_AX + b3ToBePrintSolid.DimX() * Vector3d.X_AX Case ReferenceBtn.References.BL Case ReferenceBtn.References.BR ptOrig += b3ToBePrintSolid.DimX() * Vector3d.X_AX Case ReferenceBtn.References.TC ptOrig += b3ToBePrintSolid.DimY() * Vector3d.Y_AX + b3ToBePrintSolid.DimX() / 2 * Vector3d.X_AX Case ReferenceBtn.References.ML ptOrig += b3ToBePrintSolid.DimY() / 2 * Vector3d.Y_AX Case ReferenceBtn.References.MR ptOrig += b3ToBePrintSolid.DimY() / 2 * Vector3d.Y_AX + b3ToBePrintSolid.DimX() * Vector3d.X_AX Case ReferenceBtn.References.TC ptOrig += b3ToBePrintSolid.DimY() * Vector3d.Y_AX + b3ToBePrintSolid.DimX() / 2 * Vector3d.X_AX Case ReferenceBtn.References.MR ptOrig += b3ToBePrintSolid.DimY() / 2 * Vector3d.Y_AX + b3ToBePrintSolid.DimX() * Vector3d.X_AX Case ReferenceBtn.References.BC ptOrig += b3ToBePrintSolid.DimX() / 2 * Vector3d.X_AX Case ReferenceBtn.References.MC ptOrig += b3ToBePrintSolid.DimY() / 2 * Vector3d.Y_AX + b3ToBePrintSolid.DimX() / 2 * Vector3d.X_AX End Select Dim vtMovedPart As Vector3d If EgtGetInfo(SelPart.nPartId, KEY_MOVEDPART, vtMovedPart) Then ptOrig = ptOrig - vtMovedPart ElseIf EgtGetInfo(SelPart.nPartId, KEY_MOVEDPART2, vtMovedPart) Then ptOrig = ptOrig - vtMovedPart End If Dim nPartFrameId As Integer = EgtCreateGeoFrame(SelPart.nPartReferenceLayerId, New Frame3d(ptOrig), GDB_RT.GLOB) EgtSetStatus(nPartFrameId, GDB_ST.OFF) ' elimino componente Z ptOrig = ptOrig + New Vector3d(0, 0, -ptOrig.z) frPrintSolid = New Frame3d(ptOrig) End If Dim nFrameId As Integer = EgtCreateGeoFrame(SelPart.nReferenceLayerId, frPrintSolid, GDB_RT.GLOB) If nFrameId Then EgtSetName(nFrameId, FRAME_PART) EgtSetMode(nFrameId, GDB_MD.LOCKED) SelPart.UpdateReferenceId(nFrameId) End If Map.refDispositionPanelVM.RefreshPos() EgtDraw() End Sub #End Region ' METHODS #Region "COMMANDS" #Region "FromImport" ''' ''' Returns a command that do CPlaneTop. ''' Public ReadOnly Property FromImport_Command As ICommand Get If m_cmdFromImport Is Nothing Then m_cmdFromImport = New Command(AddressOf FromImport) End If Return m_cmdFromImport End Get End Property ''' ''' Execute the CPlaneTop. This method is invoked by the CPlaneTopCommand. ''' Public Sub FromImport() m_SelReference = ReferenceBtn.References.FROM_IMPORT NotifyPropertyChanged(NameOf(ghSelReference)) UpdateFramePosition() End Sub #End Region ' FromImport #End Region ' COMMANDS End Class Public Class ReferenceBtn Public Enum References As Integer TL = 1 TR = 2 BL = 3 BR = 4 TC = 5 ML = 6 MR = 7 BC = 8 MC = 9 FROM_IMPORT = 10 End Enum Private m_Type As References Public ReadOnly Property Type As References Get Return m_Type End Get End Property Public ReadOnly Property sText As String Get Select Case Type Case References.TL Return "/Resources/ReferencePanel/TL.png" '"┌" Case References.TR Return "/Resources/ReferencePanel/TR.png" '"┐" Case References.BL Return "/Resources/ReferencePanel/BL.png" '"└" Case References.BR Return "/Resources/ReferencePanel/BR.png" '"┘" Case References.TC Return "/Resources/ReferencePanel/TC.png" '"┬" Case References.ML Return "/Resources/ReferencePanel/ML.png" '"├" Case References.MR Return "/Resources/ReferencePanel/MR.png" '"┤" Case References.BC Return "/Resources/ReferencePanel/BC.png" '"┴" Case References.MC Return "/Resources/ReferencePanel/MC.png" '"┼" Case Else Return "" '"X" End Select End Get End Property Public ReadOnly Property sSelText As String Get Select Case Type Case References.TL Return "/Resources/ReferencePanel/White_TL.png" '"┌" Case References.TR Return "/Resources/ReferencePanel/White_TR.png" '"┐" Case References.BL Return "/Resources/ReferencePanel/White_BL.png" '"└" Case References.BR Return "/Resources/ReferencePanel/White_BR.png" '"┘" Case References.TC Return "/Resources/ReferencePanel/White_TC.png" '"┬" Case References.ML Return "/Resources/ReferencePanel/White_ML.png" '"├" Case References.MR Return "/Resources/ReferencePanel/White_MR.png" '"┤" Case References.BC Return "/Resources/ReferencePanel/White_BC.png" '"┴" Case References.MC Return "/Resources/ReferencePanel/White_MC.png" '"┼" Case Else Return "" '"X" End Select End Get End Property Sub New(Type As References) m_Type = Type End Sub End Class