Files
OmagCUT/CopyTemplateUC.xaml.vb
T
Dario Sassi 516f24bd88 OmagCUT 1.6t3 :
- sostituzione di CInt con StringToInt dove può fallire
- aggiunto Cancel per interrompere attesa tastatura
- permesso uso di tagli allungati da una sola parte e fresature per dividere i grezzi se movimento con ventose
- rotazione ventosa si adatta molto meglio alla forma del pezzo
- corretta visualizzazione angoli di taglio su pezzi parametrici con lavorazioni interne
- corretti tagli diretti multipli e griglia (crash)
- corretta gestione mm/inches in spianatura di tagli diretti
- aggiunta gestione punto da mouse in test lama di tagli diretti
- verificata dichiarazione pagine non attive su Unload.
2016-08-25 16:21:39 +00:00

361 lines
14 KiB
VB.net

Imports EgtUILib
Public Class CopyTemplateUC
' Riferimenti a pagine
Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow)
Private WithEvents m_CurrProjPage As CurrentProjectPageUC
' Flag di pagina attiva
Private m_bActive As Boolean = False
' Origine tavola e dati grezzo
Private m_bTabOk As Boolean = False
Private m_ptTabOri As Point3d
Private m_ptRawMin As Point3d
Private m_ptRawMax As Point3d
' Parametri P1 acquisito
Private m_bPointP1Ok As Boolean = False
Private m_ptTipP1 As Point3d
'Variabile che indica se il disegno è salvabile
Private m_bDrawOk As Boolean = False
' Modalità di disegno
Private m_CurrCurveType As CurveType
' Array delle modalità di acquisizione dei punti
Private m_PointsModeArray(2) As String
' Punto selezionato nel disegno
Private m_ptPrev As Point3d
' Layer per crocette temporanee
Private m_nTempLay As Integer = GDB_ID.NULL
' Array dei punti per arco
Private m_ptArcArray As New List(Of Point3d)
' Variabile che contiene il punto precedentemente acquisito
Private m_ptPrevAcquire As Point3d
Private m_bptPrevAcquire As Boolean = False
' Riferimento alla finestra di salvataggio con nome
Friend m_SaveNameWD As SaveNameWD
Private Enum PT_MODE As Integer
SAW = 0
LASER = 1
DRAW = 2
End Enum
' Costanti che indicano il tipo di curva da disegnare
Private Enum CurveType
LINE
ARC
End Enum
Private Const RAW_CENTER As String = "RawCenter"
Private Sub CopyTemplate_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized
' Creo lista modalità di acquisizione punto
m_PointsModeArray(PT_MODE.SAW) = EgtMsg(MSG_DIRECTCUTPAGEUC + 24)
m_PointsModeArray(PT_MODE.LASER) = EgtMsg(MSG_DIRECTCUTPAGEUC + 12)
m_PointsModeArray(PT_MODE.DRAW) = EgtMsg(MSG_DIRECTCUTPAGEUC + 25)
' la associo alla combobox
PointModeCmBx.ItemsSource = m_PointsModeArray
Point1Btn.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 10)
LineBtn.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 50)
ArcBtn.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 51)
RemoveBtn.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 52)
CloseBtn.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 53)
SaveBtn.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 54)
End Sub
Private Sub CopyTemplate_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC
m_bActive = True
SaveBtn.IsEnabled = False
LineBtn.IsChecked = True
ArcBtn.IsChecked = False
Point1Btn.IsEnabled = True
RemoveBtn.IsEnabled = True
CloseBtn.IsEnabled = True
m_CurrCurveType = CurveType.LINE
' Origine tavola
m_bTabOk = True
If Not EgtGetTableRef(1, m_ptTabOri) Then
m_bTabOk = False
EgtOutLog("Error on TableRef1")
End If
' Dati del grezzo
If Not GetRawBox(m_ptRawMin, m_ptRawMax) Then
m_ptRawMin = m_ptTabOri
m_ptRawMax = m_ptTabOri
End If
' Reset punto acquisito
m_bPointP1Ok = False
' Reset primo punto
m_bptPrevAcquire = False
' Inizializzo primo punto acquisito dal disegno come centro del grezzo
Dim nRawPartCenter As Integer = EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, RAW_CENTER)
EgtStartPoint(nRawPartCenter, GDB_ID.ROOT, m_ptPrev)
m_ptPrev.z = m_ptRawMax.z
' Imposto modalità di acquisizione punti
PointModeCmBx.SelectedIndex = PT_MODE.DRAW
' Reset taglio e disabilito bottone esecuzione
m_bDrawOk = False
UpdateOkBtn()
' Visualizzo tavola
EgtSetMachineLook(MCH_LOOK.TAB)
' Disabilito registrazione progetto modificato
EgtDisableModified()
' Creo layer temporaneo per crocette
m_nTempLay = EgtCreateGroup(GDB_ID.ROOT)
EgtSetLevel(m_nTempLay, GDB_LV.TEMP)
' Creo nuovo pezzo e layer per la geometria da definire
Dim nPartId = EgtCreateGroup(GDB_ID.ROOT)
EgtSetName(nPartId, NAME_COPYTEMPLATE)
Dim nLayerId = EgtCreateGroup(nPartId, New Frame3d(m_ptTabOri))
EgtSetName(nLayerId, NAME_OUTLOOP)
End Sub
Friend Sub CopyTemplate_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
' Rimuovo layer temporaneo per crocette
EgtErase(m_nTempLay)
' Rimuovo eventuale pezzo per taglio diretto
EraseCopyTemplatePart()
' Riattivo eventuali lavorazioni presenti
ActivateAllMachinings()
' Abilito registrazione progetto modificato
EgtEnableModified()
' Nascondo la macchina
m_MainWindow.m_DirectCutPageUC.m_bShowMachine = False
EgtSetMachineLook(MCH_LOOK.TAB)
EgtDraw()
' Dichiaro pagina non attiva
m_bActive = False
End Sub
Private Sub UpdateOkBtn()
If m_bDrawOk Then
SaveBtn.IsEnabled = True
Else
SaveBtn.IsEnabled = False
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
' 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
' Rimuovo eventuali crocette create acquisendo i punti nel disegno
EgtEmptyGroup(m_nTempLay)
' Acquisisco punto da disegno
EgtUnProjectPoint(e.Location, m_ptPrev)
' Aggiusto Z punto acquisito (è in globale)
Dim dPtPrevZ As Double = m_ptPrev.z
m_ptPrev.z = m_ptRawMax.z
' Se direzione di vista calcolabile e da sopra posso aggiustare anche XY
Dim dAngVertDeg, dAngHorizDeg As Double
If EgtGetGenericView(dAngVertDeg, dAngHorizDeg) Then
Dim vtDir As Vector3d = Vector3d.FromSpherical(1, dAngVertDeg, dAngHorizDeg)
If vtDir.z > EPS_SMALL Then
m_ptPrev.z = dPtPrevZ
m_ptPrev += vtDir * (m_ptRawMax.z - m_ptPrev.z) / vtDir.z
End If
End If
' Disegno crocetta che indica il punto acquisito
CreateCross(m_nTempLay, m_ptPrev)
EgtDraw()
End Sub
Private Sub Point1Btn_Click(sender As Object, e As RoutedEventArgs) Handles Point1Btn.Click
' Rimuovo eventuali crocette create acquisendo i punti nel disegno
EgtEmptyGroup(m_nTempLay)
' Reset punto non acquisito
m_bPointP1Ok = False
' Verifico configurazione tavola e grezzo
If Not m_bTabOk Then
Return
End If
' Se acquisizone lama o laser
If PointModeCmBx.SelectedIndex = PT_MODE.SAW Or PointModeCmBx.SelectedIndex = PT_MODE.LASER Then
' Recupero la posizione macchina
Dim dL1, dL2, dL3, dR1, dR2 As Double
If Not m_MainWindow.m_CNCommunication.GetAxesPositions(dL1, dL2, dL3, dR1, dR2) Then
Return
End If
' Ricavo dati lama corrente
Dim sSaw As String = m_MainWindow.m_CurrentMachine.sCurrSaw
' Se punto da laser
If PointModeCmBx.SelectedIndex = PT_MODE.LASER Then
' Imposto come testa corrente il laser (senza utensile ovviamente)
If Not EgtSetCalcTool("", "H3", 1) Then Return
' Trasformo in posizione punta utensile in basso
If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then Return
' Ora imposto la lama corrente
If Not EgtSetCalcTool(sSaw, "H1", 1) Then Return
' Altrimenti da lama
Else
' Imposto la lama corrente
If Not EgtSetCalcTool(sSaw, "H1", 1) Then Return
' Trasformo in posizione punta utensile in basso
If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then Return
End If
' Porto il tip nell'origine tavola
m_ptTipP1.ToLoc(New Frame3d(m_ptTabOri))
m_bPointP1Ok = True
' Altrimenti punto da click di mouse
Else
' Assegno punto selezionato nel disegno a m_ptTipP1
m_ptTipP1 = m_ptPrev
' Porto il tip nell'origine tavola
m_ptTipP1.ToLoc(New Frame3d(m_ptTabOri))
m_bPointP1Ok = True
' Ricavo dati lama corrente
Dim sSaw As String = m_MainWindow.m_CurrentMachine.sCurrSaw
' Imposto la lama corrente
If Not EgtSetCalcTool(sSaw, "H1", 1) Then Return
End If
' Disegno la curva
If m_bptPrevAcquire Then
If m_CurrCurveType = CurveType.LINE Then
CreateLine()
m_ptArcArray.Clear()
RemoveBtn.IsEnabled = True
Else
If m_ptArcArray.Count = 1 Then
LineBtn.IsEnabled = False
RemoveBtn.IsEnabled = False
ElseIf m_ptArcArray.Count = 2 Then
CreateArc()
LineBtn.IsEnabled = True
RemoveBtn.IsEnabled = True
End If
End If
Else
m_bptPrevAcquire = True
RemoveBtn.IsEnabled = True
End If
m_ptArcArray.Add(m_ptTipP1)
m_ptPrevAcquire = m_ptTipP1
m_MainWindow.m_DirectCutPageUC.m_bShowMachine = True
EgtDraw()
End Sub
Private Sub CreateLine()
Dim nPart As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_COPYTEMPLATE)
Dim nOutLoop As Integer = EgtGetFirstNameInGroup(nPart, NAME_OUTLOOP)
EgtCreateLine(nOutLoop, m_ptPrevAcquire, m_ptTipP1)
End Sub
Private Sub CreateArc()
Dim nPart As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_COPYTEMPLATE)
Dim nOutLoop As Integer = EgtGetFirstNameInGroup(nPart, NAME_OUTLOOP)
EgtCreateArc3P(nOutLoop, m_ptArcArray(0), m_ptArcArray(1), m_ptTipP1)
m_ptArcArray.Clear()
End Sub
Private Sub SaveBtn_Click(sender As Object, e As RoutedEventArgs) Handles SaveBtn.Click
m_SaveNameWD = New SaveNameWD(m_MainWindow)
m_SaveNameWD.ShowDialog()
End Sub
Private Sub ExitBtn_Click(sender As Object, e As RoutedEventArgs) Handles ExitBtn.Click
m_MainWindow.m_DirectCutPageUC.LeftButtonGrid.Children.Remove(Me)
m_MainWindow.m_DirectCutPageUC.m_ActiveDirectCutPage = DirectCutPageUC.DirectCutPages.DirectCut
End Sub
Private Function EraseCopyTemplatePart() As Boolean
' Recupero identificativo del pezzo
Dim nDirPartId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_COPYTEMPLATE)
While nDirPartId <> GDB_ID.NULL
' Cancello il pezzo
EgtErase(nDirPartId)
' Cerco eventuale prossimo
nDirPartId = EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_COPYTEMPLATE)
End While
Return True
End Function
Private Function CreateCross(nLayerId As Integer, ptP As Point3d) As Boolean
' Aggiungo crocette
Dim vtCrossX As New Vector3d(20, 0, 0)
Dim vtCrossY As New Vector3d(0, 20, 0)
Dim nCrossId1 = EgtCreateLine(nLayerId, ptP + (-vtCrossX), ptP + vtCrossX)
EgtSetColor(nCrossId1, New Color3d(255, 0, 0))
Dim nCrossId2 = EgtCreateLine(nLayerId, ptP + (-vtCrossY), ptP + vtCrossY)
EgtSetColor(nCrossId2, New Color3d(255, 0, 0))
Return True
End Function
Private Sub LineBtn_Click(sender As Object, e As RoutedEventArgs) Handles LineBtn.Click
If LineBtn.IsChecked Then
ArcBtn.IsChecked = False
m_CurrCurveType = CurveType.LINE
Else
LineBtn.IsChecked = True
End If
End Sub
Private Sub ArcBtn_Click(sender As Object, e As RoutedEventArgs) Handles ArcBtn.Click
If ArcBtn.IsChecked Then
LineBtn.IsChecked = False
m_CurrCurveType = CurveType.ARC
Else
ArcBtn.IsChecked = True
End If
End Sub
Private Sub RemoveBtn_Click(sender As Object, e As RoutedEventArgs) Handles RemoveBtn.Click
Dim nPart As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_COPYTEMPLATE)
Dim nOutloop As Integer = EgtGetFirstNameInGroup(nPart, NAME_OUTLOOP)
Dim nOutLoopCount As Integer = EgtGetGroupObjs(nOutloop)
If nOutLoopCount > 0 Then
If nOutLoopCount = 1 Then
' Aggiorno ptLast con primo punto
EgtStartPoint(EgtGetFirstInGroup(nOutloop), m_ptPrevAcquire)
' Cancello ultima linea
EgtEmptyGroup(nOutloop)
Else
' Cancello ultima linea
EgtErase(EgtGetLastInGroup(nOutloop))
' Aggiorno ptLast
EgtEndPoint(EgtGetLastInGroup(nOutloop), m_ptPrevAcquire)
End If
If m_CurrCurveType = CurveType.ARC Then
m_ptArcArray.Clear()
m_ptArcArray.Add(m_ptPrevAcquire)
End If
Else
m_bptPrevAcquire = False
RemoveBtn.IsEnabled = False
End If
CloseBtn.IsEnabled = True
Point1Btn.IsEnabled = True
SaveBtn.IsEnabled = False
EgtDraw()
End Sub
Private Sub CloseBtn_Click(sender As Object, e As RoutedEventArgs) Handles CloseBtn.Click
Dim nPart As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_COPYTEMPLATE)
Dim nOutloop As Integer = EgtGetFirstNameInGroup(nPart, NAME_OUTLOOP)
If m_CurrCurveType = CurveType.ARC And m_ptArcArray.Count <> 2 Then
Return
End If
EgtStartPoint(EgtGetFirstInGroup(nOutloop), m_ptTipP1)
If m_CurrCurveType = CurveType.LINE Then
CreateLine()
Else
If m_ptArcArray.Count <> 2 Then
Return
End If
CreateArc()
LineBtn.IsEnabled = True
RemoveBtn.IsEnabled = True
End If
' Disattivo bottoni perchè non posso più aggiungere punti una volta che il percorso è chiuso
Point1Btn.IsEnabled = False
CloseBtn.IsEnabled = False
SaveBtn.IsEnabled = True
EgtDraw()
End Sub
End Class