Files
OmagCUT/MoveRawPartPage.xaml.vb
T
Dario Sassi cb2257e12f OmagCUT 1.6s9 :
- aggiunto step per taglio di lama inclinato
- aggiunto controllo diametro lama entro limite prima di movimentazione pezzi con ventosa
- aggiunto controllo diametro lama entro limite prima di tastatura spessore grezzo.
2016-07-26 18:17:37 +00:00

342 lines
14 KiB
VB.net

Imports EgtUILib
Public Class MoveRawPartPage
' Riferimento alla MainWindow
Private m_MainWindow As MainWindow = Application.Current.MainWindow
Private WithEvents m_CurrProjPage As CurrentProjectPageUC
' Flag di pagina attiva
Private m_bActive As Boolean = False
' Fase corrente
Private m_nCurrPhase As Integer = 0
' Dati movimento
Private m_dStep As Double = 0
' Tipo movimento dei grezzi (manuale o con testa ventosa)
Private m_bByHand As Boolean = True
' Gestione movimento manuale perpendicolare
Private m_vtDir As New Vector3d ' direzione di movimento
Private m_ptMid As New Point3d ' punto medio del taglio
Private m_dOrigDist As Double = 0 ' distanza iniziale (spessore taglio)
Private m_dCurrDist As Double = 0 ' distanza corrente
' Gestione movimento con ventose
'Private m_nTempId As Integer = GDB_ID.NULL
'Private m_nVacId As Integer = GDB_ID.NULL
'Private m_nRefId As Integer = GDB_ID.NULL
Private m_RawMoveDataList As New List(Of RawMoveData)
Private Sub MoveRawPartPage_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized
PrevBtn.IsEnabled = False
' Assegno testi
RemovePartBtn.Content = EgtMsg(MSG_MOVERAWPAGEUC + 1) 'Rimuovi
End Sub
Private Sub MoveRawPartPage_Loaded(sender As Object, e As EventArgs) Handles Me.Loaded
m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC
m_bActive = True
' Leggo tipo movimento grezzi
m_bByHand = (GetVacuumType() = 0 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
' Deseleziono tutto
EgtDeselectAll()
' Recupero i tagli allungati prima definiti
Dim Cuts(0) As Integer
m_MainWindow.m_CadCutPageUC.m_SplitPage.GetSplitCuts(Cuts)
' Fase precedente
Dim nPrevPhase As Integer = EgtGetCurrPhase()
' Creo nuova fase, eseguo spezzatura grezzi e vi sposto le lavorazioni
Dim vNewRaws As New List(Of Integer)
SplitRawParts(nPrevPhase, Cuts, vNewRaws)
m_nCurrPhase = EgtGetCurrPhase()
' Aggiorno visualizzazione
EgtDraw()
' Carico i parametri di movimento
m_dStep = GetPrivateProfileDouble(S_RAWMOVE, K_RAWSTEP, 50, m_MainWindow.GetIniFile())
StepMoveTxBx.Text = LenToString(m_dStep, 3)
' Se movimento manuale perpendicolare
If m_bByHand Then
' Se esiste taglio passante determino direzione di movimento
If Cuts.Length() > 0 Then
' recupero taglio di separazione
Dim nCutId As Integer = Cuts(0)
' recupero linea di base del taglio
EgtSetCurrMachining(nCutId)
' Recupero la prima entità geometrica della lavorazione
Dim nEntId, nSub As Integer
If EgtGetMachiningGeometry(0, nEntId, nSub) Then
' Direzione perpendicolare al taglio
EgtStartVector(nEntId, GDB_ID.ROOT, m_vtDir)
m_vtDir.Rotate(Vector3d.Z_AX(), 90)
' Punto medio del taglio
EgtMidPoint(nEntId, GDB_ID.ROOT, m_ptMid)
' Recupero il preview della lavorazione
Dim nPvId As Integer = GDB_ID.NULL
EgtGetInfo(EgtGetFirstNameInGroup(nCutId, NAME_PREVIEW), INFO_PV_ONPART_ID, nPvId)
' Recupero la larghezza del taglio
Dim nGrpId As Integer = EgtGetFirstGroupInGroup(nPvId)
If Not EgtGetInfo(nGrpId, "WT", m_dOrigDist) Then
m_dOrigDist = 4
End If
' Distanza iniziale
m_dCurrDist = 0
End If
' Non dovrebbe mai accadere, ma inizializzo con default
Else
m_vtDir = Vector3d.Y_AX()
m_ptMid = Point3d.ORIG()
m_dOrigDist = 0
m_dCurrDist = 0
End If
' Altrimenti movimento con ventose
Else
' Pulisco lista info per grezzi
m_RawMoveDataList.Clear()
m_RawMoveDataList.Capacity() = 10
End If
' Aggiorno interfaccia per taglio perpendicolare
If m_bByHand Then
LeftBtn.Visibility = Windows.Visibility.Hidden
RightBtn.Visibility = Windows.Visibility.Hidden
RemovePartBtn.Visibility = Windows.Visibility.Visible
' Altrimeni per movimento con ventose
Else
LeftBtn.Visibility = Windows.Visibility.Visible
RightBtn.Visibility = Windows.Visibility.Visible
RemovePartBtn.Visibility = Windows.Visibility.Hidden
End If
End Sub
Private Sub OnMyMouseDownScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles m_CurrProjPage.OnMouseDownScene
' Verifico di essere il gestore attivo
If Not m_bActive Then
Return
End If
' Si può selezionare solo con il tasto sinistro e se stato NULL
If e.Button <> Windows.Forms.MouseButtons.Left Or
Not m_CurrProjPage.CurrentProjectScene.IsStatusNull() Then
Return
End If
' Gruppo dei grezzi
Dim nRawGroupId = EgtGetParent(EgtGetFirstRawPart())
' Verifico se selezionato indicativo di grezzo attivo
EgtSetObjFilterForSelect(True, True, True, True, True)
Dim nSel As Integer
EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSel)
Dim nId As Integer = EgtGetFirstObjInSelWin()
While nId <> GDB_ID.NULL
' Cerco l'identificativo del grezzo cui appartiene
Dim nParentId = EgtGetParent(nId)
While nParentId <> GDB_ID.NULL And nParentId <> nRawGroupId
nId = nParentId
nParentId = EgtGetParent(nId)
End While
' Se trovato il grezzo
If nParentId = nRawGroupId Then
Dim nStat As Integer = GDB_ST.ON_
EgtGetStatus(nId, nStat)
If nStat = GDB_ST.SEL Then
EgtSetStatus(nId, GDB_ST.ON_)
' Se con ventose, le nascondo
If Not m_bByHand Then EgtSetStatus(GetVacuumId(), GDB_ST.OFF)
Else
EgtDeselectAll()
EgtSetStatus(nId, GDB_ST.SEL)
' Se con ventose, le posiziono sul grezzo
If Not m_bByHand Then
Dim rmData As New RawMoveData
If PutVacuumCupsOnRaw(nId, rmData) Then
' Visualizzo le ventose
EgtSetStatus(GetVacuumId(), GDB_ST.ON_)
' Aggiorno i dati
AddRawMoveData(rmData)
End If
End If
End If
EgtDraw()
Exit While
End If
nId = EgtGetNextObjInSelWin()
End While
End Sub
Private Sub UpBtn_Click(sender As Object, e As RoutedEventArgs) Handles UpBtn.Click
Dim nRawId As Integer = EgtGetFirstSelectedObj()
While nRawId <> GDB_ID.NULL
' Se movimento perpendicolare, è allontanamento
If m_bByHand Then
' Recupero il centro del grezzo
Dim ptRawCen As Point3d
GetRawCenter(nRawId, ptRawCen)
' Calcolo la distanza di movimento
Dim dMove As Double = m_dStep
If m_dCurrDist < EPS_SMALL Then
dMove -= m_dOrigDist
End If
If (m_vtDir * (ptRawCen - m_ptMid) < 0) Then dMove *= -1
' Eseguo il movimento
If EgtMoveRawPart(nRawId, dMove * m_vtDir) Then
m_dCurrDist += Math.Abs(dMove)
End If
' Altrimenti movimento Y +
Else
Dim vtMove As New Vector3d(0, m_dStep, 0)
If EgtMoveRawPart(nRawId, vtMove) Then
EgtMove(GetVacuumId(), vtMove, GDB_RT.GLOB)
AddRawMoveData(nRawId, vtMove)
End If
End If
nRawId = EgtGetNextSelectedObj()
End While
EgtDraw()
End Sub
Private Sub DownBtn_Click(sender As Object, e As RoutedEventArgs) Handles DownBtn.Click
Dim nRawId As Integer = EgtGetFirstSelectedObj()
While nRawId <> GDB_ID.NULL
' Se movimento perpendicolare, è avvicinamento
If m_bByHand Then
' Se sono già a contatto, non devo fare alcunché
If m_dCurrDist < EPS_SMALL Then Return
' Recupero il centro del grezzo
Dim ptRawCen As Point3d
GetRawCenter(nRawId, ptRawCen)
' Calcolo la distanza di movimento
Dim dMove As Double = m_dStep
If m_dCurrDist < m_dStep Then
dMove -= m_dOrigDist
End If
If (m_vtDir * (ptRawCen - m_ptMid) > 0) Then dMove *= -1
' Eseguo il movimento
If EgtMoveRawPart(nRawId, dMove * m_vtDir) Then
m_dCurrDist -= Math.Abs(dMove)
End If
' Altrimenti movimento Y -
Else
Dim vtMove As New Vector3d(0, -m_dStep, 0)
If EgtMoveRawPart(nRawId, vtMove) Then
EgtMove(GetVacuumId(), vtMove, GDB_RT.GLOB)
AddRawMoveData(nRawId, vtMove)
End If
End If
nRawId = EgtGetNextSelectedObj()
End While
EgtDraw()
End Sub
Private Sub RightBtn_Click(sender As Object, e As RoutedEventArgs) Handles RightBtn.Click
Dim nRawId As Integer = EgtGetFirstSelectedObj()
While nRawId <> GDB_ID.NULL
Dim vtMove As New Vector3d(m_dStep, 0, 0)
If EgtMoveRawPart(nRawId, vtMove) Then
EgtMove(GetVacuumId(), vtMove, GDB_RT.GLOB)
AddRawMoveData(nRawId, vtMove)
End If
nRawId = EgtGetNextSelectedObj()
End While
EgtDraw()
End Sub
Private Sub LeftBtn_Click(sender As Object, e As RoutedEventArgs) Handles LeftBtn.Click
Dim nRawId As Integer = EgtGetFirstSelectedObj()
While nRawId <> GDB_ID.NULL
Dim vtMove As New Vector3d(-m_dStep, 0, 0)
If EgtMoveRawPart(nRawId, vtMove) Then
EgtMove(GetVacuumId(), vtMove, GDB_RT.GLOB)
AddRawMoveData(nRawId, vtMove)
End If
nRawId = EgtGetNextSelectedObj()
End While
EgtDraw()
End Sub
Private Sub RemovePartBtn_Click(sender As Object, e As RoutedEventArgs) Handles RemovePartBtn.Click
Dim nRawId As Integer = EgtGetFirstSelectedObj()
While nRawId <> GDB_ID.NULL
EgtRemoveRawPartFromCurrPhase(nRawId)
nRawId = EgtGetFirstSelectedObj()
End While
EgtDraw()
End Sub
Private Sub StepMoveTxBx_EgtClosed(sender As Object, e As EventArgs) Handles StepMoveTxBx.EgtClosed
Dim dStep As Double
If StringToLen(StepMoveTxBx.Text, dStep) Then
m_dStep = Math.Max(dStep, 2 * EPS_SMALL)
End If
End Sub
Private Sub NextBtn_Click(sender As Object, e As RoutedEventArgs) Handles NextBtn.Click
' Deseleziono tutto
EgtDeselectAll()
' Passo alla pagina delle lavorazioni
m_MainWindow.m_CadCutPageUC.CadCutPageGrid.Children.Remove(m_MainWindow.m_CadCutPageUC.m_MoveRawPartPage)
m_MainWindow.m_CadCutPageUC.CadCutPageGrid.Children.Add(m_MainWindow.m_CadCutPageUC.m_SplitPage)
m_MainWindow.m_CadCutPageUC.m_CadCutMode = CadCutPageUC.CadCutModes.Split
End Sub
Private Sub MoveRawPartPage_Unloaded(sender As Object, e As EventArgs) Handles Me.Unloaded
m_bActive = False
' Se movimento con ventose
If Not m_bByHand Then
' nascondo le ventose
EgtSetStatus(GetVacuumId(), GDB_ST.OFF)
' aggiungo al gruppo disposizione dei sottogruppi con i dati di movimento dei grezzi spostati
Dim nDispId As Integer = EgtGetPhaseDisposition(m_nCurrPhase)
For Each rmData As RawMoveData In m_RawMoveDataList
' Se movimento significativo
If Not rmData.m_vtMove.IsSmall() Then
' Creo gruppo e salvo dati per movimento grezzo
SaveMoveInfoInDisposition(nDispId, rmData)
End If
Next
' Eseguo calcolo speciale dei movimenti
EgtSpecialApplyDisposition(nDispId, True)
End If
End Sub
Private Function AddRawMoveData(nRawId As Integer) As Integer
' Cerco in lista record con dati del grezzo indicato
Dim nInd As Integer = -1
For i As Integer = 0 To m_RawMoveDataList.Count() - 1
If m_RawMoveDataList(i).m_nId = nRawId Then
nInd = i
Exit For
End If
Next
' Se non trovato, lo accodo
If nInd = -1 Then
m_RawMoveDataList.Add(New RawMoveData(nRawId))
nInd = m_RawMoveDataList.Count() - 1
End If
Return nInd
End Function
Private Function AddRawMoveData(nRawId As Integer, vtMove As Vector3d) As Integer
' Recupero o creo record con dati del grezzo indicato
Dim nInd As Integer = AddRawMoveData(nRawId)
If nInd = -1 Then Return -1
' Aggiorno i valori
m_RawMoveDataList(nInd).m_vtMove += vtMove
Return nInd
End Function
Private Function AddRawMoveData(rmData As RawMoveData) As Integer
' Recupero o creo record con dati del grezzo indicato
Dim nInd As Integer = AddRawMoveData(rmData.m_nId)
If nInd = -1 Then Return -1
' Aggiorno i valori
m_RawMoveDataList(nInd).m_vtDelta = rmData.m_vtDelta
m_RawMoveDataList(nInd).m_dAngRotDeg = rmData.m_dAngRotDeg
m_RawMoveDataList(nInd).m_sCups = rmData.m_sCups
Return nInd
End Function
End Class