Files
egtbeamwall/EgtBEAMWALL.ViewerOptimizer/Project/ProjectVM.vb
T
2023-10-27 17:34:39 +02:00

1156 lines
44 KiB
VB.net

Imports System.Windows.Threading
Imports EgtBEAMWALL.Core
Imports EgtWPFLib5
Imports EgtUILib
Imports System.Collections.ObjectModel
Public Class ProjectVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
Private m_Calc_Timer As New DispatcherTimer
' Selezione Tab Prod / Proj
Private m_SelProdProj As ProdProj
Public Property SelProdProj As Integer
Get
Return m_SelProdProj
End Get
Set(value As Integer)
m_SelProdProj = value
NotifyPropertyChanged(NameOf(SelProdProj))
End Set
End Property
Private Property m_GridDims As New ObservableCollection(Of GridDimension)
Public Property GridDims As ObservableCollection(Of GridDimension)
Get
Return m_GridDims
End Get
Set
m_GridDims = Value
NotifyPropertyChanged(NameOf(GridDims))
End Set
End Property
Private m_BTLStructureVM As BTLStructureVM
Public Property BTLStructureVM As BTLStructureVM
Get
Return m_BTLStructureVM
End Get
Set(value As BTLStructureVM)
m_BTLStructureVM = value
NotifyPropertyChanged(NameOf(BTLStructureVM))
End Set
End Property
Private m_MachGroupPanelVM As MyMachGroupPanelVM
Public Property MachGroupPanelVM As MyMachGroupPanelVM
Get
Return m_MachGroupPanelVM
End Get
Set(value As MyMachGroupPanelVM)
m_MachGroupPanelVM = value
NotifyPropertyChanged(NameOf(MachGroupPanelVM))
End Set
End Property
Private m_bCalcRunning As Boolean = False
Public ReadOnly Property bCalcRunning As Boolean
Get
Return m_bCalcRunning
End Get
End Property
Private m_bLockUX As Boolean = False
Private m_LeftPanel_Visibility As Boolean = True
Public Property LeftPanel_Visibility As Visibility
Get
Return If(m_LeftPanel_Visibility, Visibility.Visible, Visibility.Collapsed)
End Get
Set(value As Visibility)
m_LeftPanel_Visibility = (value = Visibility.Visible)
End Set
End Property
Friend Sub SetLeftPanel_Visibility(IsVisible As Boolean)
m_LeftPanel_Visibility = IsVisible
End Sub
Private m_TopPanel_Visibility As Boolean = False
Public Property TopPanel_Visibility As Visibility
Get
Return If(m_TopPanel_Visibility, Visibility.Visible, Visibility.Collapsed)
End Get
Set(value As Visibility)
m_TopPanel_Visibility = (value = Visibility.Visible)
End Set
End Property
Friend Sub SetTopPanel_Visibility(IsVisible As Boolean)
m_TopPanel_Visibility = IsVisible
End Sub
Private m_BottomPanel_Visibility As Boolean = True
Public Property BottomPanel_Visibility As Visibility
Get
Return If(m_BottomPanel_Visibility, Visibility.Visible, Visibility.Collapsed)
End Get
Set(value As Visibility)
m_BottomPanel_Visibility = (value = Visibility.Visible)
End Set
End Property
Friend Sub SetBottomPanel_Visibility(IsVisible As Boolean)
m_BottomPanel_Visibility = IsVisible
End Sub
Private m_PartManager_Visibility As Boolean = True
Public ReadOnly Property PartManager_Visibility As Visibility
Get
'Return If(Map.refMainMenuVM.SelPage = Pages.VIEW AndAlso Not IsNothing(Map.refProjectVM.BTLStructureVM) AndAlso Map.refProjectVM.BTLStructureVM.SelectionType = BTLStructureVM.SelectionTypes.SELECT_ AndAlso Not Map.refFreeContourManagerVM.bIsActive, Visibility.Visible, Visibility.Collapsed)
If (Map.refMainMenuVM.SelPage = Pages.VIEW AndAlso Not IsNothing(Map.refProjectVM.BTLStructureVM) AndAlso Map.refProjectVM.BTLStructureVM.SelectionType = BTLStructureVM.SelectionTypes.SELECT_ AndAlso Not Map.refFreeContourManagerVM.bIsActive) Then
Return Visibility.Visible
ElseIf Map.refMainMenuVM.SelPage = Pages.ONLYPRODPAGE Then
Return Visibility.Visible
Else
Return Visibility.Collapsed
End If
End Get
End Property
Private m_FeatureManager_Visibility As Boolean = True
Public Property FeatureManager_Visibility As Visibility
Get
Return If(m_FeatureManager_Visibility, Visibility.Visible, Visibility.Collapsed)
End Get
Set(value As Visibility)
m_FeatureManager_Visibility = (value = Visibility.Visible)
End Set
End Property
Friend Sub SetFeatureManager_Visibility(IsVisible As Boolean)
m_FeatureManager_Visibility = IsVisible
End Sub
Private m_ShowBeamPanel_Visibility As Boolean = True
Public Property ShowBeamPanel_Visibility As Visibility
Get
Return If(m_ShowBeamPanel_Visibility, Visibility.Visible, Visibility.Collapsed)
End Get
Set(value As Visibility)
m_ShowBeamPanel_Visibility = (value = Visibility.Visible)
End Set
End Property
Friend Sub SetShowBeamPanel_Visibility(IsVisible As Boolean)
m_ShowBeamPanel_Visibility = IsVisible
End Sub
Private m_ProjManager_Visibility As Boolean = True
Public Property ProjManager_Visibility As Visibility
Get
Return If(m_ProjManager_Visibility, Visibility.Visible, Visibility.Collapsed)
End Get
Set(value As Visibility)
m_ProjManager_Visibility = (value = Visibility.Visible)
End Set
End Property
Friend Sub SetProjManager_Visibility(IsVisible As Boolean)
m_ProjManager_Visibility = IsVisible
If Not IsNothing(Map.refProjManagerVM) Then Map.refProjManagerVM.NotifyPropertyChanged(NameOf(Map.refProjManagerVM.GoToProd_Visibility))
End Sub
Private m_ProdManager_Visibility As Boolean = True
Public Property ProdManager_Visibility As Visibility
Get
Return If(m_ProdManager_Visibility, Visibility.Visible, Visibility.Collapsed)
End Get
Set(value As Visibility)
m_ProdManager_Visibility = (value = Visibility.Visible)
End Set
End Property
Friend Sub SetProdManager_Visibility(IsVisible As Boolean)
m_ProdManager_Visibility = IsVisible
If Not IsNothing(Map.refProdManagerVM) Then Map.refProdManagerVM.NotifyPropertyChanged(NameOf(Map.refProdManagerVM.GoToProj_Visibility))
End Sub
Private m_OptimizePanel_Visibility As Boolean = True
Public Property OptimizePanel_Visibility As Visibility
Get
Return If(m_OptimizePanel_Visibility, Visibility.Visible, Visibility.Collapsed)
End Get
Set(value As Visibility)
m_OptimizePanel_Visibility = (value = Visibility.Visible)
End Set
End Property
Friend Sub SetOptimizePanel_Visibility(IsVisible As Boolean)
m_OptimizePanel_Visibility = IsVisible
NotifyPropertyChanged(NameOf(OptimizePanel_Visibility))
Map.refOptimizePanelVM.NotifyPropertyChanged(NameOf(Map.refOptimizePanelVM.CalcRotFlip_Visibility))
Map.refOptimizePanelVM.NotifyPropertyChanged(NameOf(Map.refOptimizePanelVM.Optimize_Visibility))
Map.refOptimizePanelVM.NotifyPropertyChanged(NameOf(Map.refOptimizePanelVM.OriginType_Visibility))
Map.refOptimizePanelVM.NotifyPropertyChanged(NameOf(Map.refOptimizePanelVM.ViewPage_Visibility))
Map.refOptimizePanelVM.NotifyPropertyChanged(NameOf(Map.refOptimizePanelVM.MachiningPage_Visibility))
Map.refOptimizePanelVM.NotifyPropertyChanged(NameOf(Map.refOptimizePanelVM.NestingOption_Visibility))
End Sub
Friend Sub NotifyCalcPanel_Visibility()
Map.refCALCPanelVM.NotifyPropertyChanged(NameOf(Map.refCALCPanelVM.ViewPage_Visibility))
Map.refCALCPanelVM.NotifyPropertyChanged(NameOf(Map.refCALCPanelVM.Edit_Visibility))
End Sub
Private m_FreeContourManager_Visibility As Boolean = False
Public Property FreeContourManager_Visibility As Visibility
Get
Return If(m_FreeContourManager_Visibility, Visibility.Visible, Visibility.Collapsed)
End Get
Set(value As Visibility)
m_FreeContourManager_Visibility = (value = Visibility.Visible)
End Set
End Property
Friend Sub SetFreeContourManager_Visibility(IsVisible As Boolean)
m_FreeContourManager_Visibility = IsVisible
NotifyPropertyChanged("FreeContourManager_Visibility")
End Sub
' OnlyProdProject
Private m_OnlyProdManager_Visibility As Boolean = True
Public Property OnlyProdManager_Visibility As Visibility
Get
Return If(m_OnlyProdManager_Visibility, Visibility.Visible, Visibility.Collapsed)
End Get
Set(value As Visibility)
m_OnlyProdManager_Visibility = (value = Visibility.Visible)
End Set
End Property
Friend Sub SetOnlyProdManager_Visibility(IsVisible As Boolean)
m_OnlyProdManager_Visibility = IsVisible
End Sub
Private m_OnlyProdLeftPanel_Visibility As Boolean = True
Public Property OnlyProdLeftPanel_Visibility As Visibility
Get
Return If(m_OnlyProdLeftPanel_Visibility, Visibility.Visible, Visibility.Collapsed)
End Get
Set(value As Visibility)
m_OnlyProdLeftPanel_Visibility = (value = Visibility.Visible)
End Set
End Property
Friend Sub SetOnlyProdLeftPanel_Visibility(IsVisible As Boolean)
m_OnlyProdLeftPanel_Visibility = IsVisible
End Sub
Private m_OnlyProdOptimizePanel_Visibility As Boolean = True
Public Property OnlyProdOptimizePanel_Visibility As Visibility
Get
Return If(m_OnlyProdOptimizePanel_Visibility, Visibility.Visible, Visibility.Collapsed)
End Get
Set(value As Visibility)
m_OnlyProdOptimizePanel_Visibility = (value = Visibility.Visible)
End Set
End Property
Friend Sub SetOnlyProdOptimizePanel_Visibility(IsVisible As Boolean)
m_OnlyProdOptimizePanel_Visibility = IsVisible
NotifyPropertyChanged(NameOf(OnlyProdOptimizePanel_Visibility))
Map.refOptimizePanelVM.NotifyPropertyChanged(NameOf(Map.refOptimizePanelVM.CalcRotFlip_Visibility))
Map.refOptimizePanelVM.NotifyPropertyChanged(NameOf(Map.refOptimizePanelVM.Optimize_Visibility))
Map.refOptimizePanelVM.NotifyPropertyChanged(NameOf(Map.refOptimizePanelVM.OriginType_Visibility))
Map.refOptimizePanelVM.NotifyPropertyChanged(NameOf(Map.refOptimizePanelVM.ViewPage_Visibility))
Map.refOptimizePanelVM.NotifyPropertyChanged(NameOf(Map.refOptimizePanelVM.MachiningPage_Visibility))
Map.refOptimizePanelVM.NotifyPropertyChanged(NameOf(Map.refOptimizePanelVM.NestingOption_Visibility))
End Sub
Private m_CopyFeature_IsEnabled As Boolean = False
Public Property CopyFeature_IsEnabled As Boolean
Get
Return m_CopyFeature_IsEnabled
End Get
Set(value As Boolean)
m_CopyFeature_IsEnabled = value
NotifyPropertyChanged(NameOf(CopyFeature_IsEnabled))
End Set
End Property
Private m_MacroFeature_IsEnabled As Boolean = False
Public Property MacroFeature_IsEnabled As Boolean
Get
Return m_MacroFeature_IsEnabled
End Get
Set(value As Boolean)
m_MacroFeature_IsEnabled = value
NotifyPropertyChanged(NameOf(MacroFeature_IsEnabled))
End Set
End Property
' Definizione Comandi
Private m_cmdCopyFeature As ICommand
Private m_cmdMacroFeature As ICommand
Private m_cmdAddFeature As ICommand
Private m_cmdRemoveFeature As ICommand
Private m_cmdProduceAllRawPart As ICommand
Private m_cmdProduceRawPart As ICommand
Private m_cmdCopyRawPart As ICommand
Private m_cmdRemoveRawPart As ICommand
Private m_cmdRemoveAllRawPart As ICommand
Private m_cmdRemovePart As ICommand
Private m_cmdMoveUpPart As ICommand
Private m_cmdMoveDownPart As ICommand
Private m_cmdReOrderPart As ICommand
Private m_cmdMovePartInRawPart As ICommand
#End Region ' Fields & Properties
#Region "Messages"
Public ReadOnly Property ProduceRawPart_ToolTip As String
Get
Return EgtMsg(61912)
End Get
End Property
Public ReadOnly Property ResetCALCRawPart_ToolTip As String
Get
Return EgtMsg(61924)
End Get
End Property
Public ReadOnly Property ProduceAllRawPart_ToolTip As String
Get
Return EgtMsg(61913)
End Get
End Property
Public ReadOnly Property CopyRawPart_ToolTip As String
Get
Return EgtMsg(61914)
End Get
End Property
Public ReadOnly Property RemoveRawPart_ToolTip As String
Get
Return EgtMsg(61915)
End Get
End Property
Public ReadOnly Property RemoveAllRawPart_ToolTip As String
Get
Return EgtMsg(61976)
End Get
End Property
Public ReadOnly Property ReOrderPart_ToolTip As String
Get
Return EgtMsg(61916)
End Get
End Property
Public ReadOnly Property MoveUpPart_ToolTip As String
Get
Return EgtMsg(61917)
End Get
End Property
Public ReadOnly Property MoveDownPart_ToolTip As String
Get
Return EgtMsg(61918)
End Get
End Property
Public ReadOnly Property RemovePart_ToolTip As String
Get
Return EgtMsg(61919)
End Get
End Property
Public ReadOnly Property MovePartInRawPart_ToolTip As String
Get
Return EgtMsg(61944)
End Get
End Property
Public ReadOnly Property CopyFeature_ToolTip As String
Get
Return EgtMsg(61908)
End Get
End Property
Public ReadOnly Property MacroFeature_ToolTip As String
Get
Return EgtMsg(61909)
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
#End Region ' Messages
#Region "CONSTRUCTOR"
Sub New()
' Creo riferimento a questa classe in Map
Map.SetRefProjectVM(Me)
' imposto timer per aggiornamenti Calc
m_Calc_Timer.Interval = TimeSpan.FromMilliseconds(500)
AddHandler m_Calc_Timer.Tick, AddressOf Calc_Timer_Tick
' imposto dimensioni colonne/righe della Grid
Dim ProjectGridDim As String = If(Map.refMainWindowVM.MainWindowM.bOnlyProd, ConstDims.PROJECT_ONLYPROD, ConstDims.PROJECT_VIEW)
DimensionsIniFile.ReadGridDimensions(ProjectGridDim, GridDims)
End Sub
#End Region ' Constructor
#Region "METHODS"
Friend Sub SetCalcRunning(value As Boolean)
If value Then m_Calc_Timer.Start()
m_bCalcRunning = value
End Sub
Friend Sub ManageIsEnabled(bIsEnabled As Boolean)
Map.refInstrumentPanelVM.SetInstrumentPanelIsEnabled(bIsEnabled)
Map.refCALCPanelVM.SetCalcPanelIsEnabled(bIsEnabled)
Map.refMainMenuVM.SetMainMenuIsEnabled(bIsEnabled)
Map.refPartManagerVM.SetPartManagerIsEnabled(bIsEnabled)
Map.refLeftPanelVM.SetLeftPanelIsEnabled(bIsEnabled)
Map.refProjManagerVM.SetProjManagerIsEnabled(bIsEnabled)
Map.refProdManagerVM.SetProdManagerIsEnabled(bIsEnabled)
Map.refTopPanelVM.SetTopPanelIsEnabled(bIsEnabled)
Map.refOptimizePanelVM.SetOptimizePanelIsEnabled(bIsEnabled)
Map.refFeatureManagerVM.SetFeatureManagerIsEnabled(bIsEnabled)
End Sub
Private Sub Calc_Timer_Tick()
If m_bCalcRunning <> m_bLockUX Then
' se calcolo iniziato
If m_bCalcRunning Then
ManageIsEnabled(False)
' aggiungere gestione colonne editabili delle tabelle
If Not IsNothing(Map.refPartListVM.colPart_Do) Then
Map.refPartListVM.colPart_Do.IsReadOnly = True
End If
If Not IsNothing(Map.refFeatureListVM.colFeature_Do) Then
Map.refFeatureListVM.colFeature_Do.IsReadOnly = True
End If
If Not IsNothing(Map.refPParameterListVM.colPParam_Value) Then
Map.refPParameterListVM.colPParam_Value.IsReadOnly = True
End If
If Not IsNothing(Map.refQParameterListVM.colQParam_Value) Then
Map.refQParameterListVM.colQParam_Value.IsReadOnly = True
End If
If Not IsNothing(Map.refQParameterListVM.colQParam_Custom) Then
Map.refQParameterListVM.colQParam_Custom.IsReadOnly = True
End If
If Not IsNothing(Map.refRawPartListVM.colRawPart_StartCut) Then
Map.refRawPartListVM.colRawPart_StartCut.IsReadOnly = True
End If
If Not IsNothing(Map.refRawPartListVM.colRawPart_W) Then
Map.refRawPartListVM.colRawPart_W.IsReadOnly = True
End If
If Not IsNothing(Map.refRawPartListVM.colRawPart_L) Then
Map.refRawPartListVM.colRawPart_L.IsReadOnly = True
End If
If Not IsNothing(Map.refRawPartListVM.colRawPart_PosZ) Then
Map.refRawPartListVM.colRawPart_PosZ.IsReadOnly = True
End If
If Not IsNothing(Map.refPartInRawPartListVM.colPartInRawPart_Offset) Then
Map.refPartInRawPartListVM.colPartInRawPart_Offset.IsReadOnly = True
End If
If Not IsNothing(Map.refPartInRawPartListVM.colPartInRawPart_Rot) Then
Map.refPartInRawPartListVM.colPartInRawPart_Rot.IsReadOnly = True
End If
If Not IsNothing(Map.refPartInRawPartListVM.colPartInRawPart_Flip) Then
Map.refPartInRawPartListVM.colPartInRawPart_Flip.IsReadOnly = True
End If
If Not IsNothing(Map.refPartInRawPartListVM.colPartInRawPart_PosX) Then
Map.refPartInRawPartListVM.colPartInRawPart_PosX.IsReadOnly = True
End If
If Not IsNothing(Map.refPartInRawPartListVM.colPartInRawPart_PosY) Then
Map.refPartInRawPartListVM.colPartInRawPart_PosY.IsReadOnly = True
End If
If Not IsNothing(Map.refFeatureInPartInRawPartListVM.colFeatureInPartInRawPart_Do) Then
Map.refFeatureInPartInRawPartListVM.colFeatureInPartInRawPart_Do.IsReadOnly = True
End If
m_bLockUX = True
' se calcolo finito
Else
ManageIsEnabled(True)
' aggiungere gestione colonne editabili delle tabelle
If Not IsNothing(Map.refPartListVM.colPart_Do) Then
Map.refPartListVM.colPart_Do.ResetToOrigIsReadOnly()
End If
If Not IsNothing(Map.refFeatureListVM.colFeature_Do) Then
Map.refFeatureListVM.colFeature_Do.ResetToOrigIsReadOnly()
End If
If Not IsNothing(Map.refPParameterListVM.colPParam_Value) Then
Map.refPParameterListVM.colPParam_Value.ResetToOrigIsReadOnly()
End If
If Not IsNothing(Map.refQParameterListVM.colQParam_Value) Then
Map.refQParameterListVM.colQParam_Value.ResetToOrigIsReadOnly()
End If
If Not IsNothing(Map.refQParameterListVM.colQParam_Custom) Then
Map.refQParameterListVM.colQParam_Custom.ResetToOrigIsReadOnly()
End If
If Not IsNothing(Map.refRawPartListVM.colRawPart_StartCut) Then
Map.refRawPartListVM.colRawPart_StartCut.ResetToOrigIsReadOnly()
End If
If m_BTLStructureVM.nPROJTYPE <> BWType.BEAM AndAlso Not IsNothing(Map.refRawPartListVM.colRawPart_W) Then
Map.refRawPartListVM.colRawPart_W.ResetToOrigIsReadOnly()
End If
If Not IsNothing(Map.refRawPartListVM.colRawPart_L) Then
Map.refRawPartListVM.colRawPart_L.ResetToOrigIsReadOnly()
End If
If Not IsNothing(Map.refRawPartListVM.colRawPart_PosZ) Then
Map.refRawPartListVM.colRawPart_PosZ.ResetToOrigIsReadOnly()
End If
If Not IsNothing(Map.refPartInRawPartListVM.colPartInRawPart_Offset) Then
Map.refPartInRawPartListVM.colPartInRawPart_Offset.ResetToOrigIsReadOnly()
End If
If Not IsNothing(Map.refPartInRawPartListVM.colPartInRawPart_Rot) Then
Map.refPartInRawPartListVM.colPartInRawPart_Rot.ResetToOrigIsReadOnly()
End If
If Not IsNothing(Map.refPartInRawPartListVM.colPartInRawPart_Flip) Then
Map.refPartInRawPartListVM.colPartInRawPart_Flip.ResetToOrigIsReadOnly()
End If
If Not IsNothing(Map.refPartInRawPartListVM.colPartInRawPart_PosX) Then
Map.refPartInRawPartListVM.colPartInRawPart_PosX.ResetToOrigIsReadOnly()
End If
If Not IsNothing(Map.refPartInRawPartListVM.colPartInRawPart_PosY) Then
Map.refPartInRawPartListVM.colPartInRawPart_PosY.ResetToOrigIsReadOnly()
End If
If Not IsNothing(Map.refFeatureInPartInRawPartListVM.colFeatureInPartInRawPart_Do) Then
Map.refFeatureInPartInRawPartListVM.colFeatureInPartInRawPart_Do.ResetToOrigIsReadOnly()
End If
' fermo il timer
If Not m_bCalcRunning Then
m_Calc_Timer.Stop()
m_bLockUX = False
End If
End If
End If
End Sub
Friend Sub ManageQParamsRowVisibility(bVisible As Boolean)
If bVisible Then
DimensionsIniFile.ReadGridDimensions(ConstDims.TOPPANEL_OPTIMIZER, GridDims)
Else
GridDimension.SetSoftwareMod(True)
Dim FeatureRow = m_GridDims(4)
Dim QParRow = m_GridDims(5)
m_GridDims(4).GridLen = New GridLength(1, GridUnitType.Star)
m_GridDims(4).NotifyPropertyChanged(NameOf(FeatureRow.GridLen))
m_GridDims(5).GridLen = New GridLength(0)
m_GridDims(5).NotifyPropertyChanged(NameOf(QParRow.GridLen))
GridDimension.SetSoftwareMod(False)
End If
End Sub
Friend Sub NotifyAllPanelVisibility()
NotifyPropertyChanged("LeftPanel_Visibility")
NotifyPropertyChanged("TopPanel_Visibility")
NotifyPropertyChanged("BottomPanel_Visibility")
NotifyPropertyChanged("PartManager_Visibility")
NotifyPropertyChanged("FeatureManager_Visibility")
NotifyPropertyChanged("ShowBeamPanel_Visibility")
NotifyPropertyChanged("ProjManager_Visibility")
NotifyPropertyChanged("ProdManager_Visibility")
NotifyPropertyChanged("FullCompleteManager_Visibility")
NotifyCalcPanel_Visibility()
End Sub
#End Region ' Methods
#Region "COMMAND"
#Region "CopyFeature"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property CopyFeature_Command As ICommand
Get
If m_cmdCopyFeature Is Nothing Then
m_cmdCopyFeature = New Command(AddressOf CopyFeature)
End If
Return m_cmdCopyFeature
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub CopyFeature()
If IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then Return
Dim SelPart As BTLPartVM = Map.refProjectVM.BTLStructureVM.SelBTLPart
If IsNothing(SelPart) Then Return
Dim SelFeature As BTLFeatureVM = SelPart.SelBTLFeatureVM
If IsNothing(SelFeature) Then Return
' creo copia
Dim NewFeature = SelFeature.Copy()
If Not IsNothing(NewFeature) Then
SelPart.SelBTLFeatureVM = Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.FirstOrDefault(Function(x) x.BTLFeatureM Is NewFeature)
EgtDuploSetModified(SelPart.nPartId)
End If
SelPart.ResetCalcPart()
End Sub
#End Region ' CopyFeature
#Region "MacroFeature"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property MacroFeature_Command As ICommand
Get
If m_cmdMacroFeature Is Nothing Then
m_cmdMacroFeature = New Command(AddressOf MacroFeature)
End If
Return m_cmdMacroFeature
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub MacroFeature()
If IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then Return
If IsNothing(Map.refProjectVM.BTLStructureVM.SelBTLPart) Then Return
' apro finestra di creazione macro
Dim MacroFeatureWndVM As New MacroFeatureWndVM()
Dim MacroFeatureWnd As New MacroFeatureWndV(Application.Current.MainWindow, MacroFeatureWndVM)
If MacroFeatureWnd.ShowDialog() Then
End If
End Sub
#End Region ' MacroFeature
#Region "AddFeature"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property AddFeature_Command As ICommand
Get
If m_cmdAddFeature Is Nothing Then
m_cmdAddFeature = New Command(AddressOf AddFeature)
End If
Return m_cmdAddFeature
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub AddFeature(ByVal param As Object)
If IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then Return
If IsNothing(Map.refProjectVM.BTLStructureVM.SelBTLPart) Then Return
' apro finestra di definizione nuova feature
Dim AddFeatureWndVM As New AddFeatureWndVM()
Dim AddFeatureWnd As New AddFeatureWndV(Application.Current.MainWindow, AddFeatureWndVM)
If AddFeatureWnd.ShowDialog() Then
Dim NewFeat As BTLFeatureM
Dim nNewFeatureId As Integer = 0
Dim bMacroFlag As Boolean = False
' verifico se una Macro è selezionata
If AddFeatureWndVM.MacroList.Count > 0 AndAlso AddFeatureWndVM.nSelMacro >= 0 Then
' Creo nuova feature sulla base della Macro selezionata
' Creo table e setto variabili
EgtLuaCreateGlobTable("MACRO")
EgtLuaSetGlobNumVar("MACRO.L", Map.refProjectVM.BTLStructureVM.SelBTLPart.dBtlL)
EgtLuaSetGlobNumVar("MACRO.W", Map.refProjectVM.BTLStructureVM.SelBTLPart.dBtlW)
EgtLuaSetGlobNumVar("MACRO.H", Map.refProjectVM.BTLStructureVM.SelBTLPart.dBtlH)
EgtLuaSetGlobIntVar("MACRO.PROCID", Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLPartM.NewProcId())
Dim bOk = EgtLuaExecFile(AddFeatureWndVM.m_MacroFilePathList(AddFeatureWndVM.nSelMacro))
' Leggo variabili
EgtLuaGetGlobIntVar("MACRO.FEATUREID", nNewFeatureId)
' Reset lua
EgtLuaResetGlobVar("MACRO")
If Not bOk Then
MessageBox.Show(EgtMsg(61869), EgtMsg(30007))
Return
End If
bMacroFlag = True
Else
' Creo nuova feature (Macro non selezionata)
NewFeat = BTLFeatureM.CreateBTLFeature(AddFeatureWndVM.nSelPRC.nPRC, AddFeatureWndVM.nSelPRC.nGRP, AddFeatureWndVM.nSelPRC.nSIDE)
NewFeat.SetDefaultValues()
Dim vPar() As Double = Nothing
Dim sPar As String = String.Empty
Dim vParQ() As String = Nothing
NewFeat.CalcParamArray(vPar, sPar, vParQ)
' aggiorno la feature con nuovo valore
EgtBeamSetPart(Map.refProjectVM.BTLStructureVM.SelBTLPart.nPartId)
nNewFeatureId = EgtBeamAddProcess(NewFeat.nSelGRP, NewFeat.nPRC, NewFeat.nSelSIDE, "",
Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLPartM.NewProcId(),
New Frame3d(), vPar, sPar, vParQ, GDB_ID.NULL, GDB_ID.NULL)
bMacroFlag = False
End If
' se è stata creata
If nNewFeatureId <> GDB_ID.NULL Then
EgtDuploSetModified(Map.refProjectVM.BTLStructureVM.SelBTLPart.nPartId)
' la aggiungo a struttura BTL corrente
NewFeat = BTLFeatureM.CreateBTLFeature(Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLPartM, nNewFeatureId)
If Not bMacroFlag Then NewFeat.SetDefaultValues()
Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLPartM.AddBTLFeature(NewFeat)
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM = Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.FirstOrDefault(Function(x) x.BTLFeatureM Is NewFeat)
Map.refProjectVM.BTLStructureVM.SelBTLPart.ResetCalcPart()
End If
End If
End Sub
#End Region ' AddFeature
#Region "RemoveFeature"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property RemoveFeature_Command As ICommand
Get
If m_cmdRemoveFeature Is Nothing Then
m_cmdRemoveFeature = New Command(AddressOf RemoveFeature)
End If
Return m_cmdRemoveFeature
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub RemoveFeature()
If IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then Return
If IsNothing(Map.refProjectVM.BTLStructureVM.SelBTLPart) Then Return
If IsNothing(Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM) Then Return
If EgtBeamEraseProcess(Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM.nFeatureId) Then
EgtDuploSetModified(Map.refProjectVM.BTLStructureVM.SelBTLPart.nPartId)
' rimuovo dalla lista feature
Dim Index As Integer = Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.IndexOf(Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM)
If Index = 0 Then
If Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.Count > 0 Then
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM = Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList(0)
Else
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM = Nothing
End If
ElseIf Index = Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.Count - 1 Then
If Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.Count > 1 Then
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM = Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList(Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.Count - 2)
Else
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM = Nothing
End If
Else
Map.refProjectVM.BTLStructureVM.SelBTLPart.SelBTLFeatureVM = Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList(Index - 1)
End If
Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList.RemoveAt(Index)
EgtDraw()
Map.refProjectVM.BTLStructureVM.SelBTLPart.ResetCalcPart()
End If
End Sub
#End Region ' RemoveFeature
#Region "ProduceRawPart"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property ProduceRawPart_Command As ICommand
Get
If m_cmdProduceRawPart Is Nothing Then
m_cmdProduceRawPart = New Command(AddressOf ProduceRawPart)
End If
Return m_cmdProduceRawPart
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub ProduceRawPart()
If IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then Return
Dim ErrorMsg As String = ""
' se attiva opzione e non ancora calcolato
If GetMainPrivateProfileInt(S_GENERAL, K_FASTPRODUCE, 0) = 1 And Map.refMachGroupPanelVM.SelectedMachGroup.nGlobalState = CalcStates.NOTCALCULATED Then
Map.refCALCPanelVM.SetFromProduce(CALCPanelVM.ProduceType.PRODUCE)
Map.refCALCPanelVM.Verify()
Return
End If
If Not Produce(Map.refMachGroupPanelVM.SelectedMachGroup, ErrorMsg) AndAlso Not String.IsNullOrWhiteSpace(ErrorMsg) Then
MessageBox.Show(ErrorMsg)
End If
End Sub
Private Function Produce(MachGroup As MyMachGroupVM, ByRef ErrorMsg As String) As Boolean
If IsNothing(MachGroup) Then Return False
' se barra gia' assegnata a supervisore, esco
If MachGroup.nProduction_State >= ItemState.Assigned Then Return False
If MachGroup.nGlobalState = CalcStates.OK Or MachGroup.nGlobalState = CalcStates.INFO Then
' se ci sono modifiche, salvo il pogetto
If EgtGetModified() Then
Map.refOnlyProdManagerVM.Save()
End If
' mando al supervisore
DbControllers.m_MachGroupController.UpdateOrder(Map.refOnlyProdManagerVM.CurrProd.nProdId, MachGroup.Id, DbControllers.m_MachGroupController.GetMinIndex(Map.refOnlyProdManagerVM.CurrProd.nProdId) + 1)
DbControllers.m_MachGroupController.UpdateSupervisor(Map.refOnlyProdManagerVM.CurrProd.nProdId, MachGroup.Id, DbControllers.m_SupervisorId)
MachGroup.SentToSupervisor()
For Each Part As PartVM In MachGroup.PartVMList
DbControllers.m_PartController.UpdateStatus(Map.refOnlyProdManagerVM.CurrProd.nProdId, MachGroup.Id, Part.nPartId, ItemState.Assigned)
Part.nProduction_State = ItemState.Assigned
Part.NotifyPropertyChanged(NameOf(Part.Background))
' disabilito impostazione modificato
Dim DisableMgr As New DisableModifiedMgr
' blocco modifica del pezzo
EgtDuploSetLocked(Part.nPartId)
' ripristino precedente impostazione modificato
DisableMgr.ReEnable()
Next
Return True
Else
ErrorMsg = String.Format("Impossible sending {0} to supervisor because not machinable!", MachGroup.Name)
'MessageBox.Show(String.Format("Impossible sending {0} to supervisor because it is not machinable!", MachGroup.Name))
Return False
End If
End Function
#End Region ' ProduceRawPart
#Region "ProduceAllRawPart"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property ProduceAllRawPart_Command As ICommand
Get
If m_cmdProduceAllRawPart Is Nothing Then
m_cmdProduceAllRawPart = New Command(AddressOf ProduceAllRawPart)
End If
Return m_cmdProduceAllRawPart
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub ProduceAllRawPart()
If IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then Return
' se attiva opzione e non ancora calcolato
If GetMainPrivateProfileInt(S_GENERAL, K_FASTPRODUCE, 0) = 1 And Map.refMachGroupPanelVM.MachGroupVMList.Any(Function(x As MyMachGroupVM) x.nProduction_State = ItemState.ND AndAlso x.nGlobalState = CalcStates.NOTCALCULATED) Then
Map.refCALCPanelVM.SetFromProduce(CALCPanelVM.ProduceType.PRODUCEALL)
Map.refCALCPanelVM.VerifyAll()
Return
End If
If Map.refMachGroupPanelVM.MachGroupVMList.Count > 0 Then
Dim MachgroupErrorList As New List(Of MachGroupVM)
For Each Machgroup In Map.refMachGroupPanelVM.MachGroupVMList
Dim ErrorMsg As String = ""
If Not Produce(Machgroup, ErrorMsg) AndAlso Not String.IsNullOrWhiteSpace(ErrorMsg) Then
MachgroupErrorList.Add(Machgroup)
End If
Next
If MachgroupErrorList.Count > 0 Then
Dim sMachGroups As String = ""
For Each MachGroup In MachgroupErrorList
sMachGroups &= " " & MachGroup.Name & ","
Next
sMachGroups = sMachGroups.Trim({" "c, ","c})
MessageBox.Show(String.Format("Impossible sending {0} to supervisor because not machinable!", sMachGroups))
End If
End If
End Sub
#End Region ' ProduceAllRawPart
#Region "CopyRawPart"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property CopyRawPart_Command As ICommand
Get
If m_cmdCopyRawPart Is Nothing Then
m_cmdCopyRawPart = New Command(AddressOf CopyRawPart)
End If
Return m_cmdCopyRawPart
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub CopyRawPart()
If IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then Return
Dim nQty As Integer = 1
' se premuto shift
If (Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift Then
Dim MultiCopyRawPartWndVM As New MultiCopyRawPartWndVM()
Dim MultiCopyRawPartWnd As New MultiCopyRawPartWndV(Application.Current.MainWindow, MultiCopyRawPartWndVM)
If Not MultiCopyRawPartWnd.ShowDialog() Then Return
nQty = MultiCopyRawPartWndVM.nQuantity
End If
Dim SelMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.SelectedMachGroup
If IsNothing(SelMachGroup) Then Return
' creo copia
Dim NewMachGroup As MyMachGroupVM = SelMachGroup.Copy(nQty)
If Not IsNothing(NewMachGroup) Then
' lo seleziono
Map.refProjectVM.MachGroupPanelVM.SelectedMachGroup = NewMachGroup
End If
End Sub
#End Region ' CopyRawPart
#Region "RemoveRawPart"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property RemoveRawPart_Command As ICommand
Get
If m_cmdRemoveRawPart Is Nothing Then
m_cmdRemoveRawPart = New Command(AddressOf RemoveRawPartCmd)
End If
Return m_cmdRemoveRawPart
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub RemoveRawPartCmd()
RemoveRawPart()
End Sub
Public Sub RemoveRawPart(Optional bAll As Boolean = False)
If IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then Return
' se tutti
If bAll Then
' cancello tutti
For Index = Map.refMachGroupPanelVM.MachGroupVMList.Count - 1 To 0 Step -1
Dim CurrMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.MachGroupVMList(Index)
' se barra gia' assegnata a supervisore, esco
If CurrMachGroup.nProduction_State >= ItemState.Assigned Then Continue For
CurrMachGroup.DeleteMachGroup(True)
Next
Else
Dim SelMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.SelectedMachGroup
If IsNothing(SelMachGroup) Then Return
' se barra gia' assegnata a supervisore, esco
If SelMachGroup.nProduction_State >= ItemState.Assigned Then Return
SelMachGroup.DeleteMachGroup()
End If
EgtDraw()
' se nessun grezzo, rimetto tutti i pezzi invisibili
If Map.refProjectVM.MachGroupPanelVM.MachGroupVMList.Count = 0 Then
Map.refProjectVM.BTLStructureVM.HideAll(True)
End If
End Sub
#End Region ' RemoveRawPart
#Region "RemoveAllRawPart"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property RemoveAllRawPart_Command As ICommand
Get
If m_cmdRemoveAllRawPart Is Nothing Then
m_cmdRemoveAllRawPart = New Command(AddressOf RemoveAllRawPart)
End If
Return m_cmdRemoveAllRawPart
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub RemoveAllRawPart()
RemoveRawPart(True)
End Sub
#End Region ' RemoveRawPart
#Region "RemovePart"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property RemovePart_Command As ICommand
Get
If m_cmdRemovePart Is Nothing Then
m_cmdRemovePart = New Command(AddressOf RemovePart)
End If
Return m_cmdRemovePart
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub RemovePart()
If IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then Return
Dim SelMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.SelectedMachGroup
If IsNothing(SelMachGroup) Then Return
' se barra gia' assegnata a supervisore, esco
If SelMachGroup.nProduction_State >= ItemState.Assigned Then Return
Dim SelPart As PartVM = SelMachGroup.SelPart
If IsNothing(SelPart) Then Return
SelPart.DeletePart()
SelMachGroup.UpdateUsage()
SelMachGroup.ResetCalcMachGroup()
End Sub
#End Region ' RemovePart
#Region "MoveUpPart"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property MoveUpPart_Command As ICommand
Get
If m_cmdMoveUpPart Is Nothing Then
m_cmdMoveUpPart = New Command(AddressOf MoveUpPart)
End If
Return m_cmdMoveUpPart
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub MoveUpPart()
If IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then Return
Dim SelMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.SelectedMachGroup
If IsNothing(SelMachGroup) Then Return
' se barra gia' assegnata a supervisore, esco
If SelMachGroup.nProduction_State >= ItemState.Assigned Then Return
Dim SelPart As PartVM = SelMachGroup.SelPart
If IsNothing(SelPart) Then Return
If SelMachGroup.nType = MachineType.BEAM Then
SelMachGroup.MoveBeam(SelPart, MoveDirections.UP)
EgtDraw()
' riseleziono trave
SelMachGroup.SelPart = SelPart
End If
SelMachGroup.ResetCalcMachGroup()
End Sub
#End Region ' MoveUpPart
#Region "MoveDownPart"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property MoveDownPart_Command As ICommand
Get
If m_cmdMoveDownPart Is Nothing Then
m_cmdMoveDownPart = New Command(AddressOf MoveDownPart)
End If
Return m_cmdMoveDownPart
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub MoveDownPart()
If IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then Return
Dim SelMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.SelectedMachGroup
If IsNothing(SelMachGroup) Then Return
' se barra gia' assegnata a supervisore, esco
If SelMachGroup.nProduction_State >= ItemState.Assigned Then Return
Dim SelPart As PartVM = SelMachGroup.SelPart
If IsNothing(SelPart) Then Return
If SelMachGroup.nType = MachineType.BEAM Then
SelMachGroup.MoveBeam(SelPart, MoveDirections.DOWN)
EgtDraw()
' riseleziono trave
SelMachGroup.SelPart = SelPart
End If
SelMachGroup.ResetCalcMachGroup()
End Sub
#End Region ' MoveDownPart
#Region "ReOrderPart"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property ReOrderPart_Command As ICommand
Get
If m_cmdReOrderPart Is Nothing Then
m_cmdReOrderPart = New Command(AddressOf ReOrderPart)
End If
Return m_cmdReOrderPart
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub ReOrderPart()
If IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then Return
Dim SelMachGroup As MyMachGroupVM = Map.refMachGroupPanelVM.SelectedMachGroup
If IsNothing(SelMachGroup) Then Return
' se barra gia' assegnata a supervisore, esco
If SelMachGroup.nProduction_State >= ItemState.Assigned Then Return
Dim SelPart As PartVM = SelMachGroup.SelPart
If IsNothing(SelPart) Then Return
If SelMachGroup.nType = MachineType.BEAM Then
SelMachGroup.ReorderBeam()
EgtDraw()
' riseleziono trave
If Not IsNothing(SelPart) Then
SelMachGroup.SelPart = SelPart
End If
End If
SelMachGroup.ResetCalcMachGroup()
End Sub
#End Region ' ReOrderPart
#Region "MovePartInRawPart"
''' <summary>
''' Returns a command that do Exec.
''' </summary>
Public ReadOnly Property MovePartInRawPart_Command As ICommand
Get
If m_cmdMovePartInRawPart Is Nothing Then
m_cmdMovePartInRawPart = New Command(AddressOf MovePartInRawPart)
End If
Return m_cmdMovePartInRawPart
End Get
End Property
''' <summary>
''' Execute the Exec. This method is invoked by the ExecCommand.
''' </summary>
Public Sub MovePartInRawPart()
If IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then Return
Dim MovePartInRawPartWndVM As New MovePartInRawPartWndVM()
Dim MovePartInRawPartWnd As New MovePartInRawPartWndV(Application.Current.MainWindow, MovePartInRawPartWndVM)
If Not MovePartInRawPartWnd.ShowDialog() Then Return
End Sub
#End Region ' MovePartInRawPart
#End Region ' Command
End Class