Imports System.Collections.ObjectModel
Imports EgtBEAMWALL.Core
Imports EgtUILib
Imports EgtWPFLib5
Public Class OptimizePanelVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
Friend Enum PartType As Integer
MATERIAL = 0
ALL = 1
End Enum
Friend Enum OriginType As Integer
STANDARD = 0
FROM_BTL = 1
End Enum
Private m_PartTypeList As New List(Of IdNameStruct)({New IdNameStruct(PartType.MATERIAL, "Materiale"),
New IdNameStruct(PartType.ALL, "Tutti")})
Public ReadOnly Property PartTypeList As List(Of IdNameStruct)
Get
Return m_PartTypeList
End Get
End Property
Private m_SelPartType As IdNameStruct
Public Property SelPartType As IdNameStruct
Get
Return m_SelPartType
End Get
Set(value As IdNameStruct)
m_SelPartType = value
End Set
End Property
Private m_OriginTypeList As New List(Of IdNameStruct)({New IdNameStruct(OriginType.STANDARD, "Standard"),
New IdNameStruct(OriginType.FROM_BTL, "Da BTL")})
Public ReadOnly Property OriginTypeList As List(Of IdNameStruct)
Get
Return m_OriginTypeList
End Get
End Property
Private m_SelOriginType As IdNameStruct
Public Property SelOriginType As IdNameStruct
Get
Return m_SelOriginType
End Get
Set(value As IdNameStruct)
m_SelOriginType = value
End Set
End Property
Private m_OptimizePanel_IsEnabled As Boolean = True
Public ReadOnly Property OptimizePanel_IsEnabled As Boolean
Get
Return m_OptimizePanel_IsEnabled
End Get
End Property
#Region "Messages"
Public ReadOnly Property Optimize_Msg As String
Get
Return EgtMsg(61833)
End Get
End Property
Public ReadOnly Property Warehouse_ToolTip As String
Get
Return EgtMsg(61920)
End Get
End Property
#End Region ' Messages
' Definizione comandi
Private m_cmdOptimize As ICommand
Private m_cmdWarehouse As ICommand
#End Region ' FIELDS & PROPERTIES
#Region "CONSTRUCTOR"
Sub New()
' aggiungo riferimento a Map
Map.SetRefOptimizePanelVM(Me)
m_SelPartType = PartTypeList(0)
m_SelOriginType = OriginTypeList(0)
NotifyPropertyChanged(NameOf(SelPartType))
End Sub
#End Region ' CONSTRUCTOR
#Region "METHODS"
Friend Sub SetOptimizePanelIsEnabled(bIsEnabled As Boolean)
m_OptimizePanel_IsEnabled = bIsEnabled
NotifyPropertyChanged(NameOf(OptimizePanel_IsEnabled))
End Sub
#End Region ' METHODS
#Region "COMMANDS"
#Region "Optimize"
'''
''' Returns a command that do Open.
'''
Public ReadOnly Property Optimize_Command As ICommand
Get
If m_cmdOptimize Is Nothing Then
m_cmdOptimize = New Command(AddressOf Optimize)
End If
Return m_cmdOptimize
End Get
End Property
'''
''' Execute the Open. This method is invoked by the OpenCommand.
'''
Friend Sub Optimize()
If IsNothing(m_SelPartType) OrElse IsNothing(m_SelOriginType) Then Return
If IsNothing(Map.refProjectVM.BTLStructureVM) OrElse IsNothing(Map.refProjectVM.BTLStructureVM.BTLPartVMList) OrElse Map.refProjectVM.BTLStructureVM.BTLPartVMList.Count = 0 Then Return
Dim sLogPath As String = Map.refMainWindowVM.MainWindowM.sTempDir & "\RawPartLog.txt"
Dim dSectionTime As Double = GetMainPrivateProfileDouble(S_NEST, K_SECTIONTIME, 1)
Dim dPartTime As Double = GetMainPrivateProfileDouble(S_NEST, K_PARTTIME, 1)
Dim dTotSectionTime As Double = 0
Dim dTotPartTime As Double = 0
Dim SectionList As New List(Of SParam)
' disabilito interfaccia
Map.refProjectVM.SetCalcRunning(True)
' se ho selezionato nest per materiale e c'è una sezione selezionata diversa da sezione nulla
If m_SelPartType.Id = PartType.MATERIAL AndAlso Not IsNothing(Map.refProjectVM.BTLStructureVM.SelSection) AndAlso Map.refProjectVM.BTLStructureVM.SelSection.dH <> -1 Then
SectionList.Add(New SParam(Map.refProjectVM.BTLStructureVM.SelSection, 0, 0))
dTotSectionTime = dSectionTime
dTotPartTime = dPartTime * Map.refProjectVM.BTLStructureVM.BTLPartVMList.Sum(Function(x) If(x.bDO AndAlso x.Section = SectionList(0).SectXMat, 1, 0))
Else
' altrimenti prendo tutte le sezioni
For Each CurrSection In Map.refProjectVM.BTLStructureVM.SectionList
If CurrSection.dH = -1 Then Continue For
SectionList.Add(New SParam(CurrSection, 0, 0))
dTotSectionTime += dSectionTime
Next
dTotPartTime = dPartTime * Map.refProjectVM.BTLStructureVM.BTLPartVMList.Sum(Function(x) If(x.bDO AndAlso SectionList.Any(Function(y) y.SectXMat = x.Section), 1, 0))
End If
' apro finestra di attesa nesting
Dim NestingRunninWndVM As New NestingRunningWndVM(SectionList, dTotSectionTime + dTotPartTime)
Dim NestingRunningWnd As New NestingRunningWndV(Application.Current.MainWindow, NestingRunninWndVM)
NestingRunningWnd.ShowDialog()
'' recupero parametri di calcolo
'Dim dRawL As Double = 0
'Dim dRawW As Double = 0
'Dim WhType = GetMainPrivateProfileInt(S_GENERAL, K_WAREHOUSE, 1)
'Dim sWarehouseIniPath As String = ""
'Dim dOffset As Double = WarehouseHelper.GetOffset(Map.refProjectVM.BTLStructureVM.nPROJTYPE)
'Dim dStartOffset As Double = 0
'Dim dKerf As Double = 0
'Select Case WhType
' Case WarehouseType.BASIC
' Dim nQuantity As Integer = WarehouseHelper.GetQuantity(Map.refProjectVM.BTLStructureVM.nPROJTYPE)
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = MachineType.BEAM Then
' ' leggo lunghezza barra
' WarehouseHelper.GetCurrentDimensions(Map.refProjectVM.BTLStructureVM.nPROJTYPE, 0, dRawL)
' ' leggo start offset e quantity
' dStartOffset = WarehouseHelper.GetStartOffset()
' ' riporto la stessa lunghezza in tutte le sezioni
' For Each Section In SectionList
' Section.dL = dRawL
' Section.nQuantity = nQuantity
' Next
' ElseIf Map.refProjectVM.BTLStructureVM.nPROJTYPE = MachineType.WALL Then
' If Not WarehouseHelper.GetCurrentDimensions(Map.refProjectVM.BTLStructureVM.nPROJTYPE, dRawW, dRawL) Then
' ' riabilito interfaccia
' Map.refProjectVM.SetCalcRunning(False)
' Return
' End If
' ' leggo kerf e quantity
' dKerf = WarehouseHelper.GetKerf()
' ' riporto le stesse dimensioni in tutte le sezioni
' For Each Section In SectionList
' Section.dL = dRawL
' Section.dW = dRawW
' Section.nQuantity = nQuantity
' Next
' End If
' Case WarehouseType.MEDIUM
' Dim sCurrL As String
' Dim nIndex As Integer = 1
' ' aggiungo le sezioni con diverse lunghezze in base al warehouse
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = MachineType.BEAM Then
' ' leggo start offset
' dStartOffset = WarehouseHelper.GetStartOffset()
' ' leggo lunghezza barra e quantity
' WarehouseHelper.GetDimensionsAndQuantityForList(Map.refProjectVM.BTLStructureVM.nPROJTYPE, SectionList)
' ElseIf Map.refProjectVM.BTLStructureVM.nPROJTYPE = MachineType.WALL Then
' dKerf = WarehouseHelper.GetKerf()
' If Not WarehouseHelper.GetDimensionsAndQuantityForList(Map.refProjectVM.BTLStructureVM.nPROJTYPE, SectionList) Then
' ' riabilito interfaccia
' Map.refProjectVM.SetCalcRunning(False)
' Return
' End If
' End If
'End Select
'' attivo loading progress
'Map.refMyStatusBarVM.StartLoading("Nesting started", True)
'Dim DimensionsList As New List(Of List(Of SParam))
'' le raggruppo per sezione
'For Each Section In SectionList
' Dim Dimension As List(Of SParam) = DimensionsList.FirstOrDefault(Function(x) x(0).SectXMat = Section.SectXMat)
' If Not IsNothing(Dimension) Then
' Dimension.Add(Section)
' Else
' DimensionsList.Add(New List(Of SParam)({Section}))
' End If
'Next
'' per ogni gruppo di sezioni
'For Each Dimension In DimensionsList
' 'Dim SectionPartList As New List(Of BTLPartM)(Map.refProjectVM.BTLStructureVM.BTLPartVMList.Where(Function(x) x.Section = Section.SectXMat).ToList())
' Dim SectionPartList As List(Of BTLPartM) = (From x In Map.refProjectVM.BTLStructureVM.BTLPartVMList
' Where x.Section = Dimension(0).SectXMat AndAlso x.bDO
' Select x.BTLPartM).ToList()
' Dim nNestTime As Integer = Math.Max(5, dSectionTime) + (dPartTime * SectionPartList.Count)
' ' passo a lua lista id pezzi da nestare
' ExecNesting(sLogPath, CurrentMachine.sMachineName, SectionPartList, Dimension, dStartOffset, dOffset, dKerf, nNestTime)
'Next
'' update liste grezzi e pezzi della grafica
'Map.refProjectVM.MachGroupPanelVM.RefreshMachGroupList()
'' disattivo loading progress
'Map.refMyStatusBarVM.EndLoading("Nesting completed")
'' seleziono ultimo gruppo
'Map.refProjectVM.MachGroupPanelVM.SelLastMachGroup()
'' riabilito interfaccia
'Map.refProjectVM.SetCalcRunning(False)
'' chiudo finestra di attesa nesting
'NestingRunninWndVM.Cancel()
End Sub
#End Region ' Optimize
#Region "Warehouse"
'''
''' Returns a command that do Open.
'''
Public ReadOnly Property Warehouse_Command As ICommand
Get
If m_cmdWarehouse Is Nothing Then
m_cmdWarehouse = New Command(AddressOf Warehouse)
End If
Return m_cmdWarehouse
End Get
End Property
'''
''' Execute the Open. This method is invoked by the OpenCommand.
'''
Friend Sub Warehouse()
Dim WarehouseWnd As New WarehouseWndV(Application.Current.MainWindow, New WarehouseWndVM())
WarehouseWnd.ShowDialog()
End Sub
#End Region ' Warehouse
#End Region ' COMMANDS
End Class