e130c52a07
- gestione testi su pezzi da colore configurato da utente.
377 lines
15 KiB
VB.net
377 lines
15 KiB
VB.net
Imports EgtUILib
|
|
|
|
Public Class FastGridSlabManager
|
|
|
|
' Riferimento alla MainWindow
|
|
Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow)
|
|
|
|
' Flag prima apertura
|
|
Private m_bFirst As Boolean = True
|
|
' Dati ordine
|
|
Private m_nCurrSlab As Integer = 0
|
|
Private m_nPieceType As Integer = 0
|
|
Private m_PieceDimensionsX(4) As Integer
|
|
Private m_PieceDimensionsY(4) As Integer
|
|
Private m_sCompoDir As String = String.Empty
|
|
|
|
' Costante minima dimensione pezzo
|
|
Private Const MIN_DIM As double = 10
|
|
|
|
Private Sub FastGridSlabManager_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized
|
|
' Imposto i messaggi letti dal file dei messaggi
|
|
OrderTxBl.Text = EgtMsg(MSG_FASTGRIDPAGEUC) 'Order name - Nome ordine
|
|
CurrSlabTxBl.Text = EgtMsg(MSG_FASTGRIDPAGEUC + 1) 'Curr slab - Lastra corrente
|
|
PieceTypeGpBx.Header = EgtMsg(MSG_FASTGRIDPAGEUC + 3) 'Piece type - Tipo pezzo
|
|
ConfirmOrderBtn.Content = EgtMsg(MSG_FASTGRIDPAGEUC + 5) 'Confirm order - Conferma ordine
|
|
InsertPiecesBtn.Content = EgtMsg(MSG_FASTGRIDPAGEUC + 4) 'Insert pieces - Inserisci pezzi
|
|
LastSlabBtn.Content = EgtMsg(MSG_FASTGRIDPAGEUC + 2) 'Last slab - Ultima lastra
|
|
' Leggo dati da ini
|
|
GetPrivateProfileString(S_FASTGRID, K_FG_ORDER, "", OrderTxBx.Text, m_MainWindow.GetIniFile())
|
|
m_nCurrSlab = GetPrivateProfileInt(S_FASTGRID, K_FG_CURRSLAB, 0, m_MainWindow.GetIniFile())
|
|
m_nPieceType = GetPrivateProfileInt(S_FASTGRID, K_FG_PIECETYPE, 0, m_MainWindow.GetIniFile())
|
|
End Sub
|
|
|
|
Private Sub FastGridSlabManager_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
|
|
' Se prima esecuzione
|
|
If m_bFirst Then
|
|
' Leggo direttorio componenti
|
|
GetPrivateProfileString(S_COMPO, K_COMPODIR, "", m_sCompoDir, m_MainWindow.GetIniFile())
|
|
m_bFirst = False
|
|
End If
|
|
' Recupero parametri per nesting
|
|
m_MainWindow.m_CadCutPageUC.m_NestPage.LoadParams()
|
|
' Recupero dimensioni pezzi da ini
|
|
For Index = 1 To 5
|
|
GetPieceDimensions(Index)
|
|
Next
|
|
' Ne imposto i valori
|
|
CurrSlabTxBx.Text = m_nCurrSlab
|
|
Type1Btn.IsChecked = False
|
|
Type2Btn.IsChecked = False
|
|
Type3Btn.IsChecked = False
|
|
Type4Btn.IsChecked = False
|
|
Type5Btn.IsChecked = False
|
|
Select Case m_nPieceType
|
|
Case 1
|
|
Type1Btn.IsChecked = True
|
|
Case 2
|
|
Type2Btn.IsChecked = True
|
|
Case 3
|
|
Type3Btn.IsChecked = True
|
|
Case 4
|
|
Type4Btn.IsChecked = True
|
|
Case 5
|
|
Type5Btn.IsChecked = True
|
|
End Select
|
|
' Verifico se c'e' un ordine in corso
|
|
CurrSlabTxBx.IsEnabled = False
|
|
If m_nCurrSlab > 0 Then
|
|
OrderTxBx.IsEnabled = False
|
|
PieceTypeGpBx.IsEnabled = False
|
|
ConfirmOrderBtn.IsEnabled = False
|
|
InsertPiecesBtn.IsEnabled = True
|
|
LastSlabBtn.IsEnabled = True
|
|
Else
|
|
OrderTxBx.IsEnabled = True
|
|
PieceTypeGpBx.IsEnabled = True
|
|
ConfirmOrderBtn.IsEnabled = True
|
|
InsertPiecesBtn.IsEnabled = False
|
|
LastSlabBtn.IsEnabled = False
|
|
End If
|
|
' Verifico se ultima lastra
|
|
If m_MainWindow.m_CurrentProjectPageUC.GetLastSlab() Then
|
|
LastSlabBtn.IsChecked = True
|
|
End If
|
|
EgtZoom(ZM.ALL)
|
|
End Sub
|
|
|
|
Private Sub InsertPiecesBtn_Click(sender As Object, e As RoutedEventArgs) Handles InsertPiecesBtn.Click
|
|
m_MainWindow.m_CurrentProjectPageUC.SetProjectOrder(OrderTxBx.Text)
|
|
' Rimuovo tutti i pezzi
|
|
RemoveAllParts()
|
|
' Lancio l'inserimento dei pezzi
|
|
ExecInsert()
|
|
' Aggiorno visualizzazione
|
|
EgtZoom(ZM.ALL)
|
|
End Sub
|
|
|
|
Private Sub LastSlabBtn_Click(sender As Object, e As RoutedEventArgs) Handles LastSlabBtn.Click
|
|
If LastSlabBtn.IsChecked Then
|
|
m_MainWindow.m_CurrentProjectPageUC.SetLastSlab()
|
|
Else
|
|
m_MainWindow.m_CurrentProjectPageUC.ResetLastSlab()
|
|
End If
|
|
End Sub
|
|
|
|
Friend Sub RemoveAllParts()
|
|
Dim nRawId As Integer = CamAuto.GetCurrentRaw()
|
|
Dim nPartId As Integer = EgtGetFirstPartInRawPart( nRawId)
|
|
While nPartId <> GDB_ID.NULL
|
|
Dim nNextPartId = EgtGetNextPartInRawPart( nPartId)
|
|
' Rimuovo dal grezzo
|
|
EgtRemovePartFromRawPart(nPartId)
|
|
' Rimuovo le lavorazioni
|
|
EraseMachinings(nPartId)
|
|
'Cancello
|
|
EgtErase(nPartId)
|
|
' Passo al successivo
|
|
nPartId = nNextPartId
|
|
End While
|
|
End Sub
|
|
|
|
Private Function ExecInsert() As Boolean
|
|
' Recupero le dimensioni dei pezzi
|
|
Dim dDimX As Double = m_PieceDimensionsX( m_nPieceType - 1)
|
|
Dim dDimY As Double = m_PieceDimensionsY( m_nPieceType - 1)
|
|
' Imposto la griglia di inserimento
|
|
Dim MyGrid As New InsertGrid
|
|
If Not MyGrid.Init( m_MainWindow, dDimX, dDimY) Then Return False
|
|
' Abilito regioni per nesting
|
|
m_MainWindow.m_CadCutPageUC.m_NestPage.UpdateNestRegions()
|
|
m_MainWindow.m_CadCutPageUC.m_NestPage.EnableReferenceRegion(false)
|
|
' Carico lua per creare rettangoli
|
|
Dim sLuaPath = m_sCompoDir & "\Rettangolo.lua"
|
|
If Not EgtLuaExecFile(sLuaPath) Then Return False
|
|
' Inserisco nel gruppo un nuovo componente per ogni pezzo da inserire
|
|
Dim nId As Integer = GDB_ID.NULL
|
|
For i As Integer = 1 To 100
|
|
EgtLuaSetGlobNumVar("CMP.V1", dDimX)
|
|
EgtLuaSetGlobNumVar("CMP.V2", dDimY)
|
|
' Esecuzione componente
|
|
If Not EgtLuaExecLine("CMP_Draw(false)") Then Continue For
|
|
' Recupero Id del nuovo componente
|
|
nId = EgtGetLastPart()
|
|
If nId = GDB_ID.NULL Then Continue For
|
|
' Muovo la regione in Z per evitare problemi in visualizzazione
|
|
Dim nRegId = EgtGetFirstNameInGroup(nId, NAME_REGION)
|
|
EgtMove(nRegId, New Vector3d(0, 0, DELTAZ_REG), GDB_RT.GLOB)
|
|
' Aggiusto per lavorazioni
|
|
EgtAdjustFlatPart(nId)
|
|
' Imposto colore testi
|
|
Utility.SetTextColor( nRegId)
|
|
' Se primo pezzo, lo inserisco con metodo standard
|
|
If i = 1 Then
|
|
Dim ptGridOrig As Point3d
|
|
If m_MainWindow.m_CadCutPageUC.m_NestPage.InsertOnePart(nId) AndAlso GetPartCenter(nId, ptGridOrig) Then
|
|
MyGrid.SetOrig( ptGridOrig)
|
|
m_MainWindow.m_CadCutPageUC.m_NestPage.EnableReferenceRegion(false)
|
|
Else
|
|
Exit For
|
|
End If
|
|
' altrimenti lo inserisco nei punti griglia
|
|
Else
|
|
' Preparo il pezzo per l'inserimento
|
|
If Not m_MainWindow.m_CadCutPageUC.m_NestPage.PreInsertOnePart( nId) Then Exit For
|
|
Dim ptCurr As Point3d
|
|
If Not GetPartCenter( nId, ptCurr) Then Exit For
|
|
' Cerco la prossima posizione griglia valida
|
|
While True
|
|
' Cerco il prossimo centro di inserimento
|
|
Dim ptCen As Point3d
|
|
If Not MyGrid.GetNextPoint(ptCen) Then Exit For
|
|
' Lo sposto nel punto griglia e lo verifico
|
|
Dim vtMove As Vector3d = ptCen - ptCurr
|
|
vtMove.z = 0
|
|
EgtMove( nId, vtMove, GDB_RT.GLOB)
|
|
ptCurr = ptCurr + vtMove
|
|
' Eseguo verifica
|
|
If EgtVerifyPart(nId, True) Then Exit While
|
|
End While
|
|
End If
|
|
Next
|
|
' Cancello l'ultimo pezzo che sicuramente non è stato inserito
|
|
m_MainWindow.m_CadCutPageUC.m_NestPage.PreRemoveOnePart( nId)
|
|
EgtErase(nId)
|
|
' Pulisco lua
|
|
EgtLuaResetGlobVar("CMP")
|
|
EgtLuaResetGlobVar("CMP_Draw")
|
|
Return True
|
|
End Function
|
|
|
|
Private Function GetPartCenter( nId As integer, ByRef ptCen As Point3d) As Boolean
|
|
Dim nOutLoopId As Integer = EgtGetFirstNameInGroup( nId, NAME_OUTLOOP)
|
|
Dim b3Part As New BBox3d
|
|
If Not EgtGetBBoxGlob( nOutLoopId, GDB_BB.IGNORE_DIM + GDB_BB.IGNORE_TEXT, b3Part) Then Return false
|
|
ptCen = b3Part.Center()
|
|
Return True
|
|
End Function
|
|
|
|
Friend Sub OnPreNewProject()
|
|
' Se modalità FastGrid attiva e abilitata
|
|
If GetPrivateProfileInt(S_FASTGRID, K_FG_ENABLE, 0, m_MainWindow.GetIniFile()) <> 0 And
|
|
GetPrivateProfileInt(S_FASTGRID, K_FG_ACTIVE, 0, m_MainWindow.GetIniFile()) <> 0 Then
|
|
' Se il progetto precedente è stato inviato alla macchina
|
|
If m_MainWindow.m_CurrentProjectPageUC.GetProjectNcProgSent() <> 0 Then
|
|
CurrSlabIncrement()
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Friend Sub OnPostNewProject()
|
|
' Se modalità FastGrid attiva e abilitata
|
|
If GetPrivateProfileInt(S_FASTGRID, K_FG_ENABLE, 0, m_MainWindow.GetIniFile()) <> 0 And
|
|
GetPrivateProfileInt(S_FASTGRID, K_FG_ACTIVE, 0, m_MainWindow.GetIniFile()) <> 0 Then
|
|
If LastSlabBtn.IsChecked Then
|
|
m_MainWindow.m_CurrentProjectPageUC.SetLastSlab()
|
|
Else
|
|
m_MainWindow.m_CurrentProjectPageUC.ResetLastSlab()
|
|
End If
|
|
m_MainWindow.m_CurrentProjectPageUC.SaveProject()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub OrderTxBx_EgtClosed(sender As Object, e As EventArgs) Handles OrderTxBx.EgtClosed
|
|
WritePrivateProfileString(S_FASTGRID, K_FG_ORDER, OrderTxBx.Text, m_MainWindow.GetIniFile())
|
|
End Sub
|
|
|
|
Private Sub PiecesTypeBtn_Click(sender As Object, e As RoutedEventArgs) Handles Type1Btn.Click, Type2Btn.Click, Type3Btn.Click, Type4Btn.Click, Type5Btn.Click
|
|
If sender Is Type1Btn Then
|
|
m_nPieceType = 1
|
|
Type1Btn.IsChecked = True
|
|
Type2Btn.IsChecked = False
|
|
Type3Btn.IsChecked = False
|
|
Type4Btn.IsChecked = False
|
|
Type5Btn.IsChecked = False
|
|
ElseIf sender Is Type2Btn Then
|
|
m_nPieceType = 2
|
|
Type1Btn.IsChecked = False
|
|
Type2Btn.IsChecked = True
|
|
Type3Btn.IsChecked = False
|
|
Type4Btn.IsChecked = False
|
|
Type5Btn.IsChecked = False
|
|
ElseIf sender Is Type3Btn Then
|
|
m_nPieceType = 3
|
|
Type1Btn.IsChecked = False
|
|
Type2Btn.IsChecked = False
|
|
Type3Btn.IsChecked = True
|
|
Type4Btn.IsChecked = False
|
|
Type5Btn.IsChecked = False
|
|
ElseIf sender Is Type4Btn Then
|
|
m_nPieceType = 4
|
|
Type1Btn.IsChecked = False
|
|
Type2Btn.IsChecked = False
|
|
Type3Btn.IsChecked = False
|
|
Type4Btn.IsChecked = True
|
|
Type5Btn.IsChecked = False
|
|
ElseIf sender Is Type5Btn Then
|
|
m_nPieceType = 5
|
|
Type1Btn.IsChecked = False
|
|
Type2Btn.IsChecked = False
|
|
Type3Btn.IsChecked = False
|
|
Type4Btn.IsChecked = False
|
|
Type5Btn.IsChecked = True
|
|
Else
|
|
Return
|
|
End If
|
|
WritePrivateProfileString(S_FASTGRID, K_FG_PIECETYPE, m_nPieceType, m_MainWindow.GetIniFile())
|
|
End Sub
|
|
|
|
Private Sub ConfirmOrderBtn_Click(sender As Object, e As RoutedEventArgs) Handles ConfirmOrderBtn.Click
|
|
If Not String.IsNullOrEmpty(OrderTxBx.Text) And m_nPieceType > 0 And m_nPieceType <= 5 Then
|
|
m_nCurrSlab = 1
|
|
CurrSlabTxBx.Text = 1
|
|
WritePrivateProfileString(S_FASTGRID, K_FG_CURRSLAB, m_nCurrSlab, m_MainWindow.GetIniFile())
|
|
OrderTxBx.IsEnabled = False
|
|
PieceTypeGpBx.IsEnabled = False
|
|
ConfirmOrderBtn.IsEnabled = False
|
|
InsertPiecesBtn.IsEnabled = True
|
|
LastSlabBtn.IsEnabled = True
|
|
Else
|
|
' segnalare che i dati ordine non sono accettabili
|
|
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub GetPieceDimensions(Index As Integer)
|
|
Dim DimensionString As String = ""
|
|
GetPrivateProfileString(S_FASTGRID, Index, "", DimensionString, m_MainWindow.GetIniFile())
|
|
Dim DimensionSplit() As String = DimensionString.Split(","c)
|
|
If DimensionSplit.Count = 3 Then
|
|
m_PieceDimensionsX(Index - 1) = DimensionSplit(0)
|
|
m_PieceDimensionsY(Index - 1) = DimensionSplit(1)
|
|
Select Case Index
|
|
Case 1
|
|
Type1Btn.Content = DimensionSplit(2)
|
|
Case 2
|
|
Type2Btn.Content = DimensionSplit(2)
|
|
Case 3
|
|
Type3Btn.Content = DimensionSplit(2)
|
|
Case 4
|
|
Type4Btn.Content = DimensionSplit(2)
|
|
Case 5
|
|
Type5Btn.Content = DimensionSplit(2)
|
|
End Select
|
|
End If
|
|
End Sub
|
|
|
|
Friend Sub CurrSlabIncrement()
|
|
' Se ultima lastra
|
|
If m_MainWindow.m_CurrentProjectPageUC.GetLastSlab() Then
|
|
' L'ordine è finito
|
|
m_nCurrSlab = 0
|
|
WritePrivateProfileString(S_FASTGRID, K_FG_CURRSLAB, m_nCurrSlab, m_MainWindow.GetIniFile())
|
|
OrderTxBx.Text = ""
|
|
OrderTxBx.IsEnabled = True
|
|
PieceTypeGpBx.IsEnabled = True
|
|
ConfirmOrderBtn.IsEnabled = True
|
|
InsertPiecesBtn.IsEnabled = False
|
|
LastSlabBtn.IsEnabled = False
|
|
LastSlabBtn.IsChecked = False
|
|
Else
|
|
' Incremento il contatore lastra
|
|
m_nCurrSlab += 1
|
|
WritePrivateProfileString(S_FASTGRID, K_FG_CURRSLAB, m_nCurrSlab, m_MainWindow.GetIniFile())
|
|
End If
|
|
CurrSlabTxBx.Text = m_nCurrSlab
|
|
End Sub
|
|
|
|
Private Class InsertGrid
|
|
Private m_b3Raw As New BBox3d
|
|
Private m_dStepX As Double
|
|
Private m_dStepY As Double
|
|
Private m_ptGridOrig As Point3d
|
|
Private m_nStartX As Integer
|
|
Private m_nStepX As Integer
|
|
Private m_nStepY As Integer
|
|
|
|
Friend Function Init(MainWnd As MainWindow, dDimX As Double, dDimY As Double) As Boolean
|
|
' Box del grezzo
|
|
If Not CamAuto.GetRawBox(m_b3Raw) Then Return False
|
|
' Spessore della lama corrente
|
|
Dim dSawThick As Double
|
|
If not EgtTdbSetCurrTool(MainWnd.m_CurrentMachine.sCurrSaw) OrElse
|
|
not EgtTdbGetCurrToolParam(MCH_TP.THICK, dSawThick) Then Return false
|
|
' Determino i passi di griglia
|
|
If dDimX < MIN_DIM Or dDimY < MIN_DIM Then Return False
|
|
m_dStepX = dDimX + dSawThick
|
|
m_dStepY = dDimY + dSawThick
|
|
' Imposto la posizione iniziale
|
|
m_nStartX = 0
|
|
m_nStepX = 0
|
|
m_nStepY = 0
|
|
Return True
|
|
End Function
|
|
|
|
Friend Sub SetOrig( ptOrig As Point3d)
|
|
m_ptGridOrig = ptOrig
|
|
m_nStartX = ( m_b3Raw.Min().x + 0.5 * m_dStepX - ptOrig.x) / m_dStepX
|
|
m_nStepX = 0
|
|
m_nStepY = ( m_b3Raw.Min().y + 0.5 * m_dStepY - ptOrig.y) / m_dStepY
|
|
End Sub
|
|
|
|
Friend Function GetNextPoint( ByRef ptCen As Point3d) As Boolean
|
|
' Mi muovo sulla riga
|
|
m_nStepX += 1
|
|
ptCen = m_ptGridOrig + m_nStepX * m_dStepX * Vector3d.X_AX() + m_nStepY * m_dStepY * Vector3d.Y_AX()
|
|
If m_b3Raw.EnclosesXY( ptCen) Then Return True
|
|
' Vada alla riga successiva
|
|
m_nStepY += 1
|
|
m_nStepX = m_nStartX
|
|
ptCen = m_ptGridOrig + m_nStepX * m_dStepX * Vector3d.X_AX() + m_nStepY * m_dStepY * Vector3d.Y_AX()
|
|
Return m_b3Raw.EnclosesXY( ptCen)
|
|
End Function
|
|
|
|
End Class
|
|
|
|
End Class
|