Files
EgtCAM5/OptionPanel/MachiningOptionPanel/OperationExpander/DispositionParameterExpander/DispositionParameterExpanderVM.vb
T
Renzo Lanza fe58578e65 EgtCAM5 :
- eliminati tutti gli Application.Msn.Register/NotifyColleagues e la classe Messenger. Ora tutto ciò che eseguivano è in funzioni/sub Friend chiamate tramite i riferimenti in Map.
2020-10-28 14:09:17 +00:00

481 lines
17 KiB
VB.net

Imports EgtUILib
Public Class DispositionParameterExpanderVM
Inherits ViewModelBase
Public Enum ObjectType As Integer
RAWPART = 1
PART = 2
FIXTURE = 3
End Enum
Private m_ActiveObject As ObjectType
Public Property ActiveObject As ObjectType
Get
Return m_ActiveObject
End Get
Set(value As ObjectType)
If value <> m_ActiveObject Then
Select Case value
Case ObjectType.RAWPART
RawPartIsExpanded = True
Case ObjectType.PART
PartIsExpanded = True
Case ObjectType.FIXTURE
FixtureIsExpanded = True
End Select
m_ActiveObject = value
End If
m_ActiveObject = value
End Set
End Property
Friend m_Id As Integer
Public ReadOnly Property Id As Integer
Get
Return m_Id
End Get
End Property
Private m_Name As String
Public Property Name As String
Get
Return m_Name
End Get
Set(value As String)
m_Name = value
End Set
End Property
Private m_RawPartIsExpanded As Boolean
Public Property RawPartIsExpanded As Boolean
Get
Return m_RawPartIsExpanded
End Get
Set(value As Boolean)
If value <> m_RawPartIsExpanded Then
If value Then
' Chiudo Part e Fixture
PartIsExpanded = False
FixtureIsExpanded = False
' verifico se è attiva l'opzione muovi con ventose
If m_MoveWithFixture Then
' Abilito la selezione dei RawPart con ventose
Map.refProjectVM.SceneSelType = SceneSelTypeOpt.RAWPARTWITHFIXTURE
Else
' Abilito la selezione dei RawPart
Map.refProjectVM.SceneSelType = SceneSelTypeOpt.RAWPART
End If
If m_MoveIsChecked Then
m_RawRefGroupVisibility = Visibility.Visible
OnPropertyChanged("RawRefGroupVisibility")
End If
Else
' Nascondo i bottoni per impostare la posizione di riferimento del grezzo
m_RawRefGroupVisibility = Visibility.Collapsed
OnPropertyChanged("RawRefGroupVisibility")
' smarco la prima entità selezionata
EgtResetMark(EgtGetFirstSelectedObj)
EgtDeselectAll()
EgtDraw()
End If
m_RawPartIsExpanded = value
ActiveObject = ObjectType.RAWPART
OnPropertyChanged("RawPartIsExpanded")
End If
End Set
End Property
Private m_PartIsExpanded As Boolean
Public Property PartIsExpanded As Boolean
Get
Return m_PartIsExpanded
End Get
Set(value As Boolean)
If value <> m_PartIsExpanded Then
If value Then
' Chiudo RawPart e Fixture
RawPartIsExpanded = False
FixtureIsExpanded = False
Else
' smarco la prima entità selezionata
EgtResetMark(EgtGetFirstSelectedObj)
EgtDeselectAll()
EgtDraw()
End If
m_PartIsExpanded = value
ActiveObject = ObjectType.PART
OnPropertyChanged("PartIsExpanded")
End If
End Set
End Property
Private m_FixtureIsExpanded As Boolean
Public Property FixtureIsExpanded As Boolean
Get
Return m_FixtureIsExpanded
End Get
Set(value As Boolean)
If value <> m_FixtureIsExpanded Then
If value Then
' Chiudo RawPart e Part
RawPartIsExpanded = False
PartIsExpanded = False
' Abilito la selezione delle Fixture
Map.refProjectVM.SceneSelType = SceneSelTypeOpt.FIXTURE
m_ExpandFixtureFunction()
Else
' smarco la prima entità selezionata
EgtResetMark(EgtGetFirstSelectedObj)
' deseleziono tutto ed aggiorno la visualizzazione
EgtDeselectAll()
EgtDraw()
End If
m_FixtureIsExpanded = value
ActiveObject = ObjectType.FIXTURE
OnPropertyChanged("FixtureIsExpanded")
End If
End Set
End Property
Private m_MoveIsChecked As Boolean
Public Property MoveIsChecked As Boolean
Get
Return m_MoveIsChecked
End Get
Set(value As Boolean)
If value <> m_MoveIsChecked Then
Map.refProjectVM.SetMoveInDisposition(value)
InputValue = String.Empty
OnPropertyChanged("InputValue")
If value Then
If m_RawPartIsExpanded Then
m_RawRefGroupVisibility = Visibility.Visible
OnPropertyChanged("RawRefGroupVisibility")
Else
m_RawRefGroupVisibility = Visibility.Collapsed
OnPropertyChanged("RawRefGroupVisibility")
End If
m_InputMsg = "Move to:"
Else
m_RawRefGroupVisibility = Visibility.Collapsed
OnPropertyChanged("RawRefGroupVisibility")
m_InputMsg = "Rotate of:"
End If
OnPropertyChanged("InputMsg")
m_MoveIsChecked = value
End If
End Set
End Property
Private m_MoveWithFixture As Boolean = False
Public Property MoveWithFixture As Boolean
Get
Return m_MoveWithFixture
End Get
Set(value As Boolean)
If value <> m_MoveWithFixture Then
If value Then
' Abilito la selezione di RawPart con autoselezione delle sue ventose
Map.refProjectVM.SceneSelType = SceneSelTypeOpt.RAWPARTWITHFIXTURE
' Seleziono le ventose associate ad uno dei grezzi selezionati
' ciclo sui grezzi selezionati
Dim nSelRawPartId As Integer = EgtGetFirstSelectedObj()
While nSelRawPartId <> GDB_ID.NULL
' seleziono i sottopezzi del grezzo
DispositionUtility.SelectRawPartFixture(nSelRawPartId)
nSelRawPartId = EgtGetNextSelectedObj()
End While
Else
' Abilito la selezione di RawPart
Map.refProjectVM.SceneSelType = SceneSelTypeOpt.RAWPART
' ciclo sui grezzi selezionati
Dim nSelRawPartId As Integer = EgtGetFirstSelectedObj()
While nSelRawPartId <> GDB_ID.NULL
' deseleziono i sottopezzi del grezzo
DispositionUtility.DeselectRawPartFixture(nSelRawPartId)
nSelRawPartId = EgtGetNextSelectedObj()
End While
End If
EgtDraw()
m_MoveWithFixture = value
OnPropertyChanged("MoveWithFixture")
End If
End Set
End Property
Private m_InputValue As String
Public Property InputValue As String
Get
Return m_InputValue
End Get
Set(value As String)
If Not String.IsNullOrEmpty(m_InputErrorMsg) Then
m_InputErrorMsg = String.Empty
OnPropertyChanged("InputErrorMsg")
End If
m_InputValue = value
End Set
End Property
Private m_BLIsChecked As Boolean = True
Public ReadOnly Property BLIsChecked As Boolean
Get
Return m_BLIsChecked
End Get
End Property
Private m_RawRefPosition As MCH_CR = MCH_CR.BL
Private m_RawRefGroupVisibility As Visibility
Public ReadOnly Property RawRefGroupVisibility As Visibility
Get
Return m_RawRefGroupVisibility
End Get
End Property
' Actions
Private m_ExpandFixtureFunction As Action
Private m_FixtureParameters As FixtureParametersV
Public ReadOnly Property FixtureParameters As ContentControl
Get
If IsNothing(m_FixtureParameters) Then
m_FixtureParameters = New FixtureParametersV
m_FixtureParameters.DataContext = New FixtureParametersVM(m_ExpandFixtureFunction)
End If
Return m_FixtureParameters
End Get
End Property
Private m_RawPartOptions As RawPartOptionV
Public ReadOnly Property RawPartOptions As ContentControl
Get
If IsNothing(m_RawPartOptions) Then
m_RawPartOptions = New RawPartOptionV
m_RawPartOptions.DataContext = New RawPartOptionVM
End If
Return m_RawPartOptions
End Get
End Property
#Region "Messages"
Private m_InputMsg As String
Public ReadOnly Property InputMsg As String
Get
Return m_InputMsg
End Get
End Property
Private m_InputErrorMsg As String
Public ReadOnly Property InputErrorMsg As String
Get
Return m_InputErrorMsg
End Get
End Property
Public ReadOnly Property OkMsg As String
Get
Return EgtMsg(MSG_DISPOSITION + 1)
End Get
End Property
#End Region ' Messages
' Definizione comandi
Private m_cmdDone As ICommand
Private m_cmdCheckedRawRef As ICommand
#Region "CONSTRUCTOR"
Sub New(ByRef OpenDispositionFunction As Action(Of Boolean))
OpenDispositionFunction = AddressOf OpenDispositionParameters
MoveIsChecked = True
m_BLIsChecked = True
OnPropertyChanged("BLIsChecked")
m_RawRefPosition = MCH_CR.BL
End Sub
#End Region
#Region "METHODS"
Public Sub OpenDispositionParameters(bFirst As Boolean)
If bFirst Then
ActiveObject = ObjectType.RAWPART
Else
ActiveObject = ObjectType.FIXTURE
End If
Select Case m_ActiveObject
Case ObjectType.RAWPART
' Abilito la selezione delle Fixture
Map.refProjectVM.SceneSelType = SceneSelTypeOpt.RAWPART
Case ObjectType.FIXTURE
' Abilito la selezione delle Fixture
Map.refProjectVM.SceneSelType = SceneSelTypeOpt.FIXTURE
End Select
m_MoveWithFixture = False
OnPropertyChanged("MoveWithFixture")
Map.refFixtureParametersVM.UpdateFixtureTypeList()
End Sub
#End Region ' METHODS
#Region "COMMANDS"
#Region "DoneCommand"
''' <summary>
''' Returns a command that do Done.
''' </summary>
Public ReadOnly Property DoneCommand As ICommand
Get
If m_cmdDone Is Nothing Then
m_cmdDone = New RelayCommand(AddressOf Done)
End If
Return m_cmdDone
End Get
End Property
''' <summary>
''' Execute the Point. This method is invoked by the DoneCommand.
''' </summary>
Public Sub Done(ByVal param As Object)
' Verifico la validità del punto in Input
If Not String.IsNullOrEmpty(m_InputValue) Then
' se movimento di traslazione
If m_MoveIsChecked Then
Dim InputPoint As New Point3d(0, 0, 0)
Dim Values() As String = m_InputValue.Split(","c)
If Values.Count = 2 Then
StringToLen(Values(0), InputPoint.x)
StringToLen(Values(1), InputPoint.y)
Else
m_InputErrorMsg = "Il valore non è una cordinata XY"
OnPropertyChanged("InputErrorMsg")
Return
End If
' Vettore di movimento
Dim vtMove As Vector3d
' lo imposto a seconda del tipo del primo elemento selezionato
Dim nFirstSelectedId As Integer = EgtGetFirstSelectedObj()
' se è un grezzo
If EgtVerifyRawPartCurrPhase(nFirstSelectedId) Then
' imposto il riferimento della tavola
Dim ptTableRef As Point3d
EgtGetTableRef(1, ptTableRef)
' calcolo il punto del grezzo da posizionar nelle coordinate di input
Dim ptRawRefPoint As Point3d = DispositionUtility.GetRawPartRefPoint(nFirstSelectedId, m_RawRefPosition)
' creo un punto con le coordinate di input espresse rispetto alla tavola
Dim TableRefInputPoint As New Point3d(InputPoint)
TableRefInputPoint.LocToLoc(EgtGetGridFrame(), New Frame3d(ptTableRef))
' calcolo il vettore di spostamento del grezzo
vtMove = TableRefInputPoint - ptRawRefPoint
' se è una ventosa
ElseIf EgtVerifyFixture(nFirstSelectedId) Then
Dim SelObjFrame3d As New Frame3d(Frame3d.GLOB)
EgtGetGroupGlobFrame(nFirstSelectedId, SelObjFrame3d)
SelObjFrame3d.ToLoc(EgtGetGridFrame())
Dim FixturePoint As New Point3d(SelObjFrame3d.Orig)
' Ricavo il vettore di movimento (tengo solo XY)
vtMove = InputPoint - FixturePoint
vtMove.z = 0
End If
' Muovo tutti gli oggetti selezionati
DispositionUtility.MoveRawPartPartAndFixture(GDB_ID.SEL, vtMove, DispositionUtility.SelType.NULL)
' se è un grezzo
If EgtVerifyRawPartCurrPhase(nFirstSelectedId) Then
Dim ptRawRefPoint As Point3d = DispositionUtility.GetRawPartRefPoint(nFirstSelectedId, m_RawRefPosition)
' verifico se lo spostamento effettuato differisce da quello richiesto
Dim vtRemainingMove As Vector3d = InputPoint - ptRawRefPoint
' se differisce
If Not vtRemainingMove.IsSmall() Then
' eseguo lo spostamento rimanente sull'asse x
DispositionUtility.MoveRawPartPartAndFixture(GDB_ID.SEL, New Vector3d(vtRemainingMove.x, 0, 0), DispositionUtility.SelType.NULL)
' eseguo lo spostamento rimanente sull'asse y
DispositionUtility.MoveRawPartPartAndFixture(GDB_ID.SEL, New Vector3d(0, vtRemainingMove.y, 0), DispositionUtility.SelType.NULL)
End If
End If
' se rotazione
Else
Dim nSelId As Integer = EgtGetFirstSelectedObj()
If nSelId = GDB_ID.NULL Then Return
Dim sVal As String = m_InputValue
Dim vtRotAx As Vector3d = Vector3d.Z_AX()
' se si opera su grezzi
If EgtVerifyRawPartCurrPhase(nSelId) Then
' Se primo carattere è nome asse
If sVal(0) = "X"c Then
sVal = sVal.Remove( 0, 1)
vtRotAx = Vector3d.X_AX()
ElseIf sVal(0) = "Y"c Then
sVal = sVal.Remove( 0, 1)
vtRotAx = Vector3d.Y_AX()
ElseIf sVal(0) = "Z"c Then
sVal = sVal.Remove( 0, 1)
vtRotAx = Vector3d.Z_AX()
End If
End If
Dim InputAngle As Double = 0
If Not StringToDouble(sVal, InputAngle) Then
m_InputErrorMsg = "Il valore non è un angolo valido"
OnPropertyChanged("InputErrorMsg")
Return
End If
' eseguo rotazione
While nSelId <> GDB_ID.NULL
Select Case m_ActiveObject
Case ObjectType.RAWPART
If EgtRotateRawPart(nSelId, vtRotAx, InputAngle) Then
Dim vtOrigMove As Vector3d = Vector3d.NULL()
Dim vtRefMove As Vector3d = Vector3d.NULL()
DispositionUtility.VerifyRawPosition(nSelId, vtOrigMove, vtRefMove)
Else
m_InputErrorMsg = "Impossibile ruotare il grezzo."
OnPropertyChanged("InputErrorMsg")
End If
Case ObjectType.PART
'EgtMove...
Case ObjectType.FIXTURE
If Not EgtRotateFixture(nSelId, InputAngle) Then
m_InputErrorMsg = "Impossibile ruotare la ventosa"
OnPropertyChanged("InputErrorMsg")
End If
End Select
nSelId = EgtGetNextSelectedObj()
End While
End If
EgtDraw()
End If
End Sub
#End Region ' DoneCommand
#Region "CheckedRawRefCommand"
''' <summary>
''' Returns a command that do Done.
''' </summary>
Public ReadOnly Property CheckedRawRefCommand As ICommand
Get
If m_cmdCheckedRawRef Is Nothing Then
m_cmdCheckedRawRef = New RelayCommand(AddressOf CheckedRawRef)
End If
Return m_cmdCheckedRawRef
End Get
End Property
''' <summary>
''' Execute the Point. This method is invoked by the DoneCommand.
''' </summary>
Public Sub CheckedRawRef(ByVal param As Object)
Dim nRawRef As MCH_CR = DirectCast(param, MCH_CR)
m_RawRefPosition = nRawRef
End Sub
#End Region ' CheckedRawRefCommand
#End Region
End Class