Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8944a8d191 | |||
| 5cdfc79aca | |||
| 2f24604fa8 | |||
| 2889e30386 | |||
| a9458620c1 | |||
| 7fe03cbbb4 |
@@ -364,6 +364,9 @@ Public Class CompoWindowVM
|
|||||||
' Cancello layer regioni per selezione buchi
|
' Cancello layer regioni per selezione buchi
|
||||||
Pz = EgtGetFirstGroupInGroup(GDB_ID.ROOT)
|
Pz = EgtGetFirstGroupInGroup(GDB_ID.ROOT)
|
||||||
|
|
||||||
|
' identificativo univoico del gruppo di pezzi, se più di un pezzo
|
||||||
|
Dim sGUICode As String = String.Empty
|
||||||
|
|
||||||
While Pz <> -1
|
While Pz <> -1
|
||||||
' imposto il contesto corrente
|
' imposto il contesto corrente
|
||||||
EgtSetCurrentContext(CompoWindowMap.refCompoSceneHostV.CompoScene.GetCtx())
|
EgtSetCurrentContext(CompoWindowMap.refCompoSceneHostV.CompoScene.GetCtx())
|
||||||
@@ -513,6 +516,9 @@ Public Class CompoWindowVM
|
|||||||
EgtEraseEmptyParts()
|
EgtEraseEmptyParts()
|
||||||
' Area dei nuovi pezzi
|
' Area dei nuovi pezzi
|
||||||
Dim dNewArea As Double = 0
|
Dim dNewArea As Double = 0
|
||||||
|
If nNbr > 1 Then
|
||||||
|
sGUICode = System.Guid.NewGuid.ToString
|
||||||
|
End If
|
||||||
' Se esiste il file del pezzo
|
' Se esiste il file del pezzo
|
||||||
If My.Computer.FileSystem.FileExists(sTmpFile) Then
|
If My.Computer.FileSystem.FileExists(sTmpFile) Then
|
||||||
' eseguo inserimento
|
' eseguo inserimento
|
||||||
@@ -527,8 +533,15 @@ Public Class CompoWindowVM
|
|||||||
If m_bTrfData Then EgtSetInfo(nId2, "CsvPart", CompoWindowMap.refCompoManagerVM.sTrfOrderCode & "-" & nId2.ToString())
|
If m_bTrfData Then EgtSetInfo(nId2, "CsvPart", CompoWindowMap.refCompoManagerVM.sTrfOrderCode & "-" & nId2.ToString())
|
||||||
' Aggiorno l'area dei nuovi pezzi
|
' Aggiorno l'area dei nuovi pezzi
|
||||||
dNewArea += GeomCalc.GetPartArea(nId2)
|
dNewArea += GeomCalc.GetPartArea(nId2)
|
||||||
' Inserisco in parcheggio
|
|
||||||
|
' assegno l'identificatico del pezzo, se esiste
|
||||||
|
If Not String.IsNullOrEmpty(sGUICode) Then
|
||||||
|
Dim sPreGuid As String = EstCalc.CreatePreGuidCode(nId2)
|
||||||
|
EgtSetInfo(nId2, INFO_REFGROUP, sPreGuid & sGUICode)
|
||||||
|
End If
|
||||||
|
' muovo il pezzo nella prima posizione di parcheggio libera
|
||||||
EstCalc.StoreOnePart(nId2, True)
|
EstCalc.StoreOnePart(nId2, True)
|
||||||
|
|
||||||
' Aggiungo riferimento e lo inserisco in VeinMatching
|
' Aggiungo riferimento e lo inserisco in VeinMatching
|
||||||
VeinMatching.SetRefOnPart(nId2)
|
VeinMatching.SetRefOnPart(nId2)
|
||||||
VeinMatching.AddPart(nId2, True)
|
VeinMatching.AddPart(nId2, True)
|
||||||
|
|||||||
@@ -133,6 +133,7 @@ Module ConstIni
|
|||||||
Public Const K_CSVCURRDIR As String = "CurrDir"
|
Public Const K_CSVCURRDIR As String = "CurrDir"
|
||||||
Public Const K_CSVLASTFILE As String = "LastFile"
|
Public Const K_CSVLASTFILE As String = "LastFile"
|
||||||
Public Const K_THICKTOLERANCE As String = "ThickTolerance"
|
Public Const K_THICKTOLERANCE As String = "ThickTolerance"
|
||||||
|
Public Const K_FULL As String = "Full"
|
||||||
|
|
||||||
Public Const S_COLORTOSIDEANG As String = "ColorToSideAng"
|
Public Const S_COLORTOSIDEANG As String = "ColorToSideAng"
|
||||||
Public Const K_CTSA_ENABLE As String = "Enable"
|
Public Const K_CTSA_ENABLE As String = "Enable"
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
Style="{DynamicResource {x:Type EgtWPFLib5:EgtCustomWindow}}"
|
Style="{DynamicResource {x:Type EgtWPFLib5:EgtCustomWindow}}"
|
||||||
WindowStartupLocation="CenterOwner"
|
WindowStartupLocation="CenterOwner"
|
||||||
MinWidth="270" MinHeight="250"
|
MinWidth="270" MinHeight="250"
|
||||||
|
MaxWidth="500"
|
||||||
ResizeMode="NoResize">
|
ResizeMode="NoResize">
|
||||||
|
|
||||||
<DockPanel Margin="5,5,5,0">
|
<DockPanel Margin="5,5,5,0">
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
Imports System.Collections.ObjectModel
|
Imports System.Collections.ObjectModel
|
||||||
|
Imports System.IO
|
||||||
Imports EgtUILib
|
Imports EgtUILib
|
||||||
Imports EgtWPFLib5
|
Imports EgtWPFLib5
|
||||||
|
|
||||||
@@ -110,6 +111,8 @@ Public Class CsvWindowVM
|
|||||||
#Region "METHODS"
|
#Region "METHODS"
|
||||||
|
|
||||||
Private Sub ShowTreeView()
|
Private Sub ShowTreeView()
|
||||||
|
Dim bFull = OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.CSV_AUTO) And
|
||||||
|
(GetMainPrivateProfileInt(S_CSV, K_FULL, 1) <> 0)
|
||||||
' Path del file Csv
|
' Path del file Csv
|
||||||
Dim TempPath As New Text.StringBuilder(260)
|
Dim TempPath As New Text.StringBuilder(260)
|
||||||
PathCompactPathEx(TempPath, CsvM.CsvPath, 56, 0)
|
PathCompactPathEx(TempPath, CsvM.CsvPath, 56, 0)
|
||||||
@@ -118,6 +121,7 @@ Public Class CsvWindowVM
|
|||||||
m_CsvTypeList.Clear()
|
m_CsvTypeList.Clear()
|
||||||
Dim sCurrMat As String = String.Empty
|
Dim sCurrMat As String = String.Empty
|
||||||
Dim dCurrTh As Double = 0
|
Dim dCurrTh As Double = 0
|
||||||
|
Dim sCurrPath As String = String.Empty
|
||||||
Dim nCatToNest As Integer = 0
|
Dim nCatToNest As Integer = 0
|
||||||
Dim nCatCount As Integer = 0
|
Dim nCatCount As Integer = 0
|
||||||
Dim PartCathegory As New CsvPartType("", 0)
|
Dim PartCathegory As New CsvPartType("", 0)
|
||||||
@@ -128,15 +132,29 @@ Public Class CsvWindowVM
|
|||||||
If i = 1 Then
|
If i = 1 Then
|
||||||
sCurrMat = CurrPart.m_sMaterial
|
sCurrMat = CurrPart.m_sMaterial
|
||||||
dCurrTh = CurrPart.m_dTh
|
dCurrTh = CurrPart.m_dTh
|
||||||
|
sCurrPath = CurrPart.m_sPath
|
||||||
ElseIf String.Compare(sCurrMat, CurrPart.m_sMaterial, True) <> 0 Or
|
ElseIf String.Compare(sCurrMat, CurrPart.m_sMaterial, True) <> 0 Or
|
||||||
|
String.Compare(sCurrPath, CurrPart.m_sPath, True) <> 0 Or
|
||||||
Math.Abs(dCurrTh - CurrPart.m_dTh) > 10 * EPS_SMALL Then
|
Math.Abs(dCurrTh - CurrPart.m_dTh) > 10 * EPS_SMALL Then
|
||||||
PartCathegory.Name = If(String.IsNullOrWhiteSpace(sCurrMat), "***", sCurrMat) &
|
|
||||||
" - " & LenToString(dCurrTh, 2) &
|
If bFull Then
|
||||||
" - " & nCatToNest.ToString() & "/" & nCatCount.ToString()
|
PartCathegory.Name = If(String.IsNullOrWhiteSpace(sCurrMat), "***", sCurrMat) &
|
||||||
|
" - " & LenToString(dCurrTh, 2) &
|
||||||
|
" - " & nCatToNest.ToString() & "/" & nCatCount.ToString()
|
||||||
|
If Not String.IsNullOrWhiteSpace(sCurrPath) Then
|
||||||
|
PartCathegory.Name &= vbCrLf & Path.GetFileNameWithoutExtension(sCurrPath)
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
PartCathegory.Name = nCatToNest.ToString() & "/" & nCatCount.ToString()
|
||||||
|
If Not String.IsNullOrWhiteSpace(sCurrPath) Then
|
||||||
|
PartCathegory.Name &= vbCrLf & Path.GetFileNameWithoutExtension(sCurrPath)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
PartCathegory.IsExpanded = True
|
PartCathegory.IsExpanded = True
|
||||||
CsvTypeList.Add(PartCathegory)
|
CsvTypeList.Add(PartCathegory)
|
||||||
sCurrMat = CurrPart.m_sMaterial
|
sCurrMat = CurrPart.m_sMaterial
|
||||||
dCurrTh = CurrPart.m_dTh
|
dCurrTh = CurrPart.m_dTh
|
||||||
|
sCurrPath = CurrPart.m_sPath
|
||||||
PartCathegory = New CsvPartType("", 0)
|
PartCathegory = New CsvPartType("", 0)
|
||||||
nCatToNest = 0
|
nCatToNest = 0
|
||||||
nCatCount = 0
|
nCatCount = 0
|
||||||
@@ -150,18 +168,31 @@ Public Class CsvWindowVM
|
|||||||
PartCathegory.CsvPartList.Add(New CsvPartItem(CurrPart.m_sName, i, sCount, sDim, CurrPart.m_bActive))
|
PartCathegory.CsvPartList.Add(New CsvPartItem(CurrPart.m_sName, i, sCount, sDim, CurrPart.m_bActive))
|
||||||
Next
|
Next
|
||||||
' Inserisco ultima categoria
|
' Inserisco ultima categoria
|
||||||
PartCathegory.Name = If(String.IsNullOrWhiteSpace(sCurrMat), "***", sCurrMat) &
|
If bFull Then
|
||||||
" - " & LenToString(dCurrTh, 2) &
|
PartCathegory.Name = If(String.IsNullOrWhiteSpace(sCurrMat), "***", sCurrMat) &
|
||||||
" - " & nCatToNest.ToString() & "/" & nCatCount.ToString()
|
" - " & LenToString(dCurrTh, 2) &
|
||||||
|
" - " & nCatToNest.ToString() & "/" & nCatCount.ToString()
|
||||||
|
If Not String.IsNullOrWhiteSpace(sCurrPath) Then
|
||||||
|
PartCathegory.Name &= vbCrLf & Path.GetFileNameWithoutExtension(sCurrPath)
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
PartCathegory.Name = nCatToNest.ToString() & "/" & nCatCount.ToString()
|
||||||
|
If Not String.IsNullOrWhiteSpace(sCurrPath) Then
|
||||||
|
PartCathegory.Name &= vbCrLf & Path.GetFileNameWithoutExtension(sCurrPath)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
PartCathegory.IsExpanded = True
|
PartCathegory.IsExpanded = True
|
||||||
CsvTypeList.Add(PartCathegory)
|
CsvTypeList.Add(PartCathegory)
|
||||||
NotifyPropertyChanged("CsvTypeList")
|
NotifyPropertyChanged("CsvTypeList")
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Sub UpdateTreeView()
|
Private Sub UpdateTreeView()
|
||||||
|
Dim bFull = OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.CSV_AUTO) And
|
||||||
|
(GetMainPrivateProfileInt(S_CSV, K_FULL, 1) <> 0)
|
||||||
For Each CatItem As CsvPartType In m_CsvTypeList
|
For Each CatItem As CsvPartType In m_CsvTypeList
|
||||||
Dim sCurrMat As String = String.Empty
|
Dim sCurrMat As String = String.Empty
|
||||||
Dim dCurrTh As Double = 0
|
Dim dCurrTh As Double = 0
|
||||||
|
Dim sCurrPath As String = String.Empty
|
||||||
Dim nCatToNest As Integer = 0
|
Dim nCatToNest As Integer = 0
|
||||||
Dim nCatCount As Integer = 0
|
Dim nCatCount As Integer = 0
|
||||||
For Each PrtItem As CsvPartItem In CatItem.CsvPartList
|
For Each PrtItem As CsvPartItem In CatItem.CsvPartList
|
||||||
@@ -171,12 +202,23 @@ Public Class CsvWindowVM
|
|||||||
PrtItem.sText1 = sCount
|
PrtItem.sText1 = sCount
|
||||||
sCurrMat = PartData.m_sMaterial
|
sCurrMat = PartData.m_sMaterial
|
||||||
dCurrTh = PartData.m_dTh
|
dCurrTh = PartData.m_dTh
|
||||||
|
sCurrPath = PartData.m_sPath
|
||||||
nCatToNest += PartData.m_nToNest
|
nCatToNest += PartData.m_nToNest
|
||||||
nCatCount += PartData.m_nCount + PartData.m_nAdd
|
nCatCount += PartData.m_nCount + PartData.m_nAdd
|
||||||
Next
|
Next
|
||||||
CatItem.Name = If(String.IsNullOrWhiteSpace(sCurrMat), "***", sCurrMat) &
|
If bFull Then
|
||||||
" - " & LenToString(dCurrTh, 2) &
|
CatItem.Name = If(String.IsNullOrWhiteSpace(sCurrMat), "***", sCurrMat) &
|
||||||
" - " & nCatToNest.ToString() & "/" & nCatCount.ToString()
|
" - " & LenToString(dCurrTh, 2) &
|
||||||
|
" - " & nCatToNest.ToString() & "/" & nCatCount.ToString()
|
||||||
|
If Not String.IsNullOrWhiteSpace(sCurrPath) Then
|
||||||
|
CatItem.Name &= vbCrLf & Path.GetFileNameWithoutExtension(sCurrPath)
|
||||||
|
End If
|
||||||
|
Else
|
||||||
|
CatItem.Name = nCatToNest.ToString() & "/" & nCatCount.ToString()
|
||||||
|
If Not String.IsNullOrWhiteSpace(sCurrPath) Then
|
||||||
|
CatItem.Name &= vbCrLf & Path.GetFileNameWithoutExtension(sCurrPath)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
Next
|
Next
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
|||||||
@@ -710,6 +710,8 @@ Public Class DxfImportWindowVM
|
|||||||
EgtErase(EgtGetFirstNameInGroup(PartId, SELECT_REGION_LAYER))
|
EgtErase(EgtGetFirstNameInGroup(PartId, SELECT_REGION_LAYER))
|
||||||
PartId = EgtGetNextPart(PartId)
|
PartId = EgtGetNextPart(PartId)
|
||||||
End While
|
End While
|
||||||
|
' identificativo univoico del gruppo di pezzi, se più di un pezzo
|
||||||
|
Dim sGUICode As New List(Of String)
|
||||||
' Scrivo testi per nesting
|
' Scrivo testi per nesting
|
||||||
SideEntityControlVM.WriteSideAngleForNest(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene.GetCtx())
|
SideEntityControlVM.WriteSideAngleForNest(DxfImportWindowMap.refDxfImportSceneHostV.ImportDxfScene.GetCtx())
|
||||||
' Imposto riferimento sul centro geometrico di ogni pezzo
|
' Imposto riferimento sul centro geometrico di ogni pezzo
|
||||||
@@ -732,10 +734,33 @@ Public Class DxfImportWindowVM
|
|||||||
Dim bDirect As Boolean = (GetMainPrivateProfileInt(S_NEST, K_DIRECT, 0) <> 0)
|
Dim bDirect As Boolean = (GetMainPrivateProfileInt(S_NEST, K_DIRECT, 0) <> 0)
|
||||||
' Elimino eventuali precedenti pezzi vuoti
|
' Elimino eventuali precedenti pezzi vuoti
|
||||||
EgtEraseEmptyParts()
|
EgtEraseEmptyParts()
|
||||||
|
' creo il riferimento
|
||||||
|
If m_PartNum > 1 Then
|
||||||
|
' per ogni pezze del file DXF creo un gruppo
|
||||||
|
Dim nIdTemp As Integer = EgtGetFirstPart()
|
||||||
|
While nIdTemp <> GDB_ID.NULL
|
||||||
|
Dim sPreGuid As String = CreatePreGuidCode(nIdTemp)
|
||||||
|
sGUICode.Add(sPreGuid & System.Guid.NewGuid.ToString)
|
||||||
|
nIdTemp = EgtGetNextPart(nIdTemp)
|
||||||
|
End While
|
||||||
|
End If
|
||||||
' Inserisco i pezzi nell'ambiente principale e recupero Id primo pezzo inserito
|
' Inserisco i pezzi nell'ambiente principale e recupero Id primo pezzo inserito
|
||||||
Dim nFirstId As Integer = EgtGetLastPart()
|
Dim nFirstId As Integer = EgtGetLastPart()
|
||||||
For nInd As Integer = 1 To m_PartNum
|
For nInd As Integer = 1 To m_PartNum
|
||||||
|
Dim nFirst2Id As Integer = EgtGetLastPart()
|
||||||
EgtInsertFile(sTmpFile)
|
EgtInsertFile(sTmpFile)
|
||||||
|
Dim FirstOfImport As Integer = EgtGetNextPart(nFirst2Id)
|
||||||
|
Dim Index As Integer = 1
|
||||||
|
While FirstOfImport <> GDB_ID.NULL And Index <= sGUICode.Count
|
||||||
|
If Not String.IsNullOrEmpty(sGUICode(Index - 1)) Then
|
||||||
|
EgtSetInfo(FirstOfImport, INFO_REFGROUP, sGUICode(Index - 1))
|
||||||
|
Index += 1
|
||||||
|
Else
|
||||||
|
Exit While
|
||||||
|
End If
|
||||||
|
FirstOfImport = EgtGetNextPart(FirstOfImport)
|
||||||
|
End While
|
||||||
|
nFirst2Id = If(nFirst2Id <> GDB_ID.NULL, EgtGetNextPart(nFirst2Id), EgtGetFirstPart())
|
||||||
Next
|
Next
|
||||||
nFirstId = If(nFirstId <> GDB_ID.NULL, EgtGetNextPart(nFirstId), EgtGetFirstPart())
|
nFirstId = If(nFirstId <> GDB_ID.NULL, EgtGetNextPart(nFirstId), EgtGetFirstPart())
|
||||||
' Cancello il file
|
' Cancello il file
|
||||||
|
|||||||
@@ -93,6 +93,9 @@ Module ConstMach
|
|||||||
Public Const INFO_RAW_BLOCK = "Block"
|
Public Const INFO_RAW_BLOCK = "Block"
|
||||||
' Info per numero lastra nel blocco
|
' Info per numero lastra nel blocco
|
||||||
Public Const INFO_RAW_SLABNBR = "SlabNbr"
|
Public Const INFO_RAW_SLABNBR = "SlabNbr"
|
||||||
|
' Info per identificazione gruppo pezzi
|
||||||
|
Public Const INFO_REFGROUP As String = "RefGroup"
|
||||||
|
Public Const INFO_COUNTERLY As String = "CounterPz"
|
||||||
|
|
||||||
' Contrassegno di progetto OmagCut
|
' Contrassegno di progetto OmagCut
|
||||||
Public Const NAME_PROJMARK As String = "OmagCut"
|
Public Const NAME_PROJMARK As String = "OmagCut"
|
||||||
|
|||||||
+321
-74
@@ -12,12 +12,19 @@ Module CsvM
|
|||||||
Return m_sCsvPath
|
Return m_sCsvPath
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
Private m_sFilePath As String = String.Empty
|
||||||
|
Public ReadOnly Property FilePath As String
|
||||||
|
Get
|
||||||
|
Return m_sFilePath
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
Private m_CsvPartList As New List(Of CsvPart)
|
Private m_CsvPartList As New List(Of CsvPart)
|
||||||
Public ReadOnly Property CsvPartList As List(Of CsvPart)
|
Public ReadOnly Property CsvPartList As List(Of CsvPart)
|
||||||
Get
|
Get
|
||||||
Return m_CsvPartList
|
Return m_CsvPartList
|
||||||
End Get
|
End Get
|
||||||
End Property
|
End Property
|
||||||
|
|
||||||
Private m_bCsvPartListModified As Boolean = False
|
Private m_bCsvPartListModified As Boolean = False
|
||||||
Private m_sCompoDir As String = String.Empty
|
Private m_sCompoDir As String = String.Empty
|
||||||
|
|
||||||
@@ -36,12 +43,7 @@ Module CsvM
|
|||||||
|
|
||||||
Public Sub NewCmd()
|
Public Sub NewCmd()
|
||||||
' Salvo lista dei pezzi attuale (se modificata)
|
' Salvo lista dei pezzi attuale (se modificata)
|
||||||
If Not SaveCsvPartList() Then
|
SaveCsvPartList()
|
||||||
' Errore nel salvataggio del file CSV, vuoi continuare lo stesso ? - Errore
|
|
||||||
If MessageBox.Show(EgtMsg(MSG_CSVPAGEUC + 5), EgtMsg(MSG_MESSAGEBOX + 1), MessageBoxButton.YesNo, MessageBoxImage.Error) <> MessageBoxResult.Yes Then
|
|
||||||
Return
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
' Pulisco path e lista dei pezzi Csv
|
' Pulisco path e lista dei pezzi Csv
|
||||||
m_sCsvPath = String.Empty
|
m_sCsvPath = String.Empty
|
||||||
m_CsvPartList.Clear()
|
m_CsvPartList.Clear()
|
||||||
@@ -51,25 +53,33 @@ Module CsvM
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Public Sub Open()
|
Public Sub Open()
|
||||||
' Salvo lista dei pezzi attuale (se modificata)
|
|
||||||
If Not SaveCsvPartList() Then
|
|
||||||
' Errore nel salvataggio del file CSV, vuoi continuare lo stesso ? - Errore
|
|
||||||
If MessageBox.Show(EgtMsg(MSG_CSVPAGEUC + 5), EgtMsg(MSG_MESSAGEBOX + 1), MessageBoxButton.YesNo, MessageBoxImage.Error) <> MessageBoxResult.Yes Then
|
|
||||||
Return
|
|
||||||
End If
|
|
||||||
End If
|
|
||||||
' Leggo direttorio corrente dei file CSV
|
' Leggo direttorio corrente dei file CSV
|
||||||
Dim sCurrDir As String = ""
|
Dim sCurrDir As String = ""
|
||||||
GetMainPrivateProfileString(S_CSV, K_CSVCURRDIR, "C:\", sCurrDir)
|
GetMainPrivateProfileString(S_CSV, K_CSVCURRDIR, "C:\", sCurrDir)
|
||||||
' Apro dialogo scelta file
|
' Apro dialogo scelta file
|
||||||
Dim CsvFileDlg As New Microsoft.Win32.OpenFileDialog()
|
Dim CsvFileDlg As New Microsoft.Win32.OpenFileDialog()
|
||||||
If Directory.Exists(sCurrDir) Then CsvFileDlg.InitialDirectory = sCurrDir
|
If Directory.Exists(sCurrDir) Then CsvFileDlg.InitialDirectory = sCurrDir
|
||||||
CsvFileDlg.Filter = "Csv file (*.csv;*.epl)|*.csv;*.epl"
|
Dim bFull = OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.CSV_AUTO) And
|
||||||
|
(GetMainPrivateProfileInt(S_CSV, K_FULL, 1) <> 0)
|
||||||
|
Dim sFilterDialog As String = String.Empty
|
||||||
|
Dim sDeniedFiles As List(Of String) = CreateListOfDeniedFiles()
|
||||||
|
If bFull Then
|
||||||
|
sFilterDialog = "Csv file (*.csv;*.epl)|*.csv;*.epl;Merge.epl"
|
||||||
|
Else
|
||||||
|
sFilterDialog = "Csv file (*.csv)|*.csv"
|
||||||
|
End If
|
||||||
|
CsvFileDlg.Filter = sFilterDialog
|
||||||
|
|
||||||
If Not CsvFileDlg.ShowDialog() Then Return
|
If Not CsvFileDlg.ShowDialog() Then Return
|
||||||
|
|
||||||
|
' Salvo lista dei pezzi attuale
|
||||||
|
SaveCsvPartList()
|
||||||
|
|
||||||
' Salvo direttorio corrente
|
' Salvo direttorio corrente
|
||||||
WriteMainPrivateProfileString(S_CSV, K_CSVCURRDIR, Path.GetDirectoryName(CsvFileDlg.FileName))
|
WriteMainPrivateProfileString(S_CSV, K_CSVCURRDIR, Path.GetDirectoryName(CsvFileDlg.FileName))
|
||||||
' Apertura file
|
' Apertura file
|
||||||
Dim sPath = CsvFileDlg.FileName
|
Dim sPath = CsvFileDlg.FileName
|
||||||
|
' se necessario cambio estensione del file
|
||||||
If String.Compare(Path.GetExtension(sPath), ".CSV", True) = 0 Then
|
If String.Compare(Path.GetExtension(sPath), ".CSV", True) = 0 Then
|
||||||
LoadCsvFile(sPath)
|
LoadCsvFile(sPath)
|
||||||
Else
|
Else
|
||||||
@@ -77,6 +87,93 @@ Module CsvM
|
|||||||
End If
|
End If
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
|
Private Function CreateListOfDeniedFiles() As List(Of String)
|
||||||
|
Dim LocalList As New List(Of String)
|
||||||
|
LocalList.Add("MERGE")
|
||||||
|
Dim Index1 As Integer = 0
|
||||||
|
Dim Index2 As Integer = 0
|
||||||
|
For Index1 = 0 To m_CsvPartList.Count - 1
|
||||||
|
Dim sFileName As String = m_CsvPartList(Index1).m_sPath
|
||||||
|
sFileName = Path.GetFileNameWithoutExtension(sFileName).ToUpper.Trim()
|
||||||
|
Dim bNewFile As Boolean = True
|
||||||
|
For Index2 = 0 To LocalList.Count - 1
|
||||||
|
If sFileName = LocalList(Index2) Then
|
||||||
|
bNewFile = False
|
||||||
|
Exit For
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
If bNewFile Then
|
||||||
|
LocalList.Add(Path.GetFileNameWithoutExtension(sFileName).ToUpper.Trim)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
Return LocalList
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function LoadCsvFile(sCsvPath As String) As Boolean
|
||||||
|
Dim bFull = OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.CSV_AUTO) And
|
||||||
|
(GetMainPrivateProfileInt(S_CSV, K_FULL, 1) <> 0)
|
||||||
|
' aggiungo i pezzi su una lista temporanea
|
||||||
|
Dim LocalPartList As New List(Of CsvPart)
|
||||||
|
' Eseguo la lettura del file Csv
|
||||||
|
If Not ReadCsvFile(sCsvPath, LocalPartList) Then
|
||||||
|
'Errore nella lettura del file CSV
|
||||||
|
MessageBox.Show(EgtMsg(91206), "Error", MessageBoxButton.OK, MessageBoxImage.Error)
|
||||||
|
Return False
|
||||||
|
End If
|
||||||
|
|
||||||
|
' Creo un nuovo file che ospitarà il merge de
|
||||||
|
Dim sNewMergeFile As String = Path.GetDirectoryName(m_sCsvPath) & "\Merge.csv"
|
||||||
|
m_sCsvPath = sNewMergeFile
|
||||||
|
m_sFilePath = m_sCsvPath
|
||||||
|
|
||||||
|
' Elimino pezzi nulli
|
||||||
|
RemoveWrongParts(LocalPartList)
|
||||||
|
' Aggiorno
|
||||||
|
If bFull Then
|
||||||
|
MySaveCsvPartList(LocalPartList)
|
||||||
|
' 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
|
||||||
|
' attacco i nuovi pezzi alla lista corrente
|
||||||
|
For Each Item As CsvPart In LocalPartList
|
||||||
|
m_CsvPartList.Add(Item)
|
||||||
|
Next
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Sub LoadCsvPartList(sFile As String)
|
||||||
|
Dim bFull = OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.CSV_AUTO) And
|
||||||
|
(GetMainPrivateProfileInt(S_CSV, K_FULL, 1) <> 0)
|
||||||
|
' Se Csv semplificato non va letta
|
||||||
|
If Not bFull Then Return
|
||||||
|
|
||||||
|
' aggiungo i pezzi su una lista temporanea
|
||||||
|
Dim LocalPartList As New List(Of CsvPart)
|
||||||
|
|
||||||
|
' Lettura del file
|
||||||
|
If ReadCsvPartList(sFile, LocalPartList) Then
|
||||||
|
' Creo un nuovo file che ospitarà il merge de
|
||||||
|
Dim sNewMergeFile As String = Path.GetDirectoryName(m_sCsvPath) & "\Merge.csv"
|
||||||
|
m_sCsvPath = sNewMergeFile
|
||||||
|
m_sFilePath = m_sCsvPath
|
||||||
|
End If
|
||||||
|
' Elimino pezzi nulli
|
||||||
|
RemoveWrongParts(LocalPartList)
|
||||||
|
' attacco i nuovi pezzi alla lista corrente
|
||||||
|
For Each Item As CsvPart In LocalPartList
|
||||||
|
m_CsvPartList.Add(Item)
|
||||||
|
Next
|
||||||
|
End Sub
|
||||||
|
|
||||||
Public Sub Insert()
|
Public Sub Insert()
|
||||||
' Recupero lo spessore della lastra corrente
|
' Recupero lo spessore della lastra corrente
|
||||||
Dim dRawHeight As Double = EstCalc.GetRawHeight()
|
Dim dRawHeight As Double = EstCalc.GetRawHeight()
|
||||||
@@ -88,7 +185,7 @@ Module CsvM
|
|||||||
End If
|
End If
|
||||||
' Recupero la tolleranza sullo spessore
|
' Recupero la tolleranza sullo spessore
|
||||||
Dim dToler As Double = GetMainPrivateProfileDouble(S_CSV, K_THICKTOLERANCE, 100 * EPS_SMALL)
|
Dim dToler As Double = GetMainPrivateProfileDouble(S_CSV, K_THICKTOLERANCE, 100 * EPS_SMALL)
|
||||||
dToler = Math.Max( dToler, 100 * EPS_SMALL)
|
dToler = Math.Max(dToler, 100 * EPS_SMALL)
|
||||||
' Creo la lista dei pezzi inseribili nella lastra corrente
|
' Creo la lista dei pezzi inseribili nella lastra corrente
|
||||||
Dim InsPartList As New List(Of CsvPart)
|
Dim InsPartList As New List(Of CsvPart)
|
||||||
For i As Integer = 1 To m_CsvPartList.Count()
|
For i As Integer = 1 To m_CsvPartList.Count()
|
||||||
@@ -174,25 +271,46 @@ Module CsvM
|
|||||||
If Not bMaxDimOnX Then
|
If Not bMaxDimOnX Then
|
||||||
Dim dH As Double = Math.Min(0.1 * dDimY, 30)
|
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)
|
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( 0, 0, 0))
|
EgtSetColor(nText, New Color3d(0, 0, 0))
|
||||||
End If
|
End If
|
||||||
' Aggiusto per lavorazioni
|
' Aggiusto per lavorazioni
|
||||||
AdjustFlatPart(nId)
|
AdjustFlatPart(nId)
|
||||||
' Aggiungo info su CSV di origine
|
' Aggiungo info su CSV di origine
|
||||||
EgtSetInfo(nId, INFO_CSV_PATH, m_sCsvPath)
|
EgtSetInfo(nId, INFO_CSV_PATH, CurrPart.m_sPath)
|
||||||
EgtSetInfo(nId, INFO_CSV_PART, CurrPart.m_sName)
|
EgtSetInfo(nId, INFO_CSV_PART, CurrPart.m_sName)
|
||||||
EgtSetInfo(nId, INFO_CSV_ORD, CurrPart.m_sOrd)
|
EgtSetInfo(nId, INFO_CSV_ORD, CurrPart.m_sOrd)
|
||||||
EgtSetInfo(nId, INFO_CSV_DIST, CurrPart.m_sDist)
|
EgtSetInfo(nId, INFO_CSV_DIST, CurrPart.m_sDist)
|
||||||
EgtSetInfo(nId, INFO_CSV_MAT, CurrPart.m_sMaterial)
|
EgtSetInfo(nId, INFO_CSV_MAT, CurrPart.m_sMaterial)
|
||||||
' Imposto colore testi
|
' Imposto colore testi
|
||||||
EstCalc.SetTextColor( nRegId)
|
EstCalc.SetTextColor(nRegId)
|
||||||
' Lo sposto nel gruppo speciale
|
' Lo sposto nel gruppo speciale
|
||||||
EgtRelocate(nId, nIpGrp)
|
EgtRelocate(nId, nIpGrp)
|
||||||
|
|
||||||
|
' assegno l'identificatico del pezzo, se esiste
|
||||||
|
If Not String.IsNullOrEmpty(CurrPart.m_sRefGuid) Then
|
||||||
|
' GuidCode dovrebbe contenere 36 caratteri, il precode 5: tot = 41
|
||||||
|
If CurrPart.m_sRefGuid.Count <= 36 Then
|
||||||
|
Dim sPreGuid As String = CreatePreGuidCode(CurrPart.m_nId)
|
||||||
|
CurrPart.m_sRefGuid = sPreGuid & CurrPart.m_sRefGuid
|
||||||
|
End If
|
||||||
|
EgtSetInfo(CurrPart.m_nId, INFO_REFGROUP, CurrPart.m_sRefGuid)
|
||||||
|
End If
|
||||||
|
Dim nRegLayId As Integer = EgtGetFirstNameInGroup(CurrPart.m_nId, NAME_REGION)
|
||||||
|
' Imposto il colore del pezzo inserito nel progetto
|
||||||
|
EgtSetColor(nRegLayId, CurrPart.m_cColor)
|
||||||
|
Dim EntId As Integer = EgtGetFirstInGroup(nRegLayId)
|
||||||
|
While EntId <> GDB_ID.NULL
|
||||||
|
If EgtGetType(EntId) = GDB_TY.SRF_FRGN Then EgtSetColor(EntId, CurrPart.m_cColor)
|
||||||
|
EntId = EgtGetNext(EntId)
|
||||||
|
End While
|
||||||
|
|
||||||
Next
|
Next
|
||||||
EgtLuaResetGlobVar("CMP")
|
EgtLuaResetGlobVar("CMP")
|
||||||
EgtLuaResetGlobVar("CMP_Draw")
|
EgtLuaResetGlobVar("CMP_Draw")
|
||||||
' Provo ad inserire i pezzi
|
' Provo ad inserire i pezzi
|
||||||
Dim bDirect As Boolean = (GetMainPrivateProfileInt(S_CSV, K_CSVDIRECT, 1) <> 0)
|
Dim bFull = OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.CSV_AUTO) And
|
||||||
|
(GetMainPrivateProfileInt(S_CSV, K_FULL, 1) <> 0)
|
||||||
|
Dim bDirect As Boolean = bFull And (GetMainPrivateProfileInt(S_CSV, K_CSVDIRECT, 1) <> 0)
|
||||||
For i As Integer = 1 To InsPartList.Count()
|
For i As Integer = 1 To InsPartList.Count()
|
||||||
Dim CurrPart As CsvPart = InsPartList(i - 1)
|
Dim CurrPart As CsvPart = InsPartList(i - 1)
|
||||||
While CurrPart.m_nToNest > 0
|
While CurrPart.m_nToNest > 0
|
||||||
@@ -229,7 +347,7 @@ Module CsvM
|
|||||||
EgtErase(nId2)
|
EgtErase(nId2)
|
||||||
Return False
|
Return False
|
||||||
End If
|
End If
|
||||||
' altrimenti lo metto in parcheggio
|
' altrimenti lo metto in parcheggio
|
||||||
Else
|
Else
|
||||||
' Aggiungo riferimento e lo inserisco in VeinMatching
|
' Aggiungo riferimento e lo inserisco in VeinMatching
|
||||||
VeinMatching.SetRefOnPart(nId2)
|
VeinMatching.SetRefOnPart(nId2)
|
||||||
@@ -270,11 +388,11 @@ Module CsvM
|
|||||||
Dim sName As String = String.Empty
|
Dim sName As String = String.Empty
|
||||||
EgtGetInfo(nId, INFO_CSV_PART, sName)
|
EgtGetInfo(nId, INFO_CSV_PART, sName)
|
||||||
' Verifico che il pezzo appartenga a questo Csv
|
' Verifico che il pezzo appartenga a questo Csv
|
||||||
If String.Compare(sCsvPath, m_sCsvPath, True) = 0 Then
|
If SearchCurrCSV(sCsvPath) Then
|
||||||
' Cerco il pezzo nella lista dei pezzi
|
' Cerco il pezzo nella lista dei pezzi
|
||||||
For i = 1 To m_CsvPartList.Count()
|
For i = 1 To m_CsvPartList.Count()
|
||||||
Dim CurrPart As CsvPart = m_CsvPartList(i - 1)
|
Dim CurrPart As CsvPart = m_CsvPartList(i - 1)
|
||||||
If String.Compare(sName, CurrPart.m_sName, True) = 0 Then
|
If String.Compare(sName, CurrPart.m_sName, True) = 0 And String.Compare(sCsvPath, CurrPart.m_sPath, True) = 0 Then
|
||||||
' Se era nel grezzo
|
' Se era nel grezzo
|
||||||
If EgtGetParent(nId) = EstCalc.GetRawId() Then
|
If EgtGetParent(nId) = EstCalc.GetRawId() Then
|
||||||
' Rimuovo le lavorazioni
|
' Rimuovo le lavorazioni
|
||||||
@@ -282,12 +400,19 @@ Module CsvM
|
|||||||
' Rimuovo dal grezzo
|
' Rimuovo dal grezzo
|
||||||
EgtRemovePartFromRawPart(nId)
|
EgtRemovePartFromRawPart(nId)
|
||||||
End If
|
End If
|
||||||
|
' recupero il Guid del pezzo corrente (potrebbe essere stato modificato a causa di rotazioni quando il pezzo è passato in parcheggio)
|
||||||
|
Dim sCurrRefGuid As String = String.Empty
|
||||||
|
EgtGetInfo(nId, INFO_REFGROUP, sCurrRefGuid)
|
||||||
' Eventuale cancellazione per VM
|
' Eventuale cancellazione per VM
|
||||||
VeinMatching.OnRemovePart(nId)
|
VeinMatching.OnRemovePart(nId)
|
||||||
' Cancello il pezzo
|
' Cancello il pezzo
|
||||||
EgtErase(nId)
|
EgtErase(nId)
|
||||||
|
' aggiorno il layer che indica il numero di pezzi in parcheggio (se sRefGroup<>"")
|
||||||
|
EstCalc.CountPartInFamily(sCurrRefGuid)
|
||||||
' Aggiorno il contatore
|
' Aggiorno il contatore
|
||||||
CurrPart.m_nToNest += 1
|
CurrPart.m_nToNest += 1
|
||||||
|
' ricreo la lista delle famiglie di pezzi presenti in parcheggio
|
||||||
|
GetFamilyGroupInPark()
|
||||||
' Esco
|
' Esco
|
||||||
Return True
|
Return True
|
||||||
End If
|
End If
|
||||||
@@ -297,10 +422,19 @@ Module CsvM
|
|||||||
Return False
|
Return False
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Private Function LoadCsvFile(sCsvPath As String) As Boolean
|
Private Function SearchCurrCSV(ByVal sCSVFile As String) As Boolean
|
||||||
|
For i As Integer = 1 To m_CsvPartList.Count()
|
||||||
|
Dim CurrPart As CsvPart = m_CsvPartList(i - 1)
|
||||||
|
If String.Compare(sCSVFile, CurrPart.m_sPath, True) = 0 Then
|
||||||
|
Return True
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
Return False
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Private Function ReadCsvFile(sCsvPath As String, ByRef LocalCsvPartList As List(Of CsvPart)) As Boolean
|
||||||
' Pulisco path e lista dei pezzi Csv
|
' Pulisco path e lista dei pezzi Csv
|
||||||
m_sCsvPath = String.Empty
|
m_sCsvPath = String.Empty
|
||||||
m_CsvPartList.Clear()
|
|
||||||
' Definizione variabili
|
' Definizione variabili
|
||||||
EgtLuaCreateGlobTable("CSV")
|
EgtLuaCreateGlobTable("CSV")
|
||||||
EgtLuaSetGlobStringVar("CSV.FILE", sCsvPath)
|
EgtLuaSetGlobStringVar("CSV.FILE", sCsvPath)
|
||||||
@@ -308,7 +442,10 @@ Module CsvM
|
|||||||
Dim nErr As Integer = 999
|
Dim nErr As Integer = 999
|
||||||
Dim sReader As String = String.Empty
|
Dim sReader As String = String.Empty
|
||||||
GetMainPrivateProfileString(S_CSV, K_READER, "CsvRead.lua", sReader)
|
GetMainPrivateProfileString(S_CSV, K_READER, "CsvRead.lua", sReader)
|
||||||
If EgtLuaExecFile(OmagOFFICEMap.refMainWindowVM.MainWindowM.sCsvAutoDir & "\" & sReader) AndAlso
|
Dim bFull = OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.CSV_AUTO) And
|
||||||
|
(GetMainPrivateProfileInt(S_CSV, K_FULL, 1) <> 0)
|
||||||
|
Dim sLuaScript As String = OmagOFFICEMap.refMainWindowVM.MainWindowM.sCsvAutoDir & If(bFull, "\" & sReader, "\CsvSimplRead.lua")
|
||||||
|
If EgtLuaExecFile(sLuaScript) AndAlso
|
||||||
EgtLuaCallFunction("CSV.Read") Then
|
EgtLuaCallFunction("CSV.Read") Then
|
||||||
' Verifica stato di errore
|
' Verifica stato di errore
|
||||||
EgtLuaGetGlobIntVar("CSV.ERR", nErr)
|
EgtLuaGetGlobIntVar("CSV.ERR", nErr)
|
||||||
@@ -325,6 +462,7 @@ Module CsvM
|
|||||||
For i As Integer = 1 To nNbr
|
For i As Integer = 1 To nNbr
|
||||||
Dim OnePart As New CsvPart
|
Dim OnePart As New CsvPart
|
||||||
Dim sN As String = i.ToString()
|
Dim sN As String = i.ToString()
|
||||||
|
OnePart.m_sPath = sCsvPath
|
||||||
EgtLuaGetGlobStringVar("CSV.NAME" & sN, OnePart.m_sName)
|
EgtLuaGetGlobStringVar("CSV.NAME" & sN, OnePart.m_sName)
|
||||||
OnePart.m_bActive = True
|
OnePart.m_bActive = True
|
||||||
EgtLuaGetGlobStringVar("CSV.ORD" & sN, OnePart.m_sOrd)
|
EgtLuaGetGlobStringVar("CSV.ORD" & sN, OnePart.m_sOrd)
|
||||||
@@ -336,63 +474,50 @@ Module CsvM
|
|||||||
EgtLuaGetGlobNumVar("CSV.DIMX" & sN, OnePart.m_dDimX)
|
EgtLuaGetGlobNumVar("CSV.DIMX" & sN, OnePart.m_dDimX)
|
||||||
EgtLuaGetGlobNumVar("CSV.DIMY" & sN, OnePart.m_dDimY)
|
EgtLuaGetGlobNumVar("CSV.DIMY" & sN, OnePart.m_dDimY)
|
||||||
EgtLuaGetGlobNumVar("CSV.TH" & sN, OnePart.m_dTh)
|
EgtLuaGetGlobNumVar("CSV.TH" & sN, OnePart.m_dTh)
|
||||||
|
EgtLuaGetGlobNumVar("CSV.A1_" & sN, OnePart.m_dAng1)
|
||||||
|
EgtLuaGetGlobNumVar("CSV.H1_" & sN, OnePart.m_dHeel1)
|
||||||
|
EgtLuaGetGlobNumVar("CSV.A2_" & sN, OnePart.m_dAng2)
|
||||||
|
EgtLuaGetGlobNumVar("CSV.H2_" & sN, OnePart.m_dHeel2)
|
||||||
|
EgtLuaGetGlobNumVar("CSV.A3_" & sN, OnePart.m_dAng3)
|
||||||
|
EgtLuaGetGlobNumVar("CSV.H3_" & sN, OnePart.m_dHeel3)
|
||||||
|
EgtLuaGetGlobNumVar("CSV.A4_" & sN, OnePart.m_dAng4)
|
||||||
|
EgtLuaGetGlobNumVar("CSV.H4_" & sN, OnePart.m_dHeel4)
|
||||||
OnePart.m_nOriInd = i
|
OnePart.m_nOriInd = i
|
||||||
|
If OnePart.m_nCount > 1 Then
|
||||||
|
OnePart.m_sRefGuid = System.Guid.NewGuid.ToString
|
||||||
|
End If
|
||||||
' inserisco in lista
|
' inserisco in lista
|
||||||
m_CsvPartList.Add(OnePart)
|
LocalCsvPartList.Add(OnePart)
|
||||||
Next
|
Next
|
||||||
EgtLuaResetGlobVar("CSV")
|
EgtLuaResetGlobVar("CSV")
|
||||||
' Ordinamento lista dei pezzi (ordine crescente su materiale e spessore)
|
' Ordinamento lista dei pezzi (ordine crescente su materiale e spessore)
|
||||||
m_CsvPartList.Sort(Function(x, y)
|
LocalCsvPartList.Sort(Function(x, y)
|
||||||
Dim nComp As Integer = String.Compare(x.m_sMaterial, y.m_sMaterial, True)
|
Dim nComp As Integer = String.Compare(x.m_sMaterial, y.m_sMaterial, True)
|
||||||
If nComp = 0 Then
|
If nComp = 0 Then
|
||||||
If Math.Abs(x.m_dTh - y.m_dTh) < EPS_SMALL Then
|
If Math.Abs(x.m_dTh - y.m_dTh) < EPS_SMALL Then
|
||||||
Return (x.m_nOriInd - y.m_nOriInd)
|
Return (x.m_nOriInd - y.m_nOriInd)
|
||||||
|
Else
|
||||||
|
Return CInt(Math.Ceiling(x.m_dTh - y.m_dTh))
|
||||||
|
End If
|
||||||
Else
|
Else
|
||||||
Return CInt(Math.Ceiling(x.m_dTh - y.m_dTh))
|
Return nComp
|
||||||
End If
|
End If
|
||||||
Else
|
End Function)
|
||||||
Return nComp
|
|
||||||
End If
|
|
||||||
End Function)
|
|
||||||
' Salvo come epl
|
|
||||||
m_bCsvPartListModified = True
|
|
||||||
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)
|
|
||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Public Function SaveCsvPartList() As Boolean
|
Public Function WriteCsvPartList(sFile As String, sCsvPath As String, LocalCsvPartList As List(Of CsvPart)) As Boolean
|
||||||
' Se non c'è nulla di attivo, non faccio alcunché
|
|
||||||
If String.IsNullOrEmpty(m_sCsvPath) Then
|
|
||||||
EgtOutLog("CSV List Save Skipped : missing")
|
|
||||||
Return True
|
|
||||||
End If
|
|
||||||
' Se lista non modificata, non faccio alcunchhé
|
|
||||||
If Not m_bCsvPartListModified Then
|
|
||||||
EgtOutLog("CSV List Save Skipped : not modified")
|
|
||||||
Return True
|
|
||||||
End If
|
|
||||||
' Path del file
|
|
||||||
Dim sFile As String = Path.ChangeExtension(m_sCsvPath, ".epl")
|
|
||||||
' Gestione file
|
|
||||||
Try
|
Try
|
||||||
' Apro file
|
' Apro file
|
||||||
Dim Writer As New IO.StreamWriter(sFile, False)
|
Dim Writer As New IO.StreamWriter(sFile, False)
|
||||||
' Intestazione
|
' Intestazione
|
||||||
Writer.WriteLine("[General]")
|
Writer.WriteLine("[General]")
|
||||||
Writer.WriteLine("Path=" & m_sCsvPath)
|
Writer.WriteLine("Path=" & sCsvPath)
|
||||||
' Ciclo sui pezzi
|
' Ciclo sui pezzi
|
||||||
For i As Integer = 1 To m_CsvPartList.Count()
|
For i As Integer = 1 To LocalCsvPartList.Count()
|
||||||
Dim CurrPart As CsvPart = m_CsvPartList(i - 1)
|
Dim CurrPart As CsvPart = LocalCsvPartList(i - 1)
|
||||||
Writer.WriteLine("[P" & i.ToString() & "]")
|
Writer.WriteLine("[P" & i.ToString() & "]")
|
||||||
|
Writer.WriteLine("Path=" & CurrPart.m_sPath)
|
||||||
Writer.WriteLine("Nam=" & CurrPart.m_sName)
|
Writer.WriteLine("Nam=" & CurrPart.m_sName)
|
||||||
Writer.WriteLine("Ord=" & CurrPart.m_sOrd)
|
Writer.WriteLine("Ord=" & CurrPart.m_sOrd)
|
||||||
Writer.WriteLine("Dist=" & CurrPart.m_sDist)
|
Writer.WriteLine("Dist=" & CurrPart.m_sDist)
|
||||||
@@ -405,7 +530,16 @@ Module CsvM
|
|||||||
Writer.WriteLine("DX=" & DoubleToString(CurrPart.m_dDimX, 4))
|
Writer.WriteLine("DX=" & DoubleToString(CurrPart.m_dDimX, 4))
|
||||||
Writer.WriteLine("DY=" & DoubleToString(CurrPart.m_dDimY, 4))
|
Writer.WriteLine("DY=" & DoubleToString(CurrPart.m_dDimY, 4))
|
||||||
Writer.WriteLine("Th=" & DoubleToString(CurrPart.m_dTh, 4))
|
Writer.WriteLine("Th=" & DoubleToString(CurrPart.m_dTh, 4))
|
||||||
|
Writer.WriteLine("A1=" & DoubleToString(CurrPart.m_dAng1, 4))
|
||||||
|
Writer.WriteLine("H1=" & DoubleToString(CurrPart.m_dHeel1, 4))
|
||||||
|
Writer.WriteLine("A2=" & DoubleToString(CurrPart.m_dAng2, 4))
|
||||||
|
Writer.WriteLine("H2=" & DoubleToString(CurrPart.m_dHeel2, 4))
|
||||||
|
Writer.WriteLine("A3=" & DoubleToString(CurrPart.m_dAng3, 4))
|
||||||
|
Writer.WriteLine("H3=" & DoubleToString(CurrPart.m_dHeel3, 4))
|
||||||
|
Writer.WriteLine("A4=" & DoubleToString(CurrPart.m_dAng4, 4))
|
||||||
|
Writer.WriteLine("H4=" & DoubleToString(CurrPart.m_dHeel4, 4))
|
||||||
Writer.WriteLine("OIn=" & CurrPart.m_nOriInd.ToString())
|
Writer.WriteLine("OIn=" & CurrPart.m_nOriInd.ToString())
|
||||||
|
Writer.WriteLine("Guid=" & CurrPart.m_sRefGuid)
|
||||||
Next
|
Next
|
||||||
' Terminatore
|
' Terminatore
|
||||||
Writer.WriteLine("[END]")
|
Writer.WriteLine("[END]")
|
||||||
@@ -416,18 +550,80 @@ Module CsvM
|
|||||||
' Registro in ini path
|
' Registro in ini path
|
||||||
WriteMainPrivateProfileString(S_CSV, K_CSVLASTFILE, sFile)
|
WriteMainPrivateProfileString(S_CSV, K_CSVLASTFILE, sFile)
|
||||||
Return True
|
Return True
|
||||||
' Errore
|
' Errore
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
EgtOutLog("CSV List error writing " & sFile)
|
EgtOutLog("CSV List error writing " & sFile)
|
||||||
Return False
|
Return False
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
Private Function LoadCsvPartList(sFile As String) As Boolean
|
' dato l'elenco completo dei file salvo ogni singolo epl
|
||||||
' Pulisco path e lista dei pezzi Csv
|
Friend Function WriteCsvMergePartList(CsvPartList As List(Of CsvPart)) As Boolean
|
||||||
m_sCsvPath = String.Empty
|
Dim bOk As Boolean = True
|
||||||
m_CsvPartList.Clear()
|
Dim LocalPartList As New List(Of CsvPart)
|
||||||
' Gestione file
|
Dim Index As Integer = 0
|
||||||
|
' devo dividere la lista in tante parti quanti sono i file che lo costituiscono
|
||||||
|
While Index < CsvPartList.Count
|
||||||
|
Dim CurrFile As String = CsvPartList(Index).m_sPath
|
||||||
|
Dim sFile As String = Path.ChangeExtension(CurrFile, ".epl")
|
||||||
|
LocalPartList.Clear()
|
||||||
|
While CurrFile = CsvPartList(Index).m_sPath
|
||||||
|
LocalPartList.Add(CsvPartList(Index))
|
||||||
|
Index += 1
|
||||||
|
' se terminata la lista
|
||||||
|
If Index = CsvPartList.Count Then
|
||||||
|
Exit While
|
||||||
|
End If
|
||||||
|
End While
|
||||||
|
' salvo l'elenco corrente
|
||||||
|
bOk = WriteCsvPartList(sFile, CurrFile, LocalPartList) And bOk
|
||||||
|
End While
|
||||||
|
Return bOk
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Friend Sub SaveCsvPartList()
|
||||||
|
Dim bFull = OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.CSV_AUTO) And
|
||||||
|
(GetMainPrivateProfileInt(S_CSV, K_FULL, 1) <> 0)
|
||||||
|
' Se Csv semplificato non va salvata
|
||||||
|
If Not 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_sFilePath, ".epl")
|
||||||
|
' Scrittura dei file
|
||||||
|
If WriteCsvMergePartList(m_CsvPartList) Then
|
||||||
|
' Scrittura dei file Merge
|
||||||
|
If WriteCsvPartList(sFile, m_sCsvPath, m_CsvPartList) Then
|
||||||
|
WriteMainPrivateProfileString(S_CSV, K_CSVLASTFILE, sFile)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Friend Sub MySaveCsvPartList(ByVal CurrPartList As List(Of CsvPart))
|
||||||
|
Dim bFull = OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.CSV_AUTO) And
|
||||||
|
(GetMainPrivateProfileInt(S_CSV, K_FULL, 1) <> 0)
|
||||||
|
' Se Csv semplificato non va salvata
|
||||||
|
If Not bFull Then Return
|
||||||
|
Dim sCurrPath As String = String.Empty
|
||||||
|
' recupero dalla lista il nome del file corrente
|
||||||
|
For Each Item As CsvPart In CurrPartList
|
||||||
|
sCurrPath = Item.m_sPath
|
||||||
|
Next
|
||||||
|
' se non trov il nome del file assocciato all'elenco di pezzi esco
|
||||||
|
If String.IsNullOrEmpty(sCurrPath) Then
|
||||||
|
EgtOutLog("CSV Curr list missing")
|
||||||
|
Return
|
||||||
|
End If
|
||||||
|
' Path del file
|
||||||
|
Dim sFile As String = Path.ChangeExtension(sCurrPath, ".epl")
|
||||||
|
' Scrittura del file
|
||||||
|
WriteCsvPartList(sFile, sCurrPath, CurrPartList)
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private Function ReadCsvPartList(sFile As String, LocalCsvPartList As List(Of CsvPart)) As Boolean
|
||||||
Try
|
Try
|
||||||
' Apro file
|
' Apro file
|
||||||
Dim Reader As New IO.StreamReader(sFile, False)
|
Dim Reader As New IO.StreamReader(sFile, False)
|
||||||
@@ -456,7 +652,7 @@ Module CsvM
|
|||||||
' se esiste pezzo precedente, lo salvo
|
' se esiste pezzo precedente, lo salvo
|
||||||
If nI > 1 Then
|
If nI > 1 Then
|
||||||
' inserisco in lista
|
' inserisco in lista
|
||||||
m_CsvPartList.Add(OnePart)
|
LocalCsvPartList.Add(OnePart)
|
||||||
End If
|
End If
|
||||||
' predisposizioni per prossimo pezzo
|
' predisposizioni per prossimo pezzo
|
||||||
nI += 1
|
nI += 1
|
||||||
@@ -466,7 +662,9 @@ Module CsvM
|
|||||||
Else
|
Else
|
||||||
Dim sItems() As String = sLine.Split("=".ToCharArray)
|
Dim sItems() As String = sLine.Split("=".ToCharArray)
|
||||||
If sItems.Count() >= 2 Then
|
If sItems.Count() >= 2 Then
|
||||||
If sItems(0) = "Nam" Then
|
If sItems(0) = "Path" Then
|
||||||
|
OnePart.m_sPath = sItems(1)
|
||||||
|
ElseIf sItems(0) = "Nam" Then
|
||||||
OnePart.m_sName = sItems(1)
|
OnePart.m_sName = sItems(1)
|
||||||
ElseIf sItems(0) = "Ord" Then
|
ElseIf sItems(0) = "Ord" Then
|
||||||
OnePart.m_sOrd = sItems(1)
|
OnePart.m_sOrd = sItems(1)
|
||||||
@@ -490,8 +688,26 @@ Module CsvM
|
|||||||
StringToDouble(sItems(1), OnePart.m_dDimY)
|
StringToDouble(sItems(1), OnePart.m_dDimY)
|
||||||
ElseIf sItems(0) = "Th" Then
|
ElseIf sItems(0) = "Th" Then
|
||||||
StringToDouble(sItems(1), OnePart.m_dTh)
|
StringToDouble(sItems(1), OnePart.m_dTh)
|
||||||
|
ElseIf sItems(0) = "A1" Then
|
||||||
|
StringToDouble(sItems(1), OnePart.m_dAng1)
|
||||||
|
ElseIf sItems(0) = "H1" Then
|
||||||
|
StringToDouble(sItems(1), OnePart.m_dHeel1)
|
||||||
|
ElseIf sItems(0) = "A2" Then
|
||||||
|
StringToDouble(sItems(1), OnePart.m_dAng2)
|
||||||
|
ElseIf sItems(0) = "H2" Then
|
||||||
|
StringToDouble(sItems(1), OnePart.m_dHeel2)
|
||||||
|
ElseIf sItems(0) = "A3" Then
|
||||||
|
StringToDouble(sItems(1), OnePart.m_dAng3)
|
||||||
|
ElseIf sItems(0) = "H3" Then
|
||||||
|
StringToDouble(sItems(1), OnePart.m_dHeel3)
|
||||||
|
ElseIf sItems(0) = "A4" Then
|
||||||
|
StringToDouble(sItems(1), OnePart.m_dAng4)
|
||||||
|
ElseIf sItems(0) = "H4" Then
|
||||||
|
StringToDouble(sItems(1), OnePart.m_dHeel4)
|
||||||
ElseIf sItems(0) = "OIn" Then
|
ElseIf sItems(0) = "OIn" Then
|
||||||
StringToInt(sItems(1), OnePart.m_nOriInd)
|
StringToInt(sItems(1), OnePart.m_nOriInd)
|
||||||
|
ElseIf sItems(0) = "Guid" Then
|
||||||
|
OnePart.m_sRefGuid = sItems(1).Trim
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
@@ -502,18 +718,37 @@ Module CsvM
|
|||||||
' Dichiaro lista non modificata
|
' Dichiaro lista non modificata
|
||||||
m_bCsvPartListModified = False
|
m_bCsvPartListModified = False
|
||||||
Return True
|
Return True
|
||||||
' Errore
|
' Errore
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
EgtOutLog("Error reading " & sFile)
|
EgtOutLog("Error reading " & sFile)
|
||||||
Return False
|
Return False
|
||||||
End Try
|
End Try
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
Friend Function RemoveNotToNestParts(ByRef CsvPartList As List(Of CsvPart)) As Boolean
|
||||||
|
For i As Integer = CsvPartList.Count() - 1 To 0 Step -1
|
||||||
|
If CsvPartList(i).m_nToNest = 0 Then
|
||||||
|
CsvPartList.RemoveAt(i)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Friend Function RemoveWrongParts(ByRef CsvPartList As List(Of CsvPart)) As Boolean
|
||||||
|
For i As Integer = CsvPartList.Count() - 1 To 0 Step -1
|
||||||
|
If Not CsvPartList(i).m_bIsRect Or CsvPartList(i).m_dDimX < EPS_SMALL Or CsvPartList(i).m_dDimY < EPS_SMALL Then
|
||||||
|
CsvPartList.RemoveAt(i)
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
Return True
|
||||||
|
End Function
|
||||||
|
|
||||||
#End Region ' METHODS
|
#End Region ' METHODS
|
||||||
|
|
||||||
End Module
|
End Module
|
||||||
|
|
||||||
Public Class CsvPart
|
Public Class CsvPart
|
||||||
|
Public m_sPath As String = String.Empty
|
||||||
Public m_sName As String = String.Empty
|
Public m_sName As String = String.Empty
|
||||||
Public m_sOrd As String = String.Empty
|
Public m_sOrd As String = String.Empty
|
||||||
Public m_sDist As String = String.Empty
|
Public m_sDist As String = String.Empty
|
||||||
@@ -526,6 +761,18 @@ Public Class CsvPart
|
|||||||
Public m_dDimX As Double = 0
|
Public m_dDimX As Double = 0
|
||||||
Public m_dDimY As Double = 0
|
Public m_dDimY As Double = 0
|
||||||
Public m_dTh As Double = 0
|
Public m_dTh As Double = 0
|
||||||
|
Public m_dAng1 As Double = 0
|
||||||
|
Public m_dHeel1 As Double = 0
|
||||||
|
Public m_dAng2 As Double = 0
|
||||||
|
Public m_dHeel2 As Double = 0
|
||||||
|
Public m_dAng3 As Double = 0
|
||||||
|
Public m_dHeel3 As Double = 0
|
||||||
|
Public m_dAng4 As Double = 0
|
||||||
|
Public m_dHeel4 As Double = 0
|
||||||
Public m_nOriInd As Integer = 0
|
Public m_nOriInd As Integer = 0
|
||||||
Public m_nId As Integer = GDB_ID.NULL
|
Public m_nId As Integer = GDB_ID.NULL
|
||||||
|
' definsco il riferimento al gruppo
|
||||||
|
Public m_sRefGuid As String = System.Guid.NewGuid.ToString
|
||||||
|
' definisco il colore del gruppo che sto inserendo
|
||||||
|
Public m_cColor As Color3d = CompoColor(IniFile.m_sIniFile)
|
||||||
End Class
|
End Class
|
||||||
|
|||||||
+262
-2
@@ -51,6 +51,68 @@ Module EstCalc
|
|||||||
End If
|
End If
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
#Region "PreGuidCode"
|
||||||
|
|
||||||
|
' recupero i primi 5 caratteri della stringa
|
||||||
|
Friend Function GetPreGuidCode(sGuidCode As String) As String
|
||||||
|
If sGuidCode.Count > 5 Then
|
||||||
|
Return sGuidCode(0) & sGuidCode(1) & sGuidCode(2) & sGuidCode(3) & sGuidCode(4)
|
||||||
|
End If
|
||||||
|
Return String.Empty
|
||||||
|
End Function
|
||||||
|
|
||||||
|
' sostituisce i primi 5 caratteri della stringa con qualle passata
|
||||||
|
Friend Function UppDateGuidCode(ByRef sGuidCode As String, sPreGuidCode As String) As Boolean
|
||||||
|
If sPreGuidCode.Count = 5 Then
|
||||||
|
sGuidCode = sGuidCode.Remove(0, 5)
|
||||||
|
sGuidCode = sPreGuidCode & sGuidCode
|
||||||
|
Return True
|
||||||
|
End If
|
||||||
|
Return False
|
||||||
|
End Function
|
||||||
|
|
||||||
|
' restituisce 5 caratteri
|
||||||
|
Friend Function CreatePreGuidCode(nId As Integer) As String
|
||||||
|
' recupero il frame dell'oggetto
|
||||||
|
Dim frGlobFrame As New Frame3d
|
||||||
|
If Not EgtGetGroupGlobFrame(nId, frGlobFrame) Then
|
||||||
|
Return String.Empty
|
||||||
|
End If
|
||||||
|
' recupero il suo versore
|
||||||
|
Dim vtX As Vector3d = frGlobFrame.VersX
|
||||||
|
Dim Len As Double
|
||||||
|
Dim AngV As Double
|
||||||
|
Dim AngH As Double
|
||||||
|
vtX.ToSpherical(Len, AngV, AngH)
|
||||||
|
' costruisco il codice (6 caratteri!) che identifica la posizione del pezzo in parcheggio
|
||||||
|
Dim sPreGuid As String = GetDirectionCode(AngH)
|
||||||
|
Return sPreGuid
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Friend Function GetDirectionCode(dVal As Double) As String
|
||||||
|
Dim bIsNegative As Boolean = False
|
||||||
|
If dVal < 0 Then
|
||||||
|
dVal = dVal + (-1)
|
||||||
|
bIsNegative = True
|
||||||
|
End If
|
||||||
|
Dim sVal As String = DoubleToString(dVal * 1000, 0)
|
||||||
|
Dim nCount As Integer = sVal.Count
|
||||||
|
For Index As Integer = 1 To 4 - nCount
|
||||||
|
sVal = "0" & sVal
|
||||||
|
Next
|
||||||
|
Dim vVal As Char() = {"+"c, "1"c, "0"c, "0"c, "0"c}
|
||||||
|
If bIsNegative Then
|
||||||
|
vVal = {"-"c, sVal(0), sVal(1), sVal(2), sVal(3)}
|
||||||
|
Else
|
||||||
|
vVal = {"+"c, sVal(0), sVal(1), sVal(2), sVal(3)}
|
||||||
|
End If
|
||||||
|
' ricostruisco la stringa dotata di segno
|
||||||
|
sVal = vVal(0) & vVal(1) & vVal(2) & vVal(3) & vVal(4)
|
||||||
|
Return sVal
|
||||||
|
End Function
|
||||||
|
|
||||||
|
#End Region ' PreGiudCode
|
||||||
|
|
||||||
'--------------------------------------------------------------------------------------------------
|
'--------------------------------------------------------------------------------------------------
|
||||||
Private m_nRawId As Integer = GDB_ID.NULL
|
Private m_nRawId As Integer = GDB_ID.NULL
|
||||||
Public Function GetRawId() As Integer
|
Public Function GetRawId() As Integer
|
||||||
@@ -626,6 +688,16 @@ Module EstCalc
|
|||||||
End If
|
End If
|
||||||
' Gestione risultato nesting
|
' Gestione risultato nesting
|
||||||
If bFit Then
|
If bFit Then
|
||||||
|
'---------------------- COUNTER PART ----------------------
|
||||||
|
Dim sRefGroup As String = String.Empty
|
||||||
|
If EgtGetInfo(nId, INFO_REFGROUP, sRefGroup) Then
|
||||||
|
' spengo il layer che contiene il contatore
|
||||||
|
Dim nCounterLayer As Integer = EgtGetFirstNameInGroup(nId, INFO_COUNTERLY)
|
||||||
|
EgtSetStatus(nCounterLayer, GDB_ST.OFF)
|
||||||
|
' aggiorno il layer che indica il numero di pezzi in parcheggio
|
||||||
|
CountPartInFamily(sRefGroup)
|
||||||
|
End If
|
||||||
|
'---------------------- COUNTER PART ----------------------
|
||||||
' Eventuale aggiunta solido per taglio da sotto
|
' Eventuale aggiunta solido per taglio da sotto
|
||||||
UpdateSolidForDrip(nId)
|
UpdateSolidForDrip(nId)
|
||||||
Return True
|
Return True
|
||||||
@@ -702,12 +774,198 @@ Module EstCalc
|
|||||||
Return True
|
Return True
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
|
#Region "Manager Counter Part"
|
||||||
|
|
||||||
|
' lista delle famiglie di pezzi in parcheggio
|
||||||
|
Public m_ListOfGroupInPark As New List(Of FamilyPart)
|
||||||
|
' se seleniozato il layer CounterPz
|
||||||
|
Public m_bIsCounterLy As Boolean = False
|
||||||
|
Public m_nCurrNubrOfParts As Integer = 0
|
||||||
|
|
||||||
|
' creo la lista delle famiglie che popolano il parcheggio
|
||||||
|
Public Sub GetFamilyGroupInPark()
|
||||||
|
m_ListOfGroupInPark.Clear()
|
||||||
|
Dim nIdInPark As Integer = EgtGetFirstPart()
|
||||||
|
While nIdInPark <> GDB_ID.NULL
|
||||||
|
If IsInRaw(nIdInPark) Then
|
||||||
|
nIdInPark = EgtGetNextPart(nIdInPark)
|
||||||
|
Continue While
|
||||||
|
End If
|
||||||
|
Dim sRefGroup As String = String.Empty
|
||||||
|
If EgtGetInfo(nIdInPark, INFO_REFGROUP, sRefGroup) Then
|
||||||
|
Dim bExists As Boolean = False
|
||||||
|
For Each sItem As FamilyPart In m_ListOfGroupInPark
|
||||||
|
If sRefGroup = sItem.sRefGuid Then
|
||||||
|
bExists = True
|
||||||
|
Exit For
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
If Not bExists Then
|
||||||
|
m_ListOfGroupInPark.Add(New FamilyPart(sRefGroup, nIdInPark))
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
nIdInPark = EgtGetNextPart(nIdInPark)
|
||||||
|
End While
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub CountPartInFamily(sRefGuid As String)
|
||||||
|
If String.IsNullOrEmpty(sRefGuid) Then Return
|
||||||
|
Dim nCount As Integer = 0
|
||||||
|
Dim nIdInPark As Integer = EgtGetFirstPart()
|
||||||
|
' conto il nuero di pezzi del gruppo inidcato
|
||||||
|
While nIdInPark <> GDB_ID.NULL
|
||||||
|
If IsInRaw(nIdInPark) Then
|
||||||
|
nIdInPark = EgtGetNextPart(nIdInPark)
|
||||||
|
Continue While
|
||||||
|
End If
|
||||||
|
Dim sRefGroup As String = String.Empty
|
||||||
|
EgtGetInfo(nIdInPark, INFO_REFGROUP, sRefGroup)
|
||||||
|
If sRefGroup = sRefGuid Then
|
||||||
|
nCount += 1
|
||||||
|
End If
|
||||||
|
nIdInPark = EgtGetNextPart(nIdInPark)
|
||||||
|
End While
|
||||||
|
' aggiorno il contatore dei pezzi del gruppo
|
||||||
|
nIdInPark = EgtGetFirstPart()
|
||||||
|
While nIdInPark <> GDB_ID.NULL
|
||||||
|
If IsInRaw(nIdInPark) Then
|
||||||
|
nIdInPark = EgtGetNextPart(nIdInPark)
|
||||||
|
Continue While
|
||||||
|
End If
|
||||||
|
Dim sRefGroup As String = String.Empty
|
||||||
|
EgtGetInfo(nIdInPark, INFO_REFGROUP, sRefGroup)
|
||||||
|
If sRefGroup = sRefGuid Then
|
||||||
|
Dim nId As Integer = EgtGetFirstNameInGroup(nIdInPark, INFO_COUNTERLY)
|
||||||
|
If nId <> GDB_ID.NULL Then
|
||||||
|
Dim m_IdCounterTextas As Integer = EgtGetFirstInGroup(nId)
|
||||||
|
EgtModifyText(m_IdCounterTextas, "# " & nCount.ToString)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
nIdInPark = EgtGetNextPart(nIdInPark)
|
||||||
|
End While
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub SelectPartInFaimily(sRefGuid As String, nNbrOfSelection As Integer)
|
||||||
|
' aggiorno il contatore dei pezzi del gruppo
|
||||||
|
Dim nIdInPark As Integer = EgtGetFirstPart()
|
||||||
|
Dim nCounter As Integer = 0
|
||||||
|
While nIdInPark <> GDB_ID.NULL And nCounter < nNbrOfSelection
|
||||||
|
If IsInRaw(nIdInPark) Then
|
||||||
|
nIdInPark = EgtGetNextPart(nIdInPark)
|
||||||
|
Continue While
|
||||||
|
End If
|
||||||
|
Dim sRefGroup As String = String.Empty
|
||||||
|
EgtGetInfo(nIdInPark, INFO_REFGROUP, sRefGroup)
|
||||||
|
If sRefGroup = sRefGuid Then
|
||||||
|
EgtSelectObj(nIdInPark)
|
||||||
|
nCounter += 1
|
||||||
|
End If
|
||||||
|
nIdInPark = EgtGetNextPart(nIdInPark)
|
||||||
|
End While
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Sub DeselectPartInFaimily(sRefGuid As String)
|
||||||
|
' aggiorno il contatore dei pezzi del gruppo
|
||||||
|
Dim nIdInPark As Integer = EgtGetFirstPart()
|
||||||
|
While nIdInPark <> GDB_ID.NULL
|
||||||
|
If IsInRaw(nIdInPark) Then
|
||||||
|
nIdInPark = EgtGetNextPart(nIdInPark)
|
||||||
|
Continue While
|
||||||
|
End If
|
||||||
|
Dim sRefGroup As String = String.Empty
|
||||||
|
EgtGetInfo(nIdInPark, INFO_REFGROUP, sRefGroup)
|
||||||
|
If sRefGroup = sRefGuid Then
|
||||||
|
EgtDeselectObj(nIdInPark)
|
||||||
|
End If
|
||||||
|
nIdInPark = EgtGetNextPart(nIdInPark)
|
||||||
|
End While
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public Function ParkInGroupFamily(nId As Integer) As Boolean
|
||||||
|
' se pezzo appartenente ad un gruppo
|
||||||
|
Dim sRefGroup As String = String.Empty
|
||||||
|
Dim Element As FamilyPart
|
||||||
|
If EgtGetInfo(nId, INFO_REFGROUP, sRefGroup) Then
|
||||||
|
' verifico se esiste un pezzo dello stesso gruppo in parcheggio
|
||||||
|
Dim nNewLayer As Integer
|
||||||
|
Dim ptMin As Point3d
|
||||||
|
Dim ptMax As Point3d
|
||||||
|
For Each sItem As FamilyPart In m_ListOfGroupInPark
|
||||||
|
If sRefGroup = sItem.sRefGuid Then
|
||||||
|
' creo un nuovo layer per contenere l'informazione del numero di pezzi da inserire
|
||||||
|
If EgtGetFirstNameInGroup(nId, INFO_COUNTERLY) = GDB_ID.NULL Then
|
||||||
|
nNewLayer = EgtCreateGroup(nId)
|
||||||
|
EgtSetName(nNewLayer, INFO_COUNTERLY)
|
||||||
|
EgtSetColor(nNewLayer, New Color3d(0, 0, 0))
|
||||||
|
EgtGetBBox(nId, GDB_BB.STANDARD, ptMin, ptMax)
|
||||||
|
EgtCreateText(nNewLayer, New Point3d((ptMin.x + ptMax.x) / 2, ptMin.y - sItem.nHText - 20, ptMin.z), "# ???", sItem.nHText, GDB_RT.LOC)
|
||||||
|
Else
|
||||||
|
' Accendo il layer che contiene il contatore
|
||||||
|
Dim nCounterLayer As Integer = EgtGetFirstNameInGroup(nId, INFO_COUNTERLY)
|
||||||
|
EgtSetStatus(nCounterLayer, GDB_ST.ON_)
|
||||||
|
End If
|
||||||
|
|
||||||
|
' calcolo lo spostamento del pezzo
|
||||||
|
Dim PtMinInRaw As Point3d
|
||||||
|
Dim PtMaxInRaw As Point3d
|
||||||
|
EgtGetBBoxGlob(nId, GDB_BB.STANDARD, PtMinInRaw, PtMaxInRaw)
|
||||||
|
Dim vtMoveToStorage As New Vector3d
|
||||||
|
vtMoveToStorage = sItem.PtStorage() - PtMinInRaw
|
||||||
|
EgtMove(nId, vtMoveToStorage, GDB_RT.GLOB)
|
||||||
|
|
||||||
|
' aggiorno il layer che indica il numero di pezzi in parcheggio
|
||||||
|
CountPartInFamily(sRefGroup)
|
||||||
|
Return True
|
||||||
|
End If
|
||||||
|
Next
|
||||||
|
' inserisco il primo pezzo del gruppo nel parcheggio
|
||||||
|
Element = New FamilyPart(sRefGroup, nId)
|
||||||
|
m_ListOfGroupInPark.Add(Element)
|
||||||
|
' creo un nuovo layer per contenere l'informazione del numero di pezzi da inserire
|
||||||
|
If EgtGetFirstNameInGroup(nId, INFO_COUNTERLY) = GDB_ID.NULL Then
|
||||||
|
nNewLayer = EgtCreateGroup(nId)
|
||||||
|
EgtSetName(nNewLayer, INFO_COUNTERLY)
|
||||||
|
EgtSetColor(nNewLayer, New Color3d(0, 0, 0))
|
||||||
|
EgtGetBBox(nId, GDB_BB.STANDARD, ptMin, ptMax)
|
||||||
|
' posso migliorarei lposizioanamento in funzione della dimensione della scritta...
|
||||||
|
EgtCreateText(nNewLayer, New Point3d((ptMin.x + ptMax.x) / 2, ptMin.y - Element.nHText - 20, ptMin.z), "# 1", Element.nHText, GDB_RT.LOC)
|
||||||
|
Else
|
||||||
|
' Accendo il layer che contiene il contatore
|
||||||
|
Dim nCounterLayer As Integer = EgtGetFirstNameInGroup(nId, INFO_COUNTERLY)
|
||||||
|
EgtSetStatus(nCounterLayer, GDB_ST.ON_)
|
||||||
|
' aggiorno il layer che indica il numero di pezzi in parcheggio
|
||||||
|
CountPartInFamily(sRefGroup)
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return False
|
||||||
|
End Function
|
||||||
|
|
||||||
|
' verifico se il pezzo ha un gruppo che contiene le informazioni per il taglio
|
||||||
|
Public Function IsInRaw(nIdGroup As Integer) As Boolean
|
||||||
|
' verifico che il pezzo sia veramente uin parcheggio
|
||||||
|
Dim nPV As Integer = EgtGetFirstNameInGroup(nIdGroup, "PV")
|
||||||
|
If nPV <> GDB_ID.NULL Then
|
||||||
|
' verifico che non ci siano delle lavorazioni
|
||||||
|
If EgtGetFirstInGroup(nPV) <> GDB_ID.NULL Then
|
||||||
|
Return True
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
Return False
|
||||||
|
End Function
|
||||||
|
#End Region ' Manager Counter Part
|
||||||
|
|
||||||
Public Function StoreOnePart(ByVal nId As Integer, Optional ByVal bForced As Boolean = False) As Boolean
|
Public Function StoreOnePart(ByVal nId As Integer, Optional ByVal bForced As Boolean = False) As Boolean
|
||||||
' Se pezzo in grezzo, metto in parcheggio (sempre possibile)
|
' Se pezzo in grezzo, metto in parcheggio (sempre possibile)
|
||||||
If bForced OrElse
|
If bForced OrElse
|
||||||
(m_nRawId <> GDB_ID.NULL AndAlso EgtGetParent(nId) = m_nRawId) Then
|
(m_nRawId <> GDB_ID.NULL AndAlso EgtGetParent(nId) = m_nRawId) Then
|
||||||
' Ripristino lo stato originale
|
' Ripristino lo stato originale
|
||||||
PreRemoveOnePart( nId)
|
PreRemoveOnePart(nId)
|
||||||
|
|
||||||
|
'---------------------- COUNTER PART ----------------------
|
||||||
|
' se esiste almento un pezzo del gruppo in parcheggio esco
|
||||||
|
If ParkInGroupFamily(nId) Then Return True
|
||||||
|
'---------------------- COUNTER PART ----------------------
|
||||||
|
|
||||||
' Parcheggio
|
' Parcheggio
|
||||||
PackPartInStore(nId)
|
PackPartInStore(nId)
|
||||||
' Aggiusto la posizione in Z
|
' Aggiusto la posizione in Z
|
||||||
@@ -730,7 +988,8 @@ Module EstCalc
|
|||||||
' Parcheggio
|
' Parcheggio
|
||||||
Const STORE_LARGH As Double = 6000
|
Const STORE_LARGH As Double = 6000
|
||||||
Const STORE_DIST As Double = 200
|
Const STORE_DIST As Double = 200
|
||||||
Const STORE_OFFS As Double = 20
|
' 40 il Font usato per indicare il numero di pezzi in parcheggio "# N"
|
||||||
|
Const STORE_OFFS As Double = 20 + 40 + 20
|
||||||
Dim dStXmin As Double = b3Tab.Min().x - 0.5 * (STORE_LARGH - b3Tab.DimX())
|
Dim dStXmin As Double = b3Tab.Min().x - 0.5 * (STORE_LARGH - b3Tab.DimX())
|
||||||
Return EgtPackBox(nId, dStXmin, -INFINITO, dStXmin + STORE_LARGH, b3Tab.Min().y - STORE_DIST, STORE_OFFS, False)
|
Return EgtPackBox(nId, dStXmin, -INFINITO, dStXmin + STORE_LARGH, b3Tab.Min().y - STORE_DIST, STORE_OFFS, False)
|
||||||
End Function
|
End Function
|
||||||
@@ -831,3 +1090,4 @@ Module EstCalc
|
|||||||
End Function
|
End Function
|
||||||
|
|
||||||
End Module
|
End Module
|
||||||
|
|
||||||
|
|||||||
@@ -255,6 +255,10 @@
|
|||||||
<DependentUpon>SplitModeV.xaml</DependentUpon>
|
<DependentUpon>SplitModeV.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="OptionPanel\MachiningTab\SplitModeVM.vb" />
|
<Compile Include="OptionPanel\MachiningTab\SplitModeVM.vb" />
|
||||||
|
<Compile Include="OptionPanel\NestingTab\MultiSelectionV.xaml.vb">
|
||||||
|
<DependentUpon>MultiSelectionV.xaml</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="OptionPanel\NestingTab\MultiSelectionVM.vb" />
|
||||||
<Compile Include="OptionPanel\NestingTab\NestingTabV.xaml.vb">
|
<Compile Include="OptionPanel\NestingTab\NestingTabV.xaml.vb">
|
||||||
<DependentUpon>NestingTabV.xaml</DependentUpon>
|
<DependentUpon>NestingTabV.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -437,6 +441,10 @@
|
|||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
</Page>
|
</Page>
|
||||||
|
<Page Include="OptionPanel\NestingTab\MultiSelectionV.xaml">
|
||||||
|
<SubType>Designer</SubType>
|
||||||
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
</Page>
|
||||||
<Page Include="OptionPanel\NestingTab\NestingTabV.xaml">
|
<Page Include="OptionPanel\NestingTab\NestingTabV.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
<Generator>MSBuild:Compile</Generator>
|
<Generator>MSBuild:Compile</Generator>
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
<EgtWPFLib5:EgtCustomWindow x:Class="MultiSelectionV"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:OmagOFFICE="clr-namespace:OmagOFFICE"
|
||||||
|
xmlns:EgtWPFLib5="clr-namespace:EgtWPFLib5;assembly=EgtWPFLib5"
|
||||||
|
Title="{Binding TitleMsg}"
|
||||||
|
IsMinimizable="False"
|
||||||
|
IsClosable="False"
|
||||||
|
ShowInTaskbar="False"
|
||||||
|
Style="{DynamicResource {x:Type EgtWPFLib5:EgtCustomWindow}}"
|
||||||
|
WindowStartupLocation="CenterOwner"
|
||||||
|
Width="270" Height="150"
|
||||||
|
ResizeMode="NoResize">
|
||||||
|
|
||||||
|
<DockPanel Margin="5,5,5,0">
|
||||||
|
|
||||||
|
<UniformGrid Columns="2"
|
||||||
|
DockPanel.Dock="Top"
|
||||||
|
Margin="0,15,0,15">
|
||||||
|
<TextBlock Text="{Binding SelectionMsg}"/>
|
||||||
|
<TextBox Text="{Binding nNbrOfParts}"/>
|
||||||
|
</UniformGrid>
|
||||||
|
|
||||||
|
<UniformGrid Columns="4"
|
||||||
|
DockPanel.Dock="Bottom"
|
||||||
|
Margin="25,0,25,5">
|
||||||
|
<Button Command="{Binding OkCommand}"
|
||||||
|
Style="{StaticResource OptionPanel_TextButton}"
|
||||||
|
Content="{Binding OkMsg}">
|
||||||
|
</Button>
|
||||||
|
<ToggleButton Visibility="Hidden" />
|
||||||
|
<ToggleButton Visibility="Hidden" />
|
||||||
|
<Button Command="{Binding CancelCommand}"
|
||||||
|
Style="{StaticResource OptionPanel_TextButton}"
|
||||||
|
Content="{Binding CancelMsg}">
|
||||||
|
</Button>
|
||||||
|
</UniformGrid>
|
||||||
|
|
||||||
|
</DockPanel>
|
||||||
|
|
||||||
|
</EgtWPFLib5:EgtCustomWindow>
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
Public Class MultiSelectionV
|
||||||
|
|
||||||
|
Private WithEvents m_MultiSelectionVM As MultiSelectionVM
|
||||||
|
|
||||||
|
Sub New(Owner As Window, MultiSelVM As MultiSelectionVM)
|
||||||
|
MyBase.New(Owner)
|
||||||
|
' This call is required by the designer.
|
||||||
|
InitializeComponent()
|
||||||
|
Me.DataContext = MultiSelVM
|
||||||
|
' Assegno al riferimento locale al VM il VM preso dal DataContext
|
||||||
|
m_MultiSelectionVM = MultiSelVM
|
||||||
|
Me.Show()
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
End Class
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
Imports EgtUILib
|
||||||
|
Imports EgtWPFLib5
|
||||||
|
|
||||||
|
Public Class MultiSelectionVM
|
||||||
|
Inherits VMBase
|
||||||
|
|
||||||
|
Private m_sRefGuidOfPart As String = String.Empty
|
||||||
|
|
||||||
|
Public ReadOnly Property TitleMsg As String
|
||||||
|
Get
|
||||||
|
Return "Multiple selection"
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
Public ReadOnly Property SelectionMsg As String
|
||||||
|
Get
|
||||||
|
Return "Number of Parts"
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Public ReadOnly Property OkMsg As String
|
||||||
|
Get
|
||||||
|
Return "Ok"
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Public ReadOnly Property CancelMsg As String
|
||||||
|
Get
|
||||||
|
Return "Cancel"
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Private m_MultiSelectionV As MultiSelectionV
|
||||||
|
Public Sub SetMultiSelectionV(MultiSel As MultiSelectionV)
|
||||||
|
m_MultiSelectionV = MultiSel
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Private m_nNbrOfParts As Integer
|
||||||
|
Public Property nNbrOfParts As String
|
||||||
|
Get
|
||||||
|
Return m_nNbrOfParts.ToString
|
||||||
|
End Get
|
||||||
|
Set(value As String)
|
||||||
|
Dim nVal As Integer = 0
|
||||||
|
StringToInt(value, nVal)
|
||||||
|
m_nNbrOfParts = nVal
|
||||||
|
NotifyPropertyChanged("nNbrOfParts")
|
||||||
|
End Set
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Private m_cmdOk As ICommand
|
||||||
|
Private m_cmdCancel As ICommand
|
||||||
|
|
||||||
|
Public ReadOnly Property OkCommand As ICommand
|
||||||
|
Get
|
||||||
|
If m_cmdOk Is Nothing Then
|
||||||
|
m_cmdOk = New Command(AddressOf OkCmd)
|
||||||
|
End If
|
||||||
|
Return m_cmdOk
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Public Sub OkCmd(ByVal param As Object)
|
||||||
|
' il numero di elementi indicato è corretto
|
||||||
|
' deseleziono il pezzo corrente
|
||||||
|
DeselectPartInFaimily(m_sRefGuidOfPart)
|
||||||
|
Select Case m_nNbrOfParts
|
||||||
|
Case 0 ' Annulla
|
||||||
|
' continuo senza eseguire niente
|
||||||
|
Case Else
|
||||||
|
' seleziono il numero di pezzi indicati
|
||||||
|
SelectPartInFaimily(m_sRefGuidOfPart, m_nNbrOfParts)
|
||||||
|
End Select
|
||||||
|
' chiudo la finestra
|
||||||
|
m_MultiSelectionV.Close()
|
||||||
|
EgtDraw()
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Public ReadOnly Property CancelCommand As ICommand
|
||||||
|
Get
|
||||||
|
If m_cmdCancel Is Nothing Then
|
||||||
|
m_cmdCancel = New Command(AddressOf CancelCmd)
|
||||||
|
End If
|
||||||
|
Return m_cmdCancel
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Public Sub CancelCmd(ByVal param As Object)
|
||||||
|
' chiudo la fiestra senza eseguire niente
|
||||||
|
m_MultiSelectionV.Close()
|
||||||
|
EgtDraw()
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
Sub New(CurrNumberOfParts As Integer, sRefGuid As String)
|
||||||
|
m_nNbrOfParts = CurrNumberOfParts
|
||||||
|
m_sRefGuidOfPart = sRefGuid
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
@@ -413,8 +413,29 @@ Public Class NestingTabVM
|
|||||||
If Not EgtGetPartPartClusterCenterGlob(nId, ptCen) Then Return False
|
If Not EgtGetPartPartClusterCenterGlob(nId, ptCen) Then Return False
|
||||||
' Rotazione del pezzo attorno al suo centro
|
' Rotazione del pezzo attorno al suo centro
|
||||||
EgtRotate(nId, ptCen, Vector3d.Z_AX(), dAngRotDeg, GDB_RT.GLOB)
|
EgtRotate(nId, ptCen, Vector3d.Z_AX(), dAngRotDeg, GDB_RT.GLOB)
|
||||||
' Sistemazione nel parcheggio
|
|
||||||
PackPartInStore(nId)
|
'---------------------- COUNTER PART ----------------------
|
||||||
|
' Aggiorno il Guid assegnando la nuova rotazione
|
||||||
|
Dim sRefGroup As String = String.Empty
|
||||||
|
If EgtGetInfo(nId, INFO_REFGROUP, sRefGroup) Then
|
||||||
|
Dim sCurrRefGroup As String = sRefGroup
|
||||||
|
If UppDateGuidCode(sRefGroup, CreatePreGuidCode(nId)) Then
|
||||||
|
EgtSetInfo(nId, INFO_REFGROUP, sRefGroup)
|
||||||
|
End If
|
||||||
|
' aggiorno il layer che indica il numero di pezzi in parcheggio
|
||||||
|
CountPartInFamily(sCurrRefGroup)
|
||||||
|
End If
|
||||||
|
' se esiste almento un pezzo del gruppo in parcheggio esco
|
||||||
|
If Not ParkInGroupFamily(nId) Then
|
||||||
|
PackPartInStore(nId)
|
||||||
|
End If
|
||||||
|
' ricarico l'lelenco dei pezzi in parcheggio
|
||||||
|
GetFamilyGroupInPark()
|
||||||
|
'---------------------- COUNTER PART ----------------------
|
||||||
|
|
||||||
|
|
||||||
|
'' Sistemazione nel parcheggio
|
||||||
|
'PackPartInStore(nId)
|
||||||
End If
|
End If
|
||||||
' Passo al successivo selezionato
|
' Passo al successivo selezionato
|
||||||
nId = EgtGetNextSelectedObj()
|
nId = EgtGetNextSelectedObj()
|
||||||
@@ -1239,6 +1260,8 @@ Public Class NestingTabVM
|
|||||||
End Property
|
End Property
|
||||||
|
|
||||||
Public Sub StorePart(ByVal param As Object)
|
Public Sub StorePart(ByVal param As Object)
|
||||||
|
' creo la lista delle famiglie di pezzi presenti in parcheggio
|
||||||
|
GetFamilyGroupInPark()
|
||||||
EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx())
|
EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx())
|
||||||
' Ciclo di parcheggio dei pezzi selezionati
|
' Ciclo di parcheggio dei pezzi selezionati
|
||||||
Dim nId As Integer = EgtGetFirstSelectedObj()
|
Dim nId As Integer = EgtGetFirstSelectedObj()
|
||||||
@@ -1311,13 +1334,20 @@ Public Class NestingTabVM
|
|||||||
If bEraseCsvParts OrElse Not EgtExistsInfo(nId, INFO_CSV_PATH) Then
|
If bEraseCsvParts OrElse Not EgtExistsInfo(nId, INFO_CSV_PATH) Then
|
||||||
' Se pezzo in parcheggio cancello direttamente
|
' Se pezzo in parcheggio cancello direttamente
|
||||||
If EgtIsPart(nId) Then
|
If EgtIsPart(nId) Then
|
||||||
|
'---------------------- COUNTER PART ----------------------
|
||||||
|
Dim sRefGroup As String = String.Empty
|
||||||
|
' recupero l'GUID del gruppo
|
||||||
|
EgtGetInfo(nId, INFO_REFGROUP, sRefGroup)
|
||||||
|
'---------------------- COUNTER PART ----------------------
|
||||||
' Eventuale notifica al VeinMatching
|
' Eventuale notifica al VeinMatching
|
||||||
VeinMatching.OnRemovePart(nId, False)
|
VeinMatching.OnRemovePart(nId, False)
|
||||||
' Rimuovo le lavorazioni
|
' Rimuovo le lavorazioni
|
||||||
EraseMachinings(nId)
|
EraseMachinings(nId)
|
||||||
' Cancello
|
' Cancello
|
||||||
EgtErase(nId)
|
EgtErase(nId)
|
||||||
' Altrimenti pezzo nel grezzo
|
' aggiorno il layer che indica il numero di pezzi in parcheggio (se sRefGroup<>"")
|
||||||
|
CountPartInFamily(sRefGroup)
|
||||||
|
' Altrimenti pezzo nel grezzo
|
||||||
ElseIf EgtGetParent(nId) = EstCalc.GetRawId() Then
|
ElseIf EgtGetParent(nId) = EstCalc.GetRawId() Then
|
||||||
If EgtRemovePartFromRawPart(nId) Then
|
If EgtRemovePartFromRawPart(nId) Then
|
||||||
' Eventuale notifica al VeinMatching
|
' Eventuale notifica al VeinMatching
|
||||||
@@ -1532,13 +1562,35 @@ Public Class NestingTabVM
|
|||||||
If EgtIsPart(nPartId) Or bPartInTable Then
|
If EgtIsPart(nPartId) Or bPartInTable Then
|
||||||
Dim nStat As Integer = GDB_ST.ON_
|
Dim nStat As Integer = GDB_ST.ON_
|
||||||
EgtGetStatus(nPartId, nStat)
|
EgtGetStatus(nPartId, nStat)
|
||||||
' Se già selezionato
|
|
||||||
If nStat = GDB_ST.SEL Then
|
' verifico se l'lemento selezionato è il numero di pezzi
|
||||||
' Memorizzo Id da deselezionare
|
If EgtGetType(nId) = GDB_TY.EXT_TEXT Then
|
||||||
m_nIdToDesel = nPartId
|
Dim NameLayer As String = String.Empty
|
||||||
Else
|
EgtGetName(EgtGetParent(nId), NameLayer)
|
||||||
' Memorizzo Id da selezionare
|
If NameLayer = INFO_COUNTERLY Then
|
||||||
m_nIdToSel = nPartId
|
Dim sText As String = String.Empty
|
||||||
|
If EgtTextGetContent(nId, sText) Then
|
||||||
|
Dim sItems() As String = sText.Split("#")
|
||||||
|
If sItems.Count > 1 Then
|
||||||
|
m_nCurrNubrOfParts = 0
|
||||||
|
If StringToInt(sItems(1), m_nCurrNubrOfParts) Then
|
||||||
|
m_bIsCounterLy = True
|
||||||
|
m_nIdToSel = nPartId
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
If Not m_bIsCounterLy Then
|
||||||
|
' Se già selezionato o posizione oggetto incompatibile con flag posizione selezionati
|
||||||
|
If nStat = GDB_ST.SEL Then
|
||||||
|
' Memorizzo Id da deselezionare
|
||||||
|
m_nIdToDesel = nPartId
|
||||||
|
Else
|
||||||
|
' Memorizzo Id da selezionare
|
||||||
|
m_nIdToSel = nPartId
|
||||||
|
End If
|
||||||
End If
|
End If
|
||||||
' Drag possibile
|
' Drag possibile
|
||||||
m_bDrag = True
|
m_bDrag = True
|
||||||
@@ -1591,7 +1643,20 @@ Public Class NestingTabVM
|
|||||||
Dim b3Ins As new BBox3d
|
Dim b3Ins As new BBox3d
|
||||||
EgtGetBBoxGlob( EgtGetFirstNameInGroup( nTestId, NAME_REGION), BBFLAG, b3Ins)
|
EgtGetBBoxGlob( EgtGetFirstNameInGroup( nTestId, NAME_REGION), BBFLAG, b3Ins)
|
||||||
Dim vtDiff As new Vector3d( b3Curr.Min().x - b3Ins.Min().x, b3Curr.Min().y - b3Ins.Min().y, 0)
|
Dim vtDiff As new Vector3d( b3Curr.Min().x - b3Ins.Min().x, b3Curr.Min().y - b3Ins.Min().y, 0)
|
||||||
EgtMove( nMoveId, vtDiff)
|
EgtMove(nMoveId, vtDiff)
|
||||||
|
|
||||||
|
'---------------------- COUNTER PART ----------------------
|
||||||
|
' aggiorno contatore pezzi
|
||||||
|
Dim sRefGroup As String = String.Empty
|
||||||
|
If EgtGetInfo(nMoveId, INFO_REFGROUP, sRefGroup) Then
|
||||||
|
' spengo il layer che contiene il contatore
|
||||||
|
Dim nCounterLayer As Integer = EgtGetFirstNameInGroup(nMoveId, INFO_COUNTERLY)
|
||||||
|
EgtSetStatus(nCounterLayer, GDB_ST.OFF)
|
||||||
|
' aggiorno il layer che indica il numero di pezzi in parcheggio
|
||||||
|
CountPartInFamily(sRefGroup)
|
||||||
|
End If
|
||||||
|
'---------------------- COUNTER PART ----------------------
|
||||||
|
|
||||||
' Gestione VeinMatching
|
' Gestione VeinMatching
|
||||||
VeinMatching.OnInsertPartInRaw( nMoveId)
|
VeinMatching.OnInsertPartInRaw( nMoveId)
|
||||||
' Imposto stato
|
' Imposto stato
|
||||||
@@ -1696,12 +1761,34 @@ Public Class NestingTabVM
|
|||||||
VeinMatching.OnMovePartInRaw(nMoveId)
|
VeinMatching.OnMovePartInRaw(nMoveId)
|
||||||
End If
|
End If
|
||||||
End If
|
End If
|
||||||
|
'---------------------- COUNTER PART ----------------------
|
||||||
|
Dim sRefGroup As String = String.Empty
|
||||||
|
If EgtGetInfo(nMoveId, INFO_REFGROUP, sRefGroup) Then
|
||||||
|
' accendo il layer che contiene il contatore (spento in fase di Drag)
|
||||||
|
Dim nCounterLayer As Integer = EgtGetFirstNameInGroup(nMoveId, INFO_COUNTERLY)
|
||||||
|
EgtSetStatus(nCounterLayer, GDB_ST.ON_)
|
||||||
|
' aggiorno il layer che indica il numero di pezzi in parcheggio
|
||||||
|
CountPartInFamily(sRefGroup)
|
||||||
|
End If
|
||||||
|
'---------------------- COUNTER PART ----------------------
|
||||||
End If
|
End If
|
||||||
m_bFromParking = False
|
m_bFromParking = False
|
||||||
' altrimenti caso con verifica durante il movimento
|
' altrimenti caso con verifica durante il movimento
|
||||||
Else
|
Else
|
||||||
' Basta reset alla fine
|
' Basta reset alla fine
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
' se è stato selezionato il layer del contatore mostro la finsetra
|
||||||
|
ElseIf m_bIsCounterLy Then
|
||||||
|
' devo csotruire la finestra per la selezione del numero di pezzi da muovere
|
||||||
|
' apro una finestra di dialogo per chiedere se inserire tutti i pezzi della famiglia
|
||||||
|
Dim sRefGroup As String = String.Empty
|
||||||
|
EgtGetInfo(m_nIdToSel, INFO_REFGROUP, sRefGroup)
|
||||||
|
Dim DataContextSlectWD As New MultiSelectionVM(m_nCurrNubrOfParts, sRefGroup)
|
||||||
|
Dim SelectWD As MultiSelectionV = New MultiSelectionV(Application.Current.MainWindow, DataContextSlectWD)
|
||||||
|
DataContextSlectWD.SetMultiSelectionV(SelectWD)
|
||||||
|
m_bIsCounterLy = False
|
||||||
|
|
||||||
' Se selezione da eseguire
|
' Se selezione da eseguire
|
||||||
ElseIf m_nIdToSel <> GDB_ID.NULL Then
|
ElseIf m_nIdToSel <> GDB_ID.NULL Then
|
||||||
' Determino se pezzo in tavola o in parcheggio
|
' Determino se pezzo in tavola o in parcheggio
|
||||||
@@ -1775,3 +1862,48 @@ Public Class NestingTabVM
|
|||||||
#End Region ' EVENTS
|
#End Region ' EVENTS
|
||||||
|
|
||||||
End Class
|
End Class
|
||||||
|
|
||||||
|
Class FamilyPart
|
||||||
|
|
||||||
|
Private PtMinStoraged As Point3d
|
||||||
|
Private PtMaxStoraged As Point3d
|
||||||
|
|
||||||
|
Private m_nHText As Integer = 40
|
||||||
|
Public ReadOnly Property nHText As Double
|
||||||
|
Get
|
||||||
|
Return m_nHText
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Private m_sRefGuid As String = String.Empty
|
||||||
|
Public ReadOnly Property sRefGuid As String
|
||||||
|
Get
|
||||||
|
Return m_sRefGuid
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Private m_nIdPart As Integer = -1
|
||||||
|
Public ReadOnly Property nIdPart As Integer
|
||||||
|
Get
|
||||||
|
Return m_nIdPart
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Private m_IdCounterText As Integer
|
||||||
|
Public ReadOnly Property IdCounterText As Integer
|
||||||
|
Get
|
||||||
|
Return m_IdCounterText
|
||||||
|
End Get
|
||||||
|
End Property
|
||||||
|
|
||||||
|
Public Function PtStorage() As Point3d
|
||||||
|
EgtGetBBoxGlob(m_nIdPart, GDB_BB.STANDARD, PtMinStoraged, PtMaxStoraged)
|
||||||
|
Return PtMinStoraged
|
||||||
|
End Function
|
||||||
|
|
||||||
|
Sub New(Guid As String, IdPart As Integer)
|
||||||
|
m_sRefGuid = Guid
|
||||||
|
m_nIdPart = IdPart
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
End Class
|
||||||
Reference in New Issue
Block a user