diff --git a/GridCut.xaml b/GridCut.xaml
index a35c5ed..f16dcf6 100644
--- a/GridCut.xaml
+++ b/GridCut.xaml
@@ -45,7 +45,14 @@
-
+
+
+
+
+
+
+
diff --git a/GridCut.xaml.vb b/GridCut.xaml.vb
index 8d909ba..b779c18 100644
--- a/GridCut.xaml.vb
+++ b/GridCut.xaml.vb
@@ -3,7 +3,9 @@
Public Class GridCut
' Riferimenti a pagine
Private m_MainWindow As MainWindow = Application.Current.MainWindow
- Private m_CurrProjPage As CurrentProjectPageUC
+ Private WithEvents m_CurrProjPage As CurrentProjectPageUC
+ ' Flag di pagina attiva
+ Private m_bActive As Boolean = False
' Origine tavola e dati grezzo
Private m_bRawOk As Boolean = False
@@ -26,21 +28,41 @@ Public Class GridCut
Private m_dLen As Double = 1000
Private m_dAngO As Double = 180
Private m_dAngV As Double = 0
+ ' 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
+
' Costanti
Private Const MAX_TAB_DEPTH As Double = 10.0
Private Const MIN_CUT_LEN As Double = 10.0
Private Const MAX_SIDE_ANG As Double = 60.0
Private Const DIRECTCUT As String = "DirectCut"
-
+ Private Const RAW_CENTER As String = "RawCenter"
+ ' Costanti che indicano la modalità di acquisizione dei punti
+ Private Enum PT_MODE As Integer
+ SAW = 0
+ LASER = 1
+ DRAW = 2
+ End Enum
+ 'Costante che indica il lato in cui posizionare i tagli
Private Enum CutSide As Integer
Left
Right
End Enum
Private Sub GridCut_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)
Point2Btn.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 11)
- LaserOnChBx.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 12)
DepthTxBl.Text = EgtMsg(MSG_DIRECTCUTPAGEUC + 13)
DirectionTxBl.Text = EgtMsg(MSG_DIRECTCUTPAGEUC + 15)
SideAngleTxBl.Text = EgtMsg(MSG_DIRECTCUTPAGEUC + 16)
@@ -54,10 +76,22 @@ Public Class GridCut
Private Sub GridCut_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC
+ m_bActive = True
+ ' Creo layer temporaneo per crocette
+ m_nTempLay = EgtCreateGroup(GDB_ID.ROOT)
+ EgtSetLevel(m_nTempLay, GDB_LV.TEMP)
' Reset punto acquisito
m_bPointP1Ok = 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)
+ ' Imposto modalità di acquisizione punti
+ PointModeCmBx.SelectedIndex = PT_MODE.DRAW
' Assegno parametri di lavorazione già definiti
DepthTxBx.Text = LenToString(m_dDepth, 1)
+ ' Inizializzo valori non ancora definiti
+ DirectionTxBx.Text = DoubleToString(m_dAngO - m_MainWindow.m_CurrentMachine.dDeltaC, 2)
+ SideAngleTxBx.Text = DoubleToString(m_dAngV, 2)
' Origine tavola
m_bRawOk = True
If Not EgtGetTableRef(1, m_ptTabOri) Then
@@ -81,6 +115,8 @@ Public Class GridCut
End Sub
Friend Sub GridCut_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
+ ' Rimuovo layer temporaneo per crocette
+ EgtErase(m_nTempLay)
' Rimuovo eventuale pezzo per taglio diretto
EraseDirectCutPart()
' Riattivo eventuali lavorazioni presenti
@@ -103,78 +139,134 @@ Public Class GridCut
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
+ ' 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)
+ m_ptPrev.z = m_ptRawMax.z
+ ' 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_bRawOk Then
Return
End If
- ' 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 = String.Empty
- GetPrivateProfileString(S_MACH_MACH, K_CURRSAW, "", sSaw, m_MainWindow.GetMachIniFile())
- ' Se punto da laser
- If LaserOnChBx.IsChecked Then
- ' Imposto come testa corrente il laser (senza utensile ovviamente)
- If Not EgtSetCalcTool("", "H3", 1) Then
+ ' 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
- ' Trasformo in posizione punta utensile in basso
- If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then
+ ' Ricavo dati lama corrente
+ Dim sSaw As String = String.Empty
+ GetPrivateProfileString(S_MACH_MACH, K_CURRSAW, "", sSaw, m_MainWindow.GetMachIniFile())
+ ' 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
+ End If
+ ' Trasformo in posizione punta utensile in basso
+ If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then
+ Return
+ End If
+ ' Ora imposto la lama corrente
+ If Not EgtSetCalcTool(sSaw, "H1", 1) Then
+ Return
+ End If
+ ' Altrimenti da lama
+ Else
+ ' Imposto la lama corrente
+ If Not EgtSetCalcTool(sSaw, "H1", 1) Then
+ Return
+ End If
+ ' Trasformo in posizione punta utensile in basso
+ If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then
+ Return
+ End If
+ End If
+ ' Calcolo direzione asse lama
+ If Not EgtGetCalcToolDirFromAngles(dR1, dR2, m_vtToolP1) Then
Return
End If
- ' Ora imposto la lama corrente
- If Not EgtSetCalcTool(sSaw, "H1", 1) Then
- Return
- End If
- ' Altrimenti da lama
+ ' Porto il tip nell'origine tavola
+ m_ptTipP1.ToLoc(New Frame3d(m_ptTabOri))
+ m_bPointP1Ok = True
+ ' Recupero il nome degli assi macchina
+ Dim sL1 As String = String.Empty
+ Dim sL2 As String = String.Empty
+ Dim sL3 As String = String.Empty
+ Dim sR1 As String = String.Empty
+ Dim sR2 As String = String.Empty
+ m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
+ ' Visualizzo macchina in posizione
+ EgtSetAxisPos(sL1, dL1)
+ EgtSetAxisPos(sL2, dL2)
+ EgtSetAxisPos(sL3, dL3)
+ EgtSetAxisPos(sR1, dR1)
+ EgtSetAxisPos(sR2, dR2)
+ ' Visualizzo quote
+ Dim sSawTip As String = "X" & LenToString(m_ptTipP1.x, 0) & " Y" & LenToString(m_ptTipP1.y, 0) &
+ " Z" & LenToString(m_ptTipP1.z, 0) & " C" & DoubleToString(dR1, 0) &
+ " B" & DoubleToString(dR2, 0)
+ 'SawTipTxBl.Text = sSawTip
+ ' Assegno angoli
+ Dim dTLen, dTAngV, dTAngO As Double
+ m_vtToolP1.ToSpherical(dTLen, dTAngV, dTAngO)
+ m_dAngO = dTAngO + 90
+ m_dAngV = 90 - dTAngV
+ DirectionTxBx.Text = DoubleToString(m_dAngO - m_MainWindow.m_CurrentMachine.dDeltaC, 2)
+ SideAngleTxBx.Text = DoubleToString(m_dAngV, 2)
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
- ' Trasformo in posizione punta utensile in basso
- If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then
- Return
- End If
+ 'Disegno macchina nella sua posizione reale
+ Dim dL1, dL2, dL3, dR1, dR2 As Double
+ m_MainWindow.m_CNCommunication.GetAxesPositions(dL1, dL2, dL3, dR1, dR2)
+ ' Recupero il nome degli assi macchina
+ Dim sL1 As String = String.Empty
+ Dim sL2 As String = String.Empty
+ Dim sL3 As String = String.Empty
+ Dim sR1 As String = String.Empty
+ Dim sR2 As String = String.Empty
+ m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
+ ' Visualizzo macchina in posizione
+ EgtSetAxisPos(sL1, dL1)
+ EgtSetAxisPos(sL2, dL2)
+ EgtSetAxisPos(sL3, dL3)
+ EgtSetAxisPos(sR1, dR1)
+ EgtSetAxisPos(sR2, dR2)
End If
- ' Calcolo direzione asse lama
- If Not EgtGetCalcToolDirFromAngles(dR1, dR2, m_vtToolP1) Then
- Return
- End If
- ' Porto il tip nell'origine tavola
- m_ptTipP1.ToLoc(New Frame3d(m_ptTabOri))
- m_bPointP1Ok = True
- ' Recupero il nome degli assi macchina
- Dim sL1 As String = String.Empty
- Dim sL2 As String = String.Empty
- Dim sL3 As String = String.Empty
- Dim sR1 As String = String.Empty
- Dim sR2 As String = String.Empty
- m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
- ' Visualizzo macchina in posizione
- EgtSetAxisPos(sL1, dL1)
- EgtSetAxisPos(sL2, dL2)
- EgtSetAxisPos(sL3, dL3)
- EgtSetAxisPos(sR1, dR1)
- EgtSetAxisPos(sR2, dR2)
- ' Visualizzo quote
- Dim sSawTip As String = "X" & LenToString(m_ptTipP1.x, 0) & " Y" & LenToString(m_ptTipP1.y, 0) &
- " Z" & LenToString(m_ptTipP1.z, 0) & " C" & DoubleToString(dR1, 0) &
- " B" & DoubleToString(dR2, 0)
- 'SawTipTxBl.Text = sSawTip
- ' Assegno angoli
- Dim dTLen, dTAngV, dTAngO As Double
- m_vtToolP1.ToSpherical(dTLen, dTAngV, dTAngO)
- m_dAngO = dTAngO + 90
- m_dAngV = 90 - dTAngV
- DirectionTxBx.Text = DoubleToString(m_dAngO - m_MainWindow.m_CurrentMachine.dDeltaC, 2)
- SideAngleTxBx.Text = DoubleToString(m_dAngV, 2)
+
' Disegno il taglio
CreateGridCut()
m_MainWindow.m_DirectCutPageUC.m_bShowMachine = True
@@ -190,6 +282,8 @@ Public Class GridCut
End Sub
Private Sub Point2Btn_Click(sender As Object, e As RoutedEventArgs) Handles Point2Btn.Click
+ ' Rimuovo eventuali crocette create acquisendo i punti nel disegno
+ EgtEmptyGroup(m_nTempLay)
' Deseleziono il bottone (poichè si seleziona automaticamente) così nel caso ci sia un errore rimane deselezionato
Point2Btn.IsChecked = False
' Reset punto non acquisito
@@ -198,69 +292,102 @@ Public Class GridCut
If Not m_bRawOk Then
Return
End If
- ' 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 = String.Empty
- GetPrivateProfileString(S_MACH_MACH, K_CURRSAW, "", sSaw, m_MainWindow.GetMachIniFile())
- ' Se punto da laser
- If LaserOnChBx.IsChecked Then
- ' Imposto come testa corrente il laser (senza utensile ovviamente)
- If Not EgtSetCalcTool("", "H3", 1) Then
+ ' 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
- ' Trasformo in posizione punta utensile in basso
- If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP2) Then
+ ' Ricavo dati lama corrente
+ Dim sSaw As String = String.Empty
+ GetPrivateProfileString(S_MACH_MACH, K_CURRSAW, "", sSaw, m_MainWindow.GetMachIniFile())
+ ' 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
+ End If
+ ' Trasformo in posizione punta utensile in basso
+ If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP2) Then
+ Return
+ End If
+ ' Ora imposto la lama corrente
+ If Not EgtSetCalcTool(sSaw, "H1", 1) Then
+ Return
+ End If
+ ' Altrimenti da lama
+ Else
+ ' Imposto la lama corrente
+ If Not EgtSetCalcTool(sSaw, "H1", 1) Then
+ Return
+ End If
+ ' Trasformo in posizione punta utensile in basso
+ If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP2) Then
+ Return
+ End If
+ End If
+ ' Calcolo direzione asse lama
+ If Not EgtGetCalcToolDirFromAngles(dR1, dR2, m_vtToolP2) Then
Return
End If
- ' Ora imposto la lama corrente
- If Not EgtSetCalcTool(sSaw, "H1", 1) Then
- Return
- End If
- ' Altrimenti da lama
+ ' Porto il tip nell'origine tavola
+ m_ptTipP2.ToLoc(New Frame3d(m_ptTabOri))
+ m_bPointP2Ok = True
+ ' Recupero il nome degli assi macchina
+ Dim sL1 As String = String.Empty
+ Dim sL2 As String = String.Empty
+ Dim sL3 As String = String.Empty
+ Dim sR1 As String = String.Empty
+ Dim sR2 As String = String.Empty
+ m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
+ ' Visualizzo macchina in posizione
+ EgtSetAxisPos(sL1, dL1)
+ EgtSetAxisPos(sL2, dL2)
+ EgtSetAxisPos(sL3, dL3)
+ EgtSetAxisPos(sR1, dR1)
+ EgtSetAxisPos(sR2, dR2)
+ ' Visualizzo quote
+ Dim sSawTip As String = "X" & LenToString(m_ptTipP2.x, 0) & " Y" & LenToString(m_ptTipP2.y, 0) &
+ " Z" & LenToString(m_ptTipP2.z, 0) & " C" & DoubleToString(dR1, 0) &
+ " B" & DoubleToString(dR2, 0)
+ 'SawTipTxBl.Text = sSawTip
+ ' Assegno angolo verticale da direzione utensile
+ Dim dTLen, dTAngV, dTAngO As Double
+ m_vtToolP2.ToSpherical(dTLen, dTAngV, dTAngO)
+ m_dAngV = 90 - dTAngV
+ SideAngleTxBx.Text = DoubleToString(m_dAngV, 2)
Else
+ ' Assegno punto selezionato nel disegno a m_ptTipP2
+ m_ptTipP2 = m_ptPrev
+ ' Porto il tip nell'origine tavola
+ m_ptTipP2.ToLoc(New Frame3d(m_ptTabOri))
+ m_bPointP2Ok = 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
- ' Trasformo in posizione punta utensile in basso
- If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP2) Then
- Return
- End If
+ 'Disegno macchina nella sua posizione reale
+ Dim dL1, dL2, dL3, dR1, dR2 As Double
+ m_MainWindow.m_CNCommunication.GetAxesPositions(dL1, dL2, dL3, dR1, dR2)
+ ' Recupero il nome degli assi macchina
+ Dim sL1 As String = String.Empty
+ Dim sL2 As String = String.Empty
+ Dim sL3 As String = String.Empty
+ Dim sR1 As String = String.Empty
+ Dim sR2 As String = String.Empty
+ m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
+ ' Visualizzo macchina in posizione
+ EgtSetAxisPos(sL1, dL1)
+ EgtSetAxisPos(sL2, dL2)
+ EgtSetAxisPos(sL3, dL3)
+ EgtSetAxisPos(sR1, dR1)
+ EgtSetAxisPos(sR2, dR2)
End If
- ' Calcolo direzione asse lama
- If Not EgtGetCalcToolDirFromAngles(dR1, dR2, m_vtToolP2) Then
- Return
- End If
- ' Porto il tip nell'origine tavola
- m_ptTipP2.ToLoc(New Frame3d(m_ptTabOri))
- m_bPointP2Ok = True
- ' Recupero il nome degli assi macchina
- Dim sL1 As String = String.Empty
- Dim sL2 As String = String.Empty
- Dim sL3 As String = String.Empty
- Dim sR1 As String = String.Empty
- Dim sR2 As String = String.Empty
- m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
- ' Visualizzo macchina in posizione
- EgtSetAxisPos(sL1, dL1)
- EgtSetAxisPos(sL2, dL2)
- EgtSetAxisPos(sL3, dL3)
- EgtSetAxisPos(sR1, dR1)
- EgtSetAxisPos(sR2, dR2)
- ' Visualizzo quote
- Dim sSawTip As String = "X" & LenToString(m_ptTipP2.x, 0) & " Y" & LenToString(m_ptTipP2.y, 0) &
- " Z" & LenToString(m_ptTipP2.z, 0) & " C" & DoubleToString(dR1, 0) &
- " B" & DoubleToString(dR2, 0)
- 'SawTipTxBl.Text = sSawTip
- ' Assegno angolo verticale da direzione utensile
- Dim dTLen, dTAngV, dTAngO As Double
- m_vtToolP2.ToSpherical(dTLen, dTAngV, dTAngO)
- m_dAngV = 90 - dTAngV
- SideAngleTxBx.Text = DoubleToString(m_dAngV, 2)
+
' Se il secondo punto non coincide con il primo, disegno il taglio
Dim vtDiff As Vector3d = m_ptTipP2 - m_ptTipP1
vtDiff.z = 0
diff --git a/MachiningDbPageUC.xaml b/MachiningDbPageUC.xaml
index 47280b0..9ce44c5 100644
--- a/MachiningDbPageUC.xaml
+++ b/MachiningDbPageUC.xaml
@@ -506,7 +506,7 @@
diff --git a/MultipleCut.xaml b/MultipleCut.xaml
index 4e38fd7..9476943 100644
--- a/MultipleCut.xaml
+++ b/MultipleCut.xaml
@@ -45,7 +45,14 @@
-
+
+
+
+
+
+
+
diff --git a/MultipleCut.xaml.vb b/MultipleCut.xaml.vb
index f2fef62..046f252 100644
--- a/MultipleCut.xaml.vb
+++ b/MultipleCut.xaml.vb
@@ -4,7 +4,9 @@ Public Class MultipleCut
' Riferimenti a pagine
Private m_MainWindow As MainWindow = Application.Current.MainWindow
- Private m_CurrProjPage As CurrentProjectPageUC
+ Private WithEvents m_CurrProjPage As CurrentProjectPageUC
+ ' Flag di pagina attiva
+ Private m_bActive As Boolean = False
' Origine tavola e dati grezzo
Private m_bRawOk As Boolean = False
@@ -27,21 +29,41 @@ Public Class MultipleCut
Private m_dLen As Double = 1000
Private m_dAngO As Double = 180
Private m_dAngV As Double = 0
+ ' 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
+
' Costanti
Private Const MAX_TAB_DEPTH As Double = 10.0
Private Const MIN_CUT_LEN As Double = 10.0
Private Const MAX_SIDE_ANG As Double = 60.0
Private Const DIRECTCUT As String = "DirectCut"
-
+ Private Const RAW_CENTER As String = "RawCenter"
+ ' Costanti che indicano la modalità di acquisizione dei punti
+ Private Enum PT_MODE As Integer
+ SAW = 0
+ LASER = 1
+ DRAW = 2
+ End Enum
+ 'Costante che indica il lato in cui posizionare i tagli
Private Enum CutSide As Integer
Left
Right
End Enum
Private Sub MultipleCut_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)
Point2Btn.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 11)
- LaserOnChBx.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 12)
DepthTxBl.Text = EgtMsg(MSG_DIRECTCUTPAGEUC + 13)
LenghtTxBl.Text = EgtMsg(MSG_DIRECTCUTPAGEUC + 14)
DirectionTxBl.Text = EgtMsg(MSG_DIRECTCUTPAGEUC + 15)
@@ -55,12 +77,23 @@ Public Class MultipleCut
Private Sub MultipleCut_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC
+ m_bActive = True
+ ' Creo layer temporaneo per crocette
+ m_nTempLay = EgtCreateGroup(GDB_ID.ROOT)
+ EgtSetLevel(m_nTempLay, GDB_LV.TEMP)
' Reset punto acquisito
m_bPointP1Ok = False
- 'SawTipTxBl.Text = String.Empty
+ ' 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)
+ ' Imposto modalità di acquisizione punti
+ PointModeCmBx.SelectedIndex = PT_MODE.DRAW
' Assegno parametri di lavorazione già definiti
DepthTxBx.Text = LenToString(m_dDepth, 1)
LenghtTxBx.Text = LenToString(m_dLen, 1)
+ ' Inizializzo valori non ancora definiti
+ DirectionTxBx.Text = DoubleToString(m_dAngO - m_MainWindow.m_CurrentMachine.dDeltaC, 2)
+ SideAngleTxBx.Text = DoubleToString(m_dAngV, 2)
' Origine tavola
m_bRawOk = True
If Not EgtGetTableRef(1, m_ptTabOri) Then
@@ -84,6 +117,8 @@ Public Class MultipleCut
End Sub
Friend Sub MultipleCut_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
+ ' Rimuovo layer temporaneo per crocette
+ EgtErase(m_nTempLay)
' Rimuovo eventuale pezzo per taglio diretto
EraseDirectCutPart()
' Riattivo eventuali lavorazioni presenti
@@ -106,78 +141,133 @@ Public Class MultipleCut
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
+ ' 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)
+ m_ptPrev.z = m_ptRawMax.z
+ ' 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_bRawOk Then
Return
End If
- ' 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 = String.Empty
- GetPrivateProfileString(S_MACH_MACH, K_CURRSAW, "", sSaw, m_MainWindow.GetMachIniFile())
- ' Se punto da laser
- If LaserOnChBx.IsChecked Then
- ' Imposto come testa corrente il laser (senza utensile ovviamente)
- If Not EgtSetCalcTool("", "H3", 1) Then
+ ' 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
- ' Trasformo in posizione punta utensile in basso
- If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then
+ ' Ricavo dati lama corrente
+ Dim sSaw As String = String.Empty
+ GetPrivateProfileString(S_MACH_MACH, K_CURRSAW, "", sSaw, m_MainWindow.GetMachIniFile())
+ ' 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
+ End If
+ ' Trasformo in posizione punta utensile in basso
+ If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then
+ Return
+ End If
+ ' Ora imposto la lama corrente
+ If Not EgtSetCalcTool(sSaw, "H1", 1) Then
+ Return
+ End If
+ ' Altrimenti da lama
+ Else
+ ' Imposto la lama corrente
+ If Not EgtSetCalcTool(sSaw, "H1", 1) Then
+ Return
+ End If
+ ' Trasformo in posizione punta utensile in basso
+ If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then
+ Return
+ End If
+ End If
+ ' Calcolo direzione asse lama
+ If Not EgtGetCalcToolDirFromAngles(dR1, dR2, m_vtToolP1) Then
Return
End If
- ' Ora imposto la lama corrente
- If Not EgtSetCalcTool(sSaw, "H1", 1) Then
- Return
- End If
- ' Altrimenti da lama
+ ' Porto il tip nell'origine tavola
+ m_ptTipP1.ToLoc(New Frame3d(m_ptTabOri))
+ m_bPointP1Ok = True
+ ' Recupero il nome degli assi macchina
+ Dim sL1 As String = String.Empty
+ Dim sL2 As String = String.Empty
+ Dim sL3 As String = String.Empty
+ Dim sR1 As String = String.Empty
+ Dim sR2 As String = String.Empty
+ m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
+ ' Visualizzo macchina in posizione
+ EgtSetAxisPos(sL1, dL1)
+ EgtSetAxisPos(sL2, dL2)
+ EgtSetAxisPos(sL3, dL3)
+ EgtSetAxisPos(sR1, dR1)
+ EgtSetAxisPos(sR2, dR2)
+ ' Visualizzo quote
+ Dim sSawTip As String = "X" & LenToString(m_ptTipP1.x, 0) & " Y" & LenToString(m_ptTipP1.y, 0) &
+ " Z" & LenToString(m_ptTipP1.z, 0) & " C" & DoubleToString(dR1, 0) &
+ " B" & DoubleToString(dR2, 0)
+ 'SawTipTxBl.Text = sSawTip
+ ' Assegno angoli
+ Dim dTLen, dTAngV, dTAngO As Double
+ m_vtToolP1.ToSpherical(dTLen, dTAngV, dTAngO)
+ m_dAngO = dTAngO + 90
+ m_dAngV = 90 - dTAngV
+ DirectionTxBx.Text = DoubleToString(m_dAngO - m_MainWindow.m_CurrentMachine.dDeltaC, 2)
+ SideAngleTxBx.Text = DoubleToString(m_dAngV, 2)
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
- ' Trasformo in posizione punta utensile in basso
- If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then
- Return
- End If
+ 'Disegno macchina nella sua posizione reale
+ Dim dL1, dL2, dL3, dR1, dR2 As Double
+ m_MainWindow.m_CNCommunication.GetAxesPositions(dL1, dL2, dL3, dR1, dR2)
+ ' Recupero il nome degli assi macchina
+ Dim sL1 As String = String.Empty
+ Dim sL2 As String = String.Empty
+ Dim sL3 As String = String.Empty
+ Dim sR1 As String = String.Empty
+ Dim sR2 As String = String.Empty
+ m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
+ ' Visualizzo macchina in posizione
+ EgtSetAxisPos(sL1, dL1)
+ EgtSetAxisPos(sL2, dL2)
+ EgtSetAxisPos(sL3, dL3)
+ EgtSetAxisPos(sR1, dR1)
+ EgtSetAxisPos(sR2, dR2)
End If
- ' Calcolo direzione asse lama
- If Not EgtGetCalcToolDirFromAngles(dR1, dR2, m_vtToolP1) Then
- Return
- End If
- ' Porto il tip nell'origine tavola
- m_ptTipP1.ToLoc(New Frame3d(m_ptTabOri))
- m_bPointP1Ok = True
- ' Recupero il nome degli assi macchina
- Dim sL1 As String = String.Empty
- Dim sL2 As String = String.Empty
- Dim sL3 As String = String.Empty
- Dim sR1 As String = String.Empty
- Dim sR2 As String = String.Empty
- m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
- ' Visualizzo macchina in posizione
- EgtSetAxisPos(sL1, dL1)
- EgtSetAxisPos(sL2, dL2)
- EgtSetAxisPos(sL3, dL3)
- EgtSetAxisPos(sR1, dR1)
- EgtSetAxisPos(sR2, dR2)
- ' Visualizzo quote
- Dim sSawTip As String = "X" & LenToString(m_ptTipP1.x, 0) & " Y" & LenToString(m_ptTipP1.y, 0) &
- " Z" & LenToString(m_ptTipP1.z, 0) & " C" & DoubleToString(dR1, 0) &
- " B" & DoubleToString(dR2, 0)
- 'SawTipTxBl.Text = sSawTip
- ' Assegno angoli
- Dim dTLen, dTAngV, dTAngO As Double
- m_vtToolP1.ToSpherical(dTLen, dTAngV, dTAngO)
- m_dAngO = dTAngO + 90
- m_dAngV = 90 - dTAngV
- DirectionTxBx.Text = DoubleToString(m_dAngO - m_MainWindow.m_CurrentMachine.dDeltaC, 2)
- SideAngleTxBx.Text = DoubleToString(m_dAngV, 2)
' Disegno il taglio
CreateMultipleCut()
m_MainWindow.m_DirectCutPageUC.m_bShowMachine = True
@@ -193,6 +283,8 @@ Public Class MultipleCut
End Sub
Private Sub Point2Btn_Click(sender As Object, e As RoutedEventArgs) Handles Point2Btn.Click
+ ' Rimuovo eventuali crocette create acquisendo i punti nel disegno
+ EgtEmptyGroup(m_nTempLay)
' Deseleziono il bottone (poichè si seleziona automaticamente) cos' nel caso ci sia un errore rimane deselezionato
Point2Btn.IsChecked = False
' Reset punto non acquisito
@@ -201,69 +293,102 @@ Public Class MultipleCut
If Not m_bRawOk Then
Return
End If
- ' 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 = String.Empty
- GetPrivateProfileString(S_MACH_MACH, K_CURRSAW, "", sSaw, m_MainWindow.GetMachIniFile())
- ' Se punto da laser
- If LaserOnChBx.IsChecked Then
- ' Imposto come testa corrente il laser (senza utensile ovviamente)
- If Not EgtSetCalcTool("", "H3", 1) Then
+ ' 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
- ' Trasformo in posizione punta utensile in basso
- If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP2) Then
+ ' Ricavo dati lama corrente
+ Dim sSaw As String = String.Empty
+ GetPrivateProfileString(S_MACH_MACH, K_CURRSAW, "", sSaw, m_MainWindow.GetMachIniFile())
+ ' 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
+ End If
+ ' Trasformo in posizione punta utensile in basso
+ If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP2) Then
+ Return
+ End If
+ ' Ora imposto la lama corrente
+ If Not EgtSetCalcTool(sSaw, "H1", 1) Then
+ Return
+ End If
+ ' Altrimenti da lama
+ Else
+ ' Imposto la lama corrente
+ If Not EgtSetCalcTool(sSaw, "H1", 1) Then
+ Return
+ End If
+ ' Trasformo in posizione punta utensile in basso
+ If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP2) Then
+ Return
+ End If
+ End If
+ ' Calcolo direzione asse lama
+ If Not EgtGetCalcToolDirFromAngles(dR1, dR2, m_vtToolP2) Then
Return
End If
- ' Ora imposto la lama corrente
- If Not EgtSetCalcTool(sSaw, "H1", 1) Then
- Return
- End If
- ' Altrimenti da lama
+ ' Porto il tip nell'origine tavola
+ m_ptTipP2.ToLoc(New Frame3d(m_ptTabOri))
+ m_bPointP2Ok = True
+ ' Recupero il nome degli assi macchina
+ Dim sL1 As String = String.Empty
+ Dim sL2 As String = String.Empty
+ Dim sL3 As String = String.Empty
+ Dim sR1 As String = String.Empty
+ Dim sR2 As String = String.Empty
+ m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
+ ' Visualizzo macchina in posizione
+ EgtSetAxisPos(sL1, dL1)
+ EgtSetAxisPos(sL2, dL2)
+ EgtSetAxisPos(sL3, dL3)
+ EgtSetAxisPos(sR1, dR1)
+ EgtSetAxisPos(sR2, dR2)
+ ' Visualizzo quote
+ Dim sSawTip As String = "X" & LenToString(m_ptTipP2.x, 0) & " Y" & LenToString(m_ptTipP2.y, 0) &
+ " Z" & LenToString(m_ptTipP2.z, 0) & " C" & DoubleToString(dR1, 0) &
+ " B" & DoubleToString(dR2, 0)
+ 'SawTipTxBl.Text = sSawTip
+ ' Assegno angolo verticale da direzione utensile
+ Dim dTLen, dTAngV, dTAngO As Double
+ m_vtToolP2.ToSpherical(dTLen, dTAngV, dTAngO)
+ m_dAngV = 90 - dTAngV
+ SideAngleTxBx.Text = DoubleToString(m_dAngV, 2)
Else
+ ' Assegno punto selezionato nel disegno a m_ptTipP2
+ m_ptTipP2 = m_ptPrev
+ ' Porto il tip nell'origine tavola
+ m_ptTipP2.ToLoc(New Frame3d(m_ptTabOri))
+ m_bPointP2Ok = 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
- ' Trasformo in posizione punta utensile in basso
- If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP2) Then
- Return
- End If
+ 'Disegno macchina nella sua posizione reale
+ Dim dL1, dL2, dL3, dR1, dR2 As Double
+ m_MainWindow.m_CNCommunication.GetAxesPositions(dL1, dL2, dL3, dR1, dR2)
+ ' Recupero il nome degli assi macchina
+ Dim sL1 As String = String.Empty
+ Dim sL2 As String = String.Empty
+ Dim sL3 As String = String.Empty
+ Dim sR1 As String = String.Empty
+ Dim sR2 As String = String.Empty
+ m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
+ ' Visualizzo macchina in posizione
+ EgtSetAxisPos(sL1, dL1)
+ EgtSetAxisPos(sL2, dL2)
+ EgtSetAxisPos(sL3, dL3)
+ EgtSetAxisPos(sR1, dR1)
+ EgtSetAxisPos(sR2, dR2)
End If
- ' Calcolo direzione asse lama
- If Not EgtGetCalcToolDirFromAngles(dR1, dR2, m_vtToolP2) Then
- Return
- End If
- ' Porto il tip nell'origine tavola
- m_ptTipP2.ToLoc(New Frame3d(m_ptTabOri))
- m_bPointP2Ok = True
- ' Recupero il nome degli assi macchina
- Dim sL1 As String = String.Empty
- Dim sL2 As String = String.Empty
- Dim sL3 As String = String.Empty
- Dim sR1 As String = String.Empty
- Dim sR2 As String = String.Empty
- m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
- ' Visualizzo macchina in posizione
- EgtSetAxisPos(sL1, dL1)
- EgtSetAxisPos(sL2, dL2)
- EgtSetAxisPos(sL3, dL3)
- EgtSetAxisPos(sR1, dR1)
- EgtSetAxisPos(sR2, dR2)
- ' Visualizzo quote
- Dim sSawTip As String = "X" & LenToString(m_ptTipP2.x, 0) & " Y" & LenToString(m_ptTipP2.y, 0) &
- " Z" & LenToString(m_ptTipP2.z, 0) & " C" & DoubleToString(dR1, 0) &
- " B" & DoubleToString(dR2, 0)
- 'SawTipTxBl.Text = sSawTip
- ' Assegno angolo verticale da direzione utensile
- Dim dTLen, dTAngV, dTAngO As Double
- m_vtToolP2.ToSpherical(dTLen, dTAngV, dTAngO)
- m_dAngV = 90 - dTAngV
- SideAngleTxBx.Text = DoubleToString(m_dAngV, 2)
+
' Se il secondo punto non coincide con il primo, disegno il taglio
Dim vtDiff As Vector3d = m_ptTipP2 - m_ptTipP1
vtDiff.z = 0
diff --git a/SingleCutUC.xaml b/SingleCutUC.xaml
index 24f0c02..5bf6199 100644
--- a/SingleCutUC.xaml
+++ b/SingleCutUC.xaml
@@ -48,7 +48,14 @@
-
+
+
+
+
+
+
+
diff --git a/SingleCutUC.xaml.vb b/SingleCutUC.xaml.vb
index 4f7db0e..e9993ee 100644
--- a/SingleCutUC.xaml.vb
+++ b/SingleCutUC.xaml.vb
@@ -4,7 +4,9 @@ Public Class SingleCutUC
' Riferimenti a pagine
Private m_MainWindow As MainWindow = Application.Current.MainWindow
- Private m_CurrProjPage As CurrentProjectPageUC
+ Private WithEvents m_CurrProjPage As CurrentProjectPageUC
+ ' Flag di pagina attiva
+ Private m_bActive As Boolean = False
' Origine tavola e dati grezzo
Private m_bRawOk As Boolean = False
@@ -25,16 +27,36 @@ Public Class SingleCutUC
Private m_dLen As Double = 1000
Private m_dAngO As Double = 180
Private m_dAngV As Double = 0
+ ' 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
+
' Costanti
Private Const MAX_TAB_DEPTH As Double = 10.0
Private Const MIN_CUT_LEN As Double = 10.0
Private Const MAX_SIDE_ANG As Double = 60.0
Private Const DIRECTCUT As String = "DirectCut"
+ Private Const RAW_CENTER As String = "RawCenter"
+ ' Costanti che indicano la modalità di acquisizione dei punti
+ Private Enum PT_MODE As Integer
+ SAW = 0
+ LASER = 1
+ DRAW = 2
+ End Enum
Private Sub SingleCut_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)
Point2Btn.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 11)
- LaserOnChBx.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 12)
DepthTxBl.Text = EgtMsg(MSG_DIRECTCUTPAGEUC + 13)
LenghtTxBl.Text = EgtMsg(MSG_DIRECTCUTPAGEUC + 14)
DirectionTxBl.Text = EgtMsg(MSG_DIRECTCUTPAGEUC + 15)
@@ -44,12 +66,24 @@ Public Class SingleCutUC
Private Sub SingleCut_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC
+ m_bActive = True
+ ' Creo layer temporaneo per crocette
+ m_nTempLay = EgtCreateGroup(GDB_ID.ROOT)
+ EgtSetLevel(m_nTempLay, GDB_LV.TEMP)
' Reset punto acquisito
m_bPointP1Ok = False
SawTipTxBl.Text = String.Empty
+ ' 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)
+ ' Imposto modalità di acquisizione punti
+ PointModeCmBx.SelectedIndex = PT_MODE.DRAW
' Assegno parametri di lavorazione già definiti
DepthTxBx.Text = LenToString(m_dDepth, 1)
LenghtTxBx.Text = LenToString(m_dLen, 1)
+ ' Inizializzo valori non ancora definiti
+ DirectionTxBx.Text = DoubleToString(m_dAngO - m_MainWindow.m_CurrentMachine.dDeltaC, 2)
+ SideAngleTxBx.Text = DoubleToString(m_dAngV, 2)
' Origine tavola
m_bRawOk = True
If Not EgtGetTableRef(1, m_ptTabOri) Then
@@ -73,6 +107,8 @@ Public Class SingleCutUC
End Sub
Friend Sub SingleCut_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
+ ' Rimuovo layer temporaneo per crocette
+ EgtErase(m_nTempLay)
' Rimuovo eventuale pezzo per taglio diretto
EraseDirectCutPart()
' Riattivo eventuali lavorazioni presenti
@@ -95,7 +131,30 @@ Public Class SingleCutUC
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
+ ' 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)
+ m_ptPrev.z = m_ptRawMax.z
+ ' 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
SawTipTxBl.Text = String.Empty
@@ -103,71 +162,103 @@ Public Class SingleCutUC
If Not m_bRawOk Then
Return
End If
- ' 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 = String.Empty
- GetPrivateProfileString(S_MACH_MACH, K_CURRSAW, "", sSaw, m_MainWindow.GetMachIniFile())
- ' Se punto da laser
- If LaserOnChBx.IsChecked Then
- ' Imposto come testa corrente il laser (senza utensile ovviamente)
- If Not EgtSetCalcTool("", "H3", 1) Then
+ ' 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
- ' Trasformo in posizione punta utensile in basso
- If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then
+ ' 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
+ End If
+ ' Trasformo in posizione punta utensile in basso
+ If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then
+ Return
+ End If
+ ' Ora imposto la lama corrente
+ If Not EgtSetCalcTool(sSaw, "H1", 1) Then
+ Return
+ End If
+ ' Altrimenti da lama
+ Else
+ ' Imposto la lama corrente
+ If Not EgtSetCalcTool(sSaw, "H1", 1) Then
+ Return
+ End If
+ ' Trasformo in posizione punta utensile in basso
+ If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then
+ Return
+ End If
+ End If
+ ' Calcolo direzione asse lama
+ If Not EgtGetCalcToolDirFromAngles(dR1, dR2, m_vtToolP1) Then
Return
End If
- ' Ora imposto la lama corrente
- If Not EgtSetCalcTool(sSaw, "H1", 1) Then
- Return
- End If
- ' Altrimenti da lama
+ ' Porto il tip nell'origine tavola
+ m_ptTipP1.ToLoc(New Frame3d(m_ptTabOri))
+ m_bPointP1Ok = True
+ ' Recupero il nome degli assi macchina
+ Dim sL1 As String = String.Empty
+ Dim sL2 As String = String.Empty
+ Dim sL3 As String = String.Empty
+ Dim sR1 As String = String.Empty
+ Dim sR2 As String = String.Empty
+ m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
+ ' Visualizzo macchina in posizione
+ EgtSetAxisPos(sL1, dL1)
+ EgtSetAxisPos(sL2, dL2)
+ EgtSetAxisPos(sL3, dL3)
+ EgtSetAxisPos(sR1, dR1)
+ EgtSetAxisPos(sR2, dR2)
+ ' Visualizzo quote
+ Dim sSawTip As String = "X" & LenToString(m_ptTipP1.x, 0) & " Y" & LenToString(m_ptTipP1.y, 0) &
+ " Z" & LenToString(m_ptTipP1.z, 0) & " C" & DoubleToString(dR1, 0) &
+ " B" & DoubleToString(dR2, 0)
+ SawTipTxBl.Text = sSawTip
+ ' Assegno angoli
+ Dim dTLen, dTAngV, dTAngO As Double
+ m_vtToolP1.ToSpherical(dTLen, dTAngV, dTAngO)
+ m_dAngO = dTAngO + 90
+ m_dAngV = 90 - dTAngV
+ DirectionTxBx.Text = DoubleToString(m_dAngO - m_MainWindow.m_CurrentMachine.dDeltaC, 2)
+ SideAngleTxBx.Text = DoubleToString(m_dAngV, 2)
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
- ' Trasformo in posizione punta utensile in basso
- If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then
- Return
- End If
+ 'Disegno macchina nella sua posizione reale
+ Dim dL1, dL2, dL3, dR1, dR2 As Double
+ m_MainWindow.m_CNCommunication.GetAxesPositions(dL1, dL2, dL3, dR1, dR2)
+ ' Recupero il nome degli assi macchina
+ Dim sL1 As String = String.Empty
+ Dim sL2 As String = String.Empty
+ Dim sL3 As String = String.Empty
+ Dim sR1 As String = String.Empty
+ Dim sR2 As String = String.Empty
+ m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
+ ' Visualizzo macchina in posizione
+ EgtSetAxisPos(sL1, dL1)
+ EgtSetAxisPos(sL2, dL2)
+ EgtSetAxisPos(sL3, dL3)
+ EgtSetAxisPos(sR1, dR1)
+ EgtSetAxisPos(sR2, dR2)
End If
- ' Calcolo direzione asse lama
- If Not EgtGetCalcToolDirFromAngles(dR1, dR2, m_vtToolP1) Then
- Return
- End If
- ' Porto il tip nell'origine tavola
- m_ptTipP1.ToLoc(New Frame3d(m_ptTabOri))
- m_bPointP1Ok = True
- ' Recupero il nome degli assi macchina
- Dim sL1 As String = String.Empty
- Dim sL2 As String = String.Empty
- Dim sL3 As String = String.Empty
- Dim sR1 As String = String.Empty
- Dim sR2 As String = String.Empty
- m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
- ' Visualizzo macchina in posizione
- EgtSetAxisPos(sL1, dL1)
- EgtSetAxisPos(sL2, dL2)
- EgtSetAxisPos(sL3, dL3)
- EgtSetAxisPos(sR1, dR1)
- EgtSetAxisPos(sR2, dR2)
- ' Visualizzo quote
- Dim sSawTip As String = "X" & LenToString(m_ptTipP1.x, 0) & " Y" & LenToString(m_ptTipP1.y, 0) &
- " Z" & LenToString(m_ptTipP1.z, 0) & " C" & DoubleToString(dR1, 0) &
- " B" & DoubleToString(dR2, 0)
- SawTipTxBl.Text = sSawTip
- ' Assegno angoli
- Dim dTLen, dTAngV, dTAngO As Double
- m_vtToolP1.ToSpherical(dTLen, dTAngV, dTAngO)
- m_dAngO = dTAngO + 90
- m_dAngV = 90 - dTAngV
- DirectionTxBx.Text = DoubleToString(m_dAngO - m_MainWindow.m_CurrentMachine.dDeltaC, 2)
- SideAngleTxBx.Text = DoubleToString(m_dAngV, 2)
+
' Disegno il taglio
CreateSingleCut()
m_MainWindow.m_DirectCutPageUC.m_bShowMachine = True
@@ -183,6 +274,8 @@ Public Class SingleCutUC
End Sub
Private Sub Point2Btn_Click(sender As Object, e As RoutedEventArgs) Handles Point2Btn.Click
+ ' Rimuovo eventuali crocette create acquisendo i punti nel disegno
+ EgtEmptyGroup(m_nTempLay)
' Deseleziono il bottone (poichè si seleziona automaticamente) così nel caso ci sia un errore rimane deselezionato
Point2Btn.IsChecked = False
' Reset punto non acquisito
@@ -192,69 +285,102 @@ Public Class SingleCutUC
If Not m_bRawOk Then
Return
End If
- ' 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 = String.Empty
- GetPrivateProfileString(S_MACH_MACH, K_CURRSAW, "", sSaw, m_MainWindow.GetMachIniFile())
- ' Se punto da laser
- If LaserOnChBx.IsChecked Then
- ' Imposto come testa corrente il laser (senza utensile ovviamente)
- If Not EgtSetCalcTool("", "H3", 1) Then
+ ' 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
- ' Trasformo in posizione punta utensile in basso
- If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP2) Then
+ ' Ricavo dati lama corrente
+ Dim sSaw As String = String.Empty
+ GetPrivateProfileString(S_MACH_MACH, K_CURRSAW, "", sSaw, m_MainWindow.GetMachIniFile())
+ ' 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
+ End If
+ ' Trasformo in posizione punta utensile in basso
+ If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP2) Then
+ Return
+ End If
+ ' Ora imposto la lama corrente
+ If Not EgtSetCalcTool(sSaw, "H1", 1) Then
+ Return
+ End If
+ ' Altrimenti da lama
+ Else
+ ' Imposto la lama corrente
+ If Not EgtSetCalcTool(sSaw, "H1", 1) Then
+ Return
+ End If
+ ' Trasformo in posizione punta utensile in basso
+ If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP2) Then
+ Return
+ End If
+ End If
+ ' Calcolo direzione asse lama
+ If Not EgtGetCalcToolDirFromAngles(dR1, dR2, m_vtToolP2) Then
Return
End If
- ' Ora imposto la lama corrente
- If Not EgtSetCalcTool(sSaw, "H1", 1) Then
- Return
- End If
- ' Altrimenti da lama
+ ' Porto il tip nell'origine tavola
+ m_ptTipP2.ToLoc(New Frame3d(m_ptTabOri))
+ m_bPointP2Ok = True
+ ' Recupero il nome degli assi macchina
+ Dim sL1 As String = String.Empty
+ Dim sL2 As String = String.Empty
+ Dim sL3 As String = String.Empty
+ Dim sR1 As String = String.Empty
+ Dim sR2 As String = String.Empty
+ m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
+ ' Visualizzo macchina in posizione
+ EgtSetAxisPos(sL1, dL1)
+ EgtSetAxisPos(sL2, dL2)
+ EgtSetAxisPos(sL3, dL3)
+ EgtSetAxisPos(sR1, dR1)
+ EgtSetAxisPos(sR2, dR2)
+ ' Visualizzo quote
+ Dim sSawTip As String = "X" & LenToString(m_ptTipP2.x, 0) & " Y" & LenToString(m_ptTipP2.y, 0) &
+ " Z" & LenToString(m_ptTipP2.z, 0) & " C" & DoubleToString(dR1, 0) &
+ " B" & DoubleToString(dR2, 0)
+ SawTipTxBl.Text = sSawTip
+ ' Assegno angoli
+ Dim dTLen, dTAngV, dTAngO As Double
+ m_vtToolP2.ToSpherical(dTLen, dTAngV, dTAngO)
+ m_dAngV = 90 - dTAngV
+ SideAngleTxBx.Text = DoubleToString(m_dAngV, 2)
Else
+ ' Assegno punto selezionato nel disegno a m_ptTipP2
+ m_ptTipP2 = m_ptPrev
+ ' Porto il tip nell'origine tavola
+ m_ptTipP2.ToLoc(New Frame3d(m_ptTabOri))
+ m_bPointP2Ok = 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
- ' Trasformo in posizione punta utensile in basso
- If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP2) Then
- Return
- End If
+ 'Disegno macchina nella sua posizione reale
+ Dim dL1, dL2, dL3, dR1, dR2 As Double
+ m_MainWindow.m_CNCommunication.GetAxesPositions(dL1, dL2, dL3, dR1, dR2)
+ ' Recupero il nome degli assi macchina
+ Dim sL1 As String = String.Empty
+ Dim sL2 As String = String.Empty
+ Dim sL3 As String = String.Empty
+ Dim sR1 As String = String.Empty
+ Dim sR2 As String = String.Empty
+ m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
+ ' Visualizzo macchina in posizione
+ EgtSetAxisPos(sL1, dL1)
+ EgtSetAxisPos(sL2, dL2)
+ EgtSetAxisPos(sL3, dL3)
+ EgtSetAxisPos(sR1, dR1)
+ EgtSetAxisPos(sR2, dR2)
End If
- ' Calcolo direzione asse lama
- If Not EgtGetCalcToolDirFromAngles(dR1, dR2, m_vtToolP2) Then
- Return
- End If
- ' Porto il tip nell'origine tavola
- m_ptTipP2.ToLoc(New Frame3d(m_ptTabOri))
- m_bPointP2Ok = True
- ' Recupero il nome degli assi macchina
- Dim sL1 As String = String.Empty
- Dim sL2 As String = String.Empty
- Dim sL3 As String = String.Empty
- Dim sR1 As String = String.Empty
- Dim sR2 As String = String.Empty
- m_MainWindow.m_CNCommunication.GetAxesNames(sL1, sL2, sL3, sR1, sR2)
- ' Visualizzo macchina in posizione
- EgtSetAxisPos(sL1, dL1)
- EgtSetAxisPos(sL2, dL2)
- EgtSetAxisPos(sL3, dL3)
- EgtSetAxisPos(sR1, dR1)
- EgtSetAxisPos(sR2, dR2)
- ' Visualizzo quote
- Dim sSawTip As String = "X" & LenToString(m_ptTipP2.x, 0) & " Y" & LenToString(m_ptTipP2.y, 0) &
- " Z" & LenToString(m_ptTipP2.z, 0) & " C" & DoubleToString(dR1, 0) &
- " B" & DoubleToString(dR2, 0)
- SawTipTxBl.Text = sSawTip
- ' Assegno angoli
- Dim dTLen, dTAngV, dTAngO As Double
- m_vtToolP2.ToSpherical(dTLen, dTAngV, dTAngO)
- m_dAngV = 90 - dTAngV
- SideAngleTxBx.Text = DoubleToString(m_dAngV, 2)
+
' Se il secondo punto non coincide con il primo, disegno il taglio
Dim vtDiff As Vector3d = m_ptTipP2 - m_ptTipP1
vtDiff.z = 0
@@ -376,6 +502,8 @@ Public Class SingleCutUC
m_bCutOk = False
Return False
End If
+ ' Rimuovo eventuali crocette create acquisendo i punti nel disegno
+ EgtEmptyGroup(m_nTempLay)
' Spessore grezzo
Dim dRawHeight As Double = m_ptRawMax.z - m_ptRawMin.z
' Rimuovo eventuale vecchio pezzo per taglio diretto