Files
OmagCUT/FrameCutPageUC.xaml.vb
T
Dario Sassi 9dc3d750b9 OmagCUT 1.9c3 :
- sistemazioni per tagli singoli
- aggiunta possibilità di lancio script SentProg.lua (già in 1.9c2)
- aggiunta possibilità di visualizzare note in utensili.
2018-03-26 18:49:30 +00:00

730 lines
32 KiB
VB.net

Imports System.Collections.ObjectModel
Imports EgtUILib
Public Class FrameCutPageUC
' Riferimenti a pagine
Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow)
Private WithEvents m_CurrProjPage As CurrentProjectPageUC
Friend m_ProjectMgr As ProjectMgrUC
Private m_CurrMachine As CurrentMachine
' Flag di pagina attiva
Private m_bActive As Boolean = False
' Dati del grezzo
Private m_nRawId As Integer = GDB_ID.NULL
Private m_RawBox As New BBox3d
Private m_dKerf As Double = 0
' Array per combo direzioni
Private m_AlongAx(1) As String
' Direzione corrente
Private m_CurrAx As Integer = 0
' Lista per lavorazioni di sgrossatura con lama
Private m_SawRoughingList As New ObservableCollection(Of String)
' Lista per lavorazioni di finitura con lama
Private m_SawFinishingList As New ObservableCollection(Of String)
' Lista per lavorazioni di spatolatura con lama
Private m_SawSideFinList As New ObservableCollection(Of String)
' Lista per lavorazioni singole con lama
Private m_SawSingleList As New ObservableCollection(Of String)
' Flag per disabilitare ricalcolo lavorazioni su impostazione selezione combo
Private m_DisableCalc As Boolean = False
' Trim iniziale della lavorazione
Friend m_dStartTrim As Double = 0
' Trim finale della lavorazione
Friend m_dEndTrim As Double = 0
' Costante per lavorazione non definita
Private Const NO_MACHINING As String = "-----"
Private Sub FrameCutPage_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized
' Creazione delle Page UserControl
m_ProjectMgr = New ProjectMgrUC
' Posizionamento nella griglia delle Page UserControl
m_ProjectMgr.SetValue(Grid.RowProperty, 2)
m_ProjectMgr.SetValue(Grid.ColumnProperty, 1)
' Assegno UC a questa pagina
FrameCutPageGrid.Children.Add(m_ProjectMgr)
' Associo ComboBox e Liste
AlongAxCmBx.ItemsSource = m_AlongAx
SawRoughingCmBx.ItemsSource = m_SawRoughingList
SawFinishingCmBx.ItemsSource = m_SawFinishingList
SawSideFinCmBx.ItemsSource = m_SawSideFinList
SawSingleCmBx.ItemsSource = m_SawSingleList
' Imposto offset in Z dal sopra del grezzo e in XY da angolo in basso a sx
Dim dOffsZ As Double = GetPrivateProfileDouble(S_FRAME, K_OFFSZ, 5, m_MainWindow.GetIniFile())
OffsZTxBx.Text = LenToString(dOffsZ, 3)
Dim dOffsXY As Double = GetPrivateProfileDouble(S_FRAME, K_OFFSXY, 5, m_MainWindow.GetIniFile())
OffsXyTxBx.Text = LenToString(dOffsXY, 3)
' Imposto accorciamenti iniziale e finale di lavorazione
m_dStartTrim = GetPrivateProfileDouble(S_FRAME, K_STARTTRIM, 0, m_MainWindow.GetIniFile())
StartTrimTxBx.Text = LenToString(m_dStartTrim, 3)
m_dEndTrim = GetPrivateProfileDouble(S_FRAME, K_ENDTRIM, 0, m_MainWindow.GetIniFile())
EndTrimTxBx.Text = LenToString(m_dEndTrim, 3)
' Imposto i messaggi letti dal file dei messaggi
m_AlongAx(0) = EgtMsg(MSG_FRAMECUTPAGEUC + 1) 'Lungo X
m_AlongAx(1) = EgtMsg(MSG_FRAMECUTPAGEUC + 2) 'Lungo Y
MirrorPartBtn.Content = EgtMsg(MSG_FRAMECUTPAGEUC + 7) 'Mirror cornice
RemovePartBtn.Content = EgtMsg(MSG_FRAMECUTPAGEUC + 3) 'Rimuovi cornice
OffsZTxBl.Text = EgtMsg(MSG_FRAMECUTPAGEUC + 8) 'Distanza sopra
OffsXyTxBl.Text = EgtMsg(MSG_FRAMECUTPAGEUC + 9) 'Distanza inizio
SawRoughingTxBl.Text = EgtMsg(MSG_FRAMECUTPAGEUC + 4) 'Sgrossatura
SawFinishingTxBl.Text = EgtMsg(MSG_FRAMECUTPAGEUC + 5) 'Finitura
SawSideFinTxBl.Text = EgtMsg(MSG_FRAMECUTPAGEUC + 6) 'Spatolatura
StartTrimTxBl.Text = EgtMsg(MSG_FRAMECUTPAGEUC + 10) 'Accorcia inizio
EndTrimTxBl.Text = EgtMsg(MSG_FRAMECUTPAGEUC + 11) 'Accorcia fine
SawSingleTxBl.Text = EgtMsg(MSG_FRAMECUTPAGEUC + 12) 'Taglio singolo
End Sub
Private Sub FrameCutPage_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC
m_CurrMachine = m_MainWindow.m_CurrentMachine
m_bActive = True
' Nascondo bottoni CSV, VeinMatching e Registration
m_ProjectMgr.CSVBtn.Visibility = Windows.Visibility.Hidden
m_ProjectMgr.VeinMatchingBtn.Visibility = Windows.Visibility.Hidden
m_ProjectMgr.RegisterBtn.Visibility = Windows.Visibility.Hidden
' Recupero dimensioni e kerf del grezzo
m_nRawId = EgtGetFirstRawPart()
GetRawBox(m_RawBox)
EgtGetInfo(m_nRawId, KEY_KERF, m_dKerf)
' Imposto direzione cornici
UpdateAlongAxCmbBx()
' Aggiorno liste lavorazioni disponibili
UpdateMachiningList(MCH_MY.SAWROUGHING, m_CurrMachine.sCurrSaw, m_SawRoughingList)
UpdateMachiningList(MCH_MY.SAWFINISHING, MCH_SAWFIN_SUB.ALONG, m_CurrMachine.sCurrSaw, m_SawFinishingList)
UpdateMachiningList(MCH_MY.SAWFINISHING, MCH_SAWFIN_SUB.ACROSS, m_CurrMachine.sCurrSaw, m_SawSideFinList)
UpdateMachiningList(MCH_MY.SAWING, m_CurrMachine.sCurrSaw, m_SawSingleList)
' Imposto lavorazioni correnti
m_DisableCalc = True
If SawRoughingCmBx.Items.Contains(m_CurrMachine.sCurrSawRoughing) Then
SawRoughingCmBx.SelectedItem = m_CurrMachine.sCurrSawRoughing
Else
SawRoughingCmBx.SelectedItem = NO_MACHINING
m_CurrMachine.sCurrSawRoughing = String.Empty
End If
If SawFinishingCmBx.Items.Contains(m_CurrMachine.sCurrSawFinishing) Then
SawFinishingCmBx.SelectedItem = m_CurrMachine.sCurrSawFinishing
Else
SawFinishingCmBx.SelectedItem = NO_MACHINING
m_CurrMachine.sCurrSawFinishing = String.Empty
End If
If SawSideFinCmBx.Items.Contains(m_CurrMachine.sCurrSawSideFinishing) Then
SawSideFinCmBx.SelectedItem = m_CurrMachine.sCurrSawSideFinishing
Else
SawSideFinCmBx.SelectedItem = NO_MACHINING
m_CurrMachine.sCurrSawSideFinishing = String.Empty
End If
If SawSingleCmBx.Items.Contains(m_CurrMachine.sCurrSawSingle) Then
SawSingleCmBx.SelectedItem = m_CurrMachine.sCurrSawSingle
Else
SawSingleCmBx.SelectedItem = NO_MACHINING
m_CurrMachine.sCurrSawSingle = String.Empty
End If
m_DisableCalc = False
' Se macchina fotografica abilitata
If m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.MAN_PHOTO) Then
PhotoBtn.IsEnabled = True
Else
PhotoBtn.IsEnabled = False
End If
' Se provengo da grezzo, sistemo eventuali cornici
If m_MainWindow.m_PrevActivePage = MainWindow.Pages.RawPart Then
' Aggiorno geometria
UpdateFrames()
' Ricalcolo lavorazioni
AddFrameMachinings(m_dStartTrim, m_dEndTrim)
End If
' Abilito visualizzazione delle lavorazioni
EgtSetCurrPhase(1)
ShowAllCurrPhaseMachinings()
EgtZoom(ZM.ALL)
End Sub
Private Sub UpdateAlongAxCmbBx()
' Se già presenti cornici, visualizzo direzione senza poterla modificare
Dim nPartId As Integer = EgtGetFirstPartInRawPart(m_nRawId)
If nPartId <> GDB_ID.NULL Then
Dim nDir As Integer
If EgtGetInfo(nPartId, INFO_FRAME_DIR, nDir) Then m_CurrAx = nDir
AlongAxCmBx.SelectedIndex = m_CurrAx
AlongAxCmBx.IsEnabled = False
' Altrimenti, abilito cambio direzione
Else
AlongAxCmBx.SelectedIndex = m_CurrAx
AlongAxCmBx.IsEnabled = True
End If
End Sub
Private Sub UpdateMachiningList(MachiningType As Integer, CurrTool As String, ByRef MachiningList As ObservableCollection(Of String))
' Pulisco la lista
MachiningList.Clear()
' Cerco tutte le lavorazioni che utilizzano l'utensile corrente e le aggiungo alla lista
Dim MachiningName As String = String.Empty
Dim bFound As Boolean = EgtMdbGetFirstMachining(MachiningType, MachiningName)
While bFound
EgtMdbSetCurrMachining(MachiningName)
Dim sTuuid As String = String.Empty
Dim sTool As String = String.Empty
EgtMdbGetCurrMachiningParam(MCH_MP.TUUID, sTuuid)
EgtTdbGetToolFromUUID(sTuuid, sTool)
If sTool = CurrTool And VerifyMatThickCompatibility() Then
MachiningList.Add(MachiningName)
End If
bFound = EgtMdbGetNextMachining(MachiningType, MachiningName)
End While
' Aggiungo la lavorazione nulla
MachiningList.Add(NO_MACHINING)
End Sub
Private Sub UpdateMachiningList(MachiningType As Integer, MachiningSubType As Integer, CurrTool As String, ByRef MachiningList As ObservableCollection(Of String))
' Pulisco la lista
MachiningList.Clear()
' Cerco tutte le lavorazioni che utilizzano l'utensile corrente e le aggiungo alla lista
Dim MachiningName As String = String.Empty
Dim bFound As Boolean = EgtMdbGetFirstMachining(MachiningType, MachiningName)
While bFound
EgtMdbSetCurrMachining(MachiningName)
Dim SubType As Integer
EgtMdbGetCurrMachiningParam(MCH_MP.SUBTYPE, SubType)
Dim sTuuid As String = String.Empty
Dim sTool As String = String.Empty
EgtMdbGetCurrMachiningParam(MCH_MP.TUUID, sTuuid)
EgtTdbGetToolFromUUID(sTuuid, sTool)
If sTool = CurrTool And SubType = MachiningSubType And VerifyMatThickCompatibility() Then
MachiningList.Add(MachiningName)
End If
bFound = EgtMdbGetNextMachining(MachiningType, MachiningName)
End While
' Aggiungo la lavorazione nulla
MachiningList.Add(NO_MACHINING)
End Sub
Private Function VerifyMatThickCompatibility() As Boolean
If Not IsNothing(m_CurrMachine.CurrMat) Then
Dim SysNotes As String = String.Empty
EgtMdbGetCurrMachiningParam(MCH_MP.SYSNOTES, SysNotes)
If SysNotes <> String.Empty Then
Dim MachiningMaterials() = SysNotes.Split(";".ToCharArray)
SysNotes = String.Empty
For Each Material In MachiningMaterials
Dim Param() As String = Material.Split(",".ToCharArray)
If Param(0) = m_CurrMachine.CurrMat.nId.ToString() Then
Dim dRawHeight = GetRawHeight()
Dim MatMinH As Double = 0
StringToDouble(Param(1), MatMinH)
Dim MatMaxH As Double = 0
StringToDouble(Param(2), MatMaxH)
If dRawHeight > MatMinH - EPS_SMALL And dRawHeight < MatMaxH + EPS_SMALL Then
Return True
End If
End If
Next
Return False
Else
Return True
End If
Else
Return True
End If
End Function
Private Sub FrameCutPage_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
' Nascondo tutte le lavorazioni
HideAllMachinings()
' La dichiaro non attiva
m_bActive = False
End Sub
Private Sub OnMyMouseDownScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles m_CurrProjPage.OnMouseDownScene
' Verifico di essere il gestore attivo
If Not m_bActive Then Return
' Si può selezionare solo con il tasto sinistro e se stato NULL
If e.Button <> Windows.Forms.MouseButtons.Left Or
Not m_CurrProjPage.CurrentProjectScene.IsStatusNull() Then
Return
End If
' Verifico se selezionato indicativo di pezzo
EgtSetObjFilterForSelWin(False, False, True, False, False)
Dim nSel As Integer
EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSel)
Dim nId As Integer = EgtGetFirstObjInSelWin()
While nId <> GDB_ID.NULL
' Recupero l'identificativo del layer e del pezzo cui appartiene
Dim nLayId As Integer = EgtGetParent(nId)
Dim nPartId As Integer = EgtGetParent(nLayId)
' Ignoro superfici del layer Facet
Dim nLayName As String = String.Empty
EgtGetName(nLayId, nLayName)
If nLayName = NAME_FACET Then Continue While
' Se pezzo in tavola
Dim bPartInTable As Boolean = (EgtGetParent(nPartId) = m_nRawId)
If bPartInTable Then
' Effetto selezione/deselezione
Dim nOldStat As Integer = GDB_ST.ON_
EgtGetStatus(nPartId, nOldStat)
Dim nStat As Integer = If(nOldStat = GDB_ST.SEL, GDB_ST.ON_, GDB_ST.SEL)
EgtSetStatus(nPartId, nStat)
' Se selezione, recupero superficie e faccia identificati
If nStat = GDB_ST.SEL Then
Dim PtTemp As Point3d
Dim nTria As Integer
If EgtGetPointFromSelect(nId, e.Location, PtTemp, nTria) Then
Dim nFacet As Integer = EgtSurfTmFacetFromTria(nId, nTria)
' Cancello eventuali vecchie info e facce da lavorare
Dim nPirId As Integer = EgtGetFirstPartInRawPart(m_nRawId)
While nPirId <> GDB_ID.NULL
EgtRemoveInfo(nPirId, INFO_FRAME_SURF)
EgtRemoveInfo(nPirId, INFO_FRAME_FACET)
EgtEmptyGroup(EgtGetFirstNameInGroup(nPirId, NAME_FACET))
nPirId = EgtGetNextPartInRawPart(nPirId)
End While
' Imposto le nuove info
EgtSetInfo(nPartId, INFO_FRAME_SURF, nId)
EgtSetInfo(nPartId, INFO_FRAME_FACET, nFacet)
' Creo la copia di facet selezionata
Dim nFacetLayId As Integer = EgtGetFirstNameInGroup(nPartId, NAME_FACET)
If nFacetLayId = GDB_ID.NULL Then
nFacetLayId = EgtCreateGroup(nPartId)
EgtSetName(nFacetLayId, NAME_FACET)
End If
Dim nNewFacetId As Integer = EgtCopySurfTmFacet(nId, nFacet, nFacetLayId)
EgtSetColor(nNewFacetId, New Color3d(0, 255, 255))
End If
End If
EgtDraw()
Exit While
End If
nId = EgtGetNextObjInSelWin()
End While
End Sub
Private Sub OffsXXTxBx_EgtClosed(sender As Object, e As EventArgs) Handles OffsZTxBx.EgtClosed, OffsXyTxBx.EgtClosed
' Forzo aggiornamento grezzo nella pagina di Nesting
m_MainWindow.m_CadCutPageUC.m_NestPage.CalcRawPart()
' Parcheggio pezzi presenti nel grezzo
Dim nPartId As Integer = EgtGetFirstPartInRawPart(m_CurrProjPage.m_nRawId)
While nPartId <> GDB_ID.NULL
m_MainWindow.m_CadCutPageUC.m_NestPage.StoreOnePart(nPartId)
nPartId = EgtGetFirstPartInRawPart(m_CurrProjPage.m_nRawId)
End While
' Aggiorno geometria
UpdateFrames()
' Ricalcolo lavorazioni
AddFrameMachinings(m_dStartTrim, m_dEndTrim)
' Aggiorno visualizzazione
EgtDraw()
' Salvo offset in Z dal sopra del grezzo e in XY da angolo in basso a sx
Dim dOffsZ As Double = 0
If StringToLen(OffsZTxBx.Text, dOffsZ) Then
WritePrivateProfileString(S_FRAME, K_OFFSZ, DoubleToString(dOffsZ, 3), m_MainWindow.GetIniFile())
End If
Dim dOffsXy As Double = 0
If StringToLen(OffsXyTxBx.Text, dOffsXy) Then
WritePrivateProfileString(S_FRAME, K_OFFSXY, DoubleToString(dOffsXy, 3), m_MainWindow.GetIniFile())
End If
End Sub
Private Sub MirrorPartBtn_Click(sender As Object, e As RoutedEventArgs) Handles MirrorPartBtn.Click
' Se non ci sono pezzi selezionati, esco subito
If EgtGetSelectedObjCount() = 0 Then Return
' Ciclo di mirror dei pezzi selezionati
Dim nId As Integer = EgtGetFirstSelectedObj()
While nId <> GDB_ID.NULL
' Recupero box del pezzo
Dim b3Box As New BBox3d
EgtGetBBoxGlob(nId, GDB_BB.STANDARD, b3Box)
' Eseguo mirror
EgtMirror(nId, b3Box.Center(), If(m_CurrAx = 0, Vector3d.Y_AX(), Vector3d.X_AX()), GDB_RT.GLOB)
' Passo al successivo selezionato
nId = EgtGetNextSelectedObj()
End While
' Ricalcolo lavorazioni
AddFrameMachinings(m_dStartTrim, m_dEndTrim)
' Aggiorno vista
EgtDraw()
End Sub
Private Sub RemovePartBtn_Click(sender As Object, e As RoutedEventArgs) Handles RemovePartBtn.Click
' Se non ci sono pezzi selezionati, esco subito
If EgtGetSelectedObjCount() = 0 Then Return
' Ciclo di cancellazione dei pezzi selezionati
Dim nId As Integer = EgtGetFirstSelectedObj()
While nId <> GDB_ID.NULL
' Recupero indice del successivo
Dim nNextId = EgtGetNextSelectedObj()
' Cancello il pezzo
If EgtRemovePartFromRawPart(nId) Then
' Rimuovo le lavorazioni
EraseMachinings(nId)
' Cancello
EgtErase(nId)
End If
' Passo al successivo selezionato
nId = nNextId
End While
' Aggiusto posizione dei rimanenti pezzi nel grezzo
nId = EgtGetFirstPartInRawPart(m_nRawId)
While nId <> GDB_ID.NULL
EgtRemovePartFromRawPart(nId)
nId = EgtGetFirstPartInRawPart(m_nRawId)
End While
nId = EgtGetFirstPart()
While nId <> GDB_ID.NULL
InsertPartInRawPart(nId)
nId = EgtGetFirstPart()
End While
' Ricalcolo lavorazioni
AddFrameMachinings(m_dStartTrim, m_dEndTrim)
' Aggiorno vista
EgtDraw()
' Aggiorno combo per direzioni
UpdateAlongAxCmbBx()
End Sub
Private Sub SawRoughingCmBx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles SawRoughingCmBx.SelectionChanged
If m_DisableCalc Or IsNothing(SawRoughingCmBx.SelectedItem) Then Return
' La imposto come lavorazione corrente di sgrossatura con lama
If SawRoughingCmBx.SelectedItem.ToString() <> NO_MACHINING Then
m_CurrMachine.sCurrSawRoughing = SawRoughingCmBx.SelectedItem.ToString()
Else
m_CurrMachine.sCurrSawRoughing = String.Empty
End If
' La inserisco
AddFrameSawRoughing(m_dStartTrim, m_dEndTrim)
' Aggiorno visualizzazione
EgtDraw()
End Sub
Private Sub SawFinishingCmBx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles SawFinishingCmBx.SelectionChanged
If m_DisableCalc Or IsNothing(SawFinishingCmBx.SelectedItem) Then Return
' La imposto come lavorazione corrente di finitura con lama
If SawFinishingCmBx.SelectedItem.ToString() <> NO_MACHINING Then
m_CurrMachine.sCurrSawFinishing = SawFinishingCmBx.SelectedItem.ToString()
Else
m_CurrMachine.sCurrSawFinishing = String.Empty
End If
' La inserisco
AddFrameSawFinishing(m_dStartTrim, m_dEndTrim)
' Aggiorno visualizzazione
EgtDraw()
End Sub
Private Sub SawSideFinCmBx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles SawSideFinCmBx.SelectionChanged
If m_DisableCalc Or IsNothing(SawSideFinCmBx.SelectedItem) Then Return
' La imposto come lavorazione corrente di finitura con lama
If SawSideFinCmBx.SelectedItem.ToString() <> NO_MACHINING Then
m_CurrMachine.sCurrSawSideFinishing = SawSideFinCmBx.SelectedItem.ToString()
Else
m_CurrMachine.sCurrSawSideFinishing = String.Empty
End If
' La inserisco
AddFrameSawSideFinishing(m_dStartTrim, m_dEndTrim)
' Aggiorno visualizzazione
EgtDraw()
End Sub
Private Sub SawSingleCmBx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles SawSingleCmBx.SelectionChanged
If m_DisableCalc Or IsNothing(SawSingleCmBx.SelectedItem) Then Return
' La imposto come lavorazione corrente di taglio singolo con lama
If SawSingleCmBx.SelectedItem.ToString() <> NO_MACHINING Then
m_CurrMachine.sCurrSawSingle = SawSingleCmBx.SelectedItem.ToString()
Else
m_CurrMachine.sCurrSawSingle = String.Empty
End If
' La inserisco
AddFrameSawSingle()
' Aggiorno visualizzazione
EgtDraw()
End Sub
Private Sub XXTrimTxBx_EgtClosed(sender As Object, e As EventArgs) Handles StartTrimTxBx.EgtClosed, EndTrimTxBx.EgtClosed
' Trim iniziale
Dim dStartTrim As Double = 0
If StringToLen(StartTrimTxBx.Text, dStartTrim) Then
m_dStartTrim = dStartTrim
WritePrivateProfileString(S_FRAME, K_STARTTRIM, DoubleToString(dStartTrim, 3), m_MainWindow.GetIniFile())
End If
' Trim finale
Dim dEndTrim As Double = 0
If StringToLen(EndTrimTxBx.Text, dEndTrim) Then
m_dEndTrim = dEndTrim
WritePrivateProfileString(S_FRAME, K_ENDTRIM, DoubleToString(dEndTrim, 3), m_MainWindow.GetIniFile())
End If
' Ricalcolo lavorazioni
AddFrameMachinings(m_dStartTrim, m_dEndTrim)
' Aggiorno visualizzazione
EgtDraw()
End Sub
Private Sub PhotoBtn_Click(sender As Object, e As RoutedEventArgs) Handles PhotoBtn.Click
EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx())
' Se macchina fotografica collegata, faccio una foto
If m_MainWindow.m_Camera.GetCameraLink() Then
If Not m_MainWindow.m_Camera.CameraClick() Then
m_CurrProjPage.SetErrorMessage(EgtMsg(90313)) 'Fotografia non riuscita
End If
' Altrimenti lancio browser di immagini
Else
m_MainWindow.MainWindowGrid.Children.Remove(m_MainWindow.m_CurrentProjectPageUC)
m_MainWindow.MainWindowGrid.Children.Add(m_MainWindow.m_PhotoPage)
m_MainWindow.m_ActivePage = MainWindow.Pages.Photo
m_MainWindow.m_PrevActivePage = MainWindow.Pages.FrameCut
End If
End Sub
Private Sub RawPartBtn_Click(sender As Object, e As RoutedEventArgs) Handles RawPartBtn.Click
m_MainWindow.m_CurrentProjectPageUC.CurrProjGrid.Visibility = Windows.Visibility.Hidden
m_MainWindow.m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(Me)
m_MainWindow.m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_MainWindow.m_RawPartPage)
m_MainWindow.m_ActivePage = MainWindow.Pages.RawPart
m_MainWindow.m_PrevActivePage = MainWindow.Pages.FrameCut
End Sub
Private Sub ImportBtn_Click(sender As Object, e As RoutedEventArgs) Handles ImportBtn.Click
m_MainWindow.MainWindowGrid.Children.Remove(m_MainWindow.m_CurrentProjectPageUC)
m_MainWindow.MainWindowGrid.Children.Add(m_MainWindow.m_ImportPageUC)
m_MainWindow.m_ActivePage = MainWindow.Pages.Import
m_MainWindow.m_PrevActivePage = MainWindow.Pages.FrameCut
End Sub
Friend Function CreateFrame(nPartId As Integer) As Boolean
' Aggiorno direzione corrente
m_CurrAx = AlongAxCmBx.SelectedIndex
' Sistemo la sezione della cornice
If Not AdjustSection(nPartId) Then Return False
' Recupero layer e curva della sezione
Dim nSectLayId As Integer = EgtGetFirstNameInGroup(nPartId, NAME_SECT)
Dim nCrvId As Integer = EgtGetFirstInGroup(nSectLayId)
If nCrvId = GDB_ID.NULL Then Return False
' Porto la sezione nel piano opportuno e calcolo il vettore di estrusione
Dim vtExtr As Vector3d
If m_CurrAx = 0 Then
' Se lungo X nel piano YZ
EgtChangeGroupFrame(nSectLayId, New Frame3d(Point3d.ORIG, Frame3d.TYPE.LEFT))
vtExtr = New Vector3d(m_RawBox.DimX() - 2 * m_dKerf, 0, 0)
Else
' Se lungo Y nel piano XZ
EgtChangeGroupFrame(nSectLayId, New Frame3d(Point3d.ORIG, Frame3d.TYPE.FRONT))
vtExtr = New Vector3d(0, m_RawBox.DimY() - 2 * m_dKerf, 0)
End If
' Creo layer per la linea guida
Dim nGuideLayId As Integer = EgtCreateGroup(nPartId, New Frame3d())
EgtSetName(nGuideLayId, NAME_GUIDE)
EgtSetColor(nGuideLayId, COL_FRAME())
' Creo la linea guida
Dim ptStart As Point3d
EgtStartPoint(nCrvId, nGuideLayId, ptStart)
EgtCreateLine(nGuideLayId, ptStart, ptStart + vtExtr)
' Creo layer per la superficie
Dim nSurfLayId As Integer = EgtCreateGroup(nPartId, New Frame3d())
EgtSetName(nSurfLayId, NAME_SURF)
EgtSetColor(nSurfLayId, COL_FRAME())
' Creo la superficie di estrusione
Dim nSectIds(0) As Integer
nSectIds(0) = nCrvId
Dim nSurfId As Integer = EgtCreateSurfTmByRegionExtrusion(nSurfLayId, 1, nSectIds, vtExtr, GDB_RT.GLOB)
' Assegno nome e direzione a pezzo
EgtSetName(nPartId, NAME_FRAME)
EgtSetInfo(nPartId, INFO_FRAME_DIR, m_CurrAx)
' Inserisco il pezzo nel grezzo
Return InsertPartInRawPart(nPartId)
End Function
Friend Function UpdateFrames() As Boolean
Dim nId As Integer = EgtGetFirstPart()
While nId <> GDB_ID.NULL
If Not UpdateFrame(nId) Then
EgtErase(nId)
End If
nId = EgtGetFirstPart()
End While
Return True
End Function
Friend Function UpdateFrame(nPartId As Integer) As Boolean
' Aggiorno direzione corrente
m_CurrAx = AlongAxCmBx.SelectedIndex
' Recupero layer e curva della sezione
Dim nSectLayId As Integer = EgtGetFirstNameInGroup(nPartId, NAME_SECT)
Dim nCrvId As Integer = EgtGetFirstInGroup(nSectLayId)
If nCrvId = GDB_ID.NULL Then Return False
' Porto la sezione nel piano opportuno e calcolo il vettore di estrusione
Dim vtExtr As Vector3d
If m_CurrAx = 0 Then
' Se lungo X nel piano YZ
EgtChangeGroupFrame(nSectLayId, New Frame3d(Point3d.ORIG, Frame3d.TYPE.LEFT))
vtExtr = New Vector3d(m_RawBox.DimX() - 2 * m_dKerf, 0, 0)
Else
' Se lungo Y nel piano XZ
EgtChangeGroupFrame(nSectLayId, New Frame3d(Point3d.ORIG, Frame3d.TYPE.FRONT))
vtExtr = New Vector3d(0, m_RawBox.DimY() - 2 * m_dKerf, 0)
End If
' Recupero layer per la linea guida
Dim nGuideLayId As Integer = EgtGetFirstNameInGroup(nPartId, NAME_GUIDE)
If nGuideLayId = GDB_ID.NULL Then
nGuideLayId = EgtCreateGroup(nPartId, New Frame3d())
EgtSetName(nGuideLayId, NAME_GUIDE)
Else
EgtEmptyGroup(nGuideLayId)
End If
EgtSetColor(nGuideLayId, COL_FRAME())
' Creo la linea guida
Dim ptStart As Point3d
EgtStartPoint(nCrvId, nGuideLayId, ptStart)
EgtCreateLine(nGuideLayId, ptStart, ptStart + vtExtr)
' Recupero layer per la superficie
Dim nSurfLayId As Integer = EgtGetFirstNameInGroup(nPartId, NAME_SURF)
If nSurfLayId = GDB_ID.NULL Then
nSurfLayId = EgtCreateGroup(nPartId, New Frame3d())
EgtSetName(nSurfLayId, NAME_SURF)
Else
EgtEmptyGroup(nSurfLayId)
End If
EgtSetColor(nSurfLayId, COL_FRAME())
' Creo la superficie di estrusione
Dim nSectIds(0) As Integer
nSectIds(0) = nCrvId
Dim nSurfId As Integer = EgtCreateSurfTmByRegionExtrusion(nSurfLayId, 1, nSectIds, vtExtr, GDB_RT.GLOB)
' Assegno nome e direzione a pezzo
EgtSetName(nPartId, NAME_FRAME)
EgtSetInfo(nPartId, INFO_FRAME_DIR, m_CurrAx)
' Inserisco il pezzo nel grezzo
Return InsertPartInRawPart(nPartId)
End Function
Private Function AdjustSection(nPartId As Integer) As Boolean
' Recupero identificativo del primo layer
Dim nLayerId As Integer = EgtGetFirstLayer(nPartId)
' Concateno le curve del primo layer
EgtSelectLayerObjs(nLayerId)
Dim nCrvIds(0) As Integer
nCrvIds(0) = GDB_ID.SEL
Dim nCrvId As Integer = EgtCreateCurveCompoByChain(nLayerId, 1, nCrvIds, New Point3d(), True)
If nCrvId = GDB_ID.NULL Then Return False
' Elimino eventuali curve oltre la prima
Dim nId As Integer = EgtGetNext(nCrvId)
While nId <> GDB_ID.NULL
Dim nNextId = EgtGetNext(nId)
EgtErase(nId)
nId = nNextId
End While
' Verifico se curva piana e ne recupero il piano medio
Dim vtN As Vector3d
Dim dDist As Double
If Not EgtCurveIsFlat(nCrvId, vtN, dDist) Then
EgtProjectCurveOnPlane(nCrvId, Point3d.ORIG + dDist * vtN, vtN)
End If
' Creo layer sezione con riferimento OCS del piano
Dim frPlane As New Frame3d
frPlane.Setup(Point3d.ORIG, vtN.Glob(nLayerId))
Dim nSectLayId As Integer = EgtCreateGroup(nPartId, frPlane, GDB_RT.GLOB)
EgtSetName(nSectLayId, NAME_SECT)
EgtSetColor(nSectLayId, COL_FRAME())
EgtRelocateGlob(nCrvId, nSectLayId)
' Elimino vecchio layer
EgtErase(nLayerId)
' Verifico chiusura sezione
If Not EgtCurveIsClosed(nCrvId) Then
' Recupero ingombro locale
Dim b3Box As New BBox3d
EgtGetBBox(nCrvId, GDB_BB.STANDARD, b3Box)
' Recupero estremi
Dim ptStart, ptEnd As Point3d
EgtStartPoint(nCrvId, ptStart)
EgtEndPoint(nCrvId, ptEnd)
' Deve andare da dx a sn
If ptStart.x < ptEnd.x Then
EgtInvertCurve(nCrvId)
Dim ptTmp As Point3d = New Point3d(ptEnd)
ptEnd = ptStart
ptStart = ptTmp
End If
' Se necessario, aggiungo due tratti orizzontali agli estremi
Dim vtStart, vtEnd As Vector3d
EgtStartVector(nCrvId, vtStart)
EgtEndVector(nCrvId, vtEnd)
If ptStart.x < b3Box.Max().x - EPS_SMALL Or (vtStart.x > -EPS_SMALL And vtStart.y < 0) Then
ptStart = New Point3d(b3Box.Max().x + 10 * EPS_SMALL, ptStart.y, ptStart.z)
EgtInvertCurve(nCrvId)
EgtAddCurveCompoLine(nCrvId, ptStart)
EgtInvertCurve(nCrvId)
End If
If ptEnd.x > b3Box.Min().x + EPS_SMALL Or (vtEnd.x > -EPS_SMALL And vtEnd.y > 0) Then
ptEnd = New Point3d(b3Box.Min().x - 10 * EPS_SMALL, ptEnd.y, ptEnd.z)
EgtAddCurveCompoLine(nCrvId, ptEnd)
End If
' Eseguo chiusura (con aggiunta di eventuali tratti verticali)
If ptStart.y > b3Box.Min().y + EPS_SMALL Then
EgtInvertCurve(nCrvId)
EgtAddCurveCompoLine(nCrvId, New Point3d(ptStart.x, b3Box.Min().y - 10 * EPS_SMALL, ptStart.z))
EgtInvertCurve(nCrvId)
End If
If ptEnd.y > b3Box.Min().y + 5 * EPS_SMALL Then
EgtAddCurveCompoLine(nCrvId, New Point3d(ptEnd.x, b3Box.Min().y - 10 * EPS_SMALL, ptEnd.z))
End If
EgtCloseCurveCompo(nCrvId)
End If
Return True
End Function
Private Function InsertPartInRawPart(nPartId As Integer) As Boolean
' Determino ingombro del pezzo
Dim PartBox As New BBox3d
EgtGetBBoxGlob(nPartId, GDB_BB.EXACT + GDB_BB.IGNORE_TEXT + GDB_BB.IGNORE_DIM, PartBox)
' Determino ingombro di eventuali pezzi già presenti
Dim OtherBox As New BBox3d
Dim nId2 As Integer = EgtGetFirstPartInRawPart(m_nRawId)
While nId2 <> GDB_ID.NULL
Dim TmpBox As New BBox3d
If EgtGetBBoxGlob(nId2, GDB_BB.EXACT + GDB_BB.IGNORE_TEXT + GDB_BB.IGNORE_DIM, TmpBox) Then
OtherBox.Add(TmpBox)
End If
nId2 = EgtGetNextPartInRawPart(nId2)
End While
' Determino distanza da spessore lama
Dim dMinDist As Double = 0
Dim dSawThick As Double = 0
If EgtTdbSetCurrTool(m_MainWindow.m_CurrentMachine.sCurrSaw) AndAlso
EgtTdbGetCurrToolParam(MCH_TP.THICK, dSawThick) Then
dMinDist = dSawThick + 5 * EPS_SMALL
Else
EgtOutLog("Not found current saw for frames mindist")
dMinDist = 0
End If
' Inserisco il pezzo nel grezzo
Dim ptIns As Point3d
If OtherBox.IsEmpty() Then
Dim dOffsXy As Double = 0
StringToLen(OffsXyTxBx.Text, dOffsXy)
If m_CurrAx = 0 Then
ptIns.x = m_dKerf
ptIns.y = m_dKerf + dOffsXy
Else
ptIns.x = m_dKerf + dOffsXy
ptIns.y = m_dKerf
End If
Else
If m_CurrAx = 0 Then
ptIns.x = m_dKerf
ptIns.y = OtherBox.Max().y - m_RawBox.Min().y + dMinDist
Else
ptIns.x = OtherBox.Max().x - m_RawBox.Min().x + dMinDist
ptIns.y = m_dKerf
End If
End If
Dim dOffsZ As Double = 0
StringToLen(OffsZTxBx.Text, dOffsZ)
ptIns.z = (m_RawBox.Max().z - m_RawBox.Min().z) - (PartBox.Max().z - PartBox.Min().z) - dOffsZ
ptIns.z = Math.Max(ptIns.z, 0)
Return EgtAddPartToRawPart(nPartId, ptIns, EgtGetFirstRawPart())
End Function
End Class