392 lines
15 KiB
VB.net
392 lines
15 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
|
|
Private m_refControlDirectCutUC As ControlsDirectCutUC1
|
|
|
|
' Flag di pagina attiva
|
|
Private m_bActive As Boolean = False
|
|
' Array stringhe modalità di acquisizione dei punti
|
|
Private m_PointsModeArray(2) As String
|
|
' 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
|
|
' Punto P1 acquisito
|
|
Private m_ptTipP1 As Point3d
|
|
' Punti precedenti
|
|
Private m_nPrevPt As Integer = 0
|
|
Private m_ptPrev(1) As Point3d
|
|
' Variabile che indica se il disegno è salvabile
|
|
Private m_bDrawOk As Boolean = False
|
|
' Punto selezionato nel disegno
|
|
Private m_bMouseOk As Boolean = False
|
|
Private m_ptMouse As Point3d
|
|
' Layer per crocette temporanee
|
|
Private m_nTempLay As Integer = GDB_ID.NULL
|
|
' Modalità di disegno
|
|
Private m_CurrCurveType As CurveType
|
|
|
|
' Costanti per tipo acquisizione punti
|
|
Private Enum PT_MODE As Integer
|
|
SAW = 0
|
|
LASER = 1
|
|
DRAW = 2
|
|
End Enum
|
|
' Costanti per tipo di curva da disegnare
|
|
Private Enum CurveType
|
|
LINE
|
|
ARC
|
|
End Enum
|
|
|
|
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(90224) ' Lama
|
|
m_PointsModeArray(PT_MODE.LASER) = EgtMsg(90212) ' Laser
|
|
m_PointsModeArray(PT_MODE.DRAW) = EgtMsg(90225) ' Disegno
|
|
' la associo alla combobox
|
|
PointModeCmBx.ItemsSource = m_PointsModeArray
|
|
|
|
Point1Btn.ToolTip = EgtMsg(90210) ' Acquisisci P1
|
|
LineBtn.ToolTip = EgtMsg(90250) ' Linea
|
|
ArcBtn.ToolTip = EgtMsg(90251) ' Arco
|
|
RemoveBtn.ToolTip = EgtMsg(90252) ' Rimuovi
|
|
CloseBtn.ToolTip = EgtMsg(90253) ' Chiudi
|
|
SaveBtn.ToolTip = EgtMsg(90254) ' Salva
|
|
End Sub
|
|
|
|
Private Sub CopyTemplate_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
|
|
m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC
|
|
m_refControlDirectCutUC = m_MainWindow.m_DirectCutPageUC.m_ControlsDirectCutUC1
|
|
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
|
|
' Nessun punto acquisito
|
|
m_nPrevPt = 0
|
|
' Reset punto da mouse
|
|
m_bMouseOk = False
|
|
' 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, New Frame3d(m_ptTabOri))
|
|
EgtSetColor(m_nTempLay, New Color3d(255, 0, 0))
|
|
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
|
|
' Acquisisco punto da disegno
|
|
EgtUnProjectPoint(e.Location, m_ptMouse)
|
|
' Aggiusto Z punto acquisito (è in globale)
|
|
Dim dPtPrevZ As Double = m_ptMouse.z
|
|
m_ptMouse.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_ptMouse.z = dPtPrevZ
|
|
m_ptMouse += vtDir * (m_ptRawMax.z - m_ptMouse.z) / vtDir.z
|
|
End If
|
|
End If
|
|
' Porto il punto nell'origine tavola
|
|
m_ptMouse.ToLoc(New Frame3d(m_ptTabOri))
|
|
' Dichiaro punto da mouse valido
|
|
m_bMouseOk = True
|
|
' Rimuovo vecchie crocette per mouse
|
|
RemoveMouseCross(m_nTempLay)
|
|
' Disegno crocetta che indica il punto mouse (in verde)
|
|
CreateCross(m_nTempLay, m_ptMouse, False)
|
|
EgtDraw()
|
|
End Sub
|
|
|
|
Private Sub Point1Btn_Click(sender As Object, e As RoutedEventArgs) Handles Point1Btn.Click
|
|
' Verifico configurazione tavola e grezzo
|
|
If Not m_bTabOk Then Return
|
|
|
|
' forzo utilizzo testa H1 solo per macchina con 2 teste
|
|
Dim bIsMultiCut As Boolean = (EgtGetHeadId("H101") <> GDB_ID.NULL)
|
|
' Ricavo dati lama corrente
|
|
Dim sSaw As String = m_MainWindow.m_CurrentMachine.sCurrSaw
|
|
If bIsMultiCut Then
|
|
EgtSetCalcTool(sSaw, "H1", 1)
|
|
End If
|
|
|
|
' Se acquisizione 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
|
|
' Se macchina multicut il primo asse rotante restituito è quello della tavola
|
|
Dim vAng() As Double = {dR1, dR2, 0}
|
|
If bIsMultiCut Then
|
|
vAng(0) = 0
|
|
vAng(1) = dR1
|
|
vAng(2) = dR2
|
|
End If
|
|
' 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, vAng, 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, vAng, True, m_ptTipP1) Then Return
|
|
End If
|
|
' Porto il tip nell'origine tavola
|
|
m_ptTipP1.ToLoc(New Frame3d(m_ptTabOri))
|
|
' Altrimenti punto da click di mouse
|
|
Else
|
|
' Verifico presenza punto da mouse
|
|
If Not m_bMouseOk Then Return
|
|
' Imposto la lama corrente
|
|
If Not EgtSetCalcTool(sSaw, "H1", 1) Then Return
|
|
' Assegno punto selezionato nel disegno a m_ptTipP1
|
|
m_ptTipP1 = m_ptMouse
|
|
m_bMouseOk = False
|
|
End If
|
|
|
|
' Se nessun punto precedente
|
|
If m_nPrevPt = 0 Then
|
|
RemoveBtn.IsEnabled = True
|
|
m_nPrevPt = 1
|
|
m_ptPrev(0) = m_ptTipP1
|
|
' se modalità linea
|
|
ElseIf m_CurrCurveType = CurveType.LINE Then
|
|
CreateLine()
|
|
EgtEmptyGroup(m_nTempLay)
|
|
RemoveBtn.IsEnabled = True
|
|
m_nPrevPt = 1
|
|
m_ptPrev(0) = m_ptTipP1
|
|
' se altrimenti modalità arco con 1 punto precedenteo
|
|
ElseIf m_nPrevPt = 1 Then
|
|
LineBtn.IsEnabled = False
|
|
RemoveBtn.IsEnabled = False
|
|
m_nPrevPt = 2
|
|
m_ptPrev(1) = m_ptTipP1
|
|
' altrimenti arco con 2 punti precedenti
|
|
Else
|
|
CreateArc()
|
|
EgtEmptyGroup(m_nTempLay)
|
|
LineBtn.IsEnabled = True
|
|
RemoveBtn.IsEnabled = True
|
|
m_nPrevPt = 1
|
|
m_ptPrev(0) = m_ptTipP1
|
|
End If
|
|
' Disegno crocetta che indica il punto acquisito
|
|
CreateCross(m_nTempLay, m_ptTipP1)
|
|
' Aggiorno visualizzazione
|
|
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_ptPrev(0), 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_ptPrev(0), m_ptPrev(1), m_ptTipP1)
|
|
End Sub
|
|
|
|
Private Sub SaveBtn_Click(sender As Object, e As RoutedEventArgs) Handles SaveBtn.Click
|
|
Dim MySaveNameWD As New SaveNameWD(m_MainWindow, SaveNameWD.SAVE_TYPE.TEMPLATE)
|
|
MySaveNameWD.ShowDialog()
|
|
End Sub
|
|
|
|
Private Sub ExitBtn_Click(sender As Object, e As RoutedEventArgs) Handles ExitBtn.Click
|
|
m_refControlDirectCutUC.LeftButtonGrid.Children.Remove(Me)
|
|
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, Optional bRed As Boolean = True) 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)
|
|
Dim nCrossId2 = EgtCreateLine(nLayerId, ptP + (-vtCrossY), ptP + vtCrossY)
|
|
If Not bRed Then
|
|
EgtSetColor(nCrossId1, New Color3d(0, 255, 0))
|
|
EgtSetInfo(nCrossId1, "Mouse", 1)
|
|
EgtSetColor(nCrossId2, New Color3d(0, 255, 0))
|
|
EgtSetInfo(nCrossId2, "Mouse", 1)
|
|
End If
|
|
Return True
|
|
End Function
|
|
|
|
Private Function RemoveMouseCross(nLayerId As Integer) As Boolean
|
|
Dim nId As Integer = EgtGetFirstInGroup(nLayerId)
|
|
While nId <> GDB_ID.NULL
|
|
Dim nNextId = EgtGetNext(nId)
|
|
If EgtExistsInfo(nId, "Mouse") Then
|
|
EgtErase(nId)
|
|
End If
|
|
nId = nNextId
|
|
End While
|
|
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
|
|
m_nPrevPt = 1
|
|
EgtStartPoint(EgtGetFirstInGroup(nOutloop), m_ptPrev(0))
|
|
' Cancello ultima linea
|
|
EgtEmptyGroup(nOutloop)
|
|
Else
|
|
' Cancello ultima linea
|
|
EgtErase(EgtGetLastInGroup(nOutloop))
|
|
' Aggiorno ptLast
|
|
m_nPrevPt = 1
|
|
EgtEndPoint(EgtGetLastInGroup(nOutloop), m_ptPrev(0))
|
|
End If
|
|
' Disegno crocetta che indica il punto acquisito
|
|
EgtEmptyGroup(m_nTempLay)
|
|
CreateCross(m_nTempLay, m_ptPrev(0))
|
|
Else
|
|
m_nPrevPt = 0
|
|
EgtEmptyGroup(m_nTempLay)
|
|
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
|
|
' Se in modalità arco, devo aver già preso il punto intermedio
|
|
If m_CurrCurveType = CurveType.ARC And m_nPrevPt <> 2 Then Return
|
|
' Recupero il punto iniziale del percorso
|
|
Dim nPart As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_COPYTEMPLATE)
|
|
Dim nOutloop As Integer = EgtGetFirstNameInGroup(nPart, NAME_OUTLOOP)
|
|
If Not EgtStartPoint(EgtGetFirstInGroup(nOutloop), m_ptTipP1) Then Return
|
|
' Disegno l'entità di chiusura
|
|
If m_CurrCurveType = CurveType.LINE Then
|
|
CreateLine()
|
|
m_nPrevPt = 0
|
|
Else
|
|
CreateArc()
|
|
m_nPrevPt = 0
|
|
LineBtn.IsEnabled = True
|
|
RemoveBtn.IsEnabled = True
|
|
End If
|
|
' Disattivo bottoni inserimento punti o chiusura
|
|
Point1Btn.IsEnabled = False
|
|
CloseBtn.IsEnabled = False
|
|
' Attivo salvataggio
|
|
SaveBtn.IsEnabled = True
|
|
' Aggiorno visualizzazione
|
|
EgtEmptyGroup(m_nTempLay)
|
|
EgtDraw()
|
|
End Sub
|
|
|
|
End Class
|