Imports System.Collections.ObjectModel Imports System.IO Imports EgtUILib Imports EgtWPFLib5 Public Class MyMachGroupPanelVM Inherits MachGroupPanelVM #Region "CONSTRUCTOR" Sub New() MyBase.New() ' Recupero la macchina di default Dim sDefaultMachine As String = String.Empty GetMainPrivateProfileString(S_MACH, K_CURRMACH, "", sDefaultMachine) ' Creo riferimento a questa classe in OmagOFFICEMap OmagOFFICEMap.SetRefMachGroupPanelVM(Me) InitMachGroupPanel(True, OmagOFFICEMap.refMachinePanelVM.MachineList.ToList(), sDefaultMachine, BASE_MACH_GROUP & "1") End Sub #End Region ' CONSTRUCTOR #Region "METHODS" Public Overrides Sub AddMachGroup() If NewMachGroup() Then ' creo oggetto gruppo creato Dim nNewMachGroupID As Integer = EgtGetCurrMachGroup() Dim sNewMachGroupName As String = String.Empty Dim sNewMachGroupMachineName As String = String.Empty EgtGetMachGroupName(EgtGetCurrMachGroup(), sNewMachGroupName) EgtGetMachGroupMachineName(nNewMachGroupID, sNewMachGroupMachineName) Dim MyMachGroup As MyMachGroup = New MyMachGroup(EgtGetCurrMachGroup, sNewMachGroupName, sNewMachGroupMachineName, EgtGetFirstNameInGroup(EgtGetCurrMachGroup(), "Opers")) ' lo aggiungo alla lista MachGroupList.Add(MyMachGroup) ' e lo seleziono SelectedMachGroup = MyMachGroup EgtZoom(ZM.ALL) End If End Sub Public Overrides Sub LoadMachGroupList() ' Carico i gruppi di lavorazione nella lista Dim nId = EgtGetFirstMachGroup() While nId <> GDB_ID.NULL Dim sName As String = String.Empty Dim sMachine As String = String.Empty EgtGetMachGroupName(nId, sName) EgtGetMachGroupMachineName(nId, sMachine) MachGroupList.Add(New MyMachGroup(nId, sName, sMachine, EgtGetFirstNameInGroup(nId, "Opers"))) nId = EgtGetNextMachGroup(nId) End While End Sub Public Overrides Function OnPreNewMachGroup() As Boolean EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx()) Return True End Function ' NB: Anche se ho già aggiunto il nuovo gruppo di lavorazione, non l'ho ancora reso corrente (viene fatto dopo), quindi ' non posso usare CurrentMachine perchè è ancora impostata quella precedente!!! Public Overrides Function OnPostNewMachGroup() As Boolean ' Salvo macchina del gruppo come nuovo default Dim sCurrMachName As String = String.Empty EgtGetCurrMachineName(sCurrMachName) WriteMainPrivateProfileString(S_MACH, K_CURRMACH, sCurrMachName) ' Ricarico la macchina corrente InitCurrentMachine(OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot, sCurrMachName, OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.PROCUCTION_LINE), OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.ENABLE_MILL), True) ' Se macchina con più tavole, chiedo quale usare Dim nTabInd As Integer = 1 Dim nTabCnt As Integer = CamAuto.GetTableCount() If nTabCnt > 1 And nTabCnt <= 3 Then Dim dlg As New SelectTableWindowV(Application.Current.MainWindow, New SelectTableWindowVM(nTabCnt)) dlg.ShowDialog() nTabInd = dlg.m_SelTable End If EgtSetTable(GetTableName(nTabInd)) ' leggo nome attrezzaggio di default Dim sDefaultSetUpName As String = String.Empty Dim sMachineIniPath As String = OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot & "\" & sCurrMachName & "\" & sCurrMachName & ".ini" EgtUILib.GetPrivateProfileString(S_SETUP, K_DEFAULT, "", sDefaultSetUpName, sMachineIniPath) ' se è attiva l'opzione, rendo corrente l'attrezzaggio di default If Not String.IsNullOrEmpty(sDefaultSetUpName) Then If Not EgtImportSetup(sDefaultSetUpName) Then EgtOutLog("Error loading default setup " & sDefaultSetUpName) MessageBox.Show(EgtMsg(MSG_SETUPERRORS + 9) & " " & sDefaultSetUpName, MessageBoxButton.OK, MessageBoxImage.Exclamation) End If End If ' Aggiungo eventuale sovratavola EstCalc.AddAdditionalTable() ' Aggiorno grezzo iniziale EstCalc.UpdateRawPart() ' Imposto materiale corrente EstCalc.SetMaterialName() ' Imposto flag tagli ridotti EstCalc.SetReducedCut(CurrentMachine.bReducedCut) ' Imposto flag tastatura su tagli inclinati EstCalc.SetSideAngCutProbeFlag( CurrentMachine.nSacProbe > 0) ' Imposto flag lavaggio EstCalc.SetWashingFlag(CurrentMachine.nWashing <> 0) Return True End Function Public Overrides Function OnPreSetCurrMachGroup() As Boolean EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx()) ' Deseleziono tutto in Nesting e nel VeinMatching OmagOFFICE.refNestingTabVM.DeselectAllParts(True) Return True End Function Public Overrides Function OnPostSetCurrMachGroup() As Boolean ' Imposto vista solo tavola EgtSetMachineLook(MCH_LOOK.TAB) ' Ricarico la macchina corrente InitCurrentMachine(OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot, SelectedMachGroup.Machine, OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.PROCUCTION_LINE), OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.ENABLE_MILL), True) ' Imposto tab Disposizione OmagOFFICEMap.refOptionPanelVM.SelItem = OptionPanelVM.Tabs.NESTING ' Aggiorno grezzo iniziale EstCalc.UpdateRawPart() ' Aggiorno materiale corrente CurrentMachine.SetCurrMatByName(EstCalc.GetMaterialName()) ' Aggiorno flag tagli ridotti CurrentMachine.bReducedCut = EstCalc.GetReducedCut() ' Aggiorno stato flag tastatura tagli inclinati if CurrentMachine.nSacProbe >= 0 Then CurrentMachine.nSacProbe = If( EstCalc.GetSideAngCutProbeFlag(), 1, 0) ' Aggiorno flag lavaggio if CurrentMachine.nWashing >= 0 Then CurrentMachine.nWashing = If( EstCalc.GetWashingFlag(), 1, 0) ' Verifico compatibilità lavorazioni, setup, materiale e spessore grezzo If Not SetUpUtility.IsValidToolHeadExitInSetUp() Then OmagOFFICEMap.refMachinePanelVM.SetUp_Background = Brushes.Red Else OmagOFFICEMap.refMachinePanelVM.SetUp_Background = OmagOFFICEDictionary.Button_Static_Background End If ' Verifico che gli utensili delle lavorazioni correnti siano attrezzati (necessario perchè potrei aver cambiato gli utensili delle lavorazioni) ' e che le lavorazioni correnti siano compatibili con materiale e spessore ' Lama Dim bOkCurrSawing As Boolean = True Dim bOkSetUp As Boolean = True Dim bOkMatThick As Boolean = True Dim sTUUID As String = String.Empty If Not String.IsNullOrWhiteSpace(CurrentMachine.sCurrSawing) Then EgtMdbSetCurrMachining(CurrentMachine.sCurrSawing) EgtMdbGetCurrMachiningParam(MCH_MP.TUUID, sTUUID) bOkSetUp = bOkSetUp And SetUpUtility.IsToolInSetUp(sTUUID) bOkMatThick = bOkMatThick And CurrMachWindowVM.VerifyMatThickCompatibility() Else bOkCurrSawing = False End If ' Fresa If Not String.IsNullOrWhiteSpace(CurrentMachine.sCurrMilling) Then EgtMdbSetCurrMachining(CurrentMachine.sCurrMilling) sTUUID = String.Empty EgtMdbGetCurrMachiningParam(MCH_MP.TUUID, sTUUID) bOkSetUp = bOkSetUp And SetUpUtility.IsToolInSetUp(sTUUID) bOkMatThick = bOkMatThick And CurrMachWindowVM.VerifyMatThickCompatibility() End If ' Foretto If Not String.IsNullOrWhiteSpace(CurrentMachine.sCurrDrilling) Then EgtMdbSetCurrMachining(CurrentMachine.sCurrDrilling) sTUUID = String.Empty EgtMdbGetCurrMachiningParam(MCH_MP.TUUID, sTUUID) bOkSetUp = bOkSetUp And SetUpUtility.IsToolInSetUp(sTUUID) bOkMatThick = bOkMatThick And CurrMachWindowVM.VerifyMatThickCompatibility() End If If Not bOkSetUp Then OmagOFFICEMap.refMachinePanelVM.SetUp_Background = Brushes.Red Else OmagOFFICEMap.refMachinePanelVM.SetUp_Background = New BrushConverter().ConvertFrom("#FFDDDDDD") End If If Not bOkMatThick Or Not bOkCurrSawing Then OmagOFFICEMap.refOptionPanelVM.RawPart_Background = Brushes.Red OmagOFFICEMap.refRawPartTabVM.CurrMach_Background = Brushes.Red Else OmagOFFICEMap.refOptionPanelVM.RawPart_Background = OmagOFFICEDictionary.TabControl_Header_Background OmagOFFICEMap.refRawPartTabVM.CurrMach_Background = New BrushConverter().ConvertFrom("#FFDDDDDD") End If ' Se non esiste il grezzo vado subito alla sua definizione If EstCalc.GetRawId() = GDB_ID.NULL Then OmagOFFICEMap.refOptionPanelVM.SelItem = OptionPanelVM.Tabs.RAWPART End If Return True End Function Public Overrides Function OnPreRemoveCurrMachGroup() As Boolean EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx()) ' Parcheggio tutti i pezzi presenti nella lastra Dim nPartId As Integer = EgtGetFirstPartInRawPart(GetRawId()) While nPartId <> GDB_ID.NULL ' Recupero identificativo del successivo Dim nNextPartId As Integer = EgtGetNextPartInRawPart(nPartId) ' Metto in parcheggio EstCalc.StoreOnePart(nPartId) ' Eventuale notifica al VeinMatching VeinMatching.OnRemovePartFromRaw(nPartId) ' Passo al successivo nPartId = nNextPartId End While ' Elimino eventuale fotografia e contorno associati Dim nPhoto As Integer = EstPhoto.GetPhoto() EgtErase(nPhoto) Dim nContour As Integer = EstPhoto.GetContour() EgtErase(nContour) ' Elimino eventuale fotografia del VeinMatching associata VeinMatching.RemoveUnusedPhotos() Return True End Function #End Region ' METHODS End Class Public Class MyMachGroup Inherits MachGroup Private m_nOpersGroupId As Integer = 0 Public ReadOnly Property nOpersGroupId As Integer Get Return m_nOpersGroupId End Get End Property #Region "ToolTip" Public Overrides ReadOnly Property MachGroupToolTip As String Get Dim sSlabName As String = String.Empty If Not EgtGetInfo(Id, INFO_SLABNAME, sSlabName) Then sSlabName = "---" Dim sMaterial As String = String.Empty If Not EgtGetInfo(Id, INFO_PROJMAT, sMaterial) Then sMaterial = "---" Dim dSlabHeight As Double = 0 If Not EgtGetInfo(Id, INFO_SLABHEIGHT, dSlabHeight) Then dSlabHeight = 0 Dim sCurrSawing As String = String.Empty If Not EgtGetInfo(m_nOpersGroupId, INFO_CURRSAWING, sCurrSawing) Then sCurrSawing = "---" Return "Name: " & sSlabName & Environment.NewLine & "Material: " & sMaterial & Environment.NewLine & "Thickness: " & LenToString(dSlabHeight, 3) & Environment.NewLine & "Sawing: " & sCurrSawing & Environment.NewLine & "Machine: " & Machine End Get End Property #End Region ' ToolTip Sub New(nId As Integer, sName As String, sMachine As String, nOpersGroupId As Integer) MyBase.New(nId, sName, sMachine) m_nOpersGroupId = nOpersGroupId End Sub End Class