Imports System.Collections.ObjectModel Imports System.IO Imports EgtUILib Imports EgtWPFLib5 Public Class MyMachGroupPanelM Inherits MachGroupPanelM #Region "FIELDS & PROPERTIES" #End Region ' FIELDS & PROPERTIES #Region "CONSTRUCTOR" Public Shared Function CreateMyMachGroupPanel(MachineList As List(Of Machine)) As MachGroupPanelM Dim NewMyMachGroupPanelM As New MyMachGroupPanelM NewMyMachGroupPanelM.m_IsMultiMachGroup = False ' Assegno nome base NewMyMachGroupPanelM.m_BaseName = "" ' Recupero lista macchine NewMyMachGroupPanelM.m_MachineList = MachineList ' Assegno macchina di default NewMyMachGroupPanelM.m_DefaultMachine = "" ' aggiorno copie UpdateDuplo() ' recupero i MachGroup NewMyMachGroupPanelM.m_MachGroupMList = LoadMyMachGroups(MachineList) Return NewMyMachGroupPanelM End Function #End Region ' CONSTRUCTOR #Region "METHODS" Public Shared Function LoadMyMachGroups(MachineList As List(Of Machine)) As List(Of MachGroupM) Dim TempList As New List(Of MachGroupM) ' Carico i gruppi di lavorazione nella lista Dim nId = EgtGetFirstMachGroup() While nId <> GDB_ID.NULL EgtSetCurrMachGroup(nId) Dim sName As String = String.Empty Dim sMachine As String = String.Empty EgtGetMachGroupName(nId, sName) EgtGetMachGroupMachineName(nId, sMachine) ' cerco la macchina tra quelle presenti Dim UsedMachine As MyMachine = Nothing Dim bOk As Boolean = Machine.SearchMachine(sMachine, MachineList, UsedMachine) If Not bOk OrElse UsedMachine.nType = MachineType.NULL Then EgtOutLog("Machine incompatible with beam & wall machining!!") Else Dim nBTLInfoLayerId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, BTLINFO) Dim nPROJTYPE As Integer = BWType.NULL EgtGetInfo(nBTLInfoLayerId, BTL_GEN_PROJTYPE, nPROJTYPE) If nPROJTYPE = BWType.BEAM Or nPROJTYPE = BWType.WALL Then TempList.Add(MyMachGroupM.CreateMyMachGroup(nPROJTYPE, nId, sName, sMachine)) Else EgtOutLog("Machine of beam & wall type, but project type not found!!") End If End If nId = EgtGetNextMachGroup(nId) End While EgtResetCurrMachGroup() Return TempList End Function ' funzione che restituisce il gruppo di lavorazione dato l'Id geometrico Public Shared Function LoadMyMachGroupFromId(nId As Integer, MachineList As List(Of Machine)) As MachGroupM If nId <= 0 Then Return Nothing If Not EgtSetCurrMachGroup(nId) Then Return Nothing Dim sName As String = String.Empty Dim sMachine As String = String.Empty EgtGetMachGroupName(nId, sName) EgtGetMachGroupMachineName(nId, sMachine) ' cerco la macchina tra quelle presenti Dim UsedMachine As MyMachine = Nothing Dim bOk As Boolean = Machine.SearchMachine(sMachine, MachineList, UsedMachine) If Not bOk OrElse UsedMachine.nType = MachineType.NULL Then EgtOutLog("Machine incompatible with beam & wall machining!!") Else Dim nBTLInfoLayerId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, BTLINFO) Dim nPROJTYPE As Integer = BWType.NULL EgtGetInfo(nBTLInfoLayerId, BTL_GEN_PROJTYPE, nPROJTYPE) If nPROJTYPE = BWType.BEAM Or nPROJTYPE = BWType.WALL Then Return MyMachGroupM.CreateMyMachGroup(nPROJTYPE, nId, sName, sMachine) Else EgtOutLog("Machine of beam & wall type, but project type not found!!") End If End If Return Nothing End Function ' funzione che restituisce solo i gruppi di lavorazione creati nel nesting Public Shared Function UpdateFromNestingMyMachGroups(MachineList As List(Of Machine)) As List(Of MachGroupM) Dim TempList As New List(Of MachGroupM) ' Carico i gruppi di lavorazione nella lista Dim nId = EgtGetFirstMachGroup() While nId <> GDB_ID.NULL Dim UpdateUI As Integer = 0 If EgtGetInfo(nId, "UPDATEUI", UpdateUI) AndAlso UpdateUI = 1 Then LoadMyMachGroupFromId(nId, MachineList) ' rimuovo info EgtRemoveInfo(nId, "UPDATEUI") End If nId = EgtGetNextMachGroup(nId) End While EgtResetCurrMachGroup() Return TempList End Function Public Function NewMyMachGroup(sMachName As String, nMachineType As MachineType) As MachGroupM ' Sistemazioni preliminari OnPreNewMachGroup() ' Se non ci sono macchine disponibili esco con errore If m_MachineList.Count <= 0 Then Return Nothing ' Creo il nuovo gruppo di lavorazione con i dati ottenuti a seconda del caso in cui mi trovo Dim MachGroupM As MachGroupM If nMachineType = MachineType.NULL Then EgtOutLog("Machine incompatible with beam & wall machining!!") Return Nothing Else MachGroupM = MyMachGroupM.CreateMyMachGroup(nMachineType, NewMachGroupID(), sMachName) End If If IsNothing(MachGroupM) Then Return Nothing AddMachGroup(MachGroupM) ' Sistemazioni finali m_DefaultMachine = sMachName OnPostNewMachGroup() Return MachGroupM End Function Public Overrides Function OnPreNewMachGroup() As Boolean 'EgtSetCurrentContext(Map.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) '' leggo nome attrezzaggio di default 'Dim sDefaultSetUpName As String = String.Empty 'Dim sMachineIniPath As String = Map.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, EgtMsg(MSG_MESSAGEBOX + 1), MessageBoxButton.OK, MessageBoxImage.Exclamation) ' End If 'End If Return True End Function Public Overrides Function OnPreRemoveCurrMachGroup() As Boolean 'EgtSetCurrentContext(Map.refSceneHostVM.MainScene.GetCtx()) Return True End Function Public Function NewMachGroupID() As Integer Dim nTemp As Integer = 0 If Not IsNothing(MachGroupMList) AndAlso MachGroupMList.Count > 0 Then Return MachGroupMList.Select(Of Integer)(Function(x) If(Integer.TryParse(x.Name, nTemp), nTemp, 0)).Max() + 1 Return 1 End Function ' funzione che fa l'update di tutte le copie dei pezzi modificati Public Shared Sub UpdateDuplo() Dim nPartId As Integer = EgtGetFirstPart() While nPartId <> GDB_ID.NULL Dim bIsModified As Boolean = False If EgtDuploGetModified(nPartId, bIsModified) AndAlso bIsModified Then EgtDuploUpdate(nPartId) End If nPartId = EgtGetNextPart(nPartId) End While End Sub ' funzione che cancella tutti i pezzi segnati da eliminare Public Shared Sub DeleteDuplo() ' reset necessario per poter accedere direttamente al grezzo dalle info pezzo e al MachGroup tramite la gerarchia Db geometrico EgtResetCurrMachGroup() Dim nPartId As Integer = EgtGetFirstPart() While nPartId <> GDB_ID.NULL Dim bIsToDelete As Boolean = False If DuploGetToDelete(nPartId, bIsToDelete) AndAlso bIsToDelete Then ' verifico se ci sono copie Dim nDuploCount As Integer = 0 EgtDuploCount(nPartId, nDuploCount) Dim DuploList As New List(Of Integer) If nDuploCount > 0 AndAlso EgtDuploList(nPartId, DuploList) Then ' cancello tutti i pezzi copia nelle barre For Each nDuploId In DuploList ' recupero grezzo cui appartiene Dim nRawPartId As Integer EgtGetInfo(nDuploId, "!LST", nRawPartId) ' recupero gruppo di lavorazione Dim nMachGroupId As Integer = EgtGetParent(EgtGetParent(EgtGetParent(nRawPartId))) ' lo setto come corrente EgtSetCurrMachGroup(nMachGroupId) ' elimino pezzo copia EgtRemovePartFromRawPart(nDuploId) EgtErase(nDuploId) '' recupero gruppo di lavorazione e trave dell'interfaccia 'Dim BeamMachGroup As BeamMachGroupM = MachGroupMList.FirstOrDefault(Function(x) x.Id = nMachGroupId) 'Dim Beam As BeamM = BeamMachGroup.PartMList.FirstOrDefault(Function(x) x.nPartId = nDuploId) 'EgtSetCurrMachGroup(BeamMachGroup.Id) '''Beam.DeletePart() Next End If DuploResetToDelete(nPartId) End If nPartId = EgtGetNextPart(nPartId) End While EgtResetCurrMachGroup() End Sub Friend Shared Function DuploGetToDelete(nSouId As Integer, ByRef bToDelete As Boolean) As Boolean If IsNothing(nSouId) Then Return False Return EgtGetInfo(nSouId, DUPLO_TODELETE, bToDelete) End Function Public Shared Function DuploSetToDelete(nSouId As Integer) As Boolean If IsNothing(nSouId) Then Return False Return EgtSetInfo(nSouId, DUPLO_TODELETE, True) End Function Private Shared Function DuploResetToDelete(nSouId As Integer) As Boolean If IsNothing(nSouId) Then Return False Return EgtSetInfo(nSouId, DUPLO_TODELETE, "") End Function #End Region ' METHODS End Class