diff --git a/AlarmsPageUC.xaml.vb b/AlarmsPageUC.xaml.vb index 5028f5b..74e2449 100644 --- a/AlarmsPageUC.xaml.vb +++ b/AlarmsPageUC.xaml.vb @@ -155,6 +155,13 @@ Public Class AlarmsPageUC Else CutFredGpBx.Visibility = Windows.Visibility.Hidden End If + + ' Se non previsto nesting automatico, nascondo flag relativo + If Not m_MainWindow.GetAutoNestingOption() Then + AutomaticTxBl.Visibility = Visibility.Hidden + AutomaticChBx.Visibility = Visibility.Hidden + End If + m_bFirst = False End If diff --git a/CSVPage.xaml.vb b/CSVPage.xaml.vb index e2d297a..9c206c6 100644 --- a/CSVPage.xaml.vb +++ b/CSVPage.xaml.vb @@ -33,7 +33,7 @@ Public Class CSVPage InsertBtn.Content = EgtMsg(MSG_CSVPAGEUC + 2) ' Inserisci RemoveBtn.Content = EgtMsg(MSG_CSVPAGEUC + 4) ' Rimuovi ' Determino se versione semplificata - m_bFull = m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.AUTO_NESTING) And + m_bFull = m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.CSV_AUTO) And (GetPrivateProfileInt(S_CSV, K_FULL, 1, m_MainWindow.GetIniFile()) <> 0) PlusBtn.Visibility = If(m_bFull, Windows.Visibility.Visible, Windows.Visibility.Hidden) MinusBtn.Visibility = If(m_bFull, Windows.Visibility.Visible, Windows.Visibility.Hidden) diff --git a/CadCutPageUC.xaml.vb b/CadCutPageUC.xaml.vb index 6f66334..a90bd14 100644 --- a/CadCutPageUC.xaml.vb +++ b/CadCutPageUC.xaml.vb @@ -59,7 +59,7 @@ Public Class CadCutPageUC Private Sub CadCutPage_Loaded(sender As Object, e As RoutedEventArgs) m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC ' Se abilitato, visualizzo bottone CSV - If m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.AUTO_NESTING) Or + If m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.CSV_AUTO) Or m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.CSV_SIMPLE) Then m_ProjectMgr.CSVBtn.Visibility = Windows.Visibility.Visible Else diff --git a/ConstGen.vb b/ConstGen.vb index d550f88..e8e67ef 100644 --- a/ConstGen.vb +++ b/ConstGen.vb @@ -23,6 +23,7 @@ Module ConstGen Public Const LIC_FILE_NAME As String = "OmagCUT.lic" Public Const S_LICENCE As String = "Licence" Public Const K_KEY As String = "Key" + Public Const K_NESTKEY As String = "NestKey" ' File di log generale Public Const GENLOG_FILE_NAME As String = "OmagCUTLog.txt" diff --git a/ConstIni.vb b/ConstIni.vb index 1aaeec0..352b8d0 100644 --- a/ConstIni.vb +++ b/ConstIni.vb @@ -115,6 +115,8 @@ Module ConstIni Public Const K_SNAPDIST As String = "SnapDist" Public Const K_TRFTHICKTOLERANCE As String = "TrfThickTolerance" Public Const K_TEXTCOLOR As String = "TextColor" + Public Const K_AUTOMATICOPTIMIZE As String = "AutomaticOptimize" + Public Const K_AUTOMATICMAXTIME As String = "AutomaticMaxTime" Public Const S_CSV As String = "Csv" Public Const K_FULL As String = "Full" diff --git a/MainWindow.xaml.vb b/MainWindow.xaml.vb index ad89298..49eac9b 100644 --- a/MainWindow.xaml.vb +++ b/MainWindow.xaml.vb @@ -78,7 +78,7 @@ Class MainWindow AUTO_MANIP = 4 MAN_PHOTO = 8 AUTO_PHOTO = 16 - AUTO_NESTING = 32 + CSV_AUTO = 32 ENABLE_MILL = 64 PROCUCTION_LINE = 128 OFFICE_BASE = 256 ' Prodotto OmagOFFICE @@ -92,6 +92,8 @@ Class MainWindow CURVED_FRAME = 65536 ENABLE_WJ = 131072 End Enum + ' Opzione nesting automatico + Private m_bAutoNest As Boolean = False ' Dichiarazione lista per ListBox della ImportPage Friend m_ImportItemList As New ObservableCollection(Of IconListBoxItem) @@ -223,6 +225,10 @@ Class MainWindow Return m_nKeyOptions End Function + Friend Function GetAutoNestingOption() As Boolean + Return m_bAutoNest + End Function + Friend Function GetVersion() As String Return m_sVersion End Function @@ -289,6 +295,11 @@ Class MainWindow Dim sKey As String = String.Empty GetPrivateProfileString(S_LICENCE, K_KEY, "", sKey, sLicFile) EgtSetKey(sKey) + Dim sNestKey As String = "" + EgtUILib.GetPrivateProfileString( S_LICENCE, K_NESTKEY, "", sNestKey, sLicFile) + EgtSetNestKey( sNestKey) + ' Verifico abilitazione nesting automatico + m_bAutoNest = Not String.IsNullOrWhiteSpace( sNestKey) ' Recupero opzioni della chiave Dim bKey As Boolean = EgtGetKeyLevel(9423, 19, 1, m_nKeyLevel) And EgtGetKeyOptions(9423, 19, 1, m_nKeyOptions) diff --git a/My Project/AssemblyInfo.vb b/My Project/AssemblyInfo.vb index 9cd286c..abeeae9 100644 --- a/My Project/AssemblyInfo.vb +++ b/My Project/AssemblyInfo.vb @@ -62,5 +62,5 @@ Imports System.Windows ' by using the '*' as shown below: ' - - + + diff --git a/NestPageUC.xaml.vb b/NestPageUC.xaml.vb index 10a7560..b87cc47 100644 --- a/NestPageUC.xaml.vb +++ b/NestPageUC.xaml.vb @@ -760,6 +760,17 @@ Public Class NestPageUC End Sub Private Sub InsertPartBtn_Click(sender As Object, e As RoutedEventArgs) Handles InsertPartBtn.Click + ' Se inserimento automatico + If GetPrivateProfileInt( S_MACH_NEST, K_MACH_NEST_AUTOMATIC, 0, m_MainWindow.GetMachIniFile()) <> 0 And + m_MainWindow.GetAutoNestingOption() Then + AutomaticInsert() + ' altrimenti inserimento standard + Else + StandardInsert() + End If + End Sub + + Private Sub StandardInsert() EgtSetCurrentContext(m_CurrProjPage.CurrentProjectScene.GetCtx()) Dim bWrongTrf As Boolean = False m_CurrProjPage.ClearMessage() @@ -799,6 +810,71 @@ Public Class NestPageUC End If End Sub + Private Sub AutomaticInsert() + EgtSetCurrentContext(m_CurrProjPage.CurrentProjectScene.GetCtx()) + m_CurrProjPage.SetInfoMessage( "Nesting Automatico in corso") + Dim bWrongTrf As Boolean = False + Dim vParts As New List(Of Integer) + ' Ciclo di pre-inserimento in tavola dei pezzi selezionati + Dim nId As Integer = EgtGetFirstSelectedObj() + While nId <> GDB_ID.NULL + ' Recupero successivo selezionato + Dim nNextId = EgtGetNextSelectedObj() + ' Se pezzo da Trf, verifico compatibilità + If Not VerifyTrfData(nId) Then + bWrongTrf = True + EgtSetStatus(nId, GDB_ST.ON_) + ' Passo al successivo selezionato + nId = nNextId + Continue While + End If + ' Lo preparo in tavola, se possibile + If PreInsertOnePart(nId) Then + vParts.Add( nId) + Else + EgtSetStatus(nId, GDB_ST.ON_) + VeinMatching.OnDeselectPart(nId) + End If + ' Costringo ad aggiornare UI + UpdateUI() + ' Passo al successivo selezionato + nId = nNextId + End While + ' Aggiorno le regioni per il nesting + UpdateNestRegions() + Dim bAligned As Boolean = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_NEST_ALIGNED, 0, m_MainWindow.GetMachIniFile()) <> 0) + EnableReferenceRegion(bAligned) + ' Eseguo nesting automatico + Dim bOpimizeOnX As Boolean = ( GetPrivateProfileInt( S_NEST, K_AUTOMATICOPTIMIZE, 2, m_MainWindow.GetIniFile()) = 1) + Dim nAutomaticMaxTime As Integer = GetPrivateProfileInt( S_NEST, K_AUTOMATICMAXTIME, 20, m_MainWindow.GetIniFile()) + Dim nMaxTime As Integer = Math.Min( 2 + 0.5 * vParts.Count(), nAutomaticMaxTime) + EgtAutomaticPackParts( vParts, bOpimizeOnX, m_bReducedCut, nMaxTime) + ' Sistemo i pezzi + For Each nPartId As Integer In vParts + ' se pezzo inserito + If nPartId > 0 Then + VeinMatching.OnInsertPartInRaw(nPartId) + ' Eventuale aggiunta solido per taglio da sotto + UpdateSolidForDrip(nPartId) + ' altrimenti rifiutato + else + ' Ripristino lo stato originale + PreRemoveOnePart( Math.Abs( nPartId)) + VeinMatching.OnDeselectPart( Math.Abs( nPartId)) + End If + Next + ' Aggiorno flag selezionati + m_nPartPos = If(EgtGetSelectedObjCount() > 0, PART_POS.IN_TABLE, PART_POS.NONE_TABLE) + ' Aggiorno vista + EgtZoom(ZM.ALL) + m_CurrProjPage.ClearMessage() + ' Eventuale segnalazione di pezzi Trf non adatti + If bWrongTrf Then + ' Pezzi con spessore, materiale o finitura non compatibili + m_CurrProjPage.SetWarningMessage(EgtMsg(MSG_NESTPAGEUC + 7)) + End If + End Sub + Private Function VerifyTrfData(nId As Integer) As Boolean ' Verifico se pezzo da Trf If Not EgtExistsInfo(nId, "OC") Then Return True @@ -1117,6 +1193,8 @@ Public Class NestPageUC VeinMatching.OnSelectPart(nPartId, False) nPartId = EgtGetNextPart(nPartId) End While + ' Aggiorno flag + m_nPartPos = If(EgtGetSelectedObjCount() > 0, PART_POS.OUT_TABLE, PART_POS.NONE_TABLE) End If ' Aggiorno viste EgtDraw() @@ -1176,7 +1254,7 @@ Public Class NestPageUC ' Se rotazione libera, applico blocco e aggiorno info If Not EgtExistsInfo( nId, INFO_PARTROT) Then ' Imposto flag di rotazione bloccata - EgtSetInfo( nId, INFO_PARTROT, 1) + EgtSetInfo( nId, INFO_PARTROT, 0) ' Inserisco in info sul pezzo Codice Dim nTextId As Integer = EgtGetFirstInGroup( EgtGetFirstNameInGroup( nId, NAME_REGION)) While nTextId <> GDB_ID.NULL diff --git a/ProjectMgrUC.xaml.vb b/ProjectMgrUC.xaml.vb index 640a57f..a3a8932 100644 --- a/ProjectMgrUC.xaml.vb +++ b/ProjectMgrUC.xaml.vb @@ -550,7 +550,7 @@ Public Class ProjectMgrUC LoadBtn.Visibility = Windows.Visibility.Visible SaveBtn.Visibility = Windows.Visibility.Visible SaveNameBtn.Visibility = Windows.Visibility.Visible - If m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.AUTO_NESTING) Or + If m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.CSV_AUTO) Or m_MainWindow.GetKeyOption(MainWindow.KEY_OPT.CSV_SIMPLE) Then CSVBtn.Visibility = Windows.Visibility.Visible End If