Files
OmagCUT/Frames/FrameCutPageUC.xaml.vb
T
Demetrio Cassarino 5145accc39 -aggiornato messggi
2025-07-14 08:41:49 +02:00

1037 lines
46 KiB
VB.net

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
Friend m_FrameMachiningUC As FrameMachiningUC
' 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 As New List(Of String)
' Direzione corrente
Private m_CurrAx As Integer = 0
' Importazione guida in corso
Private m_bGuide As Boolean = False
Private Sub FrameCutPage_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized
' Creazione delle Page UserControl
m_ProjectMgr = New ProjectMgrUC
m_FrameMachiningUC = New FrameMachiningUC
' Posizionamento nella griglia delle Page UserControl
m_ProjectMgr.SetValue(Grid.RowProperty, 2)
m_ProjectMgr.SetValue(Grid.ColumnProperty, 1)
m_FrameMachiningUC.SetValue(Grid.RowProperty, 1)
' Assegno UC a questa pagina
FrameCutPageGrid.Children.Add(m_ProjectMgr)
' Associo ComboBox e Liste
AlongAxCmBx.ItemsSource = m_AlongAx
' Imposto dati arco
Dim dExtRad As Double = GetPrivateProfileDouble(S_FRAME, K_ARCRAD, 400, m_MainWindow.GetIniFile())
ArcRadTxBx.Text = LenToString(dExtRad, 3)
Dim dAngCenDeg As Double = Math.Abs(GetPrivateProfileDouble(S_FRAME, K_ARCANG, 90, m_MainWindow.GetIniFile()))
ArcAngTxBx.Text = DoubleToString(dAngCenDeg, 3)
' 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)
Dim dOffsYY As Double = GetPrivateProfileDouble(S_FRAME, K_OFFSYY, 5, m_MainWindow.GetIniFile())
OffsYyTxBx.Text = LenToString(dOffsYY, 3)
Dim dOffsXInterY As Double = GetPrivateProfileDouble(S_FRAME, K_OFFSXINTERY, 5, m_MainWindow.GetIniFile())
OffsXInteryTxBx.Text = LenToString(dOffsXInterY, 3)
Dim bOffsYInterYSawTh As Boolean = False
UseInteraxisChBx.IsChecked = (GetPrivateProfileInt(S_FRAME, K_OFFSXINTERYSAWTH, 0, m_MainWindow.GetIniFile()) <> 1)
' Imposto i messaggi letti dal file dei messaggi
m_AlongAx.Add(EgtMsg(90601)) ' Lungo X
m_AlongAx.Add(EgtMsg(90602)) ' Lungo Y
If GetPrivateProfileInt(S_FRAME, K_ARC_ENABLE, 0, m_MainWindow.GetIniFile()) <> 0 And
m_MainWindow.GetKeyOption( MainWindow.KEY_OPT.CURVED_FRAME) Then
m_AlongAx.Add(EgtMsg(90613)) ' Arco
m_AlongAx.Add(EgtMsg(90614)) ' Guida
End If
SelSectionBtn.ToolTip = EgtMsg(90615) ' Sezione
SelGuideBtn.Content = EgtMsg(906116) ' Guida
ArcRadTxBl.Text = EgtMsg(90617) ' Rad
ArcAngTxBl.Text = EgtMsg(90618) ' Ang
MirrorPartBtn.ToolTip = EgtMsg(90607) ' Mirror cornice
RemovePartBtn.ToolTip = EgtMsg(90603) ' Rimuovi cornice
OffsZTxBl.Text = EgtMsg(90608) ' Distanza sopra
OffsXyTxBl.Text = EgtMsg(90609) ' Distanza inizio
OffsYyTxBl.Text = EgtMsg(90622) ' Distanza Y
OffsXInteryTxBl.Text = EgtMsg(90645) ' Interasse
Dim sChBxToolTip As String = EgtMsg(90646) ' Applica valore indicato\n altrienti spessore lama
sChBxToolTip = sChBxToolTip.Replace("/n", "£")
Dim sItems As String() = sChBxToolTip.Split("£")
For Index As Integer = 0 To sItems.Count - 1
If Index = 0 Then
sChBxToolTip = sItems(Index).Trim
Else
sChBxToolTip &= vbCrLf & sItems(Index).Trim
End If
Next
UseInteraxisChBx.ToolTip = sChBxToolTip
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
m_bGuide = False
' 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
' Visualizzo il bottone per l'importazione dei compo frame
If m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.COMPOFRAME) AndAlso GetPrivateProfileInt(S_FRAMECOMPO, K_CMP_COUNT, 0, m_MainWindow.GetIniFile()) > 0 Then
CompoBtn.Visibility = Visibility.Visible
Else
CompoBtn.Visibility = Visibility.Hidden
End If
' Recupero dimensioni e kerf del grezzo
m_nRawId = EgtGetFirstRawPart()
GetRawBox(m_RawBox)
EgtGetInfo(m_nRawId, KEY_KERF, m_dKerf)
' Imposto direzione cornici
UpdatePage()
' 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_FrameMachiningUC.m_dStartTrim, m_FrameMachiningUC.m_dEndTrim)
End If
' Abilito visualizzazione delle lavorazioni
EgtSetCurrPhase(1)
ShowAllCurrPhaseMachinings()
EgtZoom(ZM.ALL)
End Sub
Private Sub UpdatePage()
' Se già presenti cornici
Dim nPartId As Integer = EgtGetFirstPartInRawPart(m_nRawId)
If nPartId <> GDB_ID.NULL Then
' Visualizzo direzione senza poterla modificare
Dim nDir As Integer
If EgtGetInfo(nPartId, INFO_FRAME_DIR, nDir) Then m_CurrAx = nDir
AlongAxCmBx.SelectedIndex = m_CurrAx
AlongAxCmBx.IsEnabled = False
' Se cornice arco o curva, disabilito scelta nuova sezione
SelSectionBtn.IsEnabled = ( m_CurrAx = 0 Or m_CurrAx = 1)
' Se cornice curva, verifico se disabilitare scelta guida
If m_CurrAx = 3 Then
SelGuideBtn.IsEnabled = ( EgtGetFirstNameInGroup( nPartId, NAME_GUIDE) = GDB_ID.NULL)
End If
' Se cornice su arco ne leggo i dati
If m_CurrAx = 2 Then
Dim dExtRad As Double
if EgtGetInfo(nPartId, INFO_FRAME_ARCRAD, dExtRad) Then ArcRadTxBx.Text = LenToString( dExtRad, 3)
Dim dAngCenDeg As Double
if EgtGetInfo(nPartId, INFO_FRAME_ARCANG, dAngCenDeg) Then ArcAngTxBx.Text = DoubleToString( dAngCenDeg, 3)
End If
' Altrimenti
Else
' Abilito cambio direzione e scelta sezione
AlongAxCmBx.SelectedIndex = m_CurrAx
AlongAxCmBx.IsEnabled = True
SelSectionBtn.IsEnabled = True
SelGuideBtn.IsEnabled = True
End If
End Sub
Private Sub AlongAxCmBx_SelectionChanged() Handles AlongAxCmBx.SelectionChanged
Select Case AlongAxCmBx.SelectedIndex
Case 0, 1 'Lungo X, Lungo Y
SelSectionBtn.Visibility = Windows.Visibility.Visible
SelGuideBtn.Visibility = Windows.Visibility.Collapsed
ArcGrid.Visibility = Windows.Visibility.Collapsed
OffsYyTxBl.Visibility = Windows.Visibility.Collapsed
OffsYyTxBx.Visibility = Windows.Visibility.Collapsed
OffsXyTxBl.Text = EgtMsg(90609) ' Distanza inizio
Case 2 'Arco
SelSectionBtn.Visibility = Windows.Visibility.Visible
SelGuideBtn.Visibility = Windows.Visibility.Collapsed
ArcGrid.Visibility = Windows.Visibility.Visible
OffsYyTxBl.Visibility = Windows.Visibility.Visible
OffsYyTxBx.Visibility = Windows.Visibility.Visible
OffsXyTxBl.Text = EgtMsg(90621) ' Distanza X
Case 3 'Guida
SelSectionBtn.Visibility = Windows.Visibility.Visible
SelGuideBtn.Visibility = Windows.Visibility.Visible
SelGuideBtn.IsEnabled = False
ArcGrid.Visibility = Windows.Visibility.Collapsed
OffsYyTxBl.Visibility = Windows.Visibility.Visible
OffsYyTxBx.Visibility = Windows.Visibility.Visible
OffsXyTxBl.Text = EgtMsg(90621) ' Distanza X
End Select
End Sub
Private Sub FrameCutPage_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
' Nascondo tutte le lavorazioni
HideAllMachinings()
' se aperta pagina lavorazioni la chiudo
If MachiningBtn.IsChecked Then
LeftGrid.Children.Remove(m_FrameMachiningUC)
MachiningBtn.IsChecked = False
End If
' 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
nId = EgtGetNextObjInSelWin()
Continue While
End If
' 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 ArcXXTxBx_EgtClosed(sender As Object, e As EventArgs) Handles ArcRadTxBx.EgtClosed, ArcAngTxBx.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_FrameMachiningUC.m_dStartTrim, m_FrameMachiningUC.m_dEndTrim)
' Aggiorno visualizzazione
EgtDraw()
' Salvo offset in Z dal sopra del grezzo e in XY da angolo in basso a sx
Dim dExtRad As Double = 0
If StringToLen(ArcRadTxBx.Text, dExtRad) Then
WritePrivateProfileString(S_FRAME, K_ARCRAD, DoubleToString(dExtRad, 3), m_MainWindow.GetIniFile())
End If
Dim dAngCenDeg As Double = 0
If StringToDouble(ArcAngTxBx.Text, dAngCenDeg) Then
WritePrivateProfileString(S_FRAME, K_ARCANG, DoubleToString(dAngCenDeg, 3), m_MainWindow.GetIniFile())
End If
End Sub
Private Sub OffsXXTxBx_EgtClosed(sender As Object, e As EventArgs) Handles OffsZTxBx.EgtClosed, OffsXyTxBx.EgtClosed, OffsYyTxBx.EgtClosed, OffsXInteryTxBx.EgtClosed, UseInteraxisChBx.Click
' 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_FrameMachiningUC.m_dStartTrim, m_FrameMachiningUC.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
Dim dOffsYy As Double = 0
If StringToLen(OffsYyTxBx.Text, dOffsYy) Then
WritePrivateProfileString(S_FRAME, K_OFFSYY, DoubleToString(dOffsYy, 3), m_MainWindow.GetIniFile())
End If
Dim dOffsXIntery As Double = 0
If StringToLen(OffsXInteryTxBx.Text, dOffsXIntery) Then
WritePrivateProfileString(S_FRAME, K_OFFSXINTERY, DoubleToString(dOffsXIntery, 3), m_MainWindow.GetIniFile())
End If
Dim sUseInteraxis As String = "1"
If UseInteraxisChBx.IsChecked Then
sUseInteraxis = "0"
End If
WritePrivateProfileString(S_FRAME, K_OFFSXINTERYSAWTH, sUseInteraxis, m_MainWindow.GetIniFile())
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
' Elimino eventuale facet selezionata
EgtRemoveInfo(nId, INFO_FRAME_SURF)
EgtRemoveInfo(nId, INFO_FRAME_FACET)
EgtEmptyGroup(EgtGetFirstNameInGroup(nId, NAME_FACET))
' Recupero layer e curva della sezione
Dim nSectLayId As Integer = EgtGetFirstNameInGroup(nId, NAME_SECT)
Dim nCrvId As Integer = EgtGetFirstInGroup(nSectLayId)
' Recupero box della sezione
Dim b3Box As New BBox3d
EgtGetBBoxGlob(nCrvId, GDB_BB.STANDARD, b3Box)
' Eseguo rotazione di 180 deg attorno a Z
EgtRotate(nCrvId, b3Box.Center(), Vector3d.Z_AX(), 180, GDB_RT.GLOB)
' Per arco
If m_CurrAx = 2 Then
' Inverto senso
EgtInvertCurve(nCrvId)
' Porto l'inizio della curva a X0 locale
ChangeCurveStartToX0(nCrvId)
End If
' Aggiorno la cornice
UpdateFrame(nId)
' Passo al successivo selezionato
nId = EgtGetNextSelectedObj()
End While
' Ricalcolo lavorazioni
AddFrameMachinings(m_FrameMachiningUC.m_dStartTrim, m_FrameMachiningUC.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
If EgtGetSelectedObjCount() = 0 Then
' Cerco pezzo in grezzo
Dim nPartId As Integer = EgtGetFirstPartInRawPart(m_nRawId)
' Se modalità curva e presa solo sezione, cancello unico pezzo in grezzo
If m_CurrAx = 3 And EgtGetFirstNameInGroup( nPartId, NAME_GUIDE) = GDB_ID.NULL
If EgtRemovePartFromRawPart(nPartId) Then
' Rimuovo le lavorazioni
EraseMachinings(nPartId)
' Cancello
EgtErase(nPartId)
End If
' Altrimenti esco subito
Else
Return
End If
End If
' 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_FrameMachiningUC.m_dStartTrim, m_FrameMachiningUC.m_dEndTrim)
' Aggiorno vista
EgtDraw()
' Aggiorno combo per direzioni
UpdatePage()
End Sub
Private Sub SelectSectionBtn_Click(sender As Object, e As RoutedEventArgs) Handles SelSectionBtn.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
Private Sub SelectGuideBtn_Click(sender As Object, e As RoutedEventArgs) Handles SelGuideBtn.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
m_bGuide = True
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 MachiningBtn_Click(sender As Object, e As RoutedEventArgs) Handles MachiningBtn.Click
If MachiningBtn.IsChecked Then
LeftGrid.Children.Add(m_FrameMachiningUC)
Else
LeftGrid.Children.Remove(m_FrameMachiningUC)
End If
End Sub
Private Sub CompoBtn_Click(sender As Object, e As RoutedEventArgs) Handles CompoBtn.Click
m_MainWindow.TestOff()
m_MainWindow.DragRettangleOff()
m_MainWindow.SplitCurvWJOff()
m_MainWindow.StartCurvWJOff()
m_MainWindow.MainWindowGrid.Children.Remove(m_MainWindow.m_CurrentProjectPageUC)
m_MainWindow.MainWindowGrid.Children.Add(m_MainWindow.m_DrawPageUC)
m_MainWindow.m_ActivePage = MainWindow.Pages.Draw
End Sub
Friend Function CreateFrame(nPartId As Integer) As Boolean
If Not MyCreateFrame( nPartId) Then
EgtErase( nPartId)
If m_CurrAx <> 2 Then
' Errore : creazione cornice non riuscita
m_CurrProjPage.SetErrorMessage(EgtMsg(90620))
Else
' Errore : raggio più piccolo della larghezza della sezione
m_CurrProjPage.SetErrorMessage(EgtMsg(90619))
End If
Return False
End If
m_FrameMachiningUC.ResetOthSide()
Return True
End Function
Private Function MyCreateFrame(nPartId As Integer) As Boolean
' Pulisco messaggi
m_CurrProjPage.ClearMessage()
' Aggiorno direzione corrente
m_CurrAx = AlongAxCmBx.SelectedIndex
' Sistemo la sezione o la guida della cornice
If Not m_bGuide Then
If Not AdjustSection(nPartId) Then
EgtOutLog( "Error in CreateFrame : problems with Section")
Return False
End If
Else
If Not AdjustGuide(nPartId) Then
EgtOutLog( "Error in CreateFrame : problems with Guide")
Return False
End If
End If
Dim nSurfId As Integer = GDB_ID.NULL
' Se cornice rettilinea
If m_CurrAx = 0 Or m_CurrAx = 1 Then
' Recupero layer e curva della sezione
Dim nSectLayId As Integer = EgtGetFirstNameInGroup(nPartId, NAME_SECT)
Dim nSectId As Integer = EgtGetFirstInGroup(nSectLayId)
If nSectId = GDB_ID.NULL Then Return False
' Creazione cornice
nSurfId = CreateLineFrame( nSectId, nSectLayId, nPartId)
' Se non creata superficie, reset di tutto e segnalazione errore
If nSurfId = GDB_ID.NULL Then
EgtErase( nPartId)
EgtOutLog( "Error in CreateFrame : Surface not constructible")
Return False
End If
' se cornice su arco
ElseIf m_CurrAx = 2 Then
' Recupero layer e curva della sezione
Dim nSectLayId As Integer = EgtGetFirstNameInGroup(nPartId, NAME_SECT)
Dim nSectId As Integer = EgtGetFirstInGroup(nSectLayId)
If nSectId = GDB_ID.NULL Then Return False
' Porto l'inizio della curva a X0 locale
ChangeCurveStartToX0( nSectId)
' Creazione cornice
nSurfId = CreateArcFrame( nSectId, nSectLayId, nPartId)
' Se non creata superficie, reset di tutto e segnalazione errore
If nSurfId = GDB_ID.NULL Then
EgtErase( nPartId)
EgtOutLog( "Error in CreateFrame : radius too small for the section")
Return False
End If
' altrimenti cornice su guida
Else
If not m_bGuide Then
' Recupero layer e curva della sezione
Dim nSectLayId As Integer = EgtGetFirstNameInGroup(nPartId, NAME_SECT)
Dim nSectId As Integer = EgtGetFirstInGroup(nSectLayId)
If nSectId = GDB_ID.NULL Then Return False
' Porto l'inizio della curva a X0 locale
ChangeCurveStartToX0( nSectId)
Else
' Porto la guida nel pezzo con la sezione
Dim nTruePartId As Integer = EgtGetFirstPartInRawPart( m_nRawId)
If nTruePartId = GDB_ID.NULL Then
EgtOutLog( "Error in CreateFrame : Section not found")
Return False
End If
' Parcheggio il pezzo trovato
m_MainWindow.m_CadCutPageUC.m_NestPage.CalcRawPart()
m_MainWindow.m_CadCutPageUC.m_NestPage.StoreOnePart( nTruePartId)
' Recupero layer e curva della sezione
Dim nSectLayId As Integer = EgtGetFirstNameInGroup(nTruePartId, NAME_SECT)
Dim nSectId As Integer = EgtGetFirstInGroup(nSectLayId)
If nSectId = GDB_ID.NULL Then Return False
' Recupero layer e curva della guida
Dim nGuideLayId As Integer = EgtGetFirstNameInGroup(nPartId, NAME_GUIDE)
Dim nGuideId As Integer = EgtGetFirstInGroup(nGuideLayId)
If nGuideId = GDB_ID.NULL Then Return False
' Sposto la guida in questo pezzo
EgtRelocate( nGuideLayId, nTruePartId)
' Cancello il pezzo
EgtErase( nPartId)
' Creazione cornice
nPartId = nTruePartId
nSurfId = CreateCurveFrame( nSectId, nSectLayId, nGuideId, nGuideLayId, nPartId)
m_bGuide = False
' Se non creata superficie, reset di tutto e segnalazione errore
If nSurfId = GDB_ID.NULL Then
EgtErase( nPartId)
EgtOutLog( "Error in CreateFrame : Surface not constructible")
Return False
End If
End If
End If
' Assegno nome e tipo cornice a pezzo
EgtSetName(nPartId, NAME_FRAME)
EgtSetInfo(nPartId, INFO_FRAME_DIR, m_CurrAx)
' Se cornice su arco, salvo i dati di questo
If m_CurrAx = 2 Then
Dim dExtRad As Double = 0 : StringToLen(ArcRadTxBx.Text, dExtRad)
EgtSetInfo(nPartId, INFO_FRAME_ARCRAD, dExtRad)
Dim dAngCenDeg As Double = 0 : StringToDouble(ArcAngTxBx.Text, dAngCenDeg)
If dAngCenDeg > 360 Then dAngCenDeg = 360
EgtSetInfo(nPartId, INFO_FRAME_ARCANG, dAngCenDeg)
End If
' Inserisco il pezzo nel grezzo
Return InsertPartInRawPart(nPartId)
End Function
Private Function UpdateFrames() As Boolean
' Pulisco messaggi
m_CurrProjPage.ClearMessage()
' Ciclo sui pezzi
Dim nId As Integer = EgtGetFirstPart()
While nId <> GDB_ID.NULL
If Not UpdateFrame(nId) OrElse Not InsertPartInRawPart(nId) Then
EgtErase(nId)
End If
nId = EgtGetFirstPart()
End While
Return True
End Function
Private 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 nSectId As Integer = EgtGetFirstInGroup(nSectLayId)
If nSectId = GDB_ID.NULL Then Return False
Dim nSurfId As Integer = GDB_ID.NULL
' Se cornice rettilinea
If m_CurrAx = 0 Or m_CurrAx = 1 Then
nSurfId = CreateLineFrame( nSectId, nSectLayId, nPartId)
' se cornice su arco
ElseIf m_CurrAx = 2 Then
nSurfId = CreateArcFrame( nSectId, nSectLayId, nPartId)
' altrimenti cornice su curva
Else
' Recupero layer e curva della guida
Dim nGuideLayId As Integer = EgtGetFirstNameInGroup(nPartId, NAME_GUIDE)
Dim nGuideId As Integer = EgtGetFirstInGroup(nGuideLayId)
If nGuideId = GDB_ID.NULL Then Return False
nSurfId = CreateCurveFrame( nSectId, nSectLayId, nGuideId, nGuideLayId, nPartId)
End If
' Assegno nome e direzione a pezzo
EgtSetName(nPartId, NAME_FRAME)
EgtSetInfo(nPartId, INFO_FRAME_DIR, m_CurrAx)
' Se cornice su arco, salvo i dati di questo
If m_CurrAx = 2 Then
Dim dExtRad As Double = 0 : StringToLen(ArcRadTxBx.Text, dExtRad)
EgtSetInfo(nPartId, INFO_FRAME_ARCRAD, dExtRad)
Dim dAngCenDeg As Double = 0 : StringToDouble(ArcAngTxBx.Text, dAngCenDeg)
If dAngCenDeg > 360 Then dAngCenDeg = 360
EgtSetInfo(nPartId, INFO_FRAME_ARCANG, dAngCenDeg)
End If
' Aggiorno info per superficie/facet
EgtSetInfo(nPartId, INFO_FRAME_SURF, nSurfId)
Return True
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 cornice rettilinea
If m_CurrAx = 0 Or m_CurrAx = 1 Then
' Se linea orizzontale, aggiungo tratti verticali
If b3Box.DimY() < EPS_SMALL Then
ptStart -= 10 * EPS_SMALL * Vector3d.Y_AX()
EgtInvertCurve(nCrvId)
EgtAddCurveCompoLine(nCrvId, ptStart)
EgtInvertCurve(nCrvId)
b3Box.Add(ptStart)
ptEnd -= 10 * EPS_SMALL * Vector3d.Y_AX()
EgtAddCurveCompoLine(nCrvId, ptEnd)
b3Box.Add(ptEnd)
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)
b3Box.Add(ptStart)
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)
b3Box.Add(ptEnd)
End If
' Eseguo chiusura (con aggiunta di eventuali tratti verticali)
If ptStart.y > b3Box.Min().y + EPS_SMALL Or Math.Abs(vtStart.y) < EPS_SMALL Then
ptStart = New Point3d(ptStart.x, b3Box.Min().y - 10 * EPS_SMALL, ptStart.z)
EgtInvertCurve(nCrvId)
EgtAddCurveCompoLine(nCrvId, ptStart)
EgtInvertCurve(nCrvId)
b3Box.Add(ptStart)
End If
If ptEnd.y > b3Box.Min().y + EPS_SMALL Or Math.Abs(vtEnd.y) < EPS_SMALL Then
ptEnd = New Point3d(ptEnd.x, b3Box.Min().y - 10 * EPS_SMALL, ptEnd.z)
EgtAddCurveCompoLine(nCrvId, ptEnd)
b3Box.Add(ptEnd)
End If
' Altrimenti cornice curva
Else
' Aggiungo linea verticale dall'estremo più alto alla quota del più basso
If ptStart.y > ptEnd.y Then
ptStart = New Point3d(ptStart.x, ptEnd.y, ptStart.z)
EgtInvertCurve(nCrvId)
EgtAddCurveCompoLine(nCrvId, ptStart)
EgtInvertCurve(nCrvId)
Else
ptEnd = New Point3d(ptEnd.x, ptStart.y, ptEnd.z)
EgtAddCurveCompoLine(nCrvId, ptEnd)
End If
End If
EgtMergeCurvesInCurveCompo(nCrvId, EPS_SMALL)
End If
' Eseguo chiusura
EgtCloseCurveCompo(nCrvId)
Return True
End Function
Private Function AdjustGuide(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 guida con riferimento TOP
Dim frPlane As New Frame3d
frPlane.Setup(Point3d.ORIG(), Frame3d.TYPE.TOP)
Dim nSectLayId As Integer = EgtCreateGroup(nPartId, frPlane, GDB_RT.GLOB)
EgtSetName(nSectLayId, NAME_GUIDE)
EgtSetColor(nSectLayId, COL_FRAME())
EgtRelocate(nCrvId, nSectLayId)
' Elimino vecchio layer
EgtErase(nLayerId)
' Impongo rotazione guida CCW
Dim bClosed As Boolean = EgtCurveIsClosed( nCrvId)
If Not bClosed Then EgtCloseCurveCompo( nCrvId)
Dim dArea As Double = 0
EgtCurveAreaXY( nCrvId, dArea)
If Not bClosed Then EgtRemoveCurveCompoCurve( nCrvId)
If dArea < -1 Then EgtInvertCurve( nCrvId)
' Se curva chiusa, impongo inizio a metà del lato a X max
If bClosed Then
Dim b3Guide As New BBox3d
EgtGetBBox( nCrvId, GDB_BB.STANDARD, b3Guide)
Dim ptStart As New Point3d( b3Guide.Max().x, b3Guide.Center().y, b3Guide.Center().z)
EgtChangeClosedCurveStartPoint(nCrvId, ptStart)
End If
Return True
End Function
Private Function ChangeCurveStartToX0(nCrvId As Integer) As Boolean
Dim ptStart As Point3d : EgtStartPoint(nCrvId, ptStart)
Dim dUs, dUe As Double
EgtCurveDomain(nCrvId, dUs, dUe)
Dim dU As Double = dUs
While dU < dUe + EPS_ZERO
Dim ptCurr As Point3d
EgtAtParamPoint(nCrvId, dU, ptCurr)
If Math.Abs(ptCurr.x) < Math.Abs(ptStart.x) Then
ptStart = ptCurr
End If
dU += 1
End While
EgtChangeClosedCurveStartPoint(nCrvId, ptStart)
If Math.Abs(ptStart.x) > EPS_SMALL Then
EgtMove(nCrvId, New Vector3d(-ptStart.x, 0, 0))
End If
Return True
End Function
Private Function CreateLineFrame( nSectId As Integer, nSectLayId As Integer, nPartId As Integer) As Integer
' 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(nSectId, 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) = nSectId
Dim nSurfId As Integer = EgtCreateSurfTmByRegionExtrusion(nSurfLayId, 1, nSectIds, vtExtr, EPS_STM, GDB_RT.GLOB)
Return nSurfId
End Function
Private Function CreateArcFrame( nSectId As Integer, nSectLayId As Integer, nPartId As Integer) As Integer
' Recupero ingombro locale della sezione
Dim b3Sect As New BBox3d
EgtGetBBox(nSectId, GDB_BB.STANDARD, b3Sect)
' Differenza in Y sezione tra start e minimo della sezione
Dim ptTmp As Point3d : EgtStartPoint(nSectId, nSectLayId, ptTmp)
Dim dDiffY = ptTmp.y - b3Sect.Min().y
' Porto la sezione nel piano YZ
EgtChangeGroupFrame(nSectLayId, New Frame3d(Point3d.ORIG(), Frame3d.TYPE.LEFT))
' Recupero o creo 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 curva guida (per ora arco)
Dim ptStart As Point3d : EgtStartPoint(nSectId, nGuideLayId, ptStart)
ptStart.z -= dDiffY
Dim dExtRad As Double = 0 : StringToLen(ArcRadTxBx.Text, dExtRad)
Dim dRad As Double = dExtRad - b3Sect.DimX()
If dRad < 10 * EPS_SMALL Then
Return GDB_ID.NULL
End If
Dim dAngCenDeg As Double = 0 : StringToDouble(ArcAngTxBx.Text, dAngCenDeg)
If dAngCenDeg > 360 Then dAngCenDeg = 360
Dim dAngIniDeg As Double = If(dAngCenDeg < 180, -90 - dAngCenDeg / 2, -dAngCenDeg)
Dim ptCen As Point3d = ptStart - Vector3d.FromPolar(dRad, dAngIniDeg)
Dim nGuideId As Integer = EgtCreateArc(nGuideLayId, ptCen, dExtRad, dAngIniDeg, dAngCenDeg, 0)
' Recupero o creo 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 swept
Dim dSectRotDeg As Double = 90 + dAngIniDeg
EgtRotate(nSectLayId, ptStart, Vector3d.Z_AX(), dSectRotDeg, GDB_RT.LOC)
Dim nSurfId As Integer = EgtCreateSurfTmSwept( nSurfLayId, nSectId, nGuideId, True, EPS_STM)
Return nSurfId
End Function
Private Function CreateCurveFrame( nSectId As Integer, nSectLayId As Integer, nGuideId As Integer, nGuideLayId As Integer, nPartId As Integer) As Integer
' Recupero flag lavorazione da lato opposto
Dim bOthSide As Boolean = False
EgtGetInfo( nPartId, INFO_FRAME_OTHSIDE, bOthSide)
' Recupero dati inizio guida
Dim ptStart As Point3d
EgtStartPoint(nGuideId, nPartId, ptStart)
Dim vtStart As Vector3d
EgtStartVector(nGuideId, nPartId, vtStart)
' Creo riferimento per sezione
dim frSect As New Frame3d
frSect.Setup( ptStart, -vtStart)
' Porto la sezione in questo riferimento
EgtChangeGroupFrame(nSectLayId, frSect)
' Recupero ingombro locale della sezione
Dim b3Sect As New BBox3d
EgtGetBBox(nSectId, GDB_BB.STANDARD, b3Sect)
' Recupero ingombro locale della guida
Dim b3Guide As New BBox3d
EgtGetBBox( nGuideId, GDB_BB.STANDARD, b3Guide)
b3Guide.ToLoc( frSect)
' Muovo sezione dalla parte interna della curva
If ( Not bOthSide And Math.Abs( b3Guide.Min().x) > Math.Abs( b3Guide.Max().x)) OrElse
( bOthSide And Math.Abs( b3Guide.Min().x) <= Math.Abs( b3Guide.Max().x)) Then
Dim vtMove As New Vector3d( - b3Sect.Max().x, -b3Sect.Min().y, 0)
EgtMove( nSectId, vtMove)
Else
Dim vtMove As New Vector3d( - b3Sect.Min().x, -b3Sect.Min().y, 0)
EgtMove( nSectId, vtMove)
End If
' Recupero o creo 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 swept
Dim nSurfId As Integer = EgtCreateSurfTmSwept( nSurfLayId, nSectId, nGuideId, True, EPS_STM)
Return nSurfId
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
Dim dOffsXIntery As Double = 0
StringToLen(OffsXInteryTxBx.Text, dOffsXIntery)
If EgtTdbSetCurrTool(m_MainWindow.m_CurrentMachine.sCurrSaw) AndAlso
EgtTdbGetCurrToolParam(MCH_TP.THICK, dSawThick) Then
If UseInteraxisChBx.IsChecked Then
If dOffsXIntery < 0 Then
dMinDist = 5 * EPS_SMALL
OffsXInteryTxBx.Text = "0"
Else
dMinDist = dOffsXIntery + 5 * EPS_SMALL
End If
Else
dMinDist = dSawThick + 5 * EPS_SMALL
End If
'If dOffsXIntery <= dSawThick Then
' dMinDist = dSawThick + 5 * EPS_SMALL
' EgtOutLog("WARNINGS: Saw tickness is more width then interaxis")
'Else
' dMinDist = dOffsXIntery + 5 * EPS_SMALL
'End If
Else
EgtOutLog("Not found current saw for frames mindist")
dMinDist = dOffsXIntery
End If
' Inserisco il pezzo nel grezzo
Dim ptIns As Point3d
If OtherBox.IsEmpty() Then
Dim dOffsXy As Double = 0
StringToLen(OffsXyTxBx.Text, dOffsXy)
Dim dOffsYy As Double = 0
StringToLen(OffsYyTxBx.Text, dOffsYy)
If m_CurrAx = 0 Then
ptIns.x = m_dKerf
ptIns.y = m_dKerf + dOffsXy
ElseIf m_CurrAx = 1 Then
ptIns.x = m_dKerf + dOffsXy
ptIns.y = m_dKerf
Else ' 2 Or 3
ptIns.x = m_dKerf + dOffsXy
ptIns.y = m_dKerf + dOffsYy
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