Files
OmagCUT/CSVPage.xaml.vb
T
Dario Sassi fe92f33074 OmagCUT :
- in CSV con linea di produzione aggiunto bottone per pezzi rovinati.
2018-07-02 09:12:04 +00:00

562 lines
23 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.IO
Imports OmagCUT.TreeViewItem
Imports EgtUILib
Imports EgtWPFLib
Public Class CSVPage
' Riferimenti a pagine
Private m_MainWindow As MainWindow = DirectCast(Application.Current.MainWindow, MainWindow)
Private WithEvents m_CurrProjPage As CurrentProjectPageUC
' Flag di pagina attiva
Private m_bActive As Boolean = False
' Flag tipologia
Private m_bFull As Boolean = False
' Flag prima apertura
Private m_bFirst As Boolean = True
' Dati lista
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
' Dati del grezzo
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
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
(GetPrivateProfileInt(S_CSV, K_FULL, 1, m_MainWindow.GetIniFile()) <> 0)
RemoveBtn.Visibility = If(m_bFull, Windows.Visibility.Visible, Windows.Visibility.Hidden)
' Determino se gestione pezzi rovinati attiva
If Not m_MainWindow.m_CurrentMachine.bProdLine Or Not m_MainWindow.m_CurrentMachine.nSaveProduced = 0 Then
RuinedPartsBtn.IsEnabled = False
End If
' Leggo lista pezzi corrente
Dim sCsvFile As String = String.Empty
GetPrivateProfileString(S_CSV, K_CSVLASTFILE, "", sCsvFile, m_MainWindow.GetIniFile())
If Not String.IsNullOrEmpty(sCsvFile) Then
LoadCsvPartList(sCsvFile)
End If
End Sub
Private Sub CSVPage_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
' Impostazioni
m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC
m_bActive = True
' Se prima esecuzione
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
' Recupero dimensioni del grezzo e kerf
m_nRawId = EgtGetFirstRawPart()
GetRawBox(m_ptRawMin, m_ptRawMax)
End Sub
Private Sub CSVPage_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
m_bActive = False
m_CurrProjPage.m_SceneButtons.MeasureBtn.IsChecked = 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
End If
' 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(True, True, True, True, True)
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 pezzo cui appartiene
Dim nPartId As Integer = EgtGetParent(EgtGetParent(nId))
Dim bPartInTable As Boolean = (EgtGetParent(nPartId) = m_nRawId)
If EgtIsPart(nPartId) Or bPartInTable Then
Dim nStat As Integer = GDB_ST.ON_
EgtGetStatus(nPartId, nStat)
' Se già selezionato, lo deselezione
If nStat = GDB_ST.SEL Then
EgtDeselectObj(nPartId)
' Altrimenti lo seleziono
Else
EgtSelectObj(nPartId)
End If
Exit While
End If
nId = EgtGetNextObjInSelWin()
End While
EgtDraw()
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
' Salvo lista dei pezzi attuale
SaveCsvPartList()
' Pulisco path e lista dei pezzi Csv
m_sCsvPath = String.Empty
m_CsvPartList.Clear()
' Visualizzazione lista
ShowTreeView()
' Registro in ini nessuna path
WritePrivateProfileString(S_CSV, K_CSVLASTFILE, "", m_MainWindow.GetIniFile())
End Sub
Private Sub OpenBtn_Click(sender As Object, e As RoutedEventArgs) Handles OpenBtn.Click
' Salvo lista dei pezzi attuale
SaveCsvPartList()
' 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", ".EPL")
If Not OpenFileWnd.ShowDialog() Then Return
' Salvo direttorio corrente
WritePrivateProfileString(S_CSV, K_CSVCURRDIR, OpenFileWnd.GetFileDir(), m_MainWindow.GetIniFile())
' Apertura file
Dim sPath = OpenFileWnd.GetFilePath()
If String.Compare(Path.GetExtension(sPath), ".CSV", True) = 0 Then
LoadCsvFile(sPath)
Else
LoadCsvPartList(sPath)
End If
' Salvo path di carico del file CSV
m_CurrProjPage.SetLoadPath(sPath)
' Visualizzazione lista
ShowTreeView()
End Sub
Private Sub RuinedPartsBtn_Click(sender As Object, e As RoutedEventArgs) Handles RuinedPartsBtn.Click
' Salvo lista dei pezzi attuale
SaveCsvPartList()
' Apertura file
Dim sPath = m_MainWindow.GetRuinedPartsDir() & "\" & CURR_RUINED_EPL
LoadCsvPartList(sPath)
' Salvo path di carico del file CSV
m_CurrProjPage.SetLoadPath(sPath)
' Visualizzazione lista
ShowTreeView()
End Sub
Private Function LoadCsvFile(sCsvPath As String) As Boolean
' Pulisco path e lista dei pezzi Csv
m_sCsvPath = String.Empty
m_CsvPartList.Clear()
' Eseguo la lettura del file Csv
If Not ReadCsvFile(sCsvPath, m_bFull, m_sCsvPath, m_CsvPartList) Then
m_CurrProjPage.SetErrorMessage(EgtMsg(91206)) 'Errore nella lettura del file CSV
Return False
End If
' Elimino pezzi nulli
RemoveWrongParts(m_CsvPartList)
' Aggiorno
If m_bFull Then
' Salvo come epl
SaveCsvPartList()
' Rinomino file originale
Dim sBakPath As String = sCsvPath & ".bak"
Dim sBakName As String = Path.GetFileName(sBakPath)
' cancello eventuale vecchio backup
If My.Computer.FileSystem.FileExists(sBakPath) Then
My.Computer.FileSystem.DeleteFile(sBakPath)
End If
' eseguo rinomina
My.Computer.FileSystem.RenameFile(sCsvPath, sBakName)
End If
Return True
End Function
Private Sub ShowTreeView()
' Path del file Csv
Dim TempPath As New Text.StringBuilder(260)
PathCompactPathEx(TempPath, m_sCsvPath, 28, 0)
CsvPathTxBl.Content = TempPath.ToString()
' Pezzi del file Csv
m_ItemsList.Clear()
Dim sCurrMat As String = String.Empty
Dim dCurrTh As Double = 0
Dim nCatToNest As Integer = 0
Dim nCatCount As Integer = 0
Dim PartCathegory As New PartCathegoryItem("", 0)
For i As Integer = 1 To m_CsvPartList.Count()
' Dati pezzo corrente
Dim CurrPart As CsvPart = m_CsvPartList(i - 1)
' Gestione categoria
If i = 1 Then
sCurrMat = CurrPart.m_sMaterial
dCurrTh = CurrPart.m_dTh
ElseIf String.Compare(sCurrMat, CurrPart.m_sMaterial, True) <> 0 Or
Math.Abs(dCurrTh - CurrPart.m_dTh) > 10 * EPS_SMALL Then
If m_bFull Then
PartCathegory.Name = If(String.IsNullOrWhiteSpace(sCurrMat), "***", sCurrMat) &
" - " & LenToString(dCurrTh, 2) &
" - " & nCatToNest.ToString() & "/" & nCatCount.ToString()
Else
PartCathegory.Name = nCatToNest.ToString() & "/" & nCatCount.ToString()
End If
PartCathegory.IsExpanded = True
m_ItemsList.Add(PartCathegory)
sCurrMat = CurrPart.m_sMaterial
dCurrTh = CurrPart.m_dTh
PartCathegory = New PartCathegoryItem("", 0)
nCatToNest = 0
nCatCount = 0
End If
' Gestione pezzo
nCatToNest += CurrPart.m_nToNest
nCatCount += CurrPart.m_nCount
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
' Inserisco ultima categoria
If m_bFull Then
PartCathegory.Name = If(String.IsNullOrWhiteSpace(sCurrMat), "***", sCurrMat) &
" - " & LenToString(dCurrTh, 2) &
" - " & nCatToNest.ToString() & "/" & nCatCount.ToString()
Else
PartCathegory.Name = nCatToNest.ToString() & "/" & nCatCount.ToString()
End If
PartCathegory.IsExpanded = True
m_ItemsList.Add(PartCathegory)
End Sub
Private Sub UpdateTreeView()
For Each CatItem As PartCathegoryItem In m_ItemsList
Dim sCurrMat As String = String.Empty
Dim dCurrTh As Double = 0
Dim nCatToNest As Integer = 0
Dim nCatCount As Integer = 0
For Each PrtItem As PartCustomItem In CatItem.Items
Dim PartData As CsvPart = m_CsvPartList(PrtItem.nType - 1)
Dim sCount As String = PartData.m_nToNest.ToString() & "/" & PartData.m_nCount.ToString()
PrtItem.sText1 = sCount
sCurrMat = PartData.m_sMaterial
dCurrTh = PartData.m_dTh
nCatToNest += PartData.m_nToNest
nCatCount += PartData.m_nCount
Next
If m_bFull Then
CatItem.Name = If(String.IsNullOrWhiteSpace(sCurrMat), "***", sCurrMat) &
" - " & LenToString(dCurrTh, 2) &
" - " & nCatToNest.ToString() & "/" & nCatCount.ToString()
Else
CatItem.Name = nCatToNest.ToString() & "/" & nCatCount.ToString()
End If
Next
End Sub
Private Sub PartsTreeView_PreviewMouseUp(sender As Object, e As MouseButtonEventArgs) Handles PartsTreeView.PreviewMouseUp
' Pezzi disattivabili solo se Csv completo
If Not m_bFull Then Return
If TypeOf PartsTreeView.SelectedItem Is PartCathegoryItem Then
Dim SelectedCathegory As PartCathegoryItem = DirectCast(PartsTreeView.SelectedItem, PartCathegoryItem)
' Determino quanti attivi per decidere cosa fare
Dim nItemOn As Integer = 0
For Each Item As PartCustomItem In SelectedCathegory.Items
If Item.bIsActive Then nItemOn += 1
Next
Dim bActivate As Boolean = (nItemOn <= SelectedCathegory.Items.Count() - nItemOn)
' Aggiorno stato
For Each Item As PartCustomItem In SelectedCathegory.Items
Item.bIsActive = bActivate
m_CsvPartList(Item.nType - 1).m_bActive = Item.bIsActive
Next
SelectedCathegory.IsSelected = False
ElseIf TypeOf PartsTreeView.SelectedItem Is PartCustomItem Then
Dim SelectedCustom As PartCustomItem = DirectCast(PartsTreeView.SelectedItem, PartCustomItem)
SelectedCustom.bIsActive = Not SelectedCustom.bIsActive
m_CsvPartList(SelectedCustom.nType - 1).m_bActive = SelectedCustom.bIsActive
SelectedCustom.IsSelected = False
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 Or
CurrPart.m_dTh < EPS_SMALL) And
(String.IsNullOrWhiteSpace(CurrPart.m_sMaterial) Or
String.IsNullOrWhiteSpace(sCurrMat) Or
CurrPart.m_sMaterial = "***" Or
sCurrMat = "***" Or
String.Compare(CurrPart.m_sMaterial, sCurrMat, True) = 0) Then
InsPartList.Add(CurrPart)
End If
Next
' Lancio l'inserimento dei pezzi
ExecInsert(InsPartList)
' Aggiorno visualizzazione
EgtZoom(ZM.ALL)
' Aggiorno TreeView
UpdateTreeView()
End Sub
Private Function ExecInsert(InsPartList As List(Of CsvPart)) As Boolean
Dim bMaxDimOnX As Boolean = (GetPrivateProfileInt(S_CSV, K_MAXDIMONX, 1, m_MainWindow.GetIniFile()) <> 0)
If bMaxDimOnX Then
' Ordino la lista dei pezzi secondo la dimensione minima decrescente (va su Y)
InsPartList.Sort(Function(P, Q)
Dim dPMin As Double = Math.Min(P.m_dDimX, P.m_dDimY)
Dim dQMin As Double = Math.Min(Q.m_dDimX, Q.m_dDimY)
If Math.Abs(dPMin - dQMin) < EPS_SMALL Then
Return (P.m_nOriInd - Q.m_nOriInd)
Else
Return CInt(Math.Ceiling(dQMin - dPMin))
End If
End Function)
Else
' Ordino la lista dei pezzi secondo le Y decrescenti
InsPartList.Sort(Function(P, Q)
If Math.Abs(P.m_dDimY - Q.m_dDimY) < EPS_SMALL Then
Return (P.m_nOriInd - Q.m_nOriInd)
Else
Return CInt(Math.Ceiling(Q.m_dDimY - P.m_dDimY))
End If
End Function)
End If
' 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)
' Se non è un rettangolo, vado oltre
If Not CurrPart.m_bIsRect Then Continue For
' Definizione variabili
Dim dDimX = CurrPart.m_dDimX
Dim dDimY = CurrPart.m_dDimY
If bMaxDimOnX And dDimY > dDimX Then
Dim dTemp As Double = dDimX
dDimX = dDimY
dDimY = dTemp
End If
EgtLuaSetGlobNumVar("CMP.V1", dDimX)
EgtLuaSetGlobNumVar("CMP.V2", dDimY)
EgtLuaSetGlobStringVar("CMP.INFO", CurrPart.m_sName)
' Esecuzione componente
If Not EgtLuaExecLine("CMP_Draw(false)") Then Continue For
' Recupero Id del nuovo componente
Dim nId As Integer = EgtGetLastPart()
If nId = GDB_ID.NULL Then Continue For
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)
' Eventuale testo per indicare il sopra
If Not bMaxDimOnX Then
Dim dH As Double = Math.Min(0.1 * dDimY, 30)
Dim nText As Integer = EgtCreateTextAdv(nRegId, New Point3d(dDimX / 2, dDimY - 0.6 * dH, 0), 0, "*TOP*", "", 500, False, dH, 1, 0, INS_POS.MC)
EgtSetColor(nText, New Color3d())
End If
' Aggiusto per lavorazioni
AdjustFlatPart(nId)
' Se Csv completo, aggiungo info su CSV di origine
If m_bFull Then
EgtSetInfo(nId, INFO_CSV_PATH, m_sCsvPath)
EgtSetInfo(nId, INFO_CSV_PART, CurrPart.m_sName)
End If
' Lo sposto nel gruppo speciale
EgtRelocate(nId, nIpGrp)
Next
EgtLuaResetGlobVar("CMP")
EgtLuaResetGlobVar("CMP_Draw")
' 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 m_bFull Then
If NestOnePart(CurrPart.m_nId) Then
CurrPart.m_nToNest -= 1
Else
Exit While
End If
Else
If ParkOnePart(CurrPart.m_nId) Then
CurrPart.m_nToNest -= 1
Else
Exit While
End If
End If
End While
Next
Return True
End Function
Private Function NestOnePart(nId As Integer) As Boolean
' Inserisco una copia del pezzo nel grezzo
Dim nId2 As Integer = EgtCopyGlob(nId, GDB_ID.ROOT)
If Not m_MainWindow.m_CadCutPageUC.m_NestPage.InsertOnePart(nId2) Then
EgtErase(nId2)
Return False
Else
Return True
End If
End Function
Private Function ParkOnePart(nId As Integer) As Boolean
' Inserisco in parcheggio una copia del pezzo
Dim nId2 As Integer = EgtCopyGlob(nId, GDB_ID.ROOT)
If Not m_MainWindow.m_CadCutPageUC.m_NestPage.StoreOnePart(nId2, True) Then
EgtErase(nId2)
Return False
Else
Return True
End If
End Function
Private Sub RemoveBtn_Click(sender As Object, e As RoutedEventArgs) Handles RemoveBtn.Click
' Elenco eventuali altre liste Csv riferite dai pezzi
Dim bOther As Boolean = False
Dim sOtherCsv As String = String.Empty
' Rimuovo i pezzi selezionati della lista CSV corrente e ne aggiorno i contatori
Dim nId As Integer = EgtGetFirstSelectedObj()
While nId <> GDB_ID.NULL
Dim nNextId As Integer = EgtGetNextSelectedObj()
If Not RemoveOnePart(nId) Then
bOther = True
Dim sCsvPath As String = String.Empty
If EgtGetInfo(nId, INFO_CSV_PATH, sCsvPath) Then
Dim sCsvName As String = Path.GetFileNameWithoutExtension(sCsvPath)
If sOtherCsv.IndexOf(sCsvName) = -1 Then
sOtherCsv = sOtherCsv & sCsvName & ", "
End If
End If
End If
nId = nNextId
End While
' Aggiorno visualizzazione
EgtDraw()
' Aggiorno TreeView
UpdateTreeView()
' Eventuale messaggi di pezzi liberi o da altre liste
If bOther Then
' Pezzi non rimossi perché liberi
Dim sOut As String = EgtMsg(MSG_EGTMSGBOX + 13)
If Not String.IsNullOrWhiteSpace(sOtherCsv) Then
' o di altre liste Csv
sOut &= EgtMsg(MSG_EGTMSGBOX + 14) & " (" & sOtherCsv.TrimEnd(", ".ToCharArray()) & ")"
End If
Dim WarnMsg As New EgtMsgBox(m_MainWindow, "", sOut, EgtMsgBox.Buttons.OK, EgtMsgBox.Icons.NULL, 0, 1)
End If
End Sub
Private Function RemoveOnePart(nId As Integer) As Boolean
' Recupero identificativi da Info
Dim sCsvPath As String = String.Empty
EgtGetInfo(nId, INFO_CSV_PATH, sCsvPath)
Dim sName As String = String.Empty
EgtGetInfo(nId, INFO_CSV_PART, sName)
' Verifico che il pezzo appartenga a questo Csv
If String.Compare(sCsvPath, m_sCsvPath, True) = 0 Then
' Cerco il pezzo nella lista dei pezzi
For i = 1 To m_CsvPartList.Count()
Dim CurrPart As CsvPart = m_CsvPartList(i - 1)
If String.Compare(sName, CurrPart.m_sName, True) = 0 Then
' Se nel grezzo
If EgtGetParent(nId) = m_nRawId Then
' Rimuovo le lavorazioni
EraseMachinings(nId)
' Rimuovo dal grezzo
EgtRemovePartFromRawPart(nId)
End If
' Cancello il pezzo
EgtErase(nId)
' Aggiorno il contatore
CurrPart.m_nToNest += 1
' Esco
Return True
End If
Next
End If
' Pezzo non appartenente al Csv corrente
Return False
End Function
Friend Sub SaveCsvPartList()
' Se Csv semplificato non va salvata
If Not m_bFull Then Return
' Se non c'è nulla di attivo, non faccio alcunché
If String.IsNullOrEmpty(m_sCsvPath) Then
EgtOutLog("CSV List missing")
Return
End If
' Path del file
Dim sFile As String = Path.ChangeExtension(m_sCsvPath, ".epl")
' Scrittura del file
If WriteCsvPartList(sFile, m_sCsvPath, m_CsvPartList) Then
' Registro in ini path
WritePrivateProfileString(S_CSV, K_CSVLASTFILE, sFile, m_MainWindow.GetIniFile())
End If
End Sub
Private Sub LoadCsvPartList(sFile As String)
' Se Csv semplificato non va letta
If Not m_bFull Then Return
' Pulisco path e lista dei pezzi Csv
m_sCsvPath = String.Empty
m_CsvPartList.Clear()
' Lettura del file
ReadCsvPartList(sFile, m_sCsvPath, m_CsvPartList)
' Elimino pezzi nulli
RemoveWrongParts(m_CsvPartList)
End Sub
Friend Sub UpdateCsvPartList()
' Se Csv semplificato non va aggiornata
If Not m_bFull Then Return
' Leggo lista pezzi corrente
Dim sCsvFile As String = String.Empty
GetPrivateProfileString(S_CSV, K_CSVLASTFILE, "", sCsvFile, m_MainWindow.GetIniFile())
If Not String.IsNullOrEmpty(sCsvFile) Then
LoadCsvPartList(sCsvFile)
End If
' Visualizzazione lista
ShowTreeView()
End Sub
End Class