Imports EgtUILib Public Class CopyTemplateUC ' 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_bTabOk 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 'Variabile che indica se il disegno è salvabile Private m_bDrawOk As Boolean = False ' Modalità di disegno Private m_CurrCurveType As CurveType ' 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 ' Array dei punti per arco Private m_ptArcArray As New List(Of Point3d) ' Variabile che contiene il punto precedentemente acquisito Private m_ptPrevAcquire As Point3d Private m_bptPrevAcquire As Boolean = False ' Riferimento alla finestra di salvataggio con nome Friend m_SaveNameWD As SaveNameWD Private Enum PT_MODE As Integer SAW = 0 LASER = 1 DRAW = 2 End Enum ' Costanti che indicano il tipo di curva da disegnare Private Enum CurveType LINE ARC End Enum Private Const RAW_CENTER As String = "RawCenter" Private Sub CopyTemplate_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized ' Creo lista modalità di acquisizione punto m_PointsModeArray(PT_MODE.SAW) = EgtMsg(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) LineBtn.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 50) ArcBtn.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 51) RemoveBtn.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 52) CloseBtn.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 53) SaveBtn.Content = EgtMsg(MSG_DIRECTCUTPAGEUC + 54) End Sub Private Sub CopyTemplate_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC m_bActive = True SaveBtn.IsEnabled = False LineBtn.IsChecked = True ArcBtn.IsChecked = False Point1Btn.IsEnabled = True RemoveBtn.IsEnabled = True CloseBtn.IsEnabled = True m_CurrCurveType = CurveType.LINE ' Origine tavola m_bTabOk = True If Not EgtGetTableRef(1, m_ptTabOri) Then m_bTabOk = False EgtOutLog("Error on TableRef1") End If ' Dati del grezzo If Not GetRawBox(m_ptRawMin, m_ptRawMax) Then m_ptRawMin = m_ptTabOri m_ptRawMax = m_ptTabOri End If ' Reset punto acquisito m_bPointP1Ok = False ' Reset primo punto m_bptPrevAcquire = 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) m_ptPrev.z = m_ptRawMax.z ' Imposto modalità di acquisizione punti PointModeCmBx.SelectedIndex = PT_MODE.DRAW ' Reset taglio e disabilito bottone esecuzione m_bDrawOk = False UpdateOkBtn() ' Visualizzo tavola EgtSetMachineLook(MCH_LOOK.TAB) ' Disabilito registrazione progetto modificato EgtDisableModified() ' Creo layer temporaneo per crocette m_nTempLay = EgtCreateGroup(GDB_ID.ROOT) EgtSetLevel(m_nTempLay, GDB_LV.TEMP) ' Creo nuovo pezzo e layer per la geometria da definire Dim nPartId = EgtCreateGroup(GDB_ID.ROOT) EgtSetName(nPartId, NAME_COPYTEMPLATE) Dim nLayerId = EgtCreateGroup(nPartId, New Frame3d(m_ptTabOri)) EgtSetName(nLayerId, NAME_OUTLOOP) End Sub Friend Sub CopyTemplate_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded ' Rimuovo layer temporaneo per crocette EgtErase(m_nTempLay) ' Rimuovo eventuale pezzo per taglio diretto EraseCopyTemplatePart() ' Riattivo eventuali lavorazioni presenti ActivateAllMachinings() ' Abilito registrazione progetto modificato EgtEnableModified() ' Nascondo la macchina m_MainWindow.m_DirectCutPageUC.m_bShowMachine = False EgtSetMachineLook(MCH_LOOK.TAB) EgtDraw() End Sub Private Sub UpdateOkBtn() If m_bDrawOk Then SaveBtn.IsEnabled = True Else SaveBtn.IsEnabled = False End If End Sub Private Sub OnMyMouseDownScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles m_CurrProjPage.OnMouseDownScene ' Verifico di essere il gestore attivo If Not m_bActive Then Return 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_bTabOk 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 = 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 ' Trasformo in posizione punta utensile in basso If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then Return ' Ora imposto la lama corrente If Not EgtSetCalcTool(sSaw, "H1", 1) Then Return ' Altrimenti da lama Else ' Imposto la lama corrente If Not EgtSetCalcTool(sSaw, "H1", 1) Then Return ' Trasformo in posizione punta utensile in basso If Not EgtGetCalcTipFromPositions(dL1, dL2, dL3, dR1, dR2, True, m_ptTipP1) Then Return End If ' Porto il tip nell'origine tavola m_ptTipP1.ToLoc(New Frame3d(m_ptTabOri)) m_bPointP1Ok = True ' Altrimenti punto da click di mouse 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 la curva If m_bptPrevAcquire Then If m_CurrCurveType = CurveType.LINE Then CreateLine() m_ptArcArray.Clear() RemoveBtn.IsEnabled = True Else If m_ptArcArray.Count = 1 Then LineBtn.IsEnabled = False RemoveBtn.IsEnabled = False ElseIf m_ptArcArray.Count = 2 Then CreateArc() LineBtn.IsEnabled = True RemoveBtn.IsEnabled = True End If End If Else m_bptPrevAcquire = True RemoveBtn.IsEnabled = True End If m_ptArcArray.Add(m_ptTipP1) m_ptPrevAcquire = m_ptTipP1 m_MainWindow.m_DirectCutPageUC.m_bShowMachine = True EgtDraw() End Sub Private Sub CreateLine() Dim nPart As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_COPYTEMPLATE) Dim nOutLoop As Integer = EgtGetFirstNameInGroup(nPart, NAME_OUTLOOP) Dim nId As Integer = EgtCreateLine(nOutLoop, m_ptPrevAcquire, m_ptTipP1) End Sub Private Sub CreateArc() Dim nPart As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_COPYTEMPLATE) Dim nOutLoop As Integer = EgtGetFirstNameInGroup(nPart, NAME_OUTLOOP) Dim LastCurve As Integer = EgtGetLastInGroup(nOutLoop) EgtCreateArc3P(nOutLoop, m_ptArcArray(0), m_ptArcArray(1), m_ptTipP1) m_ptArcArray.Clear() End Sub Private Sub SaveBtn_Click(sender As Object, e As RoutedEventArgs) Handles SaveBtn.Click m_SaveNameWD = New SaveNameWD(m_MainWindow) m_SaveNameWD.ShowDialog() 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 EraseCopyTemplatePart() ' Recupero identificativo del pezzo Dim nDirPartId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_COPYTEMPLATE) While nDirPartId <> GDB_ID.NULL ' Cancello il pezzo EgtErase(nDirPartId) ' Cerco eventuale prossimo nDirPartId = EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_COPYTEMPLATE) End While Return True End Function Private Function CreateCross(nLayerId As Integer, ptP As Point3d) 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 Private Sub LineBtn_Click(sender As Object, e As RoutedEventArgs) Handles LineBtn.Click If LineBtn.IsChecked Then ArcBtn.IsChecked = False m_CurrCurveType = CurveType.LINE Else LineBtn.IsChecked = True End If End Sub Private Sub ArcBtn_Click(sender As Object, e As RoutedEventArgs) Handles ArcBtn.Click If ArcBtn.IsChecked Then LineBtn.IsChecked = False m_CurrCurveType = CurveType.ARC Else ArcBtn.IsChecked = True End If End Sub Private Sub RemoveBtn_Click(sender As Object, e As RoutedEventArgs) Handles RemoveBtn.Click Dim nPart As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_COPYTEMPLATE) Dim nOutloop As Integer = EgtGetFirstNameInGroup(nPart, NAME_OUTLOOP) Dim nOutLoopCount As Integer = EgtGetGroupObjs(nOutloop) If nOutLoopCount > 0 Then If nOutLoopCount = 1 Then ' Aggiorno ptLast con primo punto EgtStartPoint(EgtGetFirstInGroup(nOutloop), m_ptPrevAcquire) ' Cancello ultima linea EgtEmptyGroup(nOutloop) Else ' Cancello ultima linea EgtErase(EgtGetLastInGroup(nOutloop)) ' Aggiorno ptLast EgtEndPoint(EgtGetLastInGroup(nOutloop), m_ptPrevAcquire) End If If m_CurrCurveType = CurveType.ARC Then m_ptArcArray.Clear() m_ptArcArray.Add(m_ptPrevAcquire) End If Else m_bptPrevAcquire = False RemoveBtn.IsEnabled = False End If CloseBtn.IsEnabled = True Point1Btn.IsEnabled = True SaveBtn.IsEnabled = False EgtDraw() End Sub Private Sub CloseBtn_Click(sender As Object, e As RoutedEventArgs) Handles CloseBtn.Click Dim nPart As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, NAME_COPYTEMPLATE) Dim nOutloop As Integer = EgtGetFirstNameInGroup(nPart, NAME_OUTLOOP) If m_CurrCurveType = CurveType.ARC And m_ptArcArray.Count <> 2 Then Return End If EgtStartPoint(EgtGetFirstInGroup(nOutloop), m_ptTipP1) If m_CurrCurveType = CurveType.LINE Then CreateLine() Else If m_ptArcArray.Count <> 2 Then Return End If CreateArc() LineBtn.IsEnabled = True RemoveBtn.IsEnabled = True End If ' Disattivo bottoni perchè non posso più aggiungere punti una volta che il percorso è chiuso Point1Btn.IsEnabled = False CloseBtn.IsEnabled = False SaveBtn.IsEnabled = True EgtDraw() End Sub End Class