Files
egtbeamwall/EgtBEAMWALL.Supervisor/MachGroupPanel/BeamMachGroupVM.vb
T
2021-04-15 20:06:18 +02:00

285 lines
10 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.Collections.Specialized
Imports System.ComponentModel
Imports System.IO
Imports EgtBEAMWALL.Core
Imports EgtUILib
Imports EgtWPFLib5
Public Class BeamMachGroupVM
Inherits MyMachGroupVM
Public ReadOnly Property m_BeamMachGroupM As BeamMachGroupM
Get
Return m_MachGroupM
End Get
End Property
Public Property sStartCut As String
Get
Return LenToString(m_BeamMachGroupM.dStartCut, 3)
End Get
Set(value As String)
Dim dValue As Double
If StringToLen(value, dValue) Then
Dim dOldValue As Double = m_BeamMachGroupM.dStartCut
m_BeamMachGroupM.dStartCut = dValue
If Not ReDrawBeamMachgroup() Then
' rispristino vecchio valore
m_BeamMachGroupM.dStartCut = dOldValue
ReDrawBeamMachgroup()
End If
m_BeamMachGroupM.dStartCut = dValue
EgtDraw()
If PartVMList.Count > 0 Then
Dim Beam As BeamVM = DirectCast(PartVMList(0), BeamVM)
Beam.UpdateOffset()
Beam.NotifyPropertyChanged("sOffset")
End If
Else
NotifyPropertyChanged("sStartCut")
End If
End Set
End Property
Public Property dStartCut As Double
Get
Return m_BeamMachGroupM.dStartCut
End Get
Set(value As Double)
m_BeamMachGroupM.dStartCut = value
End Set
End Property
Public Property SelBeam As BeamVM
Get
Return m_SelPart
End Get
Set(value As BeamVM)
m_SelPart = value
End Set
End Property
' definizione comandi
Private m_cmdDeleteMachGroup As ICommand
Sub New(BeamMachGroupM As BeamMachGroupM)
MyBase.New(BeamMachGroupM)
AddHandler m_BeamMachGroupM.PartAdded, AddressOf OnBeamAdded
AddHandler m_BeamMachGroupM.PartRemoved, AddressOf OnBeamRemoved
CreateBeamVMList()
End Sub
#Region "METHODS"
Private Sub CreateBeamVMList()
Dim all As List(Of BeamVM) = (From BeamM In m_BeamMachGroupM.GetParts()
Select New BeamVM(BeamM)).ToList()
For Each BeamVM As BeamVM In all
AddHandler BeamVM.PropertyChanged, AddressOf OnBeamVMPropertyChanged
Next
m_PartVMList = New ObservableCollection(Of PartVM)(all)
AddHandler m_PartVMList.CollectionChanged, AddressOf OnBeamVMListChanged
End Sub
#End Region ' METHODS
Public Overrides Sub RefreshPartList()
' leggo StartCut da posizione primo pezzo
Dim sInfo As String = ""
Dim sSplitInfo() As String
Dim bFound As Boolean = False
EgtGetInfo(Id, MGR_RPT_PART & 1, sInfo)
If Not String.IsNullOrWhiteSpace(sInfo) Then
sSplitInfo = sInfo.Split(","c)
StringToDouble(sSplitInfo(1), m_BeamMachGroupM.dStartCut)
Else
m_BeamMachGroupM.dStartCut = 0
End If
' aggiorno lista pezzi
PartVMList.Clear()
Dim nRawPartId As Integer = EgtGetFirstRawPart()
While nRawPartId <> GDB_ID.NULL
Dim nPartId As Integer = EgtGetFirstPartInRawPart(nRawPartId)
If nPartId <> GDB_ID.NULL Then
'''Dim NewBeam As BeamVM = New BeamVM(Me, nPartId, nRawPartId)
'''PartVMList.Add(NewBeam)
'''NewBeam.UpdateOffset()
End If
nRawPartId = EgtGetNextRawPart(nRawPartId)
End While
End Sub
Public Overrides Sub RefreshGroupData()
End Sub
Friend Sub UpdateUsage()
m_BeamMachGroupM.SetTotMat(dL)
m_BeamMachGroupM.SetMatForPart(0)
For Each Part In PartVMList
m_BeamMachGroupM.SetMatForPart(m_BeamMachGroupM.dMatForPart + Part.dL)
Next
NotifyPropertyChanged(NameOf(dUsage))
NotifyPropertyChanged(NameOf(dWaste))
End Sub
Friend Function ReDrawBeamMachgroup() As Boolean
'' scrivo dati di tutti i pezzi
'Dim dPosX As Double = m_BeamMachGroupM.dStartCut
'Dim nIndex As Integer
'For nIndex = 0 To PartVMList.Count - 1
' If nIndex <> 0 Then
' Dim Beam As BeamVM = DirectCast(PartVMList(nIndex), BeamVM)
' dPosX += Beam.m_BeamM.dOffset
' End If
' PartVMList(nIndex).dPOSX = dPosX
' EgtSetInfo(Id, MGR_RPT_PART & nIndex + 1, PartVMList(nIndex).nPartId & "," & dPosX)
' dPosX += PartVMList(nIndex).dL
'Next
'' elimino eventuali successive info pezzi di troppo
'nIndex = PartVMList.Count + 1
'Dim sTemp As String = ""
'While EgtGetInfo(Id, MGR_RPT_PART & nIndex, sTemp)
' EgtSetInfo(Id, MGR_RPT_PART & nIndex, "")
'End While
'' elimino vecchio grezzo ed eseguo script creazione nuovo
'Dim nRawId As Integer = EgtGetFirstRawPart()
'While nRawId <> GDB_ID.NULL
' EgtRemoveRawPart(nRawId)
' nRawId = EgtGetFirstRawPart()
'End While
'If Not ExecBeam(Map.refMainWindowVM.MainWindowM.sTempDir, Map.refMachinePanelVM.SelectedMachine.Name, CalcIntegration.CmdType.RAWPART, False) Then Return False
Return True
End Function
Friend Sub MoveBeam(Beam As BeamVM, MoveDirection As MoveDirections)
Dim nBeamIndex As Integer = PartVMList.IndexOf(Beam)
If nBeamIndex = 0 AndAlso MoveDirection = MoveDirections.UP Then Return
If nBeamIndex = PartVMList.Count - 1 AndAlso MoveDirection = MoveDirections.DOWN Then Return
' se pezzo mosso diventa primo
Dim FirstBeam As BeamVM
If (nBeamIndex = 1 AndAlso MoveDirection = MoveDirections.UP) OrElse (nBeamIndex = 0 AndAlso MoveDirection = MoveDirections.DOWN) Then
'' resetto offset per vecchio primo
FirstBeam = DirectCast(PartVMList(0), BeamVM)
FirstBeam.ResetOffset()
End If
PartVMList.Move(nBeamIndex, nBeamIndex + MoveDirection)
ReDrawBeamMachgroup()
' aggiorno offset primo pezzo
FirstBeam = DirectCast(PartVMList(0), BeamVM)
FirstBeam.UpdateOffset()
FirstBeam.NotifyPropertyChanged(NameOf(FirstBeam.sOffset))
End Sub
Friend Sub ReorderBeam()
Dim TempPartList = PartVMList.OrderBy(Function(x) x.dL).ToList()
' verifico se non sono già in oridne
Dim bSort As Boolean = False
For PartIndex = 0 To PartVMList.Count - 1
If PartVMList(PartIndex).nPartId <> TempPartList(PartIndex).nPartId Then
bSort = True
Exit For
End If
Next
If Not bSort Then Return
' resetto offset primo pezzo
Dim FirstBeam As BeamVM = DirectCast(PartVMList(0), BeamVM)
FirstBeam.ResetOffset()
PartVMList.Clear()
For Each Part In TempPartList
PartVMList.Add(Part)
Next
ReDrawBeamMachgroup()
' aggiorno offset primo pezzo
FirstBeam = DirectCast(PartVMList(0), BeamVM)
FirstBeam.UpdateOffset()
FirstBeam.NotifyPropertyChanged(NameOf(FirstBeam.sOffset))
End Sub
#Region "COMMANDS"
#Region "DeleteMachGroup"
' Returns a command that manage the MainWindow_Unloaded command
Public ReadOnly Property DeleteMachGroup_Command As ICommand
Get
If m_cmdDeleteMachGroup Is Nothing Then
m_cmdDeleteMachGroup = New Command(AddressOf DeleteMachGroup)
End If
Return m_cmdDeleteMachGroup
End Get
End Property
' Manage the MainWindow_Unloaded event. This method is invoked by the cmdMainWindow_Unloaded.
Public Overrides Sub DeleteMachGroup()
' elimino tutte le copie
Dim nRawPartId As Integer = EgtGetFirstRawPart()
Dim nBeamId As Integer = EgtGetFirstPartInRawPart(nRawPartId)
While nRawPartId <> GDB_ID.NULL
EgtRemovePartFromRawPart(nBeamId)
EgtErase(nBeamId)
nRawPartId = EgtGetNextRawPart(nRawPartId)
nBeamId = EgtGetFirstPartInRawPart(nRawPartId)
End While
' elimino MachGroup
EgtRemoveMachGroup(Me.Id)
' rimuovo dalla lista grezzi
Dim Index As Integer = Map.refMachGroupPanelVM.MachGroupVMList.IndexOf(Me)
If Index = 0 Then
If Map.refMachGroupPanelVM.MachGroupVMList.Count > 0 Then
Map.refMachGroupPanelVM.SelectedMachGroup = Map.refMachGroupPanelVM.MachGroupVMList(0)
Else
Map.refMachGroupPanelVM.SelectedMachGroup = Nothing
End If
ElseIf Index = Map.refMachGroupPanelVM.MachGroupvmList.Count - 1 Then
If Map.refMachGroupPanelVM.MachGroupVMList.Count > 1 Then
Map.refMachGroupPanelVM.SelectedMachGroup = Map.refMachGroupPanelVM.MachGroupVMList(Map.refMachGroupPanelVM.MachGroupVMList.Count - 2)
Else
Map.refMachGroupPanelVM.SelectedMachGroup = Nothing
End If
Else
Map.refMachGroupPanelVM.SelectedMachGroup = Map.refMachGroupPanelVM.MachGroupVMList(Index - 1)
End If
Map.refMachGroupPanelVM.MachGroupVMList.Remove(Me)
End Sub
#End Region ' DeleteMachGroup
#End Region ' COMMANDS
#Region "EVENTS"
Private Sub OnBeamAdded(sender As Object, e As PartAddedEventArgs)
Dim BeamVM As BeamVM = New BeamVM(e.NewPart)
PartVMList.Add(BeamVM)
End Sub
Private Sub OnBeamRemoved(sender As Object, e As PartAddedEventArgs)
Dim BeamVM As BeamVM = PartVMList.FirstOrDefault(Function(x) x.PartM Is e.m_NewPart)
If Not IsNothing(BeamVM) Then PartVMList.Remove(BeamVM)
End Sub
Private Sub OnBeamVMListChanged(sender As Object, e As NotifyCollectionChangedEventArgs)
If Not IsNothing(e.NewItems) AndAlso e.NewItems.Count > 0 Then
For Each BeamVM As BeamVM In e.NewItems
AddHandler BeamVM.PropertyChanged, AddressOf OnBeamVMPropertyChanged
Next
End If
If Not IsNothing(e.OldItems) AndAlso e.OldItems.Count > 0 Then
For Each BeamVM As BeamVM In e.OldItems
RemoveHandler BeamVM.PropertyChanged, AddressOf OnBeamVMPropertyChanged
Next
End If
End Sub
Private Sub OnBeamVMPropertyChanged(sender As Object, e As PropertyChangedEventArgs)
'Select Case e.PropertyName
' Case NameOf(sender.nSelGRP), NameOf(sender.nSelSIDE)
'End Select
End Sub
#End Region
End Class