Imports EgtWPFLib5
Imports EgtUILib
Imports System.IO
Imports EgtBEAMWALL.Core
Public Class BTLPartManagerVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
'Public ReadOnly Property ViewPage_Visibility As Visibility
' Get
' Return If(Map.refMainMenuVM.SelPage = Pages.VIEW OrElse Map.refMainMenuVM.SelPage = Pages.ONLYPRODPAGE, Visibility.Visible, Visibility.Collapsed)
' End Get
'End Property
'Public ReadOnly Property MachiningPage_Visibility As Visibility
' Get
' Return If(Map.refMainMenuVM.SelPage = Pages.MACHINING OrElse Map.refMainMenuVM.SelPage = Pages.ONLYPRODPAGE, Visibility.Visible, Visibility.Collapsed)
' End Get
'End Property
Private m_BTLPartManager_IsEnabled As Boolean = True
Public ReadOnly Property BTLPartManager_IsEnabled As Boolean
Get
Return m_BTLPartManager_IsEnabled
End Get
End Property
Public ReadOnly Property CopyPart_IsEnabled As Boolean
Get
Return m_BTLPartManager_IsEnabled AndAlso Not IsNothing(Map.refShowBeamPanelVM) AndAlso Not Map.refShowBeamPanelVM.bShowAll AndAlso Not IsNothing(Map.refProjectVM.BTLStructureVM) AndAlso Not Map.refProjectVM.BTLStructureVM.SelBTLPartsCnt > 1
End Get
End Property
'Public ReadOnly Property RotatePart_IsEnabled As Boolean
' Get
' Return m_BTLPartManager_IsEnabled AndAlso Not IsNothing(Map.refProjectVM) AndAlso Not IsNothing(Map.refProjectVM.BTLStructureVM) AndAlso Map.refProjectVM.BTLStructureVM.SelBTLParts.Count > 1
' End Get
'End Property
Public ReadOnly Property RemovePart_IsEnabled As Boolean
Get
Return m_BTLPartManager_IsEnabled
End Get
End Property
' Definizione comandi
'Private m_cmdNewRawPart As ICommand
'Private m_cmdNewRawPartLast As ICommand
'Private m_cmdAddToRawPart As ICommand
Private m_cmdCopyPart As ICommand
'Private m_cmdAddPart As ICommand
Private m_cmdRemovePart As ICommand
'Private m_cmdInvert As ICommand
'Private m_cmdBackRotation As ICommand
'Private m_cmdForwardRotation As ICommand
Private m_cmdSimulate As ICommand
Private m_cmdEdit As ICommand
#Region "Messages"
Public ReadOnly Property NewRawPart_ToolTip As String
Get
Return EgtMsg(61903)
End Get
End Property
Public ReadOnly Property NewRawPartLast_ToolTip As String
Get
Return EgtMsg(61977)
End Get
End Property
Public ReadOnly Property AddToRawPart_ToolTip As String
Get
Return EgtMsg(61904)
End Get
End Property
Public ReadOnly Property CopyPart_ToolTip As String
Get
Return EgtMsg(61905)
End Get
End Property
Public ReadOnly Property RemovePart_ToolTip As String
Get
Return EgtMsg(61907)
End Get
End Property
Public ReadOnly Property AddFeature_ToolTip As String
Get
Return EgtMsg(61910)
End Get
End Property
Public ReadOnly Property RemoveFeature_ToolTip As String
Get
Return EgtMsg(61911)
End Get
End Property
Public ReadOnly Property BackRotation_ToolTip As String
Get
Return EgtMsg(61996)
End Get
End Property
Public ReadOnly Property ForwardRotation_ToolTip As String
Get
Return EgtMsg(61997)
End Get
End Property
Public ReadOnly Property InvertSx_ToolTip As String
Get
Return EgtMsg(61998)
End Get
End Property
Public ReadOnly Property InvertDx_ToolTip As String
Get
Return EgtMsg(61999)
End Get
End Property
Public ReadOnly Property Simulate_ToolTip As String
Get
Return EgtMsg(61902)
End Get
End Property
Public ReadOnly Property Edit_ToolTip As String
Get
Return EgtMsg(61939)
End Get
End Property
#End Region ' Messages
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New()
Map.SetRefBTLPartManagerVM(Me)
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend Sub UpdateView()
'NotifyPropertyChanged(NameOf(ViewPage_Visibility))
'NotifyPropertyChanged(NameOf(MachiningPage_Visibility))
End Sub
Friend Sub SetBTLPartManagerIsEnabled(bIsEnabled As Boolean)
m_BTLPartManager_IsEnabled = bIsEnabled
NotifyPropertyChanged(NameOf(BTLPartManager_IsEnabled))
NotifyPropertyChanged(NameOf(CopyPart_IsEnabled))
NotifyPropertyChanged(NameOf(RemovePart_IsEnabled))
End Sub
Friend Sub PartShowAllChanged()
NotifyPropertyChanged(NameOf(CopyPart_IsEnabled))
'NotifyPropertyChanged(NameOf(RotatePart_IsEnabled))
NotifyPropertyChanged(NameOf(RemovePart_IsEnabled))
End Sub
' funzione che gestisce risposta da thread di verifica, aggiorna progress e segnala comando di interruzione
Private Sub ManageCalc(dProgress As Double, sProgress As String, ByRef bCancel As Boolean)
If dProgress = 0 Then
Map.refMyStatusBarVM.SetLoadingProgress_Visibility(True)
Map.refMyStatusBarVM.SetStopProgress_IsActive(True)
Map.refMyStatusBarVM.SetStopProgress_IsEnabled(True)
Map.refMyStatusBarVM.SetOutputMessage(sProgress)
Map.refMyStatusBarVM.SetStopProgress_IsActive(True)
Map.refMyStatusBarVM.SetStopProgress_IsEnabled(True)
ElseIf dProgress = 1 Then
Map.refMyStatusBarVM.SetLoadingProgress_Visibility(False)
Map.refMyStatusBarVM.SetStopProgress_IsActive(False)
Map.refMyStatusBarVM.SetStopProgress_IsEnabled(False)
Map.refMyStatusBarVM.SetOutputMessage(sProgress, 3)
End If
bCancel = Map.refMyStatusBarVM.bStopProgress
Map.refMyStatusBarVM.SetLoadingProgress(dProgress * 100)
Map.refMyStatusBarVM.SetOutputMessage(sProgress)
End Sub
#End Region ' Methods
#Region "COMMANDS"
'#Region "NewRawPart"
' '''
' ''' Returns a command that do Exec.
' '''
' Public ReadOnly Property NewRawPart_Command As ICommand
' Get
' If m_cmdNewRawPart Is Nothing Then
' m_cmdNewRawPart = New Command(AddressOf NewRawPartCmd)
' End If
' Return m_cmdNewRawPart
' End Get
' End Property
' '''
' ''' Execute the Exec. This method is invoked by the ExecCommand.
' '''
' Public Sub NewRawPartCmd()
' NewRawPart(False)
' End Sub
' Public Sub NewRawPart(bLast As Boolean)
' If IsNothing(ProjectManagerVM.CurrProd) Then Return
' Dim SelParts As List(Of BTLPartVM) = Map.refProjectVM.BTLStructureVM.SelBTLParts.ToList()
' If IsNothing(SelParts) OrElse SelParts.Count <= 0 Then Return
' ' verifico che abbiano tutti la stessa sezione
' Dim dHSection As Double = SelParts(0).dH
' Dim dWSection As Double = SelParts(0).dW
' For PartIndex = 0 To SelParts.Count - 1
' Dim Part As BTLPartVM = SelParts(PartIndex)
' If Not IsNothing(Part) Then
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.BEAM Then
' If Part.dH <> dHSection OrElse Part.dW <> dWSection Then
' MessageBox.Show(EgtMsg(61970), EgtMsg(30007))
' Return
' End If
' ElseIf Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.WALL Then
' If Part.dH <> dHSection Then
' MessageBox.Show(EgtMsg(61970), EgtMsg(30007))
' Return
' End If
' End If
' Else
' SelParts.Remove(Part)
' End If
' Next
' ' se pareti e piu' di uno selezionato, esco
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.WALL And SelParts.Count > 1 Then
' MessageBox.Show(EgtMsg(61971), EgtMsg(30007))
' Return
' End If
' ' se nessun grezzo, rendo tutti i pezzi visibili
' If Map.refProjectVM.MachGroupPanelVM.MachGroupVMList.Count = 0 Then
' Map.refProjectVM.BTLStructureVM.ShowAll(False)
' End If
' ' verifico se sono gia' stati messi tutti i pezzi richiesti
' If Not VerifyPartCount(SelParts) Then Return
' Dim dRawL As Double = SelParts(0).dL
' Dim dRawW As Double = SelParts(0).dW
' Dim dStartOffset As Double = 0
' Dim dKerf As Double = 0
' Dim dOffset As Double = WarehouseHelper.GetOffset(Map.refProjectVM.BTLStructureVM.nPROJTYPE)
' ' se tipo di definizione grezzo esplicito
' If WarehouseHelper.GetRawPartDef = 1 OrElse ((Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift AndAlso WarehouseHelper.GetWarehouseType = WarehouseType.BASIC) Then
' ' chiedo lunghezza grezzo
' Dim sWarehouseIniPath As String = Map.refMainWindowVM.MainWindowM.sWarehouseDir & "\" & WH_BASIC_INI_FILE_NAME
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = MachineType.BEAM Then
' dStartOffset = WarehouseHelper.GetStartOffset()
' dRawL += dStartOffset
' Else
' dKerf = WarehouseHelper.GetKerf()
' dRawL += 2 * dKerf
' dRawW += 2 * dKerf
' End If
' Dim AddRawPartWndVM As New AddRawPartWndVM(Map.refProjectVM.BTLStructureVM.nPROJTYPE, dRawL, dRawW, dStartOffset)
' Dim AddRawPartWnd As Object = New OnlyProdAddRawPartWndV(Application.Current.MainWindow, AddRawPartWndVM)
' If Not AddRawPartWnd.ShowDialog() Then Return
' dRawL = AddRawPartWndVM.VariableList(0).dValue
' dRawW = AddRawPartWndVM.VariableList(1).dValue
' dStartOffset = AddRawPartWndVM.VariableList(1).dValue
' ' se altrimenti definizione grezzo da warehouse
' Else
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.BEAM Then
' dStartOffset = WarehouseHelper.GetStartOffset()
' Else
' dKerf = WarehouseHelper.GetKerf()
' End If
' ' se warehouse basic
' Select Case WarehouseHelper.GetWarehouseType()
' Case WarehouseType.BASIC
' WarehouseHelper.GetCurrentDimensions(Map.refProjectVM.BTLStructureVM.nPROJTYPE, dRawW, dRawL)
' Case WarehouseType.MEDIUM
' Dim SectionList As List(Of SParam) = WarehouseHelper.GetSectionList()
' Dim SParamlist As List(Of SParam) = SectionList.FindAll(Function(x) x.SectXMat = SelParts(0).Section)
' If bLast Then
' Dim LastMaterial As SParam = WarehouseHelper.GetLastMaterial(SelParts(0).Section)
' If Not IsNothing(LastMaterial) Then
' dRawL = LastMaterial.dL
' dRawW = LastMaterial.dW
' ElseIf SParamlist.Count > 0 Then
' dRawL = SParamlist(0).dL
' dRawW = SParamlist(0).dW
' Else
' MessageBox.Show(EgtMsg(61975), EgtMsg(30007))
' Return
' End If
' Else
' If SParamlist.Count = 0 Then
' ' se pareti aumento dimensioni del kerf
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.WALL Then
' dRawW += (2 * dKerf)
' dRawL += (2 * dKerf)
' End If
' ' apro finestra con solo edit
' If AddRawPartWnd(AddRawPartWndVM.EditTypes.ONLY_TEXT, SParamlist, dRawW, dRawL, dStartOffset, dOffset, dKerf) Then
' WarehouseHelper.SetOffset(Map.refProjectVM.BTLStructureVM.nPROJTYPE, dOffset)
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.BEAM Then
' WarehouseHelper.SetStartOffset(dStartOffset)
' Else
' WarehouseHelper.SetKerf(dKerf)
' End If
' Else
' Return
' End If
' ElseIf SParamlist.Count > 0 Then
' ' imposto finestra con anche edit
' If AddRawPartWnd(AddRawPartWndVM.EditTypes.TEXT_AND_COMBO, SParamlist, dRawW, dRawL, dStartOffset, dOffset, dKerf) Then
' WarehouseHelper.SetOffset(Map.refProjectVM.BTLStructureVM.nPROJTYPE, dOffset)
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.BEAM Then
' WarehouseHelper.SetStartOffset(dStartOffset)
' Else
' WarehouseHelper.SetKerf(dKerf)
' End If
' Else
' Return
' End If
' End If
' End If
' End Select
' End If
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = MachineType.BEAM Then
' ' verifico se lunghezza barra e' maggiore della lunghezza dei pezzi
' Dim dTotLen As Double = WarehouseHelper.GetStartOffset()
' For PartIndex = 0 To SelParts.Count - 1
' If PartIndex <> 0 Then
' dTotLen += WarehouseHelper.GetOffset(BWType.BEAM)
' End If
' dTotLen += SelParts(PartIndex).dL
' Next
' If dTotLen > dRawL Then
' MessageBox.Show(EgtMsg(61972), EgtMsg(30007))
' Return
' End If
' End If
' ' creo nuovo gruppo di lavorazione
' Map.refMachGroupPanelVM.AddMachGroup()
' Dim nCurrMachGroup As Integer = EgtGetCurrMachGroup()
' Dim sCurrMachGroupName As String = ""
' EgtGetMachGroupName(nCurrMachGroup, sCurrMachGroupName)
' Dim sLogPath As String = Map.refMainWindowVM.MainWindowM.sTempDir & "\RawPartLog.txt"
' ' scrivo dati per variabili P di comunicazione con la macchina in gruppo di lavorazione
' EgtSetInfo(nCurrMachGroup, MGR_RPT_PRODID, ProjectManagerVM.CurrProd.nProdId)
' EgtSetInfo(nCurrMachGroup, MGR_RPT_PATTID, nCurrMachGroup)
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = MachineType.BEAM Then
' ' ordino i pezzi per lunghezza
' SelParts = SelParts.OrderBy(Function(x) x.dL).ToList
' ' creo copie dei pezzi
' Dim nPartDuploIdList As New List(Of Integer)
' For Each Part In SelParts
' Dim nDuploId As Integer = EgtDuploNew(Part.nPartId)
' ' elimino valori calcolo dell'originale
' MyMachGroupPanelVM.DuploRemoveProjCalc(nDuploId)
' ' lo rendo std
' EgtSetMode(nDuploId, GDB_MD.STD)
' nPartDuploIdList.Add(nDuploId)
' Next
' ' scrivo dati costruzione grezzo in gruppo di lavorazione
' EgtSetInfo(nCurrMachGroup, MGR_RPT_BARLEN, dRawL)
' EgtSetInfo(nCurrMachGroup, MGR_RPT_MATERIAL, SelParts(0).sMATERIAL)
' ' scrivo dati di tutti i pezzi
' Dim dPosX As Double = WarehouseHelper.GetStartOffset()
' ' ciclo sui pezzi
' For nIndex = 0 To nPartDuploIdList.Count - 1
' ' se non è primo, aggiungo offset tra barre standard
' If nIndex <> 0 Then
' dPosX += WarehouseHelper.GetOffset(BWType.BEAM)
' End If
' EgtSetInfo(nCurrMachGroup, MGR_RPT_PART & nIndex + 1, nPartDuploIdList(nIndex) & "," & DoubleToString(dPosX, 3))
' ' incremento posizione della sua lunghezza
' dPosX += SelParts(nIndex).dL
' Next
' Dim BeamMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.GetLastMachGroup()
' ' eseguo script creazione grezzo
' Dim nERR As Integer = 0
' If Not ExecBeam(sLogPath, Map.refMachinePanelVM.SelectedMachine.Name, CalcIntegration.CmdTypes.RAWPART, False) Then
' ' elimino duplo e gruppo di lavorazione
' For Each nDuploId In nPartDuploIdList
' EgtErase(nDuploId)
' Next
' BeamMachGroup.DeleteMachGroup()
' If File.Exists(sLogPath) Then
' Dim LogFile As String() = File.ReadAllLines(sLogPath)
' If LogFile.Count >= 2 AndAlso Not IsNothing(LogFile(1)) Then
' MessageBox.Show(LogFile(1), EgtMsg(30007), MessageBoxButton.OK, MessageBoxImage.Error)
' End If
' Else
' MessageBox.Show(EgtMsg(61973), EgtMsg(30007), MessageBoxButton.OK, MessageBoxImage.Error)
' End If
' ' se nessun grezzo, rimetto tutti i pezzi invisibili
' If Map.refProjectVM.MachGroupPanelVM.MachGroupVMList.Count = 0 Then
' Map.refProjectVM.BTLStructureVM.HideAll()
' End If
' Return
' End If
' For nDuploIndex = 0 To SelParts.Count - 1
' EgtSetInfo(nPartDuploIdList(nDuploIndex), MGR_PRT_ROT, SelParts(nDuploIndex).nROTATED)
' EgtSetInfo(nPartDuploIdList(nDuploIndex), MGR_PRT_FLIP, SelParts(nDuploIndex).nINVERTED)
' Next
' ' aggiorno contatore pezzi usati in Prod
' For Each SelPart In SelParts
' SelPart.RefreshPartInProd()
' Next
' 'aggiorno lista pezzi
' BeamMachGroup.MyMachGroupM.RefreshPartList()
' BeamMachGroup.MyMachGroupM.RefreshGroupData()
' ' aggiorno dati utilizzo barra
' BeamMachGroup.UpdateUsage()
' Core.ViewPanelVM.BWSetView(VT.ISO_SW, False)
' ElseIf Map.refProjectVM.BTLStructureVM.nPROJTYPE = MachineType.WALL Then
' Dim nPartDuploId As Integer = EgtDuploNew(SelParts(0).nPartId)
' ' scrivo dati in gruppo di lavorazione
' Dim dPosX As Double = dKerf
' Dim dPosY As Double = dKerf
' EgtSetInfo(nCurrMachGroup, MGR_RPT_PANELLEN, dRawL)
' EgtSetInfo(nCurrMachGroup, MGR_RPT_PANELWIDTH, dRawW)
' EgtSetInfo(nCurrMachGroup, MGR_RPT_MATERIAL, SelParts(0).sMATERIAL)
' EgtSetInfo(nCurrMachGroup, MGR_RPT_PART & 1,
' nPartDuploId & "," & DoubleToString(dPosX, 3) & "," & DoubleToString(dPosY, 3) & ",0,0")
' Dim WallMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.MachGroupVMList(Map.refMachGroupPanelVM.MachGroupVMList.Count - 1)
' ' eseguo script creazione grezzo
' If Not ExecWall(sLogPath, Map.refMachinePanelVM.SelectedMachine.Name, CalcIntegration.CmdTypes.RAWPART, False, False) Then
' ' elimino duplo e gruppo di lavorazione
' EgtErase(nPartDuploId)
' WallMachGroup.DeleteMachGroup()
' If File.Exists(sLogPath) Then
' Dim LogFile As String() = File.ReadAllLines(sLogPath)
' If LogFile.Count >= 2 AndAlso Not IsNothing(LogFile(1)) Then
' MessageBox.Show(LogFile(1), EgtMsg(30007), MessageBoxButton.OK, MessageBoxImage.Error)
' End If
' Else
' MessageBox.Show(EgtMsg(61973), EgtMsg(30007), MessageBoxButton.OK, MessageBoxImage.Error)
' End If
' ' se nessun grezzo, rimetto tutti i pezzi invisibili
' If Map.refProjectVM.MachGroupPanelVM.MachGroupVMList.Count = 0 Then
' Map.refProjectVM.BTLStructureVM.HideAll(True)
' End If
' Return
' End If
' ' scrivo dati pezzo
' EgtSetInfo(nPartDuploId, MGR_PRT_POSX, dPosX)
' EgtSetInfo(nPartDuploId, MGR_PRT_POSY, dPosY)
' EgtSetInfo(nPartDuploId, MGR_PRT_ROT, SelParts(0).nROTATED)
' EgtSetInfo(nPartDuploId, MGR_PRT_FLIP, SelParts(0).nINVERTED)
' ' aggiorno contatore pezzi usati in Prod
' SelParts(0).RefreshPartInProd()
' ' aggiorno lista pezzi
' WallMachGroup.MyMachGroupM.RefreshPartList()
' WallMachGroup.MyMachGroupM.RefreshGroupData()
' ' aggiorno dati ultilizzo barra
' WallMachGroup.UpdateUsage()
' Core.ViewPanelVM.BWSetView(VT.TOP, False)
' End If
' EgtZoom(ZM.ALL)
' End Sub
' ' funzione che apre finestra di scelta dimensioni grezzo
' Private Function AddRawPartWnd(EditType As AddRawPartWndVM.EditTypes, SParamlist As List(Of SParam), ByRef dRawW As Double, ByRef dRawL As Double,
' ByRef dStartOffset As Double, ByRef dOffset As Double, ByRef dKerf As Double) As Boolean
' ' apro finestra con solo edit
' Dim AddRawPartWndVM As New AddRawPartWndVM(EditType, Map.refProjectVM.BTLStructureVM.nPROJTYPE, SParamlist, dRawL, dRawW, dStartOffset, dOffset, dKerf)
' Dim AddRawPartWndV As New OnlyProdAddRawPartWndV(Application.Current.MainWindow, AddRawPartWndVM)
' If Not AddRawPartWndV.ShowDialog() Then Return False
' Select Case Map.refProjectVM.BTLStructureVM.nPROJTYPE
' Case BWType.BEAM
' dRawL = AddRawPartWndVM.VariableList(0).dValue
' dStartOffset = AddRawPartWndVM.VariableList(1).dValue
' dOffset = AddRawPartWndVM.VariableList(2).dValue
' Case BWType.WALL
' dRawW = AddRawPartWndVM.VariableList(0).dValue
' dRawL = AddRawPartWndVM.VariableList(1).dValue
' dKerf = AddRawPartWndVM.VariableList(2).dValue
' dOffset = AddRawPartWndVM.VariableList(3).dValue
' End Select
' ' verifico se il materiale esiste in magazzino o devo aggiungerlo
' Dim CurrSParam As SParam = Nothing
' Select Case EditType
' Case AddRawPartWndVM.EditTypes.ONLY_TEXT
' ' lo aggiungo a lista materiali in magazzino
' CurrSParam = AddRawMaterial(dRawW, dRawL)
' Case AddRawPartWndVM.EditTypes.ONLY_COMBO
' ' non faccio nulla
' Case AddRawPartWndVM.EditTypes.TEXT_AND_COMBO
' ' verifico se lunghezza testo corrisponde a materiale
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.BEAM Then
' CurrSParam = SParamlist.FirstOrDefault(Function(x) x.dL = AddRawPartWndVM.VariableList(0).dValue)
' Else
' CurrSParam = SParamlist.FirstOrDefault(Function(x) x.dL = AddRawPartWndVM.VariableList(1).dValue AndAlso x.dW = AddRawPartWndVM.VariableList(0).dValue)
' End If
' If IsNothing(CurrSParam) Then
' ' lo aggiungo a lista materiali in magazzino
' CurrSParam = AddRawMaterial(dRawW, dRawL)
' End If
' End Select
' ' imposto il materiale selezionato come ultimo utilizzato
' SetLastMaterial(CurrSParam.SectXMat, CurrSParam)
' Return True
' End Function
' Private Function AddRawMaterial(dRawW As Double, ByRef dRawL As Double) As SParam
' Dim sWarehousePath As String = Map.refMainWindowVM.MainWindowM.sWarehouseDir & "\" & WH_MEDIUM_INI_FILE_NAME
' Dim nQuantity As Integer = GetMainPrivateProfileInt(S_WAREHOUSE, K_DEFAULTQUANTITY, 1)
' Dim CurrSParam = Nothing
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = MachineType.BEAM Then
' ' creo sParam
' If Not IsNothing(Map.refProjectVM.BTLStructureVM.SelBTLParts(0)) Then CurrSParam = New SParam(Map.refProjectVM.BTLStructureVM.SelBTLParts(0).Section, dRawL, nQuantity, False)
' Dim sL As String = String.Empty
' sL = LenToString(CurrSParam.dL, 3)
' ' ricavo l'indice del SecionXMaterial dalla Beam_List
' Dim SectXMatIndex As Integer = GetSectIndexFromSection(MachineType.BEAM, CurrSParam.SectXMat)
' ' ricavo nuovo indice materiale
' Dim ParamIndex As Integer = 1
' Dim sParam As String = ""
' While GetPrivateProfileString(S_BEAM, K_L & ParamIndex, "", sParam, sWarehousePath) > 0
' ParamIndex += 1
' End While
' If SectXMatIndex > 0 Then
' ' lo aggiungo in warehouse
' WritePrivateProfileString(S_BEAM, K_L & ParamIndex,
' SectXMatIndex & "," & sL & "," & CurrSParam.nQuantity & "," & If(CurrSParam.bActive, 1, 0),
' sWarehousePath)
' Else
' EgtOutLog("Error in material creation, section not found!")
' End If
' Return CurrSParam
' ElseIf Map.refProjectVM.BTLStructureVM.nPROJTYPE = MachineType.WALL Then
' ' creo sParam
' If Not IsNothing(Map.refProjectVM.BTLStructureVM.SelBTLParts(0)) Then CurrSParam = New SParam(Map.refProjectVM.BTLStructureVM.SelBTLParts(0).Section, dRawW, dRawL, nQuantity, False)
' Dim sW As String = String.Empty
' Dim sL As String = String.Empty
' sW = LenToString(CurrSParam.dW, 3)
' sL = LenToString(CurrSParam.dL, 3)
' ' ricavo l'indice del SecionXMaterial dalla Wall_List
' Dim SectXMatIndex As Integer = GetSectIndexFromSection(MachineType.WALL, CurrSParam.SectXMat)
' ' ricavo nuovo indice materiale
' Dim ParamIndex As Integer = 1
' Dim sParam As String = ""
' While GetPrivateProfileString(S_WALL, K_S & ParamIndex, "", sParam, sWarehousePath) > 0
' ParamIndex += 1
' End While
' ' lo aggiungo in warehouse
' WritePrivateProfileString(S_WALL, K_S & ParamIndex,
' SectXMatIndex & "," & sW & "," & sL & "," & CurrSParam.nQuantity & "," & If(CurrSParam.bActive, 1, 0),
' sWarehousePath)
' Return CurrSParam
' End If
' Return Nothing
' End Function
' Private Function VerifyPartCount(SelParts As List(Of BTLPartVM)) As Boolean
' ' verifico se ci sono pezzi da aggiungere
' Dim ToAddList As New List(Of String)
' Dim ToAddVM As New List(Of BTLPartVM)
' For Each SelPart In SelParts
' If Not SelPart.CanAddPartToCount Then
' ToAddList.Add(SelPart.nCNT & EgtMsg(61864) & SelPart.nADDED & EgtMsg(61865))
' ToAddVM.Add(SelPart)
' End If
' Next
' ' se non ci sono, chiedo se aggiungerne uno nuovo
' If ToAddList.Count > 0 Then
' Dim sMessage As String = EgtMsg(61863) & Environment.NewLine
' For Each sPart In ToAddList
' sMessage &= " - " & sPart & Environment.NewLine
' Next
' If MessageBox.Show(sMessage & EgtMsg(61893), "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then
' For Each PartVM In ToAddVM
' PartVM.AddNewPartToAdded()
' Next
' Else
' Return False
' End If
' End If
' Return True
' End Function
'#End Region ' NewRawPart
'#Region "NewRawPartLast"
' '''
' ''' Returns a command that do Exec.
' '''
' Public ReadOnly Property NewRawPartLast_Command As ICommand
' Get
' If m_cmdNewRawPartLast Is Nothing Then
' m_cmdNewRawPartLast = New Command(AddressOf NewRawPartLast)
' End If
' Return m_cmdNewRawPartLast
' End Get
' End Property
' '''
' ''' Execute the Exec. This method is invoked by the ExecCommand.
' '''
' Public Sub NewRawPartLast()
' NewRawPart(True)
' End Sub
'#End Region ' NewRawPartLast
'#Region "AddToRawPart"
' '''
' ''' Returns a command that do Exec.
' '''
' Public ReadOnly Property AddToRawPart_Command As ICommand
' Get
' If m_cmdAddToRawPart Is Nothing Then
' m_cmdAddToRawPart = New Command(AddressOf AddToRawPart)
' End If
' Return m_cmdAddToRawPart
' End Get
' End Property
' '''
' ''' Execute the Exec. This method is invoked by the ExecCommand.
' '''
' Public Sub AddToRawPart()
' If IsNothing(ProjectManagerVM.CurrProd) Then Return
' Dim SelPart As BTLPartVM
' If Map.refProjectVM.BTLStructureVM.SelBTLParts.Count <= 0 Then
' Return
' Else
' SelPart = Map.refProjectVM.BTLStructureVM.SelBTLParts(0)
' End If
' Dim SelParts As List(Of BTLPartVM) = Map.refProjectVM.BTLStructureVM.SelBTLParts.ToList()
' For Index = 0 To SelParts.Count() - 1
' If IsNothing(SelParts(Index)) Then
' SelParts.RemoveAt(Index)
' End If
' Next
' If IsNothing(SelPart) Then Return
' If IsNothing(SelParts) OrElse SelParts.Count <= 0 Then Return
' Dim SelMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.SelectedMachGroup
' If IsNothing(SelMachGroup) Then Return
' ' se pareti e piu' di uno selezionato, esco
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.WALL And SelParts.Count > 1 Then
' MessageBox.Show(EgtMsg(61971), EgtMsg(30007))
' Return
' End If
' ' se MachGroup gia' mandato in produzione, esco
' If SelMachGroup.nProduction_State >= ItemState.Assigned Then Return
' ' verifico se sono gia' stati messi tutti i pezzi richiesti
' If Not VerifyPartCount(SelParts) Then Return
' ' verifico se impostato gruppo di lavorazione
' Dim nCurrMachgroupId As Integer = EgtGetCurrMachGroup()
' ' se nullo o diverso da quello selezionato in lista
' If nCurrMachgroupId = GDB_ID.NULL OrElse nCurrMachgroupId <> SelMachGroup.Id Then
' ' lo imposto
' EgtSetCurrMachGroup(SelMachGroup.Id)
' End If
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = MachineType.BEAM Then
' Dim BeamMachGroup As MyMachGroupVM = SelMachGroup
' ' verifico sezione e materiale
' For Each Part In SelParts
' If Part.Section <> BeamMachGroup.Section Then
' MessageBox.Show(EgtMsg(61866), EgtMsg(30007))
' Return
' End If
' Next
' ' verifico lunghezza totale
' If Not VerifyTotLength(BeamMachGroup, SelParts) Then
' MessageBox.Show(EgtMsg(61867), EgtMsg(30007))
' Return
' End If
' If AddPartToBeam(BeamMachGroup, SelParts) Then
' ' aggiorno contatore pezzi usati in Prod
' For Each Part In SelParts
' Part.RefreshPartInProd()
' Next
' ' resetto stato di calc
' SelMachGroup.ResetCalcMachGroup()
' End If
' ' aggiorno dati ultilizzo barra
' BeamMachGroup.UpdateUsage()
' Core.ViewPanelVM.BWSetView(VT.ISO_SW, False)
' ElseIf Map.refProjectVM.BTLStructureVM.nPROJTYPE = MachineType.WALL Then
' Dim WallMachGroup As MyMachGroupVM = SelMachGroup
' ' verifico spessore
' If SelPart.Section <> WallMachGroup.Section Then
' MessageBox.Show(EgtMsg(61868), EgtMsg(30007))
' Return
' End If
' If AddPartToWall(WallMachGroup, SelPart) Then
' ' aggiorno contatore pezzi usati in Prod
' SelPart.RefreshPartInProd()
' ' resetto stato di calc
' SelMachGroup.ResetCalcMachGroup()
' End If
' ' aggiorno dati ultilizzo barra
' WallMachGroup.UpdateUsage()
' Core.ViewPanelVM.BWSetView(VT.TOP, False)
' End If
' EgtZoom(ZM.ALL)
' End Sub
' Friend Function VerifyTotLength(BeamMachGroup As MyMachGroupVM, PartsToAdd As List(Of BTLPartVM)) As Boolean
' Dim dNewPartPos As Double = 0
' If BeamMachGroup.PartVMList.Count > 0 Then
' Dim LastPart As PartVM = BeamMachGroup.PartVMList(BeamMachGroup.PartVMList.Count - 1)
' dNewPartPos += LastPart.dPOSX + LastPart.dL
' End If
' For Each Part In PartsToAdd
' dNewPartPos += WarehouseHelper.GetOffset(BeamMachGroup.nType) + Part.dL
' Next
' Return dNewPartPos < BeamMachGroup.dL
' End Function
' Friend Function AddPartToBeam(BeamMachGroup As MyMachGroupVM, PartsToAdd As List(Of BTLPartVM)) As Boolean
' ' ordino i pezzi da aggiungere
' PartsToAdd = PartsToAdd.OrderBy(Function(x) x.dL).ToList()
' ' creo copie dei pezzi
' Dim nPartDuploIdList As New List(Of Integer)
' For Each Part In PartsToAdd
' Dim nDuploId As Integer = EgtDuploNew(Part.nPartId)
' ' elimino valori calcolo dell'originale
' MyMachGroupPanelVM.DuploRemoveProjCalc(nDuploId)
' ' lo rendo std
' EgtSetMode(nDuploId, GDB_MD.STD)
' nPartDuploIdList.Add(nDuploId)
' Next
' ' calcolo posizione nuovo pezzo per rispettare ordine lunghezze
' Dim nInsertIndex As Integer
' ' scrivo dati di tutti i pezzi
' Dim dPosX As Double = BeamMachGroup.dStartCut
' Dim nPartIndex As Integer = 0
' Dim nIndex As Integer
' Dim bDuploInfo As Boolean = False
' ' ciclo sui pezzi
' For nIndex = 0 To BeamMachGroup.PartVMList.Count - 1
' For PartsToAddIndex = nPartIndex To PartsToAdd.Count - 1
' Dim Part As BTLPartVM = PartsToAdd(PartsToAddIndex)
' ' se non ancora aggiunto e lunghezza minore del pezzo corrente, lo aggiungo
' If nPartIndex < nPartDuploIdList.Count() AndAlso BeamMachGroup.PartVMList(nIndex).dL > Part.dL Then
' ' se non è primo, aggiungo offset tra barre standard
' If nIndex <> 0 OrElse nPartIndex <> 0 Then
' dPosX += WarehouseHelper.GetOffset(BeamMachGroup.nType)
' End If
' EgtSetInfo(BeamMachGroup.Id, MGR_RPT_PART & nIndex + nPartIndex + 1, nPartDuploIdList(nPartIndex) & "," & DoubleToString(dPosX, 3))
' ' incremento posizione della sua lunghezza
' dPosX += Part.dL
' ' conservo indice d'inserimento
' nInsertIndex = nIndex
' nPartIndex += 1
' Else
' Exit For
' End If
' Next
' ' se non è primo, aggiungo offset del pezzo
' If nIndex <> 0 Then
' dPosX += BeamMachGroup.PartVMList(nIndex).dOffset
' ' se sono a indice primo ed è stato aggiunto pezzo nuovo
' ElseIf nIndex = 0 AndAlso nPartIndex > 0 Then
' ' aggiungo offset tra barre standard
' dPosX += WarehouseHelper.GetOffset(BeamMachGroup.nType)
' End If
' EgtSetInfo(BeamMachGroup.Id, MGR_RPT_PART & nIndex + nPartIndex + 1, BeamMachGroup.PartVMList(nIndex).nPartId & "," & DoubleToString(dPosX, 3))
' ' incremento posizione della sua lunghezza
' dPosX += BeamMachGroup.PartVMList(nIndex).dL
' Next
' ' se non è ancora stato aggiunto
' For PartsToAddIndex = nPartIndex To PartsToAdd.Count - 1
' ' aggiungo offset tra barre standard
' dPosX += WarehouseHelper.GetOffset(BeamMachGroup.nType)
' ' lo aggiungo in fondo
' EgtSetInfo(BeamMachGroup.Id, MGR_RPT_PART & nIndex + nPartIndex + 1, nPartDuploIdList(nPartIndex) & "," & DoubleToString(dPosX, 3))
' ' incremento posizione della sua lunghezza
' dPosX += PartsToAdd(nPartIndex).dL
' ' conservo indice d'inserimento
' nInsertIndex = nIndex
' nPartIndex += 1
' Next
' ' elimino vecchio grezzo ed eseguo script creazione nuovo
' Dim nRawId As Integer = EgtGetFirstRawPart()
' While nRawId <> GDB_ID.NULL
' EgtRemoveRawPart(nRawId)
' nRawId = EgtGetFirstRawPart()
' End While
' Dim sLogPath As String = Map.refMainWindowVM.MainWindowM.sTempDir & "\RawPartLog.txt"
' If Not ExecBeam(sLogPath, Map.refMachinePanelVM.SelectedMachine.Name, CalcIntegration.CmdTypes.RAWPART, False) Then
' EgtOutLog("Fallito inserimento grezzo nella barra in AddPartToBeam")
' ' elimino duplo
' For Each nDuploId In nPartDuploIdList
' EgtErase(nDuploId)
' Next
' ' aggiorno info grezzo
' For nIndex = 0 To BeamMachGroup.PartVMList.Count - 1
' EgtSetInfo(BeamMachGroup.Id, MGR_RPT_PART & nIndex + 1, BeamMachGroup.PartVMList(nIndex).nPartId & "," & DoubleToString(BeamMachGroup.PartVMList(nIndex).dPOSX, 3))
' Next
' ' rimuovo info duplo
' While EgtGetInfo(BeamMachGroup.Id, MGR_RPT_PART & nIndex + 1, nPartDuploIdList(0))
' bDuploInfo = EgtGetInfo(BeamMachGroup.Id, MGR_RPT_PART & nIndex + 1, nPartDuploIdList(0))
' EgtRemoveInfo(BeamMachGroup.Id, MGR_RPT_PART & nIndex + 1)
' nIndex += 1
' End While
' ' elimino vecchio grezzo ed eseguo script creazione nuovo
' nRawId = EgtGetFirstRawPart()
' While nRawId <> GDB_ID.NULL
' EgtRemoveRawPart(nRawId)
' nRawId = EgtGetFirstRawPart()
' End While
' If Not ExecBeam(sLogPath, Map.refMachinePanelVM.SelectedMachine.Name, CalcIntegration.CmdTypes.RAWPART, False) Then
' EgtOutLog("Fallita esecuzione ExecBeam. ERRORE")
' End If
' End If
' For nDuploIndex = 0 To PartsToAdd.Count - 1
' EgtSetInfo(nPartDuploIdList(nDuploIndex), MGR_PRT_ROT, PartsToAdd(nDuploIndex).nROTATED)
' EgtSetInfo(nPartDuploIdList(nDuploIndex), MGR_PRT_FLIP, PartsToAdd(nDuploIndex).nINVERTED)
' Next
' ' aggiorno lista pezzi
' BeamMachGroup.MyMachGroupM.RefreshPartList()
' ' seleziono pezzo aggiunto
' If BeamMachGroup.PartVMList.Count > nInsertIndex Then
' BeamMachGroup.SelPart = BeamMachGroup.PartVMList(nInsertIndex)
' ElseIf bDuploInfo Then
' BeamMachGroup.SelPart = BeamMachGroup.PartVMList(BeamMachGroup.PartVMList.Count - 1)
' End If
' Return True
' End Function
' Friend Function AddPartToWall(WallMachGroup As MyMachGroupVM, PartToAdd As BTLPartVM) As Boolean
' ' creo copia del pezzo
' Dim nPartDuploId As Integer = EgtDuploNew(PartToAdd.nPartId)
' ' lo rendo std
' EgtSetMode(nPartDuploId, GDB_MD.STD)
' ' Posizione di inserimento
' Dim dPosX As Double = WarehouseHelper.GetKerf()
' Dim dPosY As Double = WarehouseHelper.GetKerf()
' ' Se ci sono pezzi già inseriti
' If WallMachGroup.PartVMList.Count > 0 Then
' Dim LastWall As PartVM = WallMachGroup.PartVMList(WallMachGroup.PartVMList.Count - 1)
' Dim LastWallPosX As Double = LastWall.dPOSX
' Dim LastWallPosY As Double = LastWall.PartM.dPOSY
' ' converto posizione ultimo pezzo nel riferimento BL
' Select Case CurrentMachine.NestingCorner
' Case MCH_CR.TL
' LastWallPosY = WallMachGroup.dW - LastWall.dW - LastWall.PartM.dPOSY
' Case MCH_CR.BL
' Case MCH_CR.TR
' LastWallPosX = WallMachGroup.dL - LastWall.dL - LastWall.dPOSX
' LastWallPosY = WallMachGroup.dW - LastWall.dW - LastWall.PartM.dPOSY
' Case MCH_CR.BR
' LastWallPosX = WallMachGroup.dL - LastWall.dL - LastWall.dPOSX
' End Select
' ' verifico se posso metterlo sopra in Y
' Dim NextPosY = LastWallPosY + LastWall.dW + WarehouseHelper.GetOffset(WallMachGroup.nType)
' If WallMachGroup.dW - NextPosY > PartToAdd.dW + 10 Then
' dPosX = LastWallPosX
' dPosY = NextPosY
' Else
' ' altrimenti lo affianco in X
' dPosX = 10
' For i As Integer = 0 To WallMachGroup.PartVMList.Count - 1
' Dim CurrWall As PartVM = WallMachGroup.PartVMList(i)
' Dim CurrWallPosX As Double = CurrWall.dPOSX
' ' converto posizione pezzo corrente nel riferimento BL
' Select Case CurrentMachine.NestingCorner
' Case MCH_CR.TL
' Case MCH_CR.BL
' Case MCH_CR.TR
' CurrWallPosX = WallMachGroup.dL - CurrWall.dL - CurrWall.dPOSX
' Case MCH_CR.BR
' CurrWallPosX = WallMachGroup.dL - CurrWall.dL - CurrWall.dPOSX
' End Select
' Dim NextPosX = CurrWallPosX + CurrWall.dL + WarehouseHelper.GetOffset(WallMachGroup.nType)
' If NextPosX > dPosX Then
' dPosX = NextPosX
' End If
' Next
' dPosY = 10
' End If
' End If
' ' converto posizione trovata da riferimento BL a quello corrente
' Select Case CurrentMachine.NestingCorner
' Case MCH_CR.TL
' dPosY = WallMachGroup.dW - PartToAdd.dW - dPosY
' Case MCH_CR.BL
' Case MCH_CR.TR
' dPosX = WallMachGroup.dL - PartToAdd.dL - dPosX
' dPosY = WallMachGroup.dW - PartToAdd.dW - dPosY
' Case MCH_CR.BR
' dPosX = WallMachGroup.dL - PartToAdd.dL - dPosX
' End Select
' ' aggiungo il pezzo al grezzo
' If EgtAddPartToRawPart(nPartDuploId, New Point3d(dPosX, dPosY, 0), WallMachGroup.MyMachGroupM.nRawPartId) Then
' EgtSetInfo(nPartDuploId, MGR_PRT_POSX, dPosX)
' EgtSetInfo(nPartDuploId, MGR_PRT_POSY, dPosY)
' EgtSetInfo(nPartDuploId, MGR_PRT_ROT, PartToAdd.nROTATED)
' EgtSetInfo(nPartDuploId, MGR_PRT_FLIP, PartToAdd.nINVERTED)
' Else
' Return False
' End If
' 'aggiorno lista pezzi
' WallMachGroup.MyMachGroupM.RefreshPartList()
' ' seleziono pezzo aggiunto
' If WallMachGroup.PartVMList.Count > 0 Then WallMachGroup.SelPart = WallMachGroup.PartVMList.FirstOrDefault(Function(x) x.nPartId = nPartDuploId)
' Return True
' End Function
'#End Region ' AddToRawPart
#Region "CopyPart"
'''
''' Returns a command that do Exec.
'''
Public ReadOnly Property CopyPart_Command As ICommand
Get
If m_cmdCopyPart Is Nothing Then
m_cmdCopyPart = New Command(AddressOf CopyPart)
End If
Return m_cmdCopyPart
End Get
End Property
'''
''' Execute the Exec. This method is invoked by the ExecCommand.
'''
Public Sub CopyPart()
If IsNothing(ProjectManagerVM.CurrProj) Then Return
Dim SelPart As BTLPartVM = Map.refProjectVM.BTLStructureVM.SelBTLPart
If IsNothing(SelPart) Then Return
' creo copia
Dim NewPart As BTLPartM = SelPart.Copy()
If Not IsNothing(NewPart) Then
' selezione ultimo che e' quello appena creato
Map.refProjectVM.BTLStructureVM.SetSelBTLPart(Map.refProjectVM.BTLStructureVM.BTLPartVMList(Map.refProjectVM.BTLStructureVM.BTLPartVMList.Count - 1), False, True)
End If
End Sub
#End Region ' CopyPart
#Region "RemovePart"
'''
''' Returns a command that do Exec.
'''
Public ReadOnly Property RemovePart_Command As ICommand
Get
If m_cmdRemovePart Is Nothing Then
m_cmdRemovePart = New Command(AddressOf RemovePartCmd)
End If
Return m_cmdRemovePart
End Get
End Property
'''
''' Execute the Exec. This method is invoked by the ExecCommand.
'''
Public Sub RemovePartCmd()
If IsNothing(ProjectManagerVM.CurrProj) Then Return
If Map.refProjectVM.BTLStructureVM.SelBTLParts.Count > 0 Then
Dim CurrSelBTLParts As List(Of BTLPartVM) = Map.refProjectVM.BTLStructureVM.SelBTLParts.ToList()
For RemoveIndex = CurrSelBTLParts.Count - 1 To 0 Step -1
RemovePart(CurrSelBTLParts(RemoveIndex), RemoveIndex = 0)
Next
End If
End Sub
Public Sub RemovePart(BTLPartToDelete As BTLPartVM, bSelPrevious As Boolean)
' verifico se ci sono già copie in grezzi
Dim nDuploCount As Integer = 0
If EgtDuploCount(BTLPartToDelete.nPartId, nDuploCount) AndAlso nDuploCount > 0 Then
' avviso che il pezzo non è cancellabile perchè in produzione
MessageBox.Show(String.Format(EgtMsg(61929), nDuploCount), EgtMsg(15003), MessageBoxButton.OK, MessageBoxImage.Warning)
Return
End If
' verifico se rimuovere sezione dalla lista
If Not Map.refProjectVM.BTLStructureVM.BTLPartVMList.Any(Function(x) x IsNot BTLPartToDelete AndAlso x.Section = BTLPartToDelete.Section) Then
Map.refProjectVM.BTLStructureVM.SectionList.Remove(BTLPartToDelete.Section)
Map.refProjectVM.BTLStructureVM.SelSection = SectionXMaterial.Empty
End If
' Eseguo cancellazione
EgtBeamSetPart(BTLPartToDelete.nPartId)
If EgtBeamErasePart() Then
' seleziono elemento precedente
Dim Index As Integer = Map.refProjectVM.BTLStructureVM.BTLPartVMList.IndexOf(BTLPartToDelete)
Dim FilteredIndex As Integer = Map.refProjectVM.BTLStructureVM.BTLPartVMList_View.IndexOf(BTLPartToDelete)
Map.refProjectVM.BTLStructureVM.SelBTLParts.Remove(BTLPartToDelete)
If bSelPrevious Then
If FilteredIndex = 0 Then
If Map.refProjectVM.BTLStructureVM.BTLPartVMList_View.Count > 1 Then
Map.refProjectVM.BTLStructureVM.SetSelBTLPart(Map.refProjectVM.BTLStructureVM.BTLPartVMList_View(1))
Else
Map.refProjectVM.BTLStructureVM.SetSelBTLPart(Nothing)
End If
ElseIf FilteredIndex = Map.refProjectVM.BTLStructureVM.BTLPartVMList_View.Count - 1 Then
If Map.refProjectVM.BTLStructureVM.BTLPartVMList_View.Count > 1 Then
Map.refProjectVM.BTLStructureVM.SetSelBTLPart(Map.refProjectVM.BTLStructureVM.BTLPartVMList_View(Map.refProjectVM.BTLStructureVM.BTLPartVMList_View.Count - 2))
Else
Map.refProjectVM.BTLStructureVM.SetSelBTLPart(Nothing)
End If
Else
Map.refProjectVM.BTLStructureVM.SetSelBTLPart(Map.refProjectVM.BTLStructureVM.BTLPartVMList_View(FilteredIndex - 1))
End If
End If
' rimuovo dalla lista pezzi
Map.refProjectVM.BTLStructureVM.BTLPartVMList.RemoveAt(Index)
End If
End Sub
#End Region ' RemovePart
'#Region "Invert"
' '''
' ''' Returns a command that do Exec.
' '''
' Public ReadOnly Property Invert_Command As ICommand
' Get
' If m_cmdInvert Is Nothing Then
' m_cmdInvert = New Command(AddressOf Invert)
' End If
' Return m_cmdInvert
' End Get
' End Property
' '''
' ''' Execute the Exec. This method is invoked by the ExecCommand.
' '''
' Public Sub Invert()
' If ((Map.refMainMenuVM.SelPage = Pages.VIEW OrElse Map.refMainMenuVM.SelPage = Pages.ONLYPRODPAGE) AndAlso IsNothing(ProjectManagerVM.CurrProj)) OrElse IsNothing(Map.refProjectVM.BTLStructureVM) Then Return
' ' se modalita' assemblato
' Dim bShowBuilding As Boolean = Map.refShowBeamPanelVM.ShowBuilding_IsChecked
' Configuration.AssembledMode(bShowBuilding)
' ' inverto i pezzi selezionati
' For Each Part In Map.refProjectVM.BTLStructureVM.SelBTLParts
' Part.Invert()
' Next
' ' se assemblato lo ripristino
' If bShowBuilding Then Map.refProjectVM.BTLStructureVM.ShowBuilding(True, False)
' End Sub
'#End Region ' Invert
'#Region "BackRotation"
' '''
' ''' Returns a command that do Exec.
' '''
' Public ReadOnly Property BackRotation_Command As ICommand
' Get
' If m_cmdBackRotation Is Nothing Then
' m_cmdBackRotation = New Command(AddressOf BackRotation)
' End If
' Return m_cmdBackRotation
' End Get
' End Property
' '''
' ''' Execute the Exec. This method is invoked by the ExecCommand.
' '''
' Public Sub BackRotation()
' If IsNothing(ProjectManagerVM.CurrProj) OrElse IsNothing(Map.refProjectVM.BTLStructureVM) Then Return
' ' salvo sezione impostata
' Dim CurrSection As SectionXMaterial = Map.refProjectVM.BTLStructureVM.SelSection
' ' se modalita' assemblato
' Dim bShowBuilding As Boolean = Map.refShowBeamPanelVM.ShowBuilding_IsChecked
' Configuration.AssembledMode(bShowBuilding)
' ' ruoto i pezzi selezionati
' For Each Part In Map.refProjectVM.BTLStructureVM.SelBTLParts
' Part.BackRotation(False, False)
' Next
' ' se assemblato lo ripristino
' If bShowBuilding Then Map.refProjectVM.BTLStructureVM.ShowBuilding(True, False)
' ' se progetto travi e sezione precedente diversa da vuota (tutti i pezzi)
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.BEAM AndAlso CurrSection <> SectionXMaterial.Empty Then
' ' se esiste, imposto sezione inversa
' Dim InverseSection As SectionXMaterial = Map.refProjectVM.BTLStructureVM.SectionList.FirstOrDefault(Function(x) x.dH = CurrSection.dW AndAlso x.dW = CurrSection.dH AndAlso x.sMaterial(0) = CurrSection.sMaterial(0))
' If Not IsNothing(InverseSection) Then Map.refProjectVM.BTLStructureVM.SetSelSection(InverseSection)
' End If
' EgtDraw()
' End Sub
'#End Region ' BackRotation
'#Region "ForwardRotation"
' '''
' ''' Returns a command that do Exec.
' '''
' Public ReadOnly Property ForwardRotation_Command As ICommand
' Get
' If m_cmdForwardRotation Is Nothing Then
' m_cmdForwardRotation = New Command(AddressOf ForwardRotation)
' End If
' Return m_cmdForwardRotation
' End Get
' End Property
' '''
' ''' Execute the Exec. This method is invoked by the ExecCommand.
' '''
' Public Sub ForwardRotation()
' If IsNothing(ProjectManagerVM.CurrProj) OrElse IsNothing(Map.refProjectVM.BTLStructureVM) Then Return
' ' salvo sezione impostata
' Dim CurrSection As SectionXMaterial = Map.refProjectVM.BTLStructureVM.SelSection
' ' se modalita' assemblato
' Dim bShowBuilding As Boolean = Map.refShowBeamPanelVM.ShowBuilding_IsChecked
' Configuration.AssembledMode(bShowBuilding)
' ' ruoto i pezzi selezionati
' For Each Part In Map.refProjectVM.BTLStructureVM.SelBTLParts
' Part.ForwardRotation(False, False)
' Next
' ' se assemblato lo ripristino
' If bShowBuilding Then Map.refProjectVM.BTLStructureVM.ShowBuilding(True, False)
' ' se progetto travi e sezione precedente diversa da vuota (tutti i pezzi)
' If Map.refProjectVM.BTLStructureVM.nPROJTYPE = BWType.BEAM AndAlso CurrSection <> SectionXMaterial.Empty Then
' ' se esiste, imposto sezione inversa
' Dim InverseSection As SectionXMaterial = Map.refProjectVM.BTLStructureVM.SectionList.FirstOrDefault(Function(x) x.dH = CurrSection.dW AndAlso x.dW = CurrSection.dH AndAlso x.sMaterial(0) = CurrSection.sMaterial(0))
' If Not IsNothing(InverseSection) Then Map.refProjectVM.BTLStructureVM.SetSelSection(InverseSection)
' End If
' EgtDraw()
' End Sub
'#End Region ' ForwardRotation
#Region "SimulateCommand"
'''
''' Returns a command that do Open.
'''
Public ReadOnly Property Simulate_Command As ICommand
Get
If m_cmdSimulate Is Nothing Then
m_cmdSimulate = New Command(AddressOf Simulate)
End If
Return m_cmdSimulate
End Get
End Property
'''
''' Execute the Open. This method is invoked by the OpenCommand.
'''
Friend Sub Simulate()
If ((IsNothing(ProjectManagerVM.CurrProj) OrElse IsNothing(Map.refProjectVM.BTLStructureVM)) AndAlso (IsNothing(ProjectManagerVM.CurrProd) OrElse IsNothing(Map.refProjectVM.MachGroupPanelVM))) Then Return
Dim ProjType As BWType
Dim BarList() As EgtBEAMWALL.Core.Bar = Nothing
ProjType = Map.refOnlyProdManagerVM.CurrProd.nType
If Map.refProjectVM.LastSelGridType = ProjectVM.GridSelTypes.PART Then
If Not CreateBarToSimulate(Pages.VIEW, ProjType, BarList) Then Return
' lancio simulazione
EgtBEAMWALL.Core.CalcIntegration.Run(BarList, ProjectManagerVM.CurrProj.sProjDirPath, AddressOf ManageCalc)
ElseIf Map.refProjectVM.LastSelGridType = ProjectVM.GridSelTypes.MACHGROUP Then
If Not CreateBarToSimulate(Pages.MACHINING, ProjType, BarList) Then Return
' lancio simulazione
EgtBEAMWALL.Core.CalcIntegration.Run(BarList, ProjectManagerVM.CurrProd.sProdDirPath, AddressOf ManageCalc)
End If
End Sub
Private Function CreateBarToSimulate(SelPage As Pages, ProjType As BWType, ByRef BarList As Bar()) As Boolean
If SelPage = Pages.VIEW Then
If Not IsNothing(Map.refProjectVM.BTLStructureVM.SelBTLPart) Then
Dim TempBarList(0) As EgtBEAMWALL.Core.Bar
Dim Bar As New EgtBEAMWALL.Core.Bar With {.nBarId = Map.refProjectVM.BTLStructureVM.SelBTLPart.nPartId,
.nProgramPage = ProjectType.PROJ,
.nProjType = ProjType,
.bBarOk = True,
.nMachineName = Map.refMachinePanelVM.SelectedMachine.Name,
.nCmdType = CalcIntegration.CmdTypes.SIMULATE,
.nGlobState = Map.refProjectVM.BTLStructureVM.SelBTLPart.nGlobalState}
If Map.refProjectVM.BTLStructureVM.SelBTLPart.nGlobalState = CalcStates.NOTCALCULATED Then
Dim sBTLPartFilePath As String = ProjectManagerVM.CurrProj.sProjDirPath & "\" & Map.refProjectVM.BTLStructureVM.SelBTLPart.nPDN.ToString() & ".ori.bwe"
If File.Exists(sBTLPartFilePath) Then File.Delete(sBTLPartFilePath)
End If
TempBarList(0) = Bar
BarList = TempBarList
Else
Return False
End If
' disabilito interfaccia
Map.refProjectVM.SetCalcRunning(True)
ElseIf SelPage = Pages.MACHINING Then
If Not IsNothing(Map.refMachGroupPanelVM.SelectedMachGroup) Then
Dim SelMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.SelectedMachGroup
Dim TempBarList(0) As EgtBEAMWALL.Core.Bar
Dim MachineName As String = ""
EgtGetMachGroupMachineName(SelMachGroup.Id, MachineName)
Dim Bar As New EgtBEAMWALL.Core.Bar With {.nBarId = SelMachGroup.Id,
.nProgramPage = ProjectType.PROD,
.nProjType = ProjType,
.bBarOk = True,
.nMachineName = MachineName,
.nCmdType = CalcIntegration.CmdTypes.SIMULATE,
.nGlobState = SelMachGroup.nGlobalState}
If SelMachGroup.nGlobalState = CalcStates.NOTCALCULATED Then
Dim sMachGroupFilePath As String = ProjectManagerVM.CurrProd.sProdDirPath & "\" & SelMachGroup.Name.ToString() & ".ori.bwe"
If File.Exists(sMachGroupFilePath) Then File.Delete(sMachGroupFilePath)
End If
TempBarList(0) = Bar
BarList = TempBarList
Else
Return False
End If
' disabilito interfaccia
Map.refProjectVM.SetCalcRunning(True)
End If
Return True
End Function
#End Region ' SimulateCommand
#Region "Edit"
'''
''' Returns a command that do Open.
'''
Public ReadOnly Property Edit_Command As ICommand
Get
If m_cmdEdit Is Nothing Then
m_cmdEdit = New Command(AddressOf Edit)
End If
Return m_cmdEdit
End Get
End Property
'''
''' Execute the Open. This method is invoked by the OpenCommand.
'''
Friend Sub Edit()
Map.refProjectVM.SetSelManagerTab(ProjectVM.ManagerTab.FEATUREMANAGER)
Map.refProjectVM.SetOnlyProdLeftPanel_IsEnabled(False)
Map.refProjectVM.SetOnlyProdLeftPanel_Opacity(0.2)
End Sub
#End Region ' Edit
#End Region ' COMMANDS
End Class