diff --git a/CSVPage.xaml b/CSVPage.xaml
new file mode 100644
index 0000000..36dbf81
--- /dev/null
+++ b/CSVPage.xaml
@@ -0,0 +1,242 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CSVPage.xaml.vb b/CSVPage.xaml.vb
new file mode 100644
index 0000000..3e8d6e6
--- /dev/null
+++ b/CSVPage.xaml.vb
@@ -0,0 +1,435 @@
+Imports System.Collections.ObjectModel
+Imports OmagCUT.TreeViewItem
+Imports EgtUILib
+
+Public Class CSVPage
+
+ ' Riferimenti a pagine
+ Private m_MainWindow As MainWindow = Application.Current.MainWindow
+
+ Private m_bFirst As Boolean = True
+ Private m_sCsvPath As String = String.Empty
+ Private m_CsvPartList As New List(Of CsvPart)
+ Private m_ItemsList As New ObservableCollection(Of PartCathegoryItem)
+ Private m_sCompoDir As String = String.Empty
+ Private m_nRawId As Integer = GDB_ID.NULL
+ Private m_ptRawMin As Point3d
+ Private m_ptRawMax As Point3d
+
+
+ Private Sub CSVPage_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized
+ ' Assegno la lista dei pezzi Csv come sorgente del treeview
+ PartsTreeView.ItemsSource = m_ItemsList
+ ' Messaggi
+ NewBtn.Content = EgtMsg(MSG_CSVPAGEUC + 3) ' Nuovo
+ OpenBtn.Content = EgtMsg(MSG_CSVPAGEUC + 1) ' Apri
+ InsertBtn.Content = EgtMsg(MSG_CSVPAGEUC + 2) ' Carica
+ ' Leggo lista pezzi corrente
+ LoadCsvPartList()
+ End Sub
+
+ Private Sub CSVPage_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
+ If m_bFirst Then
+ ' Leggo direttorio componenti
+ GetPrivateProfileString(S_COMPO, K_COMPODIR, "", m_sCompoDir, m_MainWindow.GetIniFile())
+ ' Visualizzazione lista
+ ShowTreeView()
+ m_bFirst = False
+ End If
+ End Sub
+
+ Private Sub CSVPage_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
+
+ End Sub
+
+ Private Sub OkBtn_Click(sender As Object, e As RoutedEventArgs) Handles OkBtn.Click
+ m_MainWindow.m_CadCutPageUC.CadCutPageGrid.Children.Remove(Me)
+ m_MainWindow.m_CadCutPageUC.CadCutPageGrid.Children.Add(m_MainWindow.m_CadCutPageUC.m_NestPage)
+ m_MainWindow.m_ActivePage = MainWindow.Pages.CadCut
+ End Sub
+
+ Private Sub NewBtn_Click(sender As Object, e As RoutedEventArgs) Handles NewBtn.Click
+ ' Pulisco path e lista dei pezzi Csv
+ m_sCsvPath = String.Empty
+ m_CsvPartList.Clear()
+ ' Visualizzazione lista
+ ShowTreeView()
+ End Sub
+
+ 'Private Sub NewBtn_Click(sender As Object, e As RoutedEventArgs) Handles NewBtn.Click
+ ' m_CsvPartList(1 - 1).m_nToNest -= 1
+ ' For Each Item As PartCathegoryItem In m_ItemsList
+ ' For Each Item2 As PartCustomItem In Item.Items
+ ' If Item2.nType = 1 Then
+ ' Item2.sText1 = m_CsvPartList(1 - 1).m_nToNest.ToString() & "/" & m_CsvPartList(1 - 1).m_nCount.ToString()
+ ' End If
+ ' Next
+ ' Next
+
+ 'End Sub
+
+ Private Sub OpenBtn_Click(sender As Object, e As RoutedEventArgs) Handles OpenBtn.Click
+ ' Leggo direttorio corrente dei file CSV
+ Dim sCurrDir As String = ""
+ GetPrivateProfileString(S_CSV, K_CSVCURRDIR, "C:\", sCurrDir, m_MainWindow.GetIniFile())
+ ' Apro dialogo scelta file
+ Dim OpenFileWnd As New OpenFileWD(m_MainWindow, sCurrDir, ".CSV")
+ If Not OpenFileWnd.ShowDialog() Then Return
+ ' Salvo direttorio corrente
+ WritePrivateProfileString(S_CSV, K_CSVCURRDIR, OpenFileWnd.GetFileDir(), m_MainWindow.GetIniFile())
+ ' Apertura file
+ Dim sCsvPath = OpenFileWnd.GetFilePath()
+ LoadCsv(sCsvPath)
+ ' Visualizzazione lista
+ ShowTreeView()
+ End Sub
+
+ Private Function LoadCsv(sCsvPath As String)
+ ' Pulisco path e lista dei pezzi Csv
+ m_sCsvPath = String.Empty
+ m_CsvPartList.Clear()
+ ' Definizione variabili
+ EgtLuaCreateGlobTable("CSV")
+ EgtLuaSetGlobStringVar("CSV.FILE", sCsvPath)
+ ' Esecuzione
+ Dim nErr As Integer = 999
+ If EgtLuaExecFile(m_MainWindow.GetCsvAutoDir() & "\CsvRead.lua") AndAlso
+ EgtLuaCallFunction("CSV.Read") Then
+ ' Verifica stato di errore
+ EgtLuaGetGlobIntVar("CSV.ERR", nErr)
+ End If
+ If nErr <> 0 Then
+ EgtOutLog("Error in CsvRead : " & nErr.ToString())
+ Return False
+ End If
+ ' Assegno path
+ m_sCsvPath = sCsvPath
+ ' Preparo lista dei pezzi
+ Dim nNbr As Integer = 0
+ EgtLuaGetGlobIntVar("CSV.NBR", nNbr)
+ For i As Integer = 1 To nNbr
+ Dim OnePart As New CsvPart
+ Dim sN As String = i.ToString()
+ EgtLuaGetGlobStringVar("CSV.NAME" & sN, OnePart.m_sName)
+ OnePart.m_bActive = True
+ EgtLuaGetGlobStringVar("CSV.MAT" & sN, OnePart.m_sMaterial)
+ EgtLuaGetGlobIntVar("CSV.COUNT" & sN, OnePart.m_nCount)
+ OnePart.m_nToNest = OnePart.m_nCount
+ EgtLuaGetGlobBoolVar("CSV.RECT" & sN, OnePart.m_bIsRect)
+ EgtLuaGetGlobNumVar("CSV.DIMX" & sN, OnePart.m_dDimX)
+ EgtLuaGetGlobNumVar("CSV.DIMY" & sN, OnePart.m_dDimY)
+ EgtLuaGetGlobNumVar("CSV.TH" & sN, OnePart.m_dTh)
+ OnePart.m_nOriInd = i
+ ' inserisco in lista
+ m_CsvPartList.Add(OnePart)
+ Next
+ EgtLuaResetGlobVar("CSV")
+ ' Ordinamento lista dei pezzi
+ m_CsvPartList.Sort(Function(x, y)
+ If Math.Abs(x.m_dTh - y.m_dTh) < EPS_SMALL Then
+ Return x.m_nOriInd < y.m_nOriInd
+ Else
+ Return x.m_dTh < y.m_dTh
+ End If
+ End Function)
+ Return True
+ End Function
+
+ Private Sub ShowTreeView()
+ ' Path del file Csv
+ Dim TempPath As New Text.StringBuilder(260)
+ PathCompactPathEx(TempPath, m_sCsvPath, 22, 0)
+ CsvPathTxBl.Content = TempPath.ToString()
+ ' Pezzi del file Csv
+ m_ItemsList.Clear()
+ Dim dCurrTh As Double = 0
+ Dim PartCathegory As PartCathegoryItem
+ For i As Integer = 1 To m_CsvPartList.Count()
+ Dim CurrPart As CsvPart = m_CsvPartList(i - 1)
+ If i = 1 Or Math.Abs(dCurrTh - CurrPart.m_dTh) > 10 * EPS_SMALL Then
+ dCurrTh = CurrPart.m_dTh
+ PartCathegory = New PartCathegoryItem("Spessore " & LenToString(CurrPart.m_dTh, 2), 0)
+ PartCathegory.IsExpanded = True
+ m_ItemsList.Add(PartCathegory)
+ End If
+ Dim sCount As String = CurrPart.m_nToNest.ToString() & "/" & CurrPart.m_nCount.ToString()
+ Dim sDim As String = LenToString(CurrPart.m_dDimX, 1) & "x" & LenToString(CurrPart.m_dDimY, 1)
+ PartCathegory.Items.Add(New PartCustomItem(CurrPart.m_sName, i, sCount, sDim, CurrPart.m_bActive))
+ Next
+ End Sub
+
+ Private Sub PartsTreeView_PreviewMouseUp(sender As Object, e As MouseButtonEventArgs) Handles PartsTreeView.PreviewMouseUp
+ If TypeOf PartsTreeView.SelectedItem Is PartCathegoryItem Then
+ Dim SelectedCathegory As PartCathegoryItem = PartsTreeView.SelectedItem
+ SelectedCathegory.IsExpanded = Not SelectedCathegory.IsExpanded
+ If SelectedCathegory.IsExpanded Then
+ SelectedCathegory.IsSelected = False
+ End If
+ ElseIf TypeOf PartsTreeView.SelectedItem Is PartCustomItem Then
+ Dim SelectedCustom As PartCustomItem = PartsTreeView.SelectedItem
+ SelectedCustom.bIsActive = Not SelectedCustom.bIsActive
+ m_CsvPartList(SelectedCustom.nType - 1).m_bActive = SelectedCustom.bIsActive
+ End If
+ End Sub
+
+ Private Sub InsertBtn_Click(sender As Object, e As RoutedEventArgs) Handles InsertBtn.Click
+ ' Recupero lo spessore della lastra corrente
+ Dim dRawHeight As Double = GetRawHeight()
+ If dRawHeight < EPS_SMALL Then Return
+ ' Recupero il materiale della lastra corrente
+ Dim sCurrMat As String = String.Empty
+ If Not IsNothing(m_MainWindow.m_CurrentMachine.CurrMat) Then
+ sCurrMat = m_MainWindow.m_CurrentMachine.CurrMat.sName
+ End If
+ ' Creo la lista dei pezzi inseribili nella lastra corrente
+ Dim InsPartList As New List(Of CsvPart)
+ For i As Integer = 1 To m_CsvPartList.Count()
+ Dim CurrPart As CsvPart = m_CsvPartList(i - 1)
+ If CurrPart.m_bActive And
+ Math.Abs(CurrPart.m_dTh - dRawHeight) < 100 * EPS_SMALL And
+ (String.IsNullOrWhiteSpace(CurrPart.m_sMaterial) Or
+ String.IsNullOrWhiteSpace(sCurrMat) Or
+ String.Compare(CurrPart.m_sMaterial, sCurrMat, True)) Then
+ InsPartList.Add(CurrPart)
+ End If
+ Next
+ ' Lancio l'inserimento dei pezzi
+ ExecInsert(InsPartList)
+ ' Aggiorno visualizzazione
+ EgtDraw()
+ ' Aggiorno TreeView
+ ShowTreeView()
+ End Sub
+
+ Private Function ExecInsert(InsPartList As List(Of CsvPart))
+ ' Ordino la lista dei pezzi secondo le Y decrescenti
+ InsPartList.Sort(Function(x, y)
+ If Math.Abs(x.m_dDimY - y.m_dDimY) < EPS_SMALL Then
+ Return x.m_nOriInd < y.m_nOriInd
+ Else
+ Return x.m_dDimY > y.m_dDimY
+ End If
+ End Function)
+ ' Creo o svuoto gruppo temporaneo per i pezzi
+ Dim nIpGrp As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, "CSV")
+ If nIpGrp = GDB_ID.NULL Then
+ nIpGrp = EgtCreateGroup(GDB_ID.ROOT)
+ If nIpGrp = GDB_ID.NULL Then Return False
+ EgtSetName(nIpGrp, "CSV")
+ Else
+ EgtEmptyGroup(nIpGrp)
+ End If
+ EgtSetLevel(nIpGrp, GDB_LV.TEMP)
+ EgtSetStatus(nIpGrp, GDB_ST.OFF)
+ ' 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
+ For i As Integer = 1 To InsPartList.Count()
+ Dim CurrPart As CsvPart = InsPartList(i - 1)
+ ' Definizione variabili
+ EgtLuaSetGlobNumVar("CMP.V1", Math.Max(CurrPart.m_dDimX, CurrPart.m_dDimY))
+ EgtLuaSetGlobNumVar("CMP.V2", Math.Min(CurrPart.m_dDimX, CurrPart.m_dDimY))
+ EgtLuaSetGlobStringVar("CMP.INFO", CurrPart.m_sName)
+ ' Esecuzione componente
+ If Not EgtLuaExecLine("CMP_Draw(false)") Then Return False
+ ' Recupero Id del nuovo componente
+ Dim nId As Integer = EgtGetLastPart()
+ If nId = GDB_ID.NULL Then Return False
+ CurrPart.m_nId = nId
+ ' 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
+ AdjustFlatPart(nId)
+ ' Lo sposto nel gruppo speciale
+ EgtRelocate(nId, nIpGrp)
+ Next
+ EgtLuaResetGlobVar("CMP")
+ EgtLuaResetGlobVar("CMP_Draw")
+ ' recupero dimensioni del grezzo e kerf
+ m_nRawId = EgtGetFirstRawPart()
+ GetRawBox(m_ptRawMin, m_ptRawMax)
+ ' Provo ad inserire i pezzi
+ For i As Integer = 1 To InsPartList.Count()
+ Dim CurrPart As CsvPart = InsPartList(i - 1)
+ While CurrPart.m_nToNest > 0
+ If PackOnePart(CurrPart.m_nId) Then
+ CurrPart.m_nToNest -= 1
+ Else
+ Exit While
+ End If
+ End While
+ Next
+ Return True
+ End Function
+
+ Private Function PackOnePart(nId As Integer)
+ ' Dimensioni del pezzo
+ Dim ptPartMin, ptPartMax As Point3d
+ If Not EgtGetBBox(nId, GDB_BB.IGNORE_DIM + GDB_BB.IGNORE_TEXT, ptPartMin, ptPartMax) Then Return False
+ Dim dPartLen As Double = ptPartMax.x - ptPartMin.x
+ Dim dPartHeight As Double = ptPartMax.y - ptPartMin.y
+ ' Centro del grezzo
+ Dim nRawCenId = EgtGetFirstNameInGroup(m_nRawId, "RawCenter")
+ Dim ptRawCenter As Point3d
+ EgtStartPoint(nRawCenId, GDB_ID.ROOT, ptRawCenter)
+ Dim dRawCenX = ptRawCenter.x - m_ptRawMin.x
+ Dim dRawCenY = ptRawCenter.y - m_ptRawMin.y
+ ' Inserisco il pezzo nel grezzo, in centro in XY e in alto in Z
+ Dim ptP As New Point3d(dRawCenX - 0.5 * dPartLen, dRawCenY - 0.5 * dPartHeight, m_ptRawMax.z - m_ptRawMin.z)
+ ' Ne creo una copia nella radice
+ Dim nId2 As Integer = EgtCopyGlob(nId, GDB_ID.ROOT)
+ If EgtAddPartToRawPart(nId2, ptP, m_nRawId) Then
+ ' Aggiungo le lavorazioni standard
+ AddMachinings(nId2, True, False)
+ ' Eseguo nesting
+ Dim bFit As Boolean = False
+ If m_MainWindow.m_CadCutPageUC.m_NestPage.UpdateNestRegions() Then
+ If Not EgtExistsInfo(m_nRawId, KEY_RAWBYPOINTS) Then
+ bFit = EgtPackPartInRectangle(nId2, True, True)
+ End If
+ If Not bFit Then
+ bFit = EgtPackPart(nId2, True, True)
+ End If
+ End If
+ ' Gestione risultato nesting
+ If bFit Then
+ Return True
+ Else
+ EgtRemovePartFromRawPart(nId2)
+ EgtErase(nId2)
+ End If
+ End If
+ Return False
+ End Function
+
+ Friend Sub SaveCsvPartList()
+ ' Path del file
+ Dim sFile As String = m_MainWindow.GetCsvAutoDir() & "\CsvPartList.ini"
+ ' Gestione file
+ Try
+ ' Apro file
+ Dim Writer As New IO.StreamWriter(sFile, False)
+ ' Intestazione
+ Writer.WriteLine("[General]")
+ Writer.WriteLine("Path=" & m_sCsvPath)
+ ' Ciclo sui pezzi
+ For i As Integer = 1 To m_CsvPartList.Count()
+ Dim CurrPart As CsvPart = m_CsvPartList(i - 1)
+ Writer.WriteLine("[P" & i.ToString() & "]")
+ Writer.WriteLine("Nam=" & CurrPart.m_sName)
+ Writer.WriteLine("Mat=" & CurrPart.m_sMaterial)
+ Writer.WriteLine("Act=" & If(CurrPart.m_bActive, "1", "0"))
+ Writer.WriteLine("Cnt=" & CurrPart.m_nCount.ToString())
+ Writer.WriteLine("ToN=" & CurrPart.m_nToNest.ToString())
+ Writer.WriteLine("Rct=" & If(CurrPart.m_bIsRect, "1", "0"))
+ Writer.WriteLine("DX=" & DoubleToString(CurrPart.m_dDimX, 4))
+ Writer.WriteLine("DY=" & DoubleToString(CurrPart.m_dDimY, 4))
+ Writer.WriteLine("Th=" & DoubleToString(CurrPart.m_dTh, 4))
+ Writer.WriteLine("OIn=" & CurrPart.m_nOriInd.ToString())
+ Next
+ ' Terminatore
+ Writer.WriteLine("[END]")
+ ' Chiudo file
+ Writer.Close()
+ ' Errore
+ Catch ex As Exception
+ EgtOutLog("Error writing " & sFile)
+ End Try
+ End Sub
+
+ Private Sub LoadCsvPartList()
+ ' Pulisco path e lista dei pezzi Csv
+ m_sCsvPath = String.Empty
+ m_CsvPartList.Clear()
+ ' Path del file
+ Dim sFile As String = m_MainWindow.GetCsvAutoDir() & "\CsvPartList.ini"
+ ' Gestione file
+ Try
+ ' Apro file
+ Dim Reader As New IO.StreamReader(sFile, False)
+ ' Lettura intestazione
+ Dim sLine As String = Reader.ReadLine()
+ While sLine <> Nothing
+ If sLine = "[General]" Then
+ ' non devo fare alcunché
+ ElseIf sLine.Length() >= 5 AndAlso sLine.Substring(0, 5) = "Path=" Then
+ Dim sItems() As String = sLine.Split("=".ToCharArray)
+ If sItems.Count() >= 2 Then
+ m_sCsvPath = sItems(1)
+ End If
+ Else
+ Exit While
+ End If
+ sLine = Reader.ReadLine()
+ End While
+ ' Ciclo di lettura dei pezzi
+ Dim nI As Integer = 1
+ Dim sPart As String = "[P" & nI.ToString() & "]"
+ Dim OnePart As New CsvPart
+ While sLine <> Nothing
+ ' Inizio pezzo o fine del file
+ If sLine = sPart Or sLine = "[END]" Then
+ ' se esiste pezzo precedente, lo salvo
+ If nI > 1 Then
+ ' inserisco in lista
+ m_CsvPartList.Add(OnePart)
+ End If
+ ' predisposizioni per prossimo pezzo
+ nI += 1
+ sPart = "[P" & nI.ToString() & "]"
+ OnePart = New CsvPart
+ ' Dato
+ Else
+ Dim sItems() As String = sLine.Split("=".ToCharArray)
+ If sItems.Count() >= 2 Then
+ If sItems(0) = "Nam" Then
+ OnePart.m_sName = sItems(1)
+ ElseIf sItems(0) = "Mat" Then
+ OnePart.m_sMaterial = sItems(1)
+ ElseIf sItems(0) = "Act" Then
+ OnePart.m_bActive = If(sItems(1) = "0", False, True)
+ ElseIf sItems(0) = "Cnt" Then
+ OnePart.m_nCount = Int(sItems(1))
+ ElseIf sItems(0) = "ToN" Then
+ OnePart.m_nToNest = Int(sItems(1))
+ ElseIf sItems(0) = "Rct" Then
+ OnePart.m_bIsRect = If(sItems(1) = "0", False, True)
+ ElseIf sItems(0) = "DX" Then
+ StringToDouble(sItems(1), OnePart.m_dDimX)
+ ElseIf sItems(0) = "DY" Then
+ StringToDouble(sItems(1), OnePart.m_dDimY)
+ ElseIf sItems(0) = "Th" Then
+ StringToDouble(sItems(1), OnePart.m_dTh)
+ ElseIf sItems(0) = "OIn" Then
+ OnePart.m_nOriInd = Int(sItems(1))
+ End If
+ End If
+ End If
+ sLine = Reader.ReadLine()
+ End While
+ ' Chiudo il file
+ Reader.Close()
+ ' Errore
+ Catch ex As Exception
+ EgtOutLog("Error reading " & sFile)
+ End Try
+ End Sub
+
+ '-----------------------------------------------------------------------------------------------
+ Private Class CsvPart
+ Public m_sName As String
+ Public m_sMaterial As String
+ Public m_bActive As Boolean
+ Public m_nCount As Integer
+ Public m_nToNest As Integer
+ Public m_bIsRect As Boolean
+ Public m_dDimX As Double
+ Public m_dDimY As Double
+ Public m_dTh As Double
+ Public m_nOriInd As Integer
+ Public m_nId As Integer = GDB_ID.NULL
+ End Class
+
+End Class
diff --git a/CadCutPageUC.xaml.vb b/CadCutPageUC.xaml.vb
index 916b01b..94ba24a 100644
--- a/CadCutPageUC.xaml.vb
+++ b/CadCutPageUC.xaml.vb
@@ -13,6 +13,7 @@ Public Class CadCutPageUC
Friend WithEvents m_NestPage As NestPageUC
Friend m_SplitPage As SplitPageUC
Friend m_MoveRawPartPage As MoveRawPartPage
+ Friend m_CSVPage As CSVPage
Friend m_ProjectMgr As ProjectMgrUC
'' Riferimento alla finestra di salvataggio con nome
@@ -37,6 +38,7 @@ Public Class CadCutPageUC
m_NestPage = New NestPageUC
m_SplitPage = New SplitPageUC
m_MoveRawPartPage = New MoveRawPartPage
+ m_CSVPage = New CSVPage
m_ProjectMgr = New ProjectMgrUC
' Posizionamento nella griglia delle Page UserControl
@@ -46,6 +48,8 @@ Public Class CadCutPageUC
m_SplitPage.SetValue(Grid.ColumnSpanProperty, 3)
m_MoveRawPartPage.SetValue(Grid.RowSpanProperty, 3)
m_MoveRawPartPage.SetValue(Grid.ColumnSpanProperty, 3)
+ m_CSVPage.SetValue(Grid.RowSpanProperty, 3)
+ m_CSVPage.SetValue(Grid.ColumnSpanProperty, 3)
m_ProjectMgr.SetValue(Grid.RowProperty, 2)
m_ProjectMgr.SetValue(Grid.ColumnProperty, 1)
@@ -55,6 +59,8 @@ Public Class CadCutPageUC
Private Sub CadCutPage_Loaded(sender As Object, e As RoutedEventArgs)
m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC
+ ' Visualizzo bottone CSV
+ m_ProjectMgr.CSVBtn.Visibility = Windows.Visibility.Visible
' Seleziono UserControl di apertura
CadCutPageGrid.Children.Add(m_NestPage)
m_CadCutMode = CadCutModes.Nest
diff --git a/ConstGen.vb b/ConstGen.vb
index 23003a7..3cab42d 100644
--- a/ConstGen.vb
+++ b/ConstGen.vb
@@ -37,6 +37,8 @@ Module ConstGen
Public Const TEMP_DIR As String = "Temp"
' Sottodirettorio per Cam automatico
Public Const CAMAUTO_DIR As String = "CamAuto"
+ ' Sottodirettorio per Csv automatico
+ Public Const CSVAUTO_DIR As String = "CsvAuto"
' Sottodirettorio per file Cnc
Public Const CNC_DIR As String = "CNC"
' Sottodirettorio di default per il salvataggio
diff --git a/ConstIni.vb b/ConstIni.vb
index 388b18f..79fcdf9 100644
--- a/ConstIni.vb
+++ b/ConstIni.vb
@@ -92,6 +92,9 @@ Module ConstIni
Public Const K_RESTRADIUS As String = "RestRadius"
Public Const K_SNAPDIST As String = "SnapDist"
+ Public Const S_CSV As String = "Csv"
+ Public Const K_CSVCURRDIR As String = "CurrDir"
+
Public Const S_FRAME As String = "Frame"
Public Const K_OFFSZ As String = "OffsZ"
Public Const K_OFFSXY As String = "OffsXY"
diff --git a/ConstMsg.vb b/ConstMsg.vb
index 5fa6c6e..52f6ce5 100644
--- a/ConstMsg.vb
+++ b/ConstMsg.vb
@@ -28,5 +28,6 @@
Public Const MSG_MACHINECNPAGEUC As Integer = MSG_OMAGCUT + 930
Public Const MSG_OPTIONSPAGEUC As Integer = MSG_OMAGCUT + 950
Public Const MSG_EGTMSGBOX As Integer = MSG_OMAGCUT + 1100
+ Public Const MSG_CSVPAGEUC As Integer = MSG_OMAGCUT + 1200
End Module
diff --git a/FrameCutPageUC.xaml.vb b/FrameCutPageUC.xaml.vb
index fb1dac5..850f76d 100644
--- a/FrameCutPageUC.xaml.vb
+++ b/FrameCutPageUC.xaml.vb
@@ -72,6 +72,8 @@ Public Class FrameCutPageUC
m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC
m_CurrMachine = m_MainWindow.m_CurrentMachine
m_bActive = True
+ ' Nascondo bottone CSV
+ m_ProjectMgr.CSVBtn.Visibility = Windows.Visibility.Hidden
' Recupero dimensioni e kerf del grezzo
m_nRawId = EgtGetFirstRawPart()
GetRawBox(m_RawBox)
diff --git a/MainWindow.xaml.vb b/MainWindow.xaml.vb
index ba4d72e..8b7876f 100644
--- a/MainWindow.xaml.vb
+++ b/MainWindow.xaml.vb
@@ -90,6 +90,7 @@ Class MainWindow
RawPart
Draw
Import
+ CSV
Simulation
FrameCut
Machine
@@ -121,6 +122,10 @@ Class MainWindow
Return m_sDataRoot & "\" & CAMAUTO_DIR
End Function
+ Public Function GetCsvAutoDir() As String
+ Return m_sDataRoot & "\" & CSVAUTO_DIR
+ End Function
+
Public Function GetCopyTemplateDir() As String
Return m_sCopyTemplateDir
End Function
@@ -389,7 +394,7 @@ Class MainWindow
MainWindowGrid.Children.Remove(m_CurrentProjectPageUC)
MainWindowGrid.Children.Add(m_WorkInProgressPageUC)
m_ActivePage = Pages.WorkInProgress
- Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.Simulation
+ Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation
WorkInProgressBtn.IsChecked = False
CadCutBtn.IsChecked = True
Case Pages.FrameCut
@@ -437,7 +442,7 @@ Class MainWindow
m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_CadCutPageUC)
m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_DirectCutPageUC)
m_ActivePage = Pages.DirectCut
- Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.Simulation
+ Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation
DirectCutBtn.IsChecked = False
CadCutBtn.IsChecked = True
Case Pages.FrameCut
@@ -486,7 +491,7 @@ Class MainWindow
m_ActivePage = Pages.CadCut
Case Pages.CadCut
CadCutBtn.IsChecked = True
- Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.Simulation
+ Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation
CadCutBtn.IsChecked = True
Case Pages.FrameCut
CadCutBtn.IsChecked = True
@@ -538,7 +543,7 @@ Class MainWindow
m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(m_CadCutPageUC)
m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_FrameCutPageUC)
m_ActivePage = Pages.FrameCut
- Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.Simulation
+ Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation
CadCutBtn.IsChecked = True
FrameCutBtn.IsChecked = False
Case Pages.FrameCut
@@ -588,7 +593,7 @@ Class MainWindow
MainWindowGrid.Children.Remove(m_CurrentProjectPageUC)
MainWindowGrid.Children.Add(m_MachinePageUC)
m_ActivePage = Pages.Machine
- Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.Simulation
+ Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation
CadCutBtn.IsChecked = True
MachineBtn.IsChecked = False
Case Pages.FrameCut
@@ -631,16 +636,7 @@ Class MainWindow
MainWindowGrid.Children.Remove(m_CurrentProjectPageUC)
MainWindowGrid.Children.Add(m_OptionsPageUC)
m_ActivePage = Pages.Options
- Case Pages.Photo, Pages.RawPart
- CadCutBtn.IsChecked = True
- OptionsBtn.IsChecked = False
- Case Pages.Simulation
- CadCutBtn.IsChecked = True
- OptionsBtn.IsChecked = False
- Case Pages.Draw
- CadCutBtn.IsChecked = True
- OptionsBtn.IsChecked = False
- Case Pages.Import
+ Case Pages.Photo, Pages.RawPart, Pages.Draw, Pages.Import, Pages.CSV, Pages.Simulation
CadCutBtn.IsChecked = True
OptionsBtn.IsChecked = False
Case Pages.FrameCut
@@ -711,6 +707,8 @@ Class MainWindow
End If
' Uscita da pagina corrente definizione grezzo
If Not ExitFromRaw() Then Return
+ ' Uscita da pagina corrente CSV
+ If Not ExitFromCsv() Then Return
' Uscita da pagina corrente di split
If Not ExitFromSplit() Then Return
' Uscita da pagina corrente di simulazione
@@ -737,6 +735,12 @@ Class MainWindow
Return m_RawPartPage.ExitRawPart(True)
End Function
+ Private Function ExitFromCsv() As Boolean
+ ' Salvo lo stato attuale della lista
+ m_CadCutPageUC.m_CSVPage.SaveCsvPartList()
+ Return True
+ End Function
+
Private Function ExitFromSplit() As Boolean
' Se non sono in split tutto ok
If m_ActivePage <> Pages.CadCut Or m_CadCutPageUC.m_CadCutMode = CadCutPageUC.CadCutModes.Nest Then Return True
diff --git a/My Project/AssemblyInfo.vb b/My Project/AssemblyInfo.vb
index 7fedd45..1564411 100644
--- a/My Project/AssemblyInfo.vb
+++ b/My Project/AssemblyInfo.vb
@@ -60,5 +60,5 @@ Imports System.Windows
' by using the '*' as shown below:
'
-
-
+
+
diff --git a/NestPageUC.xaml.vb b/NestPageUC.xaml.vb
index a881504..aab92b0 100644
--- a/NestPageUC.xaml.vb
+++ b/NestPageUC.xaml.vb
@@ -398,7 +398,7 @@ Public Class NestPageUC
' Eseguo nesting
Dim bFit As Boolean = False
If UpdateNestRegions() Then
- If Not EgtExistsInfo(m_CurrProjPage.m_nRawId, KEY_RAWBYPOINTS) Then
+ If Not EgtExistsInfo(m_nRawId, KEY_RAWBYPOINTS) Then
bFit = EgtPackPartInRectangle(nId, m_bReducedCut, True)
End If
If Not bFit Then
diff --git a/OmagCUT.vbproj b/OmagCUT.vbproj
index 87bbe32..f94c0dd 100644
--- a/OmagCUT.vbproj
+++ b/OmagCUT.vbproj
@@ -147,6 +147,9 @@
CopyTemplateUC.xaml
+
+ CSVPage.xaml
+ CurrentProjectPageUC.xaml
@@ -190,6 +193,9 @@
NestPageUC.xaml
+
+ OpenFileWD.xaml
+ OpenPageUC.xaml
@@ -287,6 +293,10 @@
DesignerMSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+ DesignerMSBuild:Compile
@@ -339,6 +349,10 @@
DesignerMSBuild:Compile
+
+ Designer
+ MSBuild:Compile
+ MSBuild:CompileDesigner
diff --git a/OmagCUTDictionary.xaml.vb b/OmagCUTDictionary.xaml.vb
index c99e4fe..f1b9155 100644
--- a/OmagCUTDictionary.xaml.vb
+++ b/OmagCUTDictionary.xaml.vb
@@ -117,6 +117,117 @@ Namespace TreeViewItem
End Class
+ Public Class PartCathegoryItem
+ Inherits TreeViewItemBase
+
+ 'Private m_sTitle As String
+ Private m_sPictureString As String
+ Private m_nFType As Integer
+ Private m_Items As ObservableCollection(Of PartCustomItem)
+
+ 'Public Property Name As String
+ ' Get
+ ' Return m_sTitle
+ ' End Get
+ ' Set(value As String)
+ ' m_sTitle = value
+ ' End Set
+ 'End Property
+
+ Public ReadOnly Property PictureString As String
+ Get
+ Return "/Resources/ToolsTreeViewImages/Lama.png"
+ End Get
+ End Property
+
+ Public ReadOnly Property nFType As Integer
+ Get
+ Return m_nFType
+ End Get
+ End Property
+
+ Public Property Items As ObservableCollection(Of PartCustomItem)
+ Get
+ Return m_Items
+ End Get
+ Set(value As ObservableCollection(Of PartCustomItem))
+ m_Items = value
+ End Set
+ End Property
+
+ Sub New(sName As String, nType As Integer)
+ Name = sName
+ m_nFType = nType
+ Me.Items = New ObservableCollection(Of PartCustomItem)
+ End Sub
+
+ End Class
+
+ Public Class PartCustomItem
+ Inherits TreeViewItemBase
+
+ 'Private m_sTitle As String
+ Private m_nType As Integer
+ Private m_bIsActive As Boolean
+ Private m_sText1 As String
+ Private m_sText2 As String
+
+ Public Property sText1 As String
+ Get
+ Return m_sText1
+ End Get
+ Set(value As String)
+ m_sText1 = value
+ NotifyPropertyChanged("sText1")
+ End Set
+ End Property
+
+ Public Property sText2 As String
+ Get
+ Return m_sText2
+ End Get
+ Set(value As String)
+ m_sText2 = value
+ NotifyPropertyChanged("sText2")
+ End Set
+ End Property
+
+ Public ReadOnly Property nType As Integer
+ Get
+ Return m_nType
+ End Get
+ End Property
+
+ Public Property bIsActive As Boolean
+ Get
+ Return m_bIsActive
+ End Get
+ Set(value As Boolean)
+ If value <> m_bIsActive Then
+ m_bIsActive = value
+ NotifyPropertyChanged("bIsActive")
+ End If
+ End Set
+ End Property
+
+ Sub New(Title As String, nType As Integer, sText1 As String, sText2 As String)
+ Me.Name = Title
+ m_nType = nType
+ m_sText1 = sText1
+ m_sText2 = sText2
+ m_bIsActive = True
+ End Sub
+
+ Sub New(Title As String, nType As Integer, sText1 As String, sText2 As String, bIsActive As Boolean)
+ Me.Name = Title
+ m_nType = nType
+ m_sText1 = sText1
+ m_sText2 = sText2
+ m_bIsActive = bIsActive
+ End Sub
+
+ End Class
+
Public Class TreeViewItemBase
Implements INotifyPropertyChanged
diff --git a/OpenFileWD.xaml b/OpenFileWD.xaml
new file mode 100644
index 0000000..e993a7c
--- /dev/null
+++ b/OpenFileWD.xaml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/OpenFileWD.xaml.vb b/OpenFileWD.xaml.vb
new file mode 100644
index 0000000..d4b6a1c
--- /dev/null
+++ b/OpenFileWD.xaml.vb
@@ -0,0 +1,159 @@
+Imports System.Collections.ObjectModel
+Imports System.IO
+Imports EgtUILib
+
+Public Class OpenFileWD
+
+ ' Properties
+ Private m_sCurrDir As String = String.Empty
+ Private m_sCurrFile As String = String.Empty
+ Private m_sExt As String = String.Empty
+
+ Private m_OpenItemList As New ObservableCollection(Of IconListBoxItem)
+
+ Sub New(Owner As Window, sDir As String, sExt As String)
+ Me.Owner = Owner
+ m_sCurrDir = sDir
+ m_sExt = sExt
+ InitializeComponent()
+ End Sub
+
+ Private Sub OpenFile_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized
+ ' Posizione finestra
+ Me.Top = Owner.Top + Owner.Height / 2 - Me.Height / 2
+ Me.Left = Owner.Left + Owner.Width / 2 - Me.Width / 2
+ ' Definizione del collegamento tra ItemList e ListBox1
+ FileListBox.ItemsSource = m_OpenItemList
+ End Sub
+
+ Private Sub OpenFile_Loaded(sender As Object, e As EventArgs) Handles Me.Loaded
+ ' carico direttorio
+ LoadCurrDir()
+ ' disabilito ok
+ OkBtn.IsEnabled = False
+ End Sub
+
+ Private Function LoadCurrDir() As Boolean
+ ' se direttorio corrente non valido, carico l'elenco dei dischi
+ If String.IsNullOrWhiteSpace(m_sCurrDir) OrElse Not IO.Directory.Exists(m_sCurrDir) Then
+ Return LoadDisks()
+ End If
+ Dim TempPath As New Text.StringBuilder(260)
+ PathCompactPathEx(TempPath, m_sCurrDir, 28, 0)
+ ' lo visualizzo
+ FilePathTxBl.Content = TempPath.ToString
+ ' pulisco la lista
+ m_OpenItemList.Clear()
+ ' per risalire al direttorio padre
+ m_OpenItemList.Add(New IconListBoxItem("..", 0))
+ ' elenco dei sottodirettori
+ Dim DirInfo As New DirectoryInfo(m_sCurrDir)
+ Dim vDirI As DirectoryInfo() = DirInfo.GetDirectories("*")
+ Dim DirI As DirectoryInfo
+ For Each DirI In vDirI
+ ' per saltare i link, troppo complessi da gestire
+ If (DirI.Attributes And FileAttributes.Hidden) <> FileAttributes.Hidden Or
+ (DirI.Attributes And FileAttributes.System) <> FileAttributes.System Then
+ m_OpenItemList.Add(New IconListBoxItem(DirI.Name, 2))
+ End If
+ Next
+ ' elenco dei file
+ Dim vFileI As FileInfo() = DirInfo.GetFiles()
+ Dim FileI As FileInfo
+ For Each FileI In vFileI
+ Dim sExt As String = Path.GetExtension(FileI.Name).ToUpper()
+ If sExt = m_sExt Then
+ m_OpenItemList.Add(New IconListBoxItem(FileI.Name, 3))
+ End If
+ Next
+ ' riporto visualizzazione in cima alla lista (esiste sempre almeno un elemento)
+ FileListBox.ScrollIntoView(m_OpenItemList(0))
+ Return True
+ End Function
+
+ Private Function LoadDisks() As Boolean
+ ' dir corrente vuoto
+ m_sCurrDir = ""
+ ' lo visualizzo
+ FilePathTxBl.Content = m_sCurrDir
+ ' pulisco la lista
+ m_OpenItemList.Clear()
+ ' elenco dei dischi
+ Dim vDriI As DriveInfo() = DriveInfo.GetDrives()
+ Dim DriI As DriveInfo
+ For Each DriI In vDriI
+ m_OpenItemList.Add(New IconListBoxItem(DriI.Name, 1))
+ Next
+ Return True
+ End Function
+
+ Private Sub FileListBox_PreviewMouseUp(sender As Object, e As MouseButtonEventArgs) Handles FileListBox.PreviewMouseUp
+ ' Disabilito Ok
+ OkBtn.IsEnabled = False
+
+ ' Recupero item selezionato
+ If FileListBox.SelectedItems.Count() = 0 Then
+ Return
+ End If
+
+ Dim vItems As IconListBoxItem = FileListBox.SelectedItems(0)
+ ' A seconda del tipo
+ Select Case vItems.PictureID
+ Case 0 ' Vai nel direttorio padre
+ m_sCurrDir = IO.Path.GetDirectoryName(m_sCurrDir)
+ m_sCurrFile = ""
+ LoadCurrDir()
+ Case 1 ' Vai nella radice del disco
+ m_sCurrDir = vItems.Name
+ m_sCurrFile = ""
+ LoadCurrDir()
+ Case 2 ' Vai nel sottodirettorio
+ m_sCurrDir = IO.Path.Combine(m_sCurrDir, vItems.Name)
+ m_sCurrFile = ""
+ LoadCurrDir()
+ Case 3 ' File
+ m_sCurrFile = vItems.Name
+ OkBtn.IsEnabled = True
+ End Select
+
+ End Sub
+
+ Private Sub FileListBox_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles FileListBox.SelectionChanged
+ ' Recupero item selezionato
+ If FileListBox.SelectedItems.Count() = 0 Then
+ Return
+ End If
+
+ Dim vItems As IconListBoxItem = FileListBox.SelectedItems(0)
+
+ ' Gestisco solo aggiornamento visualizzazione file
+ If vItems.PictureID = 3 Then
+ m_sCurrFile = vItems.Name
+ OkBtn.IsEnabled = True
+ Else
+ m_sCurrFile = ""
+ OkBtn.IsEnabled = False
+ End If
+ End Sub
+
+ Private Sub OkBtn_Click(sender As Object, e As RoutedEventArgs) Handles OkBtn.Click
+ DialogResult = True
+ End Sub
+
+ Friend Function GetFilePath() As String
+ If Not String.IsNullOrWhiteSpace(m_sCurrFile) Then
+ Return m_sCurrDir & "\" & m_sCurrFile
+ Else
+ Return ""
+ End If
+ End Function
+
+ Friend Function GetFileDir() As String
+ If Not String.IsNullOrWhiteSpace(m_sCurrFile) Then
+ Return m_sCurrDir
+ Else
+ Return ""
+ End If
+ End Function
+
+End Class
diff --git a/ProjectMgrUC.xaml b/ProjectMgrUC.xaml
index 0a43ab2..6824da8 100644
--- a/ProjectMgrUC.xaml
+++ b/ProjectMgrUC.xaml
@@ -29,6 +29,8 @@
+
diff --git a/ProjectMgrUC.xaml.vb b/ProjectMgrUC.xaml.vb
index ac407c3..f4baf4f 100644
--- a/ProjectMgrUC.xaml.vb
+++ b/ProjectMgrUC.xaml.vb
@@ -17,6 +17,7 @@ Public Class ProjectMgrUC
LoadBtn.Content = EgtMsg(MSG_CADCUTPAGEUC + 4)
SaveBtn.Content = EgtMsg(MSG_CADCUTPAGEUC + 5)
SaveNameBtn.Content = EgtMsg(MSG_CADCUTPAGEUC + 6)
+ CSVBtn.Content = EgtMsg(MSG_CADCUTPAGEUC + 8)
ResetCutBtn.Content = EgtMsg(MSG_NESTPAGEUC + 6)
SimulateBtn.Content = EgtMsg(MSG_CADCUTPAGEUC + 1) 'Simulate - Simula
WorkBtn.Content = EgtMsg(MSG_CADCUTPAGEUC + 2) 'Work - Lavora
@@ -137,6 +138,13 @@ Public Class ProjectMgrUC
m_SaveNameWD.ShowDialog()
End Sub
+ Private Sub CSVBtn_Click(sender As Object, e As RoutedEventArgs) Handles CSVBtn.Click
+ m_MainWindow.m_CadCutPageUC.CadCutPageGrid.Children.Remove(m_MainWindow.m_CadCutPageUC.m_NestPage)
+ m_MainWindow.m_CadCutPageUC.CadCutPageGrid.Children.Add(m_MainWindow.m_CadCutPageUC.m_CSVPage)
+ m_MainWindow.m_ActivePage = MainWindow.Pages.CSV
+ m_MainWindow.m_PrevActivePage = MainWindow.Pages.CadCut
+ End Sub
+
Private Sub ResetCutBtn_Click(sender As Object, e As RoutedEventArgs) Handles ResetCutBtn.Click
' Cancello eventuali messaggi
m_CurrProjPage.ClearMessage()