From 1f33c844b7def974db0a3bc76d60288a963fc658 Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Wed, 9 Mar 2016 18:44:19 +0000 Subject: [PATCH] =?UTF-8?q?OmagCUT=20:=20-=20Aggiunta=20spianatura.=20-=20?= =?UTF-8?q?Aggiunta=20verifica=20nome=20gi=C3=A0=20presente=20in=20salva?= =?UTF-8?q?=20con=20nome.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DirectCutPageUC.xaml | 2 + DirectCutPageUC.xaml.vb | 11 +- FlatteningCut.xaml | 95 ++++++ FlatteningCut.xaml.vb | 694 ++++++++++++++++++++++++++++++++++++++++ MultipleCut.xaml.vb | 2 + OmagCUT.vbproj | 7 + SaveNameWD.xaml | 3 +- SaveNameWD.xaml.vb | 16 +- 8 files changed, 826 insertions(+), 4 deletions(-) create mode 100644 FlatteningCut.xaml create mode 100644 FlatteningCut.xaml.vb diff --git a/DirectCutPageUC.xaml b/DirectCutPageUC.xaml index 0d405eb..d50983c 100644 --- a/DirectCutPageUC.xaml +++ b/DirectCutPageUC.xaml @@ -64,6 +64,8 @@ Style="{StaticResource OmagCut_YellowTextButton}"/> + + + + + + diff --git a/FlatteningCut.xaml.vb b/FlatteningCut.xaml.vb new file mode 100644 index 0000000..6876ebb --- /dev/null +++ b/FlatteningCut.xaml.vb @@ -0,0 +1,694 @@ +Imports EgtUILib + +Public Class FlatteningCut + + ' Riferimenti a pagine + Private m_MainWindow As MainWindow = Application.Current.MainWindow + 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 + Private m_ptTabOri As Point3d + Private m_ptRawMin As Point3d + Private m_ptRawMax As Point3d + ' Parametri P1 acquisito + Private m_bPointP1Ok As Boolean = False + Private m_ptTipP1 As Point3d + Private m_vtToolP1 As Vector3d + ' Parametri P2 acquisito + Private m_bPointP2Ok As Boolean = False + Private m_ptTipP2 As Point3d + Private m_vtToolP2 As Vector3d + ' Lato di creazione dei tagli + Private m_bCutSide As CutSide = CutSide.Left + ' Parametri della lavorazione + Private m_bCutOk As Boolean = False + Private m_dDepth As Double = 0 + Private m_dLen As Double = 500 + Private m_dWid As Double = 500 + Private m_dAngO As Double = 180 + Private m_dAngV As Double = 0 + Private m_dOverlap As Double = 1 + ' 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 MIN_CUT_WID 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 FlatteningCut_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) + DepthTxBl.Text = EgtMsg(MSG_DIRECTCUTPAGEUC + 13) + LenghtTxBl.Text = EgtMsg(MSG_DIRECTCUTPAGEUC + 14) + DirectionTxBl.Text = EgtMsg(MSG_DIRECTCUTPAGEUC + 15) + WidthTxBl.Text = EgtMsg(MSG_DIRECTCUTPAGEUC + 26) + OverlapTxBl.Text = EgtMsg(MSG_DIRECTCUTPAGEUC + 27) + SideChBx.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 23) + OkBtn.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 30) + + End Sub + + Private Sub FlatteningCut_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) + LenghtTxBx.Text = LenToString(m_dLen, 1) + ' Inizializzo valori non ancora definiti + DirectionTxBx.Text = DoubleToString(m_dAngO - m_MainWindow.m_CurrentMachine.dDeltaC, 2) + WidthTxBx.Text = DoubleToString(m_dWid, 2) + OverlapTxBx.Text = DoubleToString(m_dOverlap, 2) + ' Origine tavola + m_bRawOk = True + If Not EgtGetTableRef(1, m_ptTabOri) Then + m_bRawOk = False + EgtOutLog("Error on TableRef1") + End If + ' Dati del grezzo + If Not GetRawBox(m_ptRawMin, m_ptRawMax) Then + m_bRawOk = False + EgtOutLog("Error on RawBox") + End If + ' Reset taglio e disabilito bottone esecuzione + m_bCutOk = False + UpdateOkBtn() + ' Disabilito bottone secondo punto + Point2Btn.IsEnabled = False + ' Deseleziono bottone primo punto + Point1Btn.IsChecked = False + ' Disabilito registrazione progetto modificato + EgtDisableModified() + 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 + ActivateAllMachinings() + ' Abilito registrazione progetto modificato + EgtEnableModified() + ' Nascondo la macchina + m_MainWindow.m_DirectCutPageUC.m_bShowMachine = False + EgtSetMachineLook(MCH_LOOK.TAB) + EgtDraw() + End Sub + + Private Sub UpdateOkBtn() + If m_bCutOk Then + OkBtn.IsEnabled = True + OkBtn.Foreground = Brushes.Black + Else + OkBtn.IsEnabled = False + OkBtn.Foreground = Brushes.DarkGray + 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) + Dim dPtPrevZ As Double = m_ptPrev.z + m_ptPrev.z = m_ptRawMax.z + ' Se direzione di vista calcolabile e da sopra posso aggiustare anche XY + Dim dAngVertDeg, dAngHorizDeg As Double + If EgtGetGenericView(dAngVertDeg, dAngHorizDeg) Then + Dim vtDir As Vector3d = Vector3d.FromSpherical(1, dAngVertDeg, dAngHorizDeg) + If vtDir.z > EPS_SMALL Then + m_ptPrev.z = dPtPrevZ + m_ptPrev += vtDir * (m_ptRawMax.z - m_ptPrev.z) / vtDir.z + End If + End If + ' Disegno crocetta che indica il punto acquisito + CreateCross(m_nTempLay, m_ptPrev) + EgtDraw() + End Sub + + Private Sub Point1Btn_Click(sender As Object, e As RoutedEventArgs) Handles Point1Btn.Click + ' Rimuovo eventuali crocette create acquisendo i punti nel disegno + EgtEmptyGroup(m_nTempLay) + ' Reset punto non acquisito + m_bPointP1Ok = False + ' Verifico configurazione tavola e grezzo + If Not m_bRawOk Then + Return + End If + ' Se acquisizone lama o laser + If PointModeCmBx.SelectedIndex = PT_MODE.SAW Or PointModeCmBx.SelectedIndex = PT_MODE.LASER Then + + ' Recupero la posizione macchina + Dim dL1, dL2, dL3, dR1, dR2 As Double + If Not m_MainWindow.m_CNCommunication.GetAxesPositions(dL1, dL2, dL3, dR1, dR2) Then + Return + End If + ' Ricavo dati lama corrente + Dim sSaw As String = 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 + ' 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) + Else + ' Assegno punto selezionato nel disegno a m_ptTipP1 + m_ptTipP1 = m_ptPrev + ' Porto il tip nell'origine tavola + m_ptTipP1.ToLoc(New Frame3d(m_ptTabOri)) + m_bPointP1Ok = True + ' Ricavo dati lama corrente + Dim sSaw As String = m_MainWindow.m_CurrentMachine.sCurrSaw + ' Imposto la lama corrente + If Not EgtSetCalcTool(sSaw, "H1", 1) Then + Return + End If + 'Disegno 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 + ' Disegno il taglio + CreateFlatteringCut() + m_MainWindow.m_DirectCutPageUC.m_bShowMachine = True + EgtSetMachineLook(m_MainWindow.m_DirectCutPageUC.m_nMachLook) + EgtDraw() + ' Seleziono il bottone per indicare che il primo punto è stato acquisito + Point1Btn.IsChecked = True + ' Abilito e deseleziono secondo punto + Point2Btn.IsEnabled = True + Point2Btn.IsChecked = False + ' Annullo secondo punto selezionato + m_bPointP2Ok = False + 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 + m_bPointP2Ok = False + ' Verifico configurazione tavola e grezzo + If Not m_bRawOk Then + Return + End If + ' Se acquisizone lama o laser + If PointModeCmBx.SelectedIndex = PT_MODE.SAW Or PointModeCmBx.SelectedIndex = PT_MODE.LASER Then + + ' Recupero la posizione macchina + Dim dL1, dL2, dL3, dR1, dR2 As Double + If Not m_MainWindow.m_CNCommunication.GetAxesPositions(dL1, dL2, dL3, dR1, dR2) Then + Return + End If + ' Ricavo dati lama corrente + Dim sSaw As String = 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 + ' 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 + 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 + '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 + + ' Se il secondo punto non coincide con il primo, disegno il taglio + Dim vtDiff As Vector3d = m_ptTipP2 - m_ptTipP1 + vtDiff.z = 0 + Dim dLen As Double + Dim dAngVertDeg As Double + Dim dAngOrizzDeg As Double + vtDiff.ToSpherical(dLen, dAngVertDeg, dAngOrizzDeg) + If dLen > EPS_SMALL Then + m_dLen = dLen + LenghtTxBx.Text = LenToString(dLen, 1) + m_dAngO = dAngOrizzDeg + DirectionTxBx.Text = DoubleToString(m_dAngO - m_MainWindow.m_CurrentMachine.dDeltaC, 2) + Create2PointsFlatteringCut() + m_MainWindow.m_DirectCutPageUC.m_bShowMachine = True + EgtSetMachineLook(m_MainWindow.m_DirectCutPageUC.m_nMachLook) + EgtDraw() + ' Seleziono il bottone per indicare che il secondo punto è stato acquisito + Point2Btn.IsChecked = True + Else + Point1Btn_Click(sender, e) + ' Deseleziono il bottone per indicare che il secondo punto non è stato acquisito perchè uguale al primo + Point2Btn.IsChecked = False + End If + End Sub + + Private Sub DepthTxBx_EgtClosed(sender As Object, e As EventArgs) Handles DepthTxBx.EgtClosed + ' Verifico che l'affondamento impostato non sia superiore a quello massimo + Dim dMaxDepth = m_ptRawMax.z - m_ptRawMin.z + MAX_TAB_DEPTH + Dim dDepth As Double = 0 + StringToLen(DepthTxBx.Text, dDepth) + If dDepth < 0 Then + m_dDepth = 0 + ElseIf dDepth > dMaxDepth Then + m_dDepth = dMaxDepth + Else + m_dDepth = dDepth + End If + DepthTxBx.Text = LenToString(m_dDepth, 2) + ' Disegno il taglio + CreateFlatteringCut() + EgtDraw() + End Sub + + Private Sub LenghtTxBx_EgtClosed(sender As Object, e As EventArgs) Handles LenghtTxBx.EgtClosed + ' Verifico che la lunghezza del taglio impostata non sia inferiore a quella minima + Dim dLenght As Double = 0 + StringToLen(LenghtTxBx.Text, dLenght) + If dLenght < MIN_CUT_LEN Then + m_dLen = MIN_CUT_LEN + Else + m_dLen = dLenght + End If + LenghtTxBx.Text = LenToString(m_dLen, 2) + ' Disegno il taglio + CreateFlatteringCut() + EgtDraw() + End Sub + + Private Sub WidthTxBx_EgtClosed(sender As Object, e As EventArgs) Handles WidthTxBx.EgtClosed + ' Verifico che la larghezza del taglio impostata non sia inferiore a quella minima + Dim dWidth As Double = 0 + StringToLen(WidthTxBx.Text, dWidth) + If dWidth < MIN_CUT_WID Then + m_dWid = MIN_CUT_WID + Else + m_dWid = dWidth + End If + WidthTxBx.Text = LenToString(m_dWid, 2) + ' Disegno il taglio + CreateFlatteringCut() + EgtDraw() + End Sub + + Private Sub DirectionTxBx_EgtClosed(sender As Object, e As EventArgs) Handles DirectionTxBx.EgtClosed + ' Assegno il nuovo valore di direzione + Dim dDirection As Double = 0 + StringToDouble(DirectionTxBx.Text, dDirection) + dDirection += m_MainWindow.m_CurrentMachine.dDeltaC + m_dAngO = dDirection + ' Disegno il taglio + CreateFlatteringCut() + EgtDraw() + End Sub + + Private Sub OverlapTxBx_EgtClosed(sender As Object, e As EventArgs) Handles OverlapTxBx.EgtClosed + ' Recupero spessore della lama correntemente attiva + Dim dThick As Double = 0 + EgtTdbGetCurrToolParam(MCH_TP.THICK, dThick) + ' Verifico che la sovrapposizione non sia superiore allo spessore della lama + Dim dOverlap As Double = 0 + StringToDouble(OverlapTxBx.Text, dOverlap) + If dOverlap < 0 Then + m_dOverlap = 0 + ElseIf dOverlap > dThick Then + m_dOverlap = dThick + Else + m_dOverlap = dOverlap + End If + OverlapTxBx.Text = DoubleToString(m_dOverlap, 2) + ' Disegno il taglio + CreateFlatteringCut() + EgtDraw() + End Sub + + Private Sub SideChBx_Click(sender As Object, e As EventArgs) Handles SideChBx.Click + ' Disegno il taglio + If m_bPointP2Ok Then + Create2PointsFlatteringCut() + Else + CreateFlatteringCut() + End If + EgtDraw() + End Sub + + Private Sub OkBtn_Click(sender As Object, e As RoutedEventArgs) Handles OkBtn.Click + ' Verifico ci sia un taglio valido + If Not m_bCutOk Then + Return + End If + ' Salvo il progetto con le lavorazioni + Dim sMchPath As String = m_MainWindow.GetTempDir() & "\" & "DirectProj.nge" + m_MainWindow.m_CurrentProjectPageUC.SaveFile(sMchPath) + ' Genero file CNC (lancio anche se errore in precedenza) + Dim sCncPath As String = m_MainWindow.GetCncDir() & "\DirectCut.xpi" + Dim bOk As Boolean = EgtGenerate(sCncPath, "OmagCut") + ' Se errore in generazione, segnalo l'errore ed esco + If Not bOk Then + m_CurrProjPage.SetErrorMessage(EgtMsg(90314)) 'Errore nella generazione del programma CN + Return + End If + ' Download programma (eventuali errori sono segnalati dalla funzione) + If m_MainWindow.m_CNCommunication.SendProgram(sCncPath, 900) Then + ' copio il progetto corrente come progetto in lavorazione + Dim sWrkPath As String = m_MainWindow.GetTempDir() & "\" & "WorkProj.nge" + My.Computer.FileSystem.CopyFile(sMchPath, sWrkPath, True) + End If + End Sub + + Private Sub ExitBtn_Click(sender As Object, e As RoutedEventArgs) Handles ExitBtn.Click + m_MainWindow.m_DirectCutPageUC.LeftButtonGrid.Children.Remove(Me) + m_MainWindow.m_DirectCutPageUC.m_ActiveDirectCutPage = DirectCutPageUC.DirectCutPages.DirectCut + End Sub + + Private Function CreateFlatteringCut() As Boolean + ' Verifico sia definito il punto iniziale e il grezzo + If Not m_bPointP1Ok Or Not m_bRawOk Then + m_bCutOk = False + Return False + End If + ' Spessore grezzo + Dim dRawHeight As Double = m_ptRawMax.z - m_ptRawMin.z + ' Rimuovo eventuale vecchio pezzo per taglio diretto + EraseDirectCutPart() + ' Disattivo eventuali lavorazioni presenti + DeactivateAllMachinings() + ' Creo nuovo pezzo per il taglio diretto + Dim nPartId = EgtCreateGroup(GDB_ID.ROOT) + EgtSetName(nPartId, DIRECTCUT) + Dim nLayerId = EgtCreateGroup(nPartId) + EgtSetName(nLayerId, "OutLoop") + ' Creo il taglio + Dim ptStart As Point3d = m_ptTipP1 + ptStart.z = 0 + Dim nCutId = EgtCreateLinePDL(nLayerId, ptStart, m_dAngO, m_dLen) + ' Imposto affondamento e angolo di fianco sul taglio + EgtSetInfo(nCutId, "Depth", DoubleToString(m_dDepth, 3)) + EgtSetInfo(nCutId, "SideAng", DoubleToString(m_dAngV, 3)) + ' Funzione che crea i tagli successivi al primo + MultiplyCut(nLayerId, nCutId) + ' Creo layer per crocetta di riferimento + Dim nCrossLayerId = EgtCreateGroup(nPartId) + ' Aggiungo crocetta + CreateCross(nCrossLayerId, ptStart) + ' Calcolo punto di inserimento nel grezzo + Dim ptMin, ptMax As Point3d + EgtGetBBoxGlob(nPartId, GDB_BB.STANDARD, ptMin, ptMax) + Dim ptIns As Point3d = ptMin + (m_ptTabOri - m_ptRawMin) + ptIns.z = dRawHeight + ' Inserisco il pezzo nel grezzo + EgtAddPartToRawPart(nPartId, ptIns, m_MainWindow.m_CurrentProjectPageUC.m_nRawId) + ' Inserisco la lavorazione + m_bCutOk = AddMachinings(nPartId, True, True) + UpdateOkBtn() + EgtSaveFile("C:\Temp\qqq.nge", NGE.TEXT) + Return m_bCutOk + End Function + + Private Function Create2PointsFlatteringCut() As Boolean + ' Verifico siano definiti punto iniziale punto finale e grezzo + If Not m_bPointP1Ok Or Not m_bPointP2Ok Or Not m_bRawOk Then + m_bCutOk = False + Return False + End If + ' Spessore grezzo + Dim dRawHeight As Double = m_ptRawMax.z - m_ptRawMin.z + ' Rimuovo eventuale vecchio pezzo per taglio diretto + EraseDirectCutPart() + ' Disattivo eventuali lavorazioni presenti + DeactivateAllMachinings() + ' Creo nuovo pezzo per il taglio diretto + Dim nPartId = EgtCreateGroup(GDB_ID.ROOT) + EgtSetName(nPartId, DIRECTCUT) + ' Creo layer di taglio + Dim nLayerId = EgtCreateGroup(nPartId) + EgtSetName(nLayerId, "OutLoop") + ' Creo il taglio + Dim ptStart As Point3d = m_ptTipP1 + Dim ptEnd As Point3d = m_ptTipP2 + ptStart.z = 0 + ptEnd.z = 0 + Dim nCutId = EgtCreateLine(nLayerId, ptStart, ptEnd) + ' Imposto affondamento e angolo di fianco sul taglio + EgtSetInfo(nCutId, "Depth", DoubleToString(m_dDepth, 3)) + EgtSetInfo(nCutId, "SideAng", DoubleToString(m_dAngV, 3)) + ' Funzione che crea i tagli successivi al primo + MultiplyCut(nLayerId, nCutId) + ' Creo layer per crocette di riferimento + Dim nCrossLayerId = EgtCreateGroup(nPartId) + ' Aggiungo crocette + CreateCross(nCrossLayerId, ptStart) + CreateCross(nCrossLayerId, ptEnd) + ' Calcolo punto di inserimento nel grezzo + Dim ptMin, ptMax As Point3d + EgtGetBBoxGlob(nPartId, GDB_BB.STANDARD, ptMin, ptMax) + Dim ptIns As Point3d = ptMin + (m_ptTabOri - m_ptRawMin) + ptIns.z = dRawHeight + ' Inserisco il pezzo nel grezzo + EgtAddPartToRawPart(nPartId, ptIns, m_MainWindow.m_CurrentProjectPageUC.m_nRawId) + ' Inserisco la lavorazione + m_bCutOk = AddMachinings(nPartId, True, True) + UpdateOkBtn() + Return m_bCutOk + End Function + + Private Function MultiplyCut(nLayerId As Integer, nCutId As Integer) + ' Recupero spessore della lama correntemente attiva + Dim dThick As Double = 0 + EgtTdbGetCurrToolParam(MCH_TP.THICK, dThick) + ' Imposto angolo di rotazione a seconda del lato dei tagli + Dim dRotAngO As Double = If(SideChBx.IsChecked, -90, 90) + ' Definisco vettore di spostamento + Dim vtDelta As Vector3d + vtDelta = Vector3d.FromPolar(1, m_dAngO) + vtDelta.Rotate(Vector3d.Z_AX, dRotAngO) + ' Calcolo numero di iterazioni necessarie a coprire l'area impostata e lunghezza vettore delta + Dim nStepNum As Integer + Dim dDelta As Double + Dim dWidth As Double = m_dWid + dDelta = dThick - m_dOverlap + dWidth -= dThick + nStepNum = Math.Ceiling(dWidth / dDelta) + 1 + If nStepNum > 1 Then + dDelta = dWidth / (nStepNum - 1) + End If + ' Creo vettore delta + vtDelta *= dDelta + For Index As Integer = 1 To nStepNum - 1 + Dim vtPerpMove As Vector3d = Index * vtDelta + ' Creo copie + Dim nCut2Id = EgtCopyGlob(nCutId, nLayerId) + EgtMove(nCut2Id, vtPerpMove, GDB_RT.GLOB) + Next + Return True + End Function + + Private Function EraseDirectCutPart() + ' Recupero identificativo del pezzo + Dim nDirPartId As Integer = EgtGetFirstNameInGroup(m_MainWindow.m_CurrentProjectPageUC.m_nRawId, DIRECTCUT) + If nDirPartId = GDB_ID.NULL Then + Return True + End If + ' Cancello le lavorazioni + EraseMachinings(nDirPartId) + ' Tolgo il pezzo dal grezzo + EgtRemovePartFromRawPart(nDirPartId) + ' Cancello il pezzo + EgtErase(nDirPartId) + Return True + End Function + + Private Function CreateCross(nLayerId As Integer, ptP As Point3d) As Boolean + ' Aggiungo crocette + Dim vtCrossX As New Vector3d(20, 0, 0) + Dim vtCrossY As New Vector3d(0, 20, 0) + Dim nCrossId1 = EgtCreateLine(nLayerId, ptP + (-vtCrossX), ptP + vtCrossX) + EgtSetColor(nCrossId1, New Color3d(255, 0, 0)) + Dim nCrossId2 = EgtCreateLine(nLayerId, ptP + (-vtCrossY), ptP + vtCrossY) + EgtSetColor(nCrossId2, New Color3d(255, 0, 0)) + Return True + End Function + +End Class \ No newline at end of file diff --git a/MultipleCut.xaml.vb b/MultipleCut.xaml.vb index f544273..48ca8c8 100644 --- a/MultipleCut.xaml.vb +++ b/MultipleCut.xaml.vb @@ -407,6 +407,8 @@ Public Class MultipleCut Dim dAngOrizzDeg As Double vtDiff.ToSpherical(dLen, dAngVertDeg, dAngOrizzDeg) If dLen > EPS_SMALL Then + m_dLen = dLen + m_dAngO = dAngOrizzDeg LenghtTxBx.Text = LenToString(dLen, 1) m_dAngO = dAngOrizzDeg DirectionTxBx.Text = DoubleToString(m_dAngO - m_MainWindow.m_CurrentMachine.dDeltaC, 2) diff --git a/OmagCUT.vbproj b/OmagCUT.vbproj index 3a83dfc..f269d1a 100644 --- a/OmagCUT.vbproj +++ b/OmagCUT.vbproj @@ -156,6 +156,9 @@ EgtDictionary.xaml + + FlatteningCut.xaml + FrameCutPageUC.xaml @@ -288,6 +291,10 @@ MSBuild:Compile Designer + + MSBuild:Compile + Designer + Designer MSBuild:Compile diff --git a/SaveNameWD.xaml b/SaveNameWD.xaml index 155f51e..f5e1f86 100644 --- a/SaveNameWD.xaml +++ b/SaveNameWD.xaml @@ -36,8 +36,7 @@ -