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