Files
OmagCUT/DirectCuts/CopyTemplateUC.xaml.vb
Demetrio Cassarino 5145accc39 -aggiornato messggi
2025-07-14 08:41:49 +02:00

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