6b340a6ec8
Correzioni varie
283 lines
10 KiB
VB.net
283 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.m_BeamM.UpdateOffset()
|
|
Beam.NotifyPropertyChanged(NameOf(Beam.sOffset))
|
|
End If
|
|
Else
|
|
NotifyPropertyChanged(NameOf(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
|
|
|
|
#Region "CONSTRUCTORS"
|
|
|
|
Sub New(BeamMachGroupM As BeamMachGroupM)
|
|
MyBase.New(BeamMachGroupM)
|
|
AddHandler m_BeamMachGroupM.PartAdded, AddressOf OnBeamAdded
|
|
AddHandler m_BeamMachGroupM.PartRemoved, AddressOf OnBeamRemoved
|
|
CreateBeamVMList()
|
|
End Sub
|
|
|
|
#End Region ' CONSTRUCTORS
|
|
|
|
#Region "METHODS"
|
|
|
|
Private Sub CreateBeamVMList()
|
|
Dim all As List(Of BeamVM) = (From BeamM In m_BeamMachGroupM.GetParts()
|
|
Select New BeamVM(BeamM, Me)).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 & "," & DoubleToString(dPosX, 3))
|
|
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, "")
|
|
nIndex += 1
|
|
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.m_BeamM.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.m_BeamM.UpdateOffset()
|
|
FirstBeam.NotifyPropertyChanged(NameOf(FirstBeam.sOffset))
|
|
End Sub
|
|
|
|
#Region "COMMANDS"
|
|
|
|
#Region "DeleteMachGroup"
|
|
|
|
' 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
|
|
If EgtRemovePartFromRawPart(nBeamId) Then
|
|
Dim Part As PartVM = PartVMList.FirstOrDefault(Function(x) x.nPartId = nBeamId)
|
|
Dim BTLPart As BTLPartVM = Part.RetrieveBTLPartFromPart()
|
|
EgtErase(nBeamId)
|
|
If Not IsNothing(BTLPart) Then BTLPart.RefreshPartInProd()
|
|
End If
|
|
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 > 1 Then
|
|
Map.refMachGroupPanelVM.SelectedMachGroup = Map.refMachGroupPanelVM.MachGroupVMList(0)
|
|
Else
|
|
Map.refMachGroupPanelVM.SelectedMachGroup = Nothing
|
|
EgtDraw()
|
|
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
|
|
EgtDraw()
|
|
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, Me)
|
|
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
|