Files
OmagCUT/SplitPageUC.xaml.vb
T
Dario Sassi 672e471f57 OmagCUT 1.9b2 :
- per i componenti si gestiscono come booleani gli ultimi 5 box
- migliorato elenco tagli in Split.
2018-02-07 10:17:31 +00:00

1036 lines
42 KiB
VB.net

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
' 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
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
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
AllOutStartBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 8) ' Inizi Tutti Fuori
AllCenStartBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 9) ' Inizi Tutti Centro
OutCenEndBtn.Content = EgtMsg(MSG_SPLITPAGEUC + 12) ' Fine Centro/Fuori
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
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
' 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 SortAllMachinings() Then
m_MainWindow.m_CurrentProjectPageUC.SetOrderMachiningFlag()
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_CurrInd = -1
' Reset flag di modifica
m_bModified = False
' Reset flag tipo uscita
m_bToNext = False
' Visualizzazione bottoni
If m_bByHand Then
AllExtendBtn.Visibility = Windows.Visibility.Hidden
AllReduceBtn.Visibility = Windows.Visibility.Hidden
End If
' Abilitazione bottoni
EnableButtons()
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
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()
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()
m_ItemList.Add(New NameIdLsBxItem(sText, i - 1, Mach.m_bEnabled))
End If
Next
End Sub
Private Sub MachiningLsBx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles MachiningLsBx.SelectionChanged
Dim SelItem As NameIdLsBxItem = MachiningLsBx.SelectedItem
If IsNothing(SelItem) Then Return
Dim nInd As Integer = SelItem.Ind
If nInd <> m_CurrInd Then
MarkMachining(m_CurrInd, False)
MarkMachining(nInd, True)
m_CurrInd = nInd
EgtDraw()
End If
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 MachiningLsBx.SelectedItem Is Nothing OrElse MachiningLsBx.SelectedIndex < 0 OrElse MachiningLsBx.SelectedItems.Count > 1 Then
Return
End If
' No selected item - nothing to do
' Calculate new index using move direction
Dim newIndex As Integer = MachiningLsBx.SelectedIndex + direction
' Checking bounds of the range
If newIndex < 0 OrElse newIndex >= MachiningLsBx.Items.Count Then
Return
End If
' Index out of range - nothing to do
Dim selected As Object = MachiningLsBx.SelectedItem
' Removing removable element
m_ItemList.Remove(selected)
' Insert it in new position
m_ItemList.Insert(newIndex, selected)
' Restore selection
MachiningLsBx.SelectedItem = selected
' Imposto flag di modifica
m_bModified = True
End Sub
Private Sub OnOffBtn_Click(sender As Object, e As RoutedEventArgs) Handles OnOffBtn.Click
Dim SelItem As NameIdLsBxItem = MachiningLsBx.SelectedItem
If IsNothing(SelItem) Then
Return
End If
Dim nI As Integer = SelItem.Ind
If m_MachiningList(nI).m_bEnabled Then
m_MachiningList(nI).m_bEnabled = False
SelItem.bIsActive = False
Else
m_MachiningList(nI).m_bEnabled = True
SelItem.bIsActive = True
End If
ColorMachining(m_MachiningList(nI))
ColorNumber(nI)
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
Dim SelItem As NameIdLsBxItem = MachiningLsBx.SelectedItem
If IsNothing(SelItem) Then Return
Dim nI As Integer = SelItem.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
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
Dim SelItem As NameIdLsBxItem = MachiningLsBx.SelectedItem
If IsNothing(SelItem) Then Return
Dim nI As Integer = SelItem.Ind
' Eseguo
If AdjustEndCut(nI) 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
Dim SelItem As NameIdLsBxItem = MachiningLsBx.SelectedItem
If IsNothing(SelItem) Then Return
Dim nI As Integer = SelItem.Ind
' Eseguo
If AdjustStartCut(nI) 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
Dim SelItem As NameIdLsBxItem = MachiningLsBx.SelectedItem
If IsNothing(SelItem) Then
Return
End If
Dim nI As Integer = SelItem.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)
EgtDraw()
' Imposto flag di modifica
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
Dim SelItem As NameIdLsBxItem = MachiningLsBx.SelectedItem
If IsNothing(SelItem) Then
Return
End If
Dim nI As Integer = SelItem.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)
EgtDraw()
' Imposto flag di modifica
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 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 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 SortAllMachinings() Then
m_MainWindow.m_CurrentProjectPageUC.SetOrderMachiningFlag()
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
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 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
If m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.MAN_MANIP) Or
m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.AUTO_MANIP) Then
' Se in modifica
If Not m_bShow Then
' Se allontanamento perpendicolare
If m_bByHand Then
' Ci deve essere almeno 1 taglio disabilitato e 1 e 1 solo passante
NextBtn.IsEnabled = (GetDisabledCutsCount() > 0 And GetSplitCutsCount() = 1)
' Altrimenti
Else
' Ci deve essere almeno 1 taglio disabilitato e almeno 1 passante oppure fase successiva alla prima
NextBtn.IsEnabled = GetDisabledCutsCount() > 0 And (GetSplitCutsCount() > 0 Or m_nCurrPhase > 1)
End If
' altrimenti sto solo visualizzando
Else
NextBtn.IsEnabled = (m_nCurrPhase < EgtGetPhaseCount())
End If
Else
NextBtn.IsEnabled = False
End If
' Per bottone MODIFY
ModifyBtn.IsEnabled = m_bShow
' Per bottone AUTO
AutoBtn.IsEnabled = Not m_bShow And ((GetDisabledCutsCount() > 0 Or m_nCurrPhase = 1) And Not m_bByHand)
' 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
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("_")
' Ingombro complessivo della lavorazione
Dim ptMin, ptMax As Point3d
If Not BoxFromMachining(nI, ptMin, ptMax) Then Return
' Metto il numero nel centro
Dim ptCen As Point3d = ptMin + If(Not b2ndLav, 0.5 * (ptMax - ptMin), 0.75 * (ptMax - ptMin))
ptCen.z = ptMax.z + 1
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 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_CurrInd >= 0 Then
MarkMachining(m_CurrInd, False)
m_CurrInd = -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