Imports System.Collections.ObjectModel Imports System.ComponentModel Imports EgtUILib Public Class SplitPageUC ' Riferimento alla MainWindow Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow) ' Tipo movimento dei grezzi (manuale o con testa ventosa) Private m_bByHand As Boolean = True ' Abilitazione movimento finale pezzi su tavola ausiliaria Private m_bEnableOnAuxTab As Boolean = False ' Stato Private m_nCurrPhase As Integer = 0 Private m_MachiningList As New List(Of SplitMach) Private m_ItemList As New ObservableCollection(Of NameIdLsBxItem) 'Private m_CurrInd As Integer = -1 'Private m_CurrItems As New List(Of NameIdLsBxItem) Private m_CurrFirstInd As Integer = -1 Private m_CurrLastInd As Integer = -1 Friend m_bShow As Boolean = False Private m_bModified As Boolean = False Private m_nNbrGrpId As Integer = GDB_ID.NULL Private m_bToNext As Boolean = False Friend m_bOnAuxTab As Boolean = False Private Sub SplitPageUC_Initialized(sender As Object, e As EventArgs) PrevBtn.IsEnabled = False ' Collego lista di oggetti a ListBox MachiningLsBx.ItemsSource = m_ItemList ' Assegno testi OnOffBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 1) ' On/Off AllOnBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 2) ' Tutti On AllOffBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 3) ' Tutti Off CutBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 4) ' Allunga/Accorcia CutStartBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 5) ' Inizio Allunga/Accorcia CutEndBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 6) ' Fine Allunga/Accorcia OutCenStartBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 7) ' Inizio Centro/Fuori OutCenEndBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 12) ' Fine Centro/Fuori ModifStartBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 33) ' Inizio Modif. ModifEndBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 34) ' Fine Modif. PauseBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 31) ' Pausa On/Off AllOutStartBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 8) ' Inizi Tutti Fuori AllCenStartBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 9) ' Inizi Tutti Centro AllOutEndBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 13) ' Fine Tutti Fuori AllCenEndBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 14) ' Fine Tutti Centro AllExtendBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 15) ' Allunga Tutti AllReduceBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 16) ' Accorc. Tutti ModifyBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 17) ' Modifica AutoBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 18) ' Auto RestartBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 19) ' Restart End Sub Private Sub SplitPageUC_Loaded(sender As Object, e As EventArgs) Handles Me.Loaded ' Leggo tipo movimento grezzi m_bByHand = (EgtGetHeadId(VACUUM_HEAD) = GDB_ID.NULL Or Not m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.AUTO_MANIP) Or (GetPrivateProfileInt(S_RAWMOVE, K_PERPENDICULAR, 0, m_MainWindow.GetIniFile()) <> 0)) ' Se movimento con ventosa, verifico se lama troppo grande If Not m_bByHand And Not m_MainWindow.m_CurrentMachine.IsVacuumMovePossible() Then m_bByHand = True m_MainWindow.m_CurrentProjectPageUC.SetWarningMessage(EgtMsg(MSG_SPLITPAGEUC + 11)) ' Lama troppo grande per utilizzo ventosa End If ' Verifico se abilitato spostamento finale pezzi e se macchina lo consente m_bEnableOnAuxTab = Not m_bByHand AndAlso m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.MOVE_PARTS) AndAlso EgtGetTableId(AUX_TAB) <> GDB_ID.NULL ' Nascondo eventuali pezzi in parcheggio HideParkedParts() ' Nascondo eventuale contorno da foto m_MainWindow.m_CurrentProjectPageUC.ShowContour(False) ' Deseleziono pezzi EgtDeselectAll() EgtZoom(ZM.ALL) ' Se non sono in sola visualizzazione, faccio ordine automatico delle lavorazioni If Not m_bShow Then If m_MainWindow.m_CurrentMachine.WaterJettingActive Then ResetAllMachinings() If SortAllMachinings() Then m_MainWindow.m_CurrentProjectPageUC.SetOrderMachiningFlag() If m_MainWindow.m_CurrentMachine.WaterJettingActive Then Dim bModif As Boolean = TestAllMachiningsForStrict() If bModif Then m_MainWindow.m_CurrentProjectPageUC.SetWarningMessage(EgtMsg(90321)) 'Ridotte alcune lavorazioni per evitare interferenze End If End If ' Disabilito impostazione modificato EgtDisableModified() ' Creo gruppo per numeri identificativi di lavorazione (colore default grigio) m_nNbrGrpId = EgtCreateGroup(GDB_ID.ROOT) EgtSetColor(m_nNbrGrpId, COL_MCH_DIS_NUMBER) EgtSetStatus(m_nNbrGrpId, GDB_ST.SEL) EgtSetLevel(m_nNbrGrpId, GDB_LV.TEMP) ' Recupero l'indice della fase corrente m_nCurrPhase = EgtGetCurrPhase() ' Visualizzo solo anteprime di lavorazioni della fase ShowOnePhaseMachiningPreview(m_nCurrPhase) ' Preparo la lista delle lavorazioni CalculateSplitMachList(m_nCurrPhase, m_MachiningList) ' Aggiorno visualizzazione delle lavorazioni For nI As Integer = 0 To m_MachiningList.Count() - 1 ' sistemo colore ColorMachining(m_MachiningList(nI)) ' assegno numerazione NumberMachining(nI) Next ' Preparo la lista degli Item ShowMachiningList() ' Aggiorno visualizzazione EgtDraw() ' Abilito impostazione modificato EgtEnableModified() ' Nessun item corrente m_CurrFirstInd = -1 m_CurrLastInd = -1 ' Reset flag di modifica m_bModified = False ' Reset flag tipo uscita m_bToNext = False ' Abilitazione bottoni EnableButtons() ' Se sola visualizzazione, segnalazione di eventuale fase di restart If m_bShow Then Dim nPhaseRestart As Integer = m_MainWindow.m_CurrentProjectPageUC.GetProjectNcRestart() If nPhaseRestart = m_nCurrPhase Then m_MainWindow.m_CurrentProjectPageUC.SetInfoMessage(EgtMsg(MSG_SPLITPAGEUC + 19) & " (" & m_nCurrPhase.ToString() & ")") Else m_MainWindow.m_CurrentProjectPageUC.ClearMessage() End If End If End Sub Private Sub ShowMachiningList() m_ItemList.Clear() For i As Integer = 1 To m_MachiningList.Count() Dim Mach As SplitMach = m_MachiningList(i - 1) If Mach.m_nType = MCH_OY.SAWING Then ' Taglio Dim sText As String = String.Empty If Math.Abs(Mach.m_dSideAng) < EPS_ANG_SMALL Then sText = EgtMsg(90791) & " " & i.ToString() Else sText = EgtMsg(90791) & " " & i.ToString() & " " & DoubleToString(Mach.m_dSideAng, 1) & "°" End If If Mach.m_bPause Then AddPauseText(sText) m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled)) ElseIf Mach.m_nType = MCH_OY.DRILLING Then ' Foratura Dim sText As String = EgtMsg(90792) & " " & i.ToString() If Mach.m_bPause Then AddPauseText(sText) m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled)) ElseIf Mach.m_nType = MCH_OY.MILLING Then ' Fresatura Dim sText As String = EgtMsg(90793) & " " & i.ToString() If Mach.m_bPause Then AddPauseText(sText) m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled)) ElseIf Mach.m_nType = MCH_OY.WATERJETTING Then ' Waterjet Dim sText As String = EgtMsg(90797) & " " & i.ToString() If Mach.m_bPause Then AddPauseText(sText) m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled)) End If Next End Sub Private Sub AddPauseText(ByRef sName As String) sName &= " " & EgtMsg(MSG_SPLITPAGEUC + 32) ' Pausa End Sub Private Sub RemovePauseText(ByRef sName As String) sName = sName.Replace(EgtMsg(MSG_SPLITPAGEUC + 32), "") sName = sName.TrimEnd() End Sub Private Sub MachiningLsBx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles MachiningLsBx.SelectionChanged If MachiningLsBx.SelectedItems.Count = 0 Then Return ' creo lista ordinata dei selezionati Dim ItemList As New List(Of NameIdLsBxItem) For Each Item In MachiningLsBx.SelectedItems ItemList.Add(Item) Next ItemList.Sort(Function(x, y) Comparer(Of Integer).Default.Compare(m_ItemList.IndexOf(x), m_ItemList.IndexOf(y))) ' verifico che siano contigui Dim bContigus As Boolean = False Dim OrdIndex = 0 OrdIndex = MachiningLsBx.SelectedItems(MachiningLsBx.SelectedItems.Count - 1).Ind Dim LastSel As NameIdLsBxItem = MachiningLsBx.SelectedItems(MachiningLsBx.SelectedItems.Count - 1) If MachiningLsBx.SelectedItems.Count = 1 Then bContigus = True Else For Each Item In ItemList If Item.Ind = LastSel.Ind + 1 Or Item.Ind = LastSel.Ind - 1 Then bContigus = True End If Next End If ' se non contiguo, elimino dai selezionati il primo(che è l'ultimo ad essere stato selezionato) If Not bContigus Then ItemList.Remove(LastSel) MachiningLsBx.SelectedItems.RemoveAt(MachiningLsBx.SelectedItems.Count - 1) End If ' resetto marcatura lavorazioni If m_CurrFirstInd > -1 Then For Index = m_CurrFirstInd To m_CurrLastInd MarkMachining(m_ItemList(Index).Ind, False) Next End If ' resetto indici m_CurrFirstInd = -1 m_CurrLastInd = -1 ' marco lavorazioni selezionate For Each Item In ItemList MarkMachining(Item.Ind, True) Next m_CurrFirstInd = m_ItemList.IndexOf(ItemList(0)) m_CurrLastInd = m_ItemList.IndexOf(ItemList(ItemList.Count - 1)) EgtDraw() End Sub Private Sub MoveUpBtn_Click(sender As Object, e As RoutedEventArgs) Handles MoveUpBtn.Click MoveItem(-1) End Sub Private Sub MoveDownBtn_Click(sender As Object, e As RoutedEventArgs) Handles MoveDownBtn.Click MoveItem(1) End Sub Private Sub MoveItem(direction As Integer) ' Checking selected item If m_CurrFirstInd = -1 OrElse MachiningLsBx.SelectedIndex < 0 Then Return End If ' Se la direzione è giù If direction = 1 And m_CurrLastInd < m_ItemList.Count - 1 Then ' sposto il successivo prima di tutti i selezionati m_ItemList.Move(m_CurrLastInd + 1, m_CurrFirstInd) m_CurrFirstInd += 1 m_CurrLastInd += 1 ElseIf direction = -1 And m_CurrFirstInd > 0 Then ' sposto il precedente dopo tutti i selezionati m_ItemList.Move(m_CurrFirstInd - 1, m_CurrLastInd) m_CurrFirstInd -= 1 m_CurrLastInd -= 1 End If ' Imposto flag di modifica m_bModified = True End Sub Private Sub OnOffBtn_Click(sender As Object, e As RoutedEventArgs) Handles OnOffBtn.Click If m_CurrFirstInd = -1 Then Return For Index = m_CurrFirstInd To m_CurrLastInd Dim nI As Integer = m_ItemList(Index).Ind If m_MachiningList(nI).m_bEnabled Then m_MachiningList(nI).m_bEnabled = False m_ItemList(Index).bIsActive = False Else m_MachiningList(nI).m_bEnabled = True m_ItemList(Index).bIsActive = True End If ColorMachining(m_MachiningList(nI)) ColorNumber(nI) Next EgtDraw() ' Imposto flag di modifica m_bModified = True ' Abilitazione bottone Next EnableButtons() End Sub Private Sub AllOnBtn_Click(sender As Object, e As RoutedEventArgs) Handles AllOnBtn.Click For nI As Integer = 0 To m_MachiningList.Count() - 1 If Not m_MachiningList(nI).m_bEnabled Then m_MachiningList(nI).m_bEnabled = True m_ItemList(nI).bIsActive = True ColorMachining(m_MachiningList(nI)) ColorNumber(nI) End If Next EgtDraw() ' Imposto flag di modifica m_bModified = True ' Abilitazione bottone Next EnableButtons() End Sub Private Sub AllOffBtn_Click(sender As Object, e As RoutedEventArgs) Handles AllOffBtn.Click For nI As Integer = 0 To m_MachiningList.Count() - 1 If m_MachiningList(nI).m_bEnabled Then m_MachiningList(nI).m_bEnabled = False m_ItemList(nI).bIsActive = False ColorMachining(m_MachiningList(nI)) ColorNumber(nI) End If Next EgtDraw() ' Imposto flag di modifica m_bModified = True ' Abilitazione bottone Next EnableButtons() End Sub Private Sub CutBtn_Click(sender As Object, e As RoutedEventArgs) Handles CutBtn.Click If m_CurrFirstInd = -1 Then Return Dim bGenModif As Boolean = False For Index = m_CurrFirstInd To m_CurrLastInd Dim nI As Integer = m_ItemList(Index).Ind ' Provo ad entrambi gli estremi Dim bModif As Boolean = AdjustBothCuts(nI) ' Provo all'inizio If Not bModif Then bModif = AdjustStartCut(nI) ' Provo alla fine If Not bModif Then bModif = AdjustEndCut(nI) ' Se modificato qualcosa If bModif Then bGenModif = True End If Next ' Se modificato qualcosa If bGenModif Then EgtDraw() m_bModified = True End If ' Aggiono abilitazione bottoni EnableButtons() End Sub Private Sub CutEndBtn_Click(sender As Object, e As RoutedEventArgs) Handles CutEndBtn.Click If m_CurrFirstInd = -1 Then Return Dim bGenModif As Boolean = False For Index = m_CurrFirstInd To m_CurrLastInd Dim nI As Integer = m_ItemList(Index).Ind ' Eseguo If AdjustEndCut(nI) Then bGenModif = True End If Next ' Se modificato qualcosa If bGenModif Then EgtDraw() m_bModified = True End If ' Aggiono abilitazione bottoni EnableButtons() End Sub Private Sub CutStartBtn_Click(sender As Object, e As RoutedEventArgs) Handles CutStartBtn.Click If m_CurrFirstInd = -1 Then Return Dim bGenModif As Boolean = False For Index = m_CurrFirstInd To m_CurrLastInd Dim nI As Integer = m_ItemList(Index).Ind ' Eseguo If AdjustStartCut(nI) Then bGenModif = True End If Next ' Se modificato qualcosa If bGenModif Then EgtDraw() m_bModified = True End If ' Aggiono abilitazione bottoni EnableButtons() End Sub Private Function AdjustBothCuts(nI As Integer, Optional bAllForced As Boolean = False, Optional bAccForced As Boolean = False) As Boolean ' Verifico che entrambi gli estremi siano allungabili If Not (m_MachiningList(nI).m_bCanStartAll And m_MachiningList(nI).m_bCanEndAll) Then Return False ' Eseguo allungamento o riporto allo standard EgtSetCurrMachining(m_MachiningList(nI).m_nId) Dim nLiPrev As Integer EgtGetMachiningParam(MCH_MP.LEADINTYPE, nLiPrev) Dim nLoPrev As Integer EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nLoPrev) If (m_MachiningList(nI).m_bStartAll Or m_MachiningList(nI).m_bEndAll) And Not bAllForced Then ' accorcio If nLiPrev = MCH_SAW_LI.EXT_OUT Then EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.OUT) Else EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.CENT) End If If nLoPrev = MCH_SAW_LO.EXT_OUT Then EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.OUT) Else EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.CENT) End If UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) m_MachiningList(nI).m_bStartAll = False m_MachiningList(nI).m_bEndAll = False ElseIf m_MachiningList(nI).m_bEnabled And Not bAccForced Then ' allungo If nLiPrev = MCH_SAW_LI.OUT Then EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_OUT) Else EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_CENT) End If If nLoPrev = MCH_SAW_LO.OUT Then EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_OUT) Else EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_CENT) End If UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) m_MachiningList(nI).m_bStartAll = True m_MachiningList(nI).m_bEndAll = True End If ColorMachining(m_MachiningList(nI)) Return True End Function Private Function AdjustStartCut(nI As Integer, Optional bAllForced As Boolean = False, Optional bAccForced As Boolean = False) As Boolean ' Verifico che l'estremo iniziale sia allungabile If Not m_MachiningList(nI).m_bCanStartAll Then Return False ' Eseguo allungamento o riporto allo standard EgtSetCurrMachining(m_MachiningList(nI).m_nId) Dim nLiPrev As Integer EgtGetMachiningParam(MCH_MP.LEADINTYPE, nLiPrev) If m_MachiningList(nI).m_bStartAll And Not bAllForced Then ' accorcio If nLiPrev = MCH_SAW_LI.EXT_OUT Then EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.OUT) Else EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.CENT) End If UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) m_MachiningList(nI).m_bStartAll = False ElseIf m_MachiningList(nI).m_bEnabled And Not bAccForced Then ' allungo If nLiPrev = MCH_SAW_LI.OUT Then EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_OUT) Else EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_CENT) End If UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) m_MachiningList(nI).m_bStartAll = True End If ColorMachining(m_MachiningList(nI)) Return True End Function Private Function AdjustEndCut(nI As Integer, Optional bAllForced As Boolean = False, Optional bAccForced As Boolean = False) As Boolean ' Verifico che l'estremo finale sia allungabile If Not m_MachiningList(nI).m_bCanEndAll Then Return False ' Eseguo allungamento o riporto allo standard EgtSetCurrMachining(m_MachiningList(nI).m_nId) Dim nLoPrev As Integer EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nLoPrev) If m_MachiningList(nI).m_bEndAll And Not bAllForced Then ' accorcio If nLoPrev = MCH_SAW_LO.EXT_OUT Then EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.OUT) Else EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.CENT) End If m_MachiningList(nI).m_bEndAll = False ElseIf m_MachiningList(nI).m_bEnabled And Not bAccForced Then ' allungo If nLoPrev = MCH_SAW_LO.OUT Then EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_OUT) Else EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_CENT) End If m_MachiningList(nI).m_bEndAll = True End If UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ColorMachining(m_MachiningList(nI)) Return True End Function Private Sub OutCenStartBtn_Click(sender As Object, e As RoutedEventArgs) Handles OutCenStartBtn.Click If m_CurrFirstInd = -1 Then Return Dim bGenModif As Boolean = False For Index = m_CurrFirstInd To m_CurrLastInd Dim nI As Integer = m_ItemList(Index).Ind If m_MachiningList(nI).m_sLay = NAME_OUTLOOP Then EgtSetCurrMachining(m_MachiningList(nI).m_nId) Dim nLiPrev As Integer EgtGetMachiningParam(MCH_MP.LEADINTYPE, nLiPrev) If nLiPrev = MCH_SAW_LI.OUT Then ' accorcio EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.CENT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadIn(nI, MCH_SAW_LI.CENT) ' ri-verifico interferenza EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf) ElseIf nLiPrev = MCH_SAW_LI.EXT_OUT Then ' accorcio EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_CENT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadIn(nI, MCH_SAW_LI.CENT) ElseIf nLiPrev = MCH_SAW_LI.CENT Then ' allungo EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.OUT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadIn(nI, MCH_SAW_LI.OUT) ' ri-verifico interferenza EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf) ElseIf nLiPrev = MCH_SAW_LI.EXT_CENT Then ' allungo EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_OUT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadIn(nI, MCH_SAW_LI.OUT) End If ColorMachining(m_MachiningList(nI)) ColorNumber(nI) bGenModif = True End If Next ' Se modificato qualcosa If bGenModif Then EgtDraw() m_bModified = True End If End Sub Private Sub AllOutStartBtn_Click(sender As Object, e As RoutedEventArgs) Handles AllOutStartBtn.Click For nI As Integer = 0 To m_MachiningList.Count() - 1 EgtSetCurrMachining(m_MachiningList(nI).m_nId) Dim nLiPrev As Integer EgtGetMachiningParam(MCH_MP.LEADINTYPE, nLiPrev) If nLiPrev = MCH_SAW_LI.CENT Then ' allungo EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.OUT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadIn(nI, MCH_SAW_LI.OUT) ' ri-verifico interferenza EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf) ElseIf nLiPrev = MCH_SAW_LI.EXT_CENT Then ' allungo EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_OUT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadIn(nI, MCH_SAW_LI.OUT) End If ColorMachining(m_MachiningList(nI)) ColorNumber(nI) Next EgtDraw() ' Imposto flag di modifica m_bModified = True End Sub Private Sub AllCenStartBtn_Click(sender As Object, e As RoutedEventArgs) Handles AllCenStartBtn.Click For nI As Integer = 0 To m_MachiningList.Count() - 1 EgtSetCurrMachining(m_MachiningList(nI).m_nId) Dim nLiPrev As Integer EgtGetMachiningParam(MCH_MP.LEADINTYPE, nLiPrev) If nLiPrev = MCH_SAW_LI.OUT Then ' accorcio EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.CENT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadIn(nI, MCH_SAW_LI.CENT) ' ri-verifico interferenza EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf) ElseIf nLiPrev = MCH_SAW_LI.EXT_OUT Then ' accorcio EgtSetMachiningParam(MCH_MP.LEADINTYPE, MCH_SAW_LI.EXT_CENT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadIn(nI, MCH_SAW_LI.CENT) End If ColorMachining(m_MachiningList(nI)) ColorNumber(nI) Next EgtDraw() ' Imposto flag di modifica m_bModified = True End Sub Private Sub OutCenEndBtn_Click(sender As Object, e As RoutedEventArgs) Handles OutCenEndBtn.Click If m_CurrFirstInd = -1 Then Return Dim bGenModif As Boolean = False For Index = m_CurrFirstInd To m_CurrLastInd Dim nI As Integer = m_ItemList(Index).Ind If m_MachiningList(nI).m_sLay = NAME_OUTLOOP Then EgtSetCurrMachining(m_MachiningList(nI).m_nId) Dim nLoPrev As Integer EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nLoPrev) If nLoPrev = MCH_SAW_LO.OUT Then ' accorcio EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.CENT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadOut(nI, MCH_SAW_LO.CENT) ' ri-verifico interferenza EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf) ElseIf nLoPrev = MCH_SAW_LO.EXT_OUT Then ' accorcio EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_CENT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadOut(nI, MCH_SAW_LO.CENT) ElseIf nLoPrev = MCH_SAW_LO.CENT Then ' allungo EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.OUT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadOut(nI, MCH_SAW_LO.OUT) ' ri-verifico interferenza EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf) ElseIf nLoPrev = MCH_SAW_LO.EXT_CENT Then ' allungo EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_OUT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadOut(nI, MCH_SAW_LO.OUT) End If ColorMachining(m_MachiningList(nI)) ColorNumber(nI) bGenModif = True End If Next ' Se modificato qualcosa If bGenModif Then EgtDraw() m_bModified = True End If End Sub Private Sub AllOutEndBtn_Click(sender As Object, e As RoutedEventArgs) Handles AllOutEndBtn.Click For nI As Integer = 0 To m_MachiningList.Count() - 1 EgtSetCurrMachining(m_MachiningList(nI).m_nId) Dim nLoPrev As Integer EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nLoPrev) If nLoPrev = MCH_SAW_LO.CENT Then ' allungo EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.OUT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadOut(nI, MCH_SAW_LO.OUT) ' ri-verifico interferenza EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf) ElseIf nLoPrev = MCH_SAW_LO.EXT_CENT Then ' allungo EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_OUT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadOut(nI, MCH_SAW_LO.OUT) End If ColorMachining(m_MachiningList(nI)) ColorNumber(nI) Next EgtDraw() ' Imposto flag di modifica m_bModified = True End Sub Private Sub AllCenEndBtn_Click(sender As Object, e As RoutedEventArgs) Handles AllCenEndBtn.Click For nI As Integer = 0 To m_MachiningList.Count() - 1 EgtSetCurrMachining(m_MachiningList(nI).m_nId) Dim nLoPrev As Integer EgtGetMachiningParam(MCH_MP.LEADOUTTYPE, nLoPrev) If nLoPrev = MCH_SAW_LO.OUT Then ' accorcio EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.CENT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadOut(nI, MCH_SAW_LO.CENT) ' ri-verifico interferenza EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf) ElseIf nLoPrev = MCH_SAW_LO.EXT_OUT Then ' accorcio EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, MCH_SAW_LO.EXT_CENT) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ModifyOtherLeadOut(nI, MCH_SAW_LO.CENT) End If ColorMachining(m_MachiningList(nI)) ColorNumber(nI) Next EgtDraw() ' Imposto flag di modifica m_bModified = True End Sub Private Sub AllExtendBtn_Click(sender As Object, e As RoutedEventArgs) Handles AllExtendBtn.Click Dim bModif As Boolean = False For nI As Integer = 0 To m_MachiningList.Count() - 1 ' Provo ad entrambi gli estremi Dim bOneModif As Boolean = AdjustBothCuts(nI, True, False) ' Provo all'inizio If Not bOneModif Then bOneModif = AdjustStartCut(nI, True, False) ' Provo alla fine If Not bOneModif Then bOneModif = AdjustEndCut(nI, True, False) ' Aggiorno flag globale If bOneModif Then bModif = True Next ' Se modificato qualcosa If bModif Then EgtDraw() m_bModified = True End If ' Abilitazione bottone Next EnableButtons() End Sub Private Sub AllReduceBtn_Click(sender As Object, e As RoutedEventArgs) Handles AllReduceBtn.Click Dim bModif As Boolean = False For nI As Integer = 0 To m_MachiningList.Count() - 1 ' Provo ad entrambi gli estremi Dim bOneModif As Boolean = AdjustBothCuts(nI, False, True) ' Provo all'inizio If Not bOneModif Then bOneModif = AdjustStartCut(nI, False, True) ' Provo alla fine If Not bOneModif Then bOneModif = AdjustEndCut(nI, False, True) ' Aggiorno flag globale If bOneModif Then bModif = True Next ' Se modificato qualcosa If bModif Then EgtDraw() m_bModified = True End If ' Abilitazione bottone Next EnableButtons() End Sub Private Sub ModifStartBtn_Click(sender As Object, e As RoutedEventArgs) Handles ModifStartBtn.Click ' Recupero la lavorazione corrente If m_CurrFirstInd = -1 Then Return Dim bGenModif As Boolean = False For Index = m_CurrFirstInd To m_CurrLastInd Dim nI As Integer = m_ItemList(Index).Ind Dim nOperId As Integer = m_MachiningList(nI).m_nId Dim dOrigUsal As Double = 0 EgtGetInfo(nOperId, INFO_MCH_USER_SAL, dOrigUsal) ' Dialogo richiesta valore Dim ValWnd As New EditValueWD(m_MainWindow, EgtMsg(MSG_SPLITPAGEUC + 35)) ' Allungamento ValWnd.SetVal(dOrigUsal) If ValWnd.ShowDialog() Then ' Modifica della lavorazione Dim dUsal As Double = ValWnd.GetVal() EgtSetCurrMachining(m_MachiningList(nI).m_nId) Dim dAddLen As Double = 0 EgtGetMachiningParam(MCH_MP.STARTADDLEN, dAddLen) If dAddLen - dOrigUsal < -10 * EPS_SMALL Then Return End If EgtSetMachiningParam(MCH_MP.STARTADDLEN, dAddLen + dUsal - dOrigUsal) EgtSetInfo(nOperId, INFO_MCH_USER_SAL, dUsal) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ' verifico interferenza EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf) ColorMachining(m_MachiningList(nI)) ColorNumber(nI) bGenModif = True End If Next ' Se modificato qualcosa If bGenModif Then EgtDraw() m_bModified = True End If End Sub Private Sub ModifEndBtn_Click(sender As Object, e As RoutedEventArgs) Handles ModifEndBtn.Click ' Recupero la lavorazione corrente If m_CurrFirstInd = -1 Then Return Dim bGenModif As Boolean = False For Index = m_CurrFirstInd To m_CurrLastInd Dim nI As Integer = m_ItemList(Index).Ind Dim nOperId As Integer = m_MachiningList(nI).m_nId Dim dOrigUeal As Double = 0 EgtGetInfo(nOperId, INFO_MCH_USER_EAL, dOrigUeal) ' Dialogo richiesta valore Dim ValWnd As New EditValueWD(m_MainWindow, EgtMsg(MSG_SPLITPAGEUC + 35)) ' Allungamento ValWnd.SetVal(dOrigUeal) If ValWnd.ShowDialog() Then ' Modifica della lavorazione Dim dUeal As Double = ValWnd.GetVal() EgtSetCurrMachining(m_MachiningList(nI).m_nId) Dim dAddLen As Double = 0 EgtGetMachiningParam(MCH_MP.ENDADDLEN, dAddLen) If dAddLen - dOrigUeal < -10 * EPS_SMALL Then Return End If EgtSetMachiningParam(MCH_MP.ENDADDLEN, dAddLen + dUeal - dOrigUeal) EgtSetInfo(nOperId, INFO_MCH_USER_EAL, dUeal) UpdateMachiningPreview(m_MachiningList(nI).m_nId, True) ' verifico interferenza EgtVerifyMachining(m_MachiningList(nI).m_nId, m_MachiningList(nI).m_nInterf) ColorMachining(m_MachiningList(nI)) ColorNumber(nI) bGenModif = True End If Next ' Se modificato qualcosa If bGenModif Then EgtDraw() m_bModified = True End If End Sub Private Sub PauseBtn_Click(sender As Object, e As RoutedEventArgs) Handles PauseBtn.Click If m_CurrFirstInd = -1 Then Return Dim bGenModif As Boolean = False For Index = m_CurrFirstInd To m_CurrLastInd Dim nI As Integer = m_ItemList(Index).Ind Dim nOperId As Integer = m_MachiningList(nI).m_nId If GetPause(nOperId) Then ResetPause(nOperId) m_MachiningList(nI).m_bPause = False RemovePauseText(m_ItemList(Index).Name) Else SetPause(nOperId) m_MachiningList(nI).m_bPause = True AddPauseText(m_ItemList(Index).Name) End If Next End Sub Private Sub PrevBtn_Click(sender As Object, e As RoutedEventArgs) Handles PrevBtn.Click ' Dichiaro solo visualizzazione m_bShow = True ' Esco ExitSplit(False) ' Torno alla fase precedente EgtSetCurrPhase(EgtGetCurrPhase() - 1) ' Reimposto la precedente SplitPageUC_Loaded(Nothing, Nothing) End Sub Private Sub NextBtn_Click(sender As Object, e As RoutedEventArgs) Handles NextBtn.Click m_bToNext = True m_MainWindow.m_CadCutPageUC.CadCutPageGrid.Children.Remove(m_MainWindow.m_CadCutPageUC.m_SplitPage) m_MainWindow.m_CadCutPageUC.CadCutPageGrid.Children.Add(m_MainWindow.m_CadCutPageUC.m_MoveRawPartPage) m_MainWindow.m_CadCutPageUC.m_CadCutMode = CadCutPageUC.CadCutModes.MoveRawPart End Sub Private Sub AutoBtn_Click(sender As Object, e As RoutedEventArgs) Handles AutoBtn.Click ' Con movimento manuale, non disponibile movimento automatico If m_bByHand Then Return ' Elimino evidenziazione e numerazione RemoveMarkAndNumbers() ' Calcolo automatico Dim bFinished As Boolean = False Dim bOk As Boolean = CalculateOnePhaseSplitAuto(bFinished) If Not bOk Then m_MainWindow.m_CurrentProjectPageUC.SetWarningMessage(EgtMsg(90350)) 'Calcolo automatico non riuscito End If m_bModified = True ' Ricarico SplitPageUC_Loaded(Nothing, Nothing) End Sub Private Sub RestartBtn_Click(sender As Object, e As RoutedEventArgs) Handles RestartBtn.Click ' Se fase corrente è la prima, imposto partenza normale If m_nCurrPhase = 1 Then m_MainWindow.m_CurrentProjectPageUC.ResetProjectNcRestart() ' Altrimenti, imposto la ripartenza dalla fase corrente Else m_MainWindow.m_CurrentProjectPageUC.SetProjectNcRestart(m_nCurrPhase) m_MainWindow.m_CurrentProjectPageUC.SetInfoMessage(EgtMsg(MSG_SPLITPAGEUC + 19) & " (" & m_nCurrPhase.ToString() & ")") End If End Sub Private Sub ModifyBtn_Click(sender As Object, e As RoutedEventArgs) Handles ModifyBtn.Click ' Dichiaro non più solo visualizzazione m_bShow = False ' Elimino le fasi successive alla corrente While EgtGetPhaseCount() > m_nCurrPhase RemoveLastPhase() End While ' Aggiorno le lavorazioni If m_MainWindow.m_CurrentMachine.WaterJettingActive Then ResetAllMachinings() If SortAllMachinings() Then m_MainWindow.m_CurrentProjectPageUC.SetOrderMachiningFlag() If m_MainWindow.m_CurrentMachine.WaterJettingActive Then Dim bModif As Boolean = TestAllMachiningsForStrict() If bModif Then m_MainWindow.m_CurrentProjectPageUC.SetWarningMessage(EgtMsg(90321)) 'Ridotte alcune lavorazioni per evitare interferenze End If ' Visualizzo solo anteprime di lavorazioni della fase ShowOnePhaseMachiningPreview(m_nCurrPhase) ' Nascondo gli eventuali percorsi di lavorazione HideAllMachinings() ' Preparo la lista delle lavorazioni e le disabilito CalculateSplitMachList(m_nCurrPhase, m_MachiningList) For nI As Integer = 0 To m_MachiningList.Count() - 1 m_MachiningList(nI).m_bEnabled = False Next ' Aggiorno visualizzazione delle lavorazioni EgtEmptyGroup(m_nNbrGrpId) For nI As Integer = 0 To m_MachiningList.Count() - 1 ' sistemo colore ColorMachining(m_MachiningList(nI)) ' assegno numerazione NumberMachining(nI) Next ' Preparo la lista degli Item ShowMachiningList() ' Aggiorno visualizzazione EgtDraw() ' Aggiono abilitazione bottoni EnableButtons() End Sub Private Sub SplitPageUC_Unloaded(sender As Object, e As EventArgs) Handles Me.Unloaded m_MainWindow.m_CurrentProjectPageUC.ClearMessage() ExitSplit(Not m_bToNext) EgtDraw() End Sub Friend Sub ExitSplit(Optional bTrueExit As Boolean = True) ' Rimuovo evidenziazione e numeri RemoveMarkAndNumbers() ' Ripristino colori lavorazioni EgtDisableModified() For i As Integer = 0 To m_MachiningList.Count() - 1 ColorMachining(m_MachiningList(i), True) Next EgtEnableModified() ' se modificato salvo ordine e stato delle lavorazioni If m_bModified Then ' Al primo posto deve rimanere la disposizione della fase Dim nFirstOperId As Integer = EgtGetPhaseDisposition(m_nCurrPhase) For i = m_ItemList.Count() - 1 To 0 Step -1 Dim nI As Integer = m_ItemList(i).Ind Dim nMchId As Integer = m_MachiningList(nI).m_nId EgtRelocate(nMchId, nFirstOperId, GDB_POS.AFTER) If m_MachiningList(nI).m_bEnabled Then EgtSetOperationMode(m_MachiningList(nI).m_nId, True) EgtRemoveInfo(m_MachiningList(nI).m_nId, INFO_MCH_USER_OFF) Else EgtSetOperationMode(m_MachiningList(nI).m_nId, False) EgtSetInfo(m_MachiningList(nI).m_nId, INFO_MCH_USER_OFF, True) End If Next ' dichiaro ordine salvato m_MainWindow.m_CurrentProjectPageUC.SetOrderMachiningFlag() End If ' Affondamento ridotto Dim dReducedDepth As Double = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_REDUCEDDEPTH, 1, m_MainWindow.GetMachIniFile()) ' Restringo o rialzo lavorazioni abilitate ma con interferenza Dim bModified As Boolean = False For Each Mach As SplitMach In m_MachiningList If Mach.m_bEnabled And Mach.m_nInterf <> FMI_TYPE.NONE Then If AdjustMachining(Mach.m_nId, Mach.m_nInterf, dReducedDepth) Then bModified = True End If End If Next If bTrueExit Then ' ritorno a fase 1 EgtSetCurrPhase(1) ' Ripristino visualizzazione preview lavorazioni ShowAllPhasesMachiningPreview() End If If bModified Then m_MainWindow.m_CurrentProjectPageUC.SetWarningMessage(EgtMsg(90321)) 'Ridotte alcune lavorazioni per evitare interferenze End If End Sub Friend Function GetDisabledCutsCount() As Integer ' Determino il numero di tagli disabilitati Dim nCount As Integer = 0 For nI As Integer = 0 To m_MachiningList.Count() - 1 If Not m_MachiningList(nI).m_bEnabled Then nCount += 1 End If Next Return nCount End Function Friend Function GetSplitCutsCount() As Integer ' Determino il numero di tagli passanti almeno da un lato Dim nCount As Integer = 0 For nI As Integer = 0 To m_MachiningList.Count() - 1 If m_MachiningList(nI).m_bEnabled And (m_MachiningList(nI).m_bStartAll Or m_MachiningList(nI).m_bEndAll) Then nCount += 1 End If Next Return nCount End Function Friend Sub GetSplitCuts(ByRef Cuts() As Integer) ' Determino l'elenco dei tagli passanti almeno da un lato Dim MyCuts As New List(Of Integer) For nI As Integer = 0 To m_MachiningList.Count() - 1 If m_MachiningList(nI).m_bEnabled And (m_MachiningList(nI).m_bStartAll Or m_MachiningList(nI).m_bEndAll) Then MyCuts.Add(m_MachiningList(nI).m_nId) End If Next Cuts = MyCuts.ToArray() End Sub Friend Sub GetEnabledCuts(ByRef Cuts() As Integer) ' Determino l'elenco dei tagli abilitati Dim MyCuts As New List(Of Integer) For nI As Integer = 0 To m_MachiningList.Count() - 1 If m_MachiningList(nI).m_bEnabled And ( m_MachiningList(nI).m_sLay = NAME_OUTLOOP Or m_MachiningList(nI).m_sLay = NAME_INLOOP) Then MyCuts.Add(m_MachiningList(nI).m_nId) End If Next Cuts = MyCuts.ToArray() End Sub Private Sub EnableButtons() ' Per bottone PREV PrevBtn.IsEnabled = (m_nCurrPhase > 1) ' Per bottone NEXT ' Se abilitato manipolatore e non è con waterjet If ( m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.MAN_MANIP) Or m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.AUTO_MANIP)) And Not m_MainWindow.m_CurrentMachine.bWaterJetting Then ' Se in modifica If Not m_bShow Then ' Se allontanamento perpendicolare If m_bByHand Then m_bOnAuxTab = False ' Ci deve essere almeno 1 taglio disabilitato e 1 e 1 solo passante NextBtn.IsEnabled = (GetDisabledCutsCount() > 0 And GetSplitCutsCount() = 1) ' Altrimenti Else ' movimento standard sulla tavola (almeno un taglio disabilitato) Dim bStdTab As Boolean = (GetDisabledCutsCount() > 0) ' movimento su tavola di scarico m_bOnAuxTab = Not bStdTab AndAlso (m_nCurrPhase = EgtGetPhaseCount() And m_bEnableOnAuxTab) ' movimento finale sulla tavola Dim bFinalMoveTab As Boolean = m_MainWindow.m_CurrentMachine.bRawFinalMove ' Deve essere permesso almeno un tipo di movimento NextBtn.IsEnabled = bStdTab Or m_bOnAuxTab Or bFinalMoveTab End If ' altrimenti sto solo visualizzando Else ' movimento su tavola di scarico m_bOnAuxTab = (m_nCurrPhase = EgtGetPhaseCount() - 1 And m_bEnableOnAuxTab And EgtGetOperationType(EgtGetLastOperation()) = MCH_OY.DISP) ' Non deve essere l'ultima fase NextBtn.IsEnabled = (m_nCurrPhase < EgtGetPhaseCount()) End If Else NextBtn.IsEnabled = False End If ' Per bottone MODIFY ModifyBtn.IsEnabled = m_bShow ' Per bottone AUTO AutoBtn.Visibility = If(m_bShow, Windows.Visibility.Hidden, Windows.Visibility.Visible) AutoBtn.IsEnabled = Not m_bShow And ((GetDisabledCutsCount() > 0 Or m_nCurrPhase = 1) And Not m_bByHand) ' Per bottone RESTART RestartBtn.Visibility = If(m_bShow, Windows.Visibility.Visible, Windows.Visibility.Hidden) RestartBtn.IsEnabled = m_bShow And m_MainWindow.m_CurrentMachine.bEnableRestart ' Altri bottoni MoveUpBtn.IsEnabled = Not m_bShow MoveDownBtn.IsEnabled = Not m_bShow OnOffBtn.IsEnabled = Not m_bShow AllOnBtn.IsEnabled = Not m_bShow AllOffBtn.IsEnabled = Not m_bShow CutBtn.IsEnabled = Not m_bShow CutStartBtn.IsEnabled = Not m_bShow CutEndBtn.IsEnabled = Not m_bShow OutCenStartBtn.IsEnabled = Not m_bShow AllOutStartBtn.IsEnabled = Not m_bShow AllCenStartBtn.IsEnabled = Not m_bShow OutCenEndBtn.IsEnabled = Not m_bShow AllOutEndBtn.IsEnabled = Not m_bShow AllCenEndBtn.IsEnabled = Not m_bShow AllExtendBtn.IsEnabled = Not m_bShow AllReduceBtn.IsEnabled = Not m_bShow ModifStartBtn.IsEnabled = Not m_bShow ModifEndBtn.IsEnabled = Not m_bShow PauseBtn.IsEnabled = Not m_bShow And m_MainWindow.m_CurrentMachine.bEnablePause End Sub Private Function ModifyOtherLeadIn(nI As Integer, nLiOthType As Integer) As Boolean ' Modifico l'attacco delle lavorazioni inglobate For Each nMchId As Integer In m_MachiningList(nI).m_vOthId EgtSetCurrMachining(nMchId) EgtSetMachiningParam(MCH_MP.LEADINTYPE, nLiOthType) Next Return True End Function Private Function ModifyOtherLeadOut(nI As Integer, nLoOthType As Integer) As Boolean ' Modifico l'uscita delle lavorazioni inglobate For Each nMchId As Integer In m_MachiningList(nI).m_vOthId EgtSetCurrMachining(nMchId) EgtSetMachiningParam(MCH_MP.LEADOUTTYPE, nLoOthType) Next Return True End Function Private Sub NumberMachining(nI As Integer) EgtDisableModified() ' Determino se seconda lavorazione Dim sName As String = String.Empty EgtGetName(m_MachiningList(nI).m_nId, sName) Dim b2ndLav As Boolean = sName.Contains("_") Or sName.Contains("Drip") ' Ingombro complessivo della lavorazione Dim ptMin, ptMax As Point3d If Not BoxFromMachining(nI, ptMin, ptMax) Then Return ' Metto il numero nel centro Dim dRadXY = Point3d.DistXY(ptMin, ptMax) Dim dHtxt As Double = 75 Dim dRat As Double = 1 If dRadXY < 200 Then dHtxt = 50 dRat = 0.75 ElseIf dRadXY < 25 Then dHtxt = 25 dRat = 0.5 End If Dim vtXY As Vector3d = ptMax - ptMin vtXY.Normalize() Dim ptCen As Point3d = Point3d.Media(ptMin, ptMax) + vtXY * If(Not b2ndLav, -0.8, 0.8) * dHtxt ptCen.z = ptMax.z + 1 Dim nNbrId As Integer = EgtCreateTextAdv(m_nNbrGrpId, ptCen, 0, (nI + 1).ToString(), "", 300, False, dHtxt, dRat, 0, INS_POS.MC) m_MachiningList(nI).m_nNbrId = nNbrId ColorNumber(nI) EgtSetInfo(nNbrId, "MId", m_MachiningList(nI).m_nId) ' Aggiungo a lavorazione info con identificativo del numero e viceversa EgtSetInfo(m_MachiningList(nI).m_nId, "NbrId", nNbrId) EgtEnableModified() End Sub Private Function BoxFromMachining(nI As Integer, ByRef ptMin As Point3d, ByRef ptMax As Point3d) As Boolean If nI < 0 Then Return False ' Lavorazione principale If Not BoxFromSingleMachining(m_MachiningList(nI).m_nId, ptMin, ptMax) Then Return False End If ' Eventuali lavorazioni inglobate For Each nId As Integer In m_MachiningList(nI).m_vOthId Dim ptMchMin, ptMchMax As Point3d If BoxFromSingleMachining(nId, ptMchMin, ptMchMax) Then ptMin.x = Math.Min(ptMin.x, ptMchMin.x) ptMin.y = Math.Min(ptMin.y, ptMchMin.y) ptMin.z = Math.Min(ptMin.z, ptMchMin.z) ptMax.x = Math.Max(ptMax.x, ptMchMax.x) ptMax.y = Math.Max(ptMax.y, ptMchMax.y) ptMax.z = Math.Max(ptMax.z, ptMchMax.z) End If Next Return True End Function Private Function BoxFromSingleMachining(nOperId As Integer, ByRef ptMin As Point3d, ByRef ptMax As Point3d) As Boolean ' Recupero il preview della lavorazione Dim nPvId As Integer = GDB_ID.NULL EgtGetInfo(EgtGetFirstNameInGroup(nOperId, NAME_PREVIEW), INFO_PV_ONPART_ID, nPvId) Return EgtGetBBoxGlob(nPvId, GDB_BB.STANDARD, ptMin, ptMax) End Function Private Sub MarkMachining(nI As Integer, bMark As Boolean) If nI < 0 Then Return Dim nOperId As Integer = m_MachiningList(nI).m_nId ' Evidenzio la lavorazione principale MarkSingleMachining(nOperId, bMark) ' Evidenzio l'eventuale numero della lavorazione MarkNumber(nI, bMark) ' Marco anche le lavorazioni inglobate For Each nId As Integer In m_MachiningList(nI).m_vOthId MarkSingleMachining(nId, bMark) Next End Sub Private Sub MarkSingleMachining(nOperId As Integer, bMark As Boolean) Dim nPvId As Integer = GDB_ID.NULL If EgtGetInfo(EgtGetFirstNameInGroup(nOperId, NAME_PREVIEW), INFO_PV_ONPART_ID, nPvId) Then If bMark Then EgtSetMark(nPvId) Else EgtResetMark(nPvId) End If End If End Sub Private Sub MarkNumber(nI As Integer, bMark As Boolean) If nI < 0 Then Return Dim nNbrId As Integer = m_MachiningList(nI).m_nNbrId If bMark Then EgtSetMark(nNbrId) Else EgtResetMark(nNbrId) End If End Sub Private Sub ColorNumber(nI As Integer) If nI < 0 Then Return If m_MachiningList(nI).m_bEnabled Then If m_MachiningList(nI).m_nInterf = FMI_TYPE.NONE Then EgtSetColor(m_MachiningList(nI).m_nNbrId, COL_MCH_FREE) Else EgtSetColor(m_MachiningList(nI).m_nNbrId, COL_MCH_INTERF) End If Else If m_MachiningList(nI).m_nInterf = FMI_TYPE.NONE Then EgtResetColor(m_MachiningList(nI).m_nNbrId) ElseIf Not m_MachiningList(nI).m_bEnabled Then EgtSetColor(m_MachiningList(nI).m_nNbrId, COL_MCH_DIS_INTERF) End If End If End Sub Private Sub RemoveMarkAndNumbers() EgtDisableModified() ' cancello evidenziazione If m_CurrFirstInd >= 0 Then For Index = m_CurrFirstInd To m_CurrLastInd MarkMachining(m_ItemList(Index).Ind, False) Next m_CurrFirstInd = -1 m_CurrLastInd = -1 End If ' cancello gruppo di numerazione e ripristino colori lavorazioni EgtErase(m_nNbrGrpId) For i As Integer = 0 To m_MachiningList.Count() - 1 ColorMachining(m_MachiningList(i), True) Next EgtEnableModified() End Sub '----------------------------------------------------------------------------------------------- Private Class NameIdLsBxItem Implements INotifyPropertyChanged Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Private m_nInd As Integer Private m_sName As String Private m_bIsActive As Boolean Public Property Ind As Integer Get Return m_nInd End Get Set(value As Integer) m_nInd = value End Set End Property Public Property Name As String Get Return m_sName End Get Set(value As String) If value <> m_sName Then m_sName = value NotifyPropertyChanged("Name") End If End Set End Property Public Property bIsActive As Boolean Get Return m_bIsActive End Get Set(value As Boolean) If value <> m_bIsActive Then m_bIsActive = value NotifyPropertyChanged("bIsActive") End If End Set End Property Sub New(Name As String, Ind As Integer, bIsActive As Boolean) Me.m_sName = Name Me.m_nInd = Ind Me.m_bIsActive = bIsActive End Sub Public Sub NotifyPropertyChanged(propName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName)) End Sub End Class End Class