Files
icarus/Icarus/ReferencePanel/ReferencePanelVM.vb
T
2023-02-10 16:23:33 +01:00

216 lines
7.5 KiB
VB.net

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
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"
''' <summary>
''' Returns a command that do CPlaneTop.
''' </summary>
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
''' <summary>
''' Execute the CPlaneTop. This method is invoked by the CPlaneTopCommand.
''' </summary>
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 ""
Case References.TR
Return ""
Case References.BL
Return ""
Case References.BR
Return ""
Case References.TC
Return ""
Case References.ML
Return ""
Case References.MR
Return ""
Case References.BC
Return ""
Case References.MC
Return ""
Case Else
Return "X"
End Select
End Get
End Property
Sub New(Type As References)
m_Type = Type
End Sub
End Class