Compare commits

...

60 Commits

Author SHA1 Message Date
NicolaP bd33450bb0 Gestione comando Canc e Escape per interrompere 2022-08-31 18:07:55 +02:00
NicolaP fa0ebe1503 Utilizzo costanti per Bridge 2022-08-31 17:49:19 +02:00
NicolaP d33a976d3b Gestione costruzione ponticelli WJ 2022-08-31 17:41:28 +02:00
NicolaP ebe0c84e1f Merge commit '090e930a0febd976d4c9e2f135c61b71c9898d5b' into develop 2022-08-24 12:37:34 +02:00
DarioS 090e930a0f OmagOFFICE 2.4g1 :
- cambio di versione.
2022-08-11 10:45:51 +02:00
NicolaP ad7634f52d Merge commit 'a788f207af3d2d351992691248c5820d06ae2646' into develop 2022-08-08 11:33:23 +02:00
DarioS c95fb50006 Merge branch 'master' of https://gitlab.steamware.net/egaltech/OmagOFFICE 2022-08-02 10:01:50 +02:00
Emmanuele Sassi a788f207af Merge remote-tracking branch 'origin/develop' 2022-08-02 09:58:48 +02:00
DarioS f4a8edd421 Merge branch 'develop' of https://gitlab.steamware.net/egaltech/OmagOFFICE 2022-08-02 08:34:10 +02:00
NicolaP 601f66187a Merge branch 'Features/Manage_Filo_Top_Corner' into develop 2022-07-04 18:07:24 +02:00
NicolaP a92822bb87 Gestione visualizzazione percorso FiloTop 2022-06-30 19:01:07 +02:00
NicolaP 1a9045a23f Merge branch 'develop' 2022-06-27 09:48:36 +02:00
NicolaP fb0d35eddf Cambio versione 2022-06-27 09:47:50 +02:00
NicolaP c367f1bfe9 Merge branch 'Features/Manage_Multi_Istances' into develop 2022-06-20 18:17:18 +02:00
NicolaP d789be4547 Merge branch 'Features/Manage_Engrave' into develop 2022-06-20 18:17:11 +02:00
NicolaP 20e1e9b41c Merge branch 'Features/Manage_REDO' into develop 2022-06-20 18:16:58 +02:00
NicolaP b25f065f3c Merge branch 'Features/SHOTT_Over_Table' into develop 2022-06-20 18:16:46 +02:00
NicolaP 83cf2646cf Passo alla libreira il nome dello User 2022-06-20 15:08:08 +02:00
NicolaP 11bc92bb10 Getsione comunicazionea DB lastra in lettura 2022-06-16 16:17:35 +02:00
NicolaP 953083e429 Gestione affandamento incisioni da sopra 2022-06-13 12:46:22 +02:00
NicolaP 132990d705 Mantegno attive le lavorazioni della fase corrente 2022-06-09 12:52:41 +02:00
NicolaP 0477c42208 Salvo dimensione sovratavola per ogni macchinata 2022-06-09 12:37:44 +02:00
NicolaP c11925e90f Merge remote-tracking branch 'origin/master' into develop 2022-06-08 17:21:26 +02:00
DarioS d745119195 OmagOFFICE 2.4e4 :
- correzione versione.
2022-05-31 00:29:40 +02:00
NicolaP aa283fd190 Merge branch 'develop' 2022-05-30 15:13:27 +02:00
NicolaP 243125cbb4 Merge remote-tracking branch 'origin/master' 2022-05-30 15:12:22 +02:00
NicolaP 2789051005 Cambio versione 2022-05-30 14:54:55 +02:00
NicolaP 0b13379731 Inseriti messaggi e costanti 2022-05-30 11:02:11 +02:00
NicolaP 6cc7ba8ccd Gestione StartPoint per tagli WJ InLoop 2022-05-26 17:47:39 +02:00
NicolaP 36674aeb65 Aggiunta gestione grafica per Taglio WJ separato 2022-05-26 16:29:11 +02:00
NicolaP 9aa9b51710 Merge branch 'Features/Manage_Interference_On_Vacuum_Move' into develop 2022-05-25 18:23:15 +02:00
NicolaP 15b87d7911 Merge branch 'Features/WaterJet_Punto_Inizio' into develop 2022-05-25 18:22:47 +02:00
NicolaP c8bf133113 Gestione comando StartPoint lavorazioni waterjet 2022-05-25 18:21:57 +02:00
NicolaP faba640eee Gestione comando per separazione lavorazione WaterJet 2022-05-25 15:19:22 +02:00
DarioS e9ff1c198b OmagOFFICE 2.4e3 :
- modifiche per prima versione con chiave di rete.
2022-05-17 08:27:56 +02:00
NicolaP abc304e25c Verifica interferenze tra grezzi in fase di split 2022-05-02 14:28:08 +02:00
NicolaP 80f4dc6b83 Merge branch 'master' into develop 2022-05-02 11:12:34 +02:00
DarioS 8f5ef91890 OmagOFFICE 2.4e1 :
- controlli vari.
2022-05-02 10:29:43 +02:00
NicolaP 2cef4e6fd8 Aggiornamento versione 2.4d1 2022-04-28 16:23:28 +02:00
NicolaP f2fce7a653 Merge branch 'Features/Limit_Vacuum_On_Stroke' 2022-04-28 16:04:25 +02:00
NicolaP 7581ae0bdb Miglioramenti scrittura codice e commneti 2022-04-28 14:48:29 +02:00
NicolaP 661ae9f09c Gestione limiti corsa in fase di manipolazione 2022-04-13 17:51:13 +02:00
NicolaP 44d411819f Notifica dei limiti di corsa in fase di prelievo pezzi 2022-04-11 19:35:52 +02:00
NicolaP 46134c10b6 Gestione del carico massio delle ventose 2022-04-07 18:31:09 +02:00
NicolaP 36b7ae4843 Migliorata gestione comando Ctrl nella pagina Split 2022-03-21 14:33:43 +01:00
NicolaP 63b4977c39 Migliorara gestione lavorazioni pagina split 2022-03-16 19:27:51 +01:00
NicolaP ae927719c6 Merge branch 'Features/Multiple_CSV' 2022-03-10 20:43:26 +01:00
NicolaP 8944a8d191 Gestione massima dimensione finestra CSV 2022-03-09 11:58:23 +01:00
NicolaP 5cdfc79aca Aggrioanemetno CSV e inserimento multiplo 2022-03-07 20:31:50 +01:00
NicolaP 2f24604fa8 Gestione multiselezione in parcheggio 2022-03-02 17:06:18 +01:00
NicolaP 2889e30386 Importazione di DXF contente più di 1 part 2022-03-02 15:34:58 +01:00
NicolaP a9458620c1 Gestione parcheggio (inserimento da CSV) 2022-02-28 19:28:47 +01:00
NicolaP 7fe03cbbb4 Gestione parcheggio (inserimento da Compo) 2022-02-28 18:46:05 +01:00
NicolaP d0646eb922 Migliorata gestione Text dei rettangoli 2022-02-28 16:29:48 +01:00
NicolaP 83f37dc628 Merge commit '601471482ad03d54149f8bcf5e938c47d63a0b70' 2022-02-28 16:07:13 +01:00
DarioS 568d7c109d OmagOFFICE 2.4b2 :
- corretta gestione angolo di rotazione pezzi con misure pollici (veniva moltiplicato per 25.4 come fosse una lunghezza) presente da ver 2.3b2
- uscendo da gestione grezzo senza alcun grezzo ora si nasconde la eventuale foto.
2022-02-22 10:50:20 +01:00
NicolaP 1c36907b47 Cambio versione 2022-02-17 11:13:09 +01:00
NicolaP d2e45a937e Merge commit '614756e1bb8cb0e583d961478d3c6860779b8d1d' 2022-02-17 11:10:55 +01:00
NicolaP 13f9fc9bd2 Migliorata visualizzazione lavorazioni WaterJet 2022-02-17 11:08:40 +01:00
NicolaP 614756e1bb Correzione gestione rotazione ventose. 2022-02-17 09:57:34 +01:00
43 changed files with 3243 additions and 424 deletions
@@ -108,6 +108,8 @@ Public Class CompoListPageVM
End Get End Get
Set(value As Boolean) Set(value As Boolean)
If m_SideAngle_IsChecked OrElse m_Drip_IsChecked Then Return If m_SideAngle_IsChecked OrElse m_Drip_IsChecked Then Return
CompoWindowMap.refCompoSceneHostV.m_SelListHole.Clear()
CompoWindowMap.refCompoSceneHostV.m_DeselectListHole.Clear()
m_FiloTop_IsChecked = value m_FiloTop_IsChecked = value
If value Then If value Then
' Se non ci sono loop interni, imposto quello esterno ' Se non ci sono loop interni, imposto quello esterno
@@ -122,6 +124,7 @@ Public Class CompoListPageVM
SideEntityControl = New SideEntityControlV(m_SideEntityControlVM) SideEntityControl = New SideEntityControlV(m_SideEntityControlVM)
m_CompoListVisibility = Visibility.Collapsed m_CompoListVisibility = Visibility.Collapsed
m_CompoBackVisibility = Visibility.Collapsed m_CompoBackVisibility = Visibility.Collapsed
CompoWindowMap.refCompoSceneHostV.SetRefSideEntityControlVM(m_SideEntityControlVM)
Else Else
m_SideEntityControlVM.Close() m_SideEntityControlVM.Close()
m_SideEntityControlVM = Nothing m_SideEntityControlVM = Nothing
@@ -22,8 +22,8 @@
</ToggleButton.Content> </ToggleButton.Content>
</ToggleButton> </ToggleButton>
<!--FiloTop--><!-- <!--FiloTop-->
<ToggleButton Padding="0" <!--<ToggleButton Padding="0"
IsChecked="{Binding FiloTop_IsChecked}" IsChecked="{Binding FiloTop_IsChecked}"
Style="{StaticResource CompoWindow_ToggleButton}" Style="{StaticResource CompoWindow_ToggleButton}"
Margin="0,0,1.75,0" Margin="0,0,1.75,0"
+45 -2
View File
@@ -67,8 +67,6 @@ Public Class CompoParamPageVM
Private m_AlzAndFront_Visibility As Visibility Private m_AlzAndFront_Visibility As Visibility
Public Property AlzAndFront_Visibility As Visibility Public Property AlzAndFront_Visibility As Visibility
Get Get
'' !!!! Temporaneamente in attesa di completamento Frontalini e alzatine !!!!
'Return Visibility.Collapsed
Return m_AlzAndFront_Visibility Return m_AlzAndFront_Visibility
End Get End Get
Set(value As Visibility) Set(value As Visibility)
@@ -750,6 +748,50 @@ Public Class CompoParamPageVM
NotifyPropertyChanged("MsgColor") NotifyPropertyChanged("MsgColor")
End Sub End Sub
Private Sub UpdateInLoopReference(nCmp As Integer)
' aggiorno il layer "FiloTop"
Dim nIdInLoop As Integer = EgtGetFirstNameInGroup(EgtGetFirstGroupInGroup(GDB_ID.ROOT), "InLoop")
While nIdInLoop <> GDB_ID.NULL
Dim nCmpInfoIL As Integer = 0
If EgtGetInfo(nIdInLoop, "ID", nCmpInfoIL) AndAlso nCmp = nCmpInfoIL Then
Dim nLayFiloTop As Integer = GDB_ID.NULL
EgtGetInfo(nIdInLoop, "FiloTopRef", nLayFiloTop)
If nLayFiloTop <> GDB_ID.NULL Then
Dim LocalList As New List(Of Integer) From {nIdInLoop}
If IsNothing(m_SideEntityControlVM) Then
m_SideEntityControlVM = New SideEntityControlVM(SideEntityControlVM.CallingWindowOpt.COMPO,
CompoWindowMap.refCompoSceneHostV.CompoScene,
SideEntityControlVM.ModeOpt.FILOTOP)
m_SideEntityControlVM.CreateFiloTopPreView(LocalList)
Else
m_SideEntityControlVM.CreateFiloTopPreView(LocalList)
End If
EgtSetStatus(nLayFiloTop, GDB_ST.ON_)
Exit While
End If
End If
nIdInLoop = EgtGetNextName(nIdInLoop, "InLoop")
End While
End Sub
' riceve la info "ID" della componente
Public Sub SetStatusVisibilityInLoopReference(nCmp As Integer, Status As GDB_ST)
' aggiorno il layer "FiloTop"
Dim nIdInLoop As Integer = EgtGetFirstNameInGroup(EgtGetFirstGroupInGroup(GDB_ID.ROOT), "InLoop")
While nIdInLoop <> GDB_ID.NULL
Dim nCmpInfoIL As Integer = 0
If EgtGetInfo(nIdInLoop, "ID", nCmpInfoIL) AndAlso nCmp = nCmpInfoIL Then
Dim nLayFiloTop As Integer = GDB_ID.NULL
EgtGetInfo(nIdInLoop, "FiloTopRef", nLayFiloTop)
If nLayFiloTop <> GDB_ID.NULL Then
EgtSetStatus(nLayFiloTop, Status)
Exit While
End If
End If
nIdInLoop = EgtGetNextName(nIdInLoop, "InLoop")
End While
End Sub
#End Region ' METHODS #End Region ' METHODS
#Region "COMMANDS" #Region "COMMANDS"
@@ -867,6 +909,7 @@ Public Class CompoParamPageVM
Dim nCmpInfo As Integer = 0 Dim nCmpInfo As Integer = 0
If EgtGetInfo(nId, "ID", nCmpInfo) AndAlso nCmp = nCmpInfo Then If EgtGetInfo(nId, "ID", nCmpInfo) AndAlso nCmp = nCmpInfo Then
EgtSetStatus(nId, GDB_ST.OFF) EgtSetStatus(nId, GDB_ST.OFF)
UpdateInLoopReference(nCmp)
Exit While Exit While
End If End If
nId = EgtGetNextName(nId, "HoleLabels") nId = EgtGetNextName(nId, "HoleLabels")
+19
View File
@@ -3,6 +3,11 @@ Imports EgtWPFLib5
Public Class CompoSceneHostV Public Class CompoSceneHostV
Public m_SelListHole As New List(Of Integer)
Public m_DeselectListHole As New List(Of Integer)
Private m_refSideEntityControlVM As SideEntityControlVM
Private m_SelFromScene As Boolean = False Private m_SelFromScene As Boolean = False
Friend ReadOnly Property SelFromScene As Boolean Friend ReadOnly Property SelFromScene As Boolean
Get Get
@@ -36,6 +41,10 @@ Public Class CompoSceneHostV
EgtDraw() EgtDraw()
End Sub End Sub
Public Sub SetRefSideEntityControlVM(refSideEntityControl As SideEntityControlVM)
m_refSideEntityControlVM = refSideEntityControl
End Sub
Private Sub PreInitializeScene() Private Sub PreInitializeScene()
' imposto colore di default ' imposto colore di default
Dim DefColor As New Color3d(0, 0, 0) Dim DefColor As New Color3d(0, 0, 0)
@@ -156,6 +165,8 @@ Public Class CompoSceneHostV
Dim nCmpInfo As Integer = 0 Dim nCmpInfo As Integer = 0
If EgtGetInfo(nHLId, "ID", nCmpInfo) AndAlso nCmp = nCmpInfo Then If EgtGetInfo(nHLId, "ID", nCmpInfo) AndAlso nCmp = nCmpInfo Then
EgtSetStatus(nHLId, GDB_ST.ON_) EgtSetStatus(nHLId, GDB_ST.ON_)
' nascondo eventuali FiloTop
CompoWindowMap.refCompoParamPageVM.SetStatusVisibilityInLoopReference(nCmp, GDB_ST.OFF)
Exit While Exit While
End If End If
nHLId = EgtGetNextName(nHLId, "HoleLabels") nHLId = EgtGetNextName(nHLId, "HoleLabels")
@@ -262,6 +273,8 @@ Public Class CompoSceneHostV
EgtRemoveInfo(nLayId, INFO_DEPTH) EgtRemoveInfo(nLayId, INFO_DEPTH)
EgtResetColor(nLayId) EgtResetColor(nLayId)
End If End If
m_DeselectListHole.Add(nLayId)
m_SelListHole.Remove(nLayId)
Else Else
Dim sLayName As String = "" Dim sLayName As String = ""
If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP Then If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP Then
@@ -272,12 +285,18 @@ Public Class CompoSceneHostV
EgtSetInfo(nLayId, INFO_DEPTH, SideAngleEntity.m_Parameter2) EgtSetInfo(nLayId, INFO_DEPTH, SideAngleEntity.m_Parameter2)
EgtSetColor(nLayId, New Color3d(255, 255, 255)) EgtSetColor(nLayId, New Color3d(255, 255, 255))
End If End If
m_SelListHole.Add(nLayId)
m_DeselectListHole.Remove(nLayId)
End If End If
EgtDraw() EgtDraw()
End If End If
End If End If
nId = EgtGetNextObjInSelWin() nId = EgtGetNextObjInSelWin()
End While End While
If Not IsNothing(m_refSideEntityControlVM) Then
m_refSideEntityControlVM.CreateFiloTopPreView(m_SelListHole)
m_refSideEntityControlVM.EraseFiloTopPreview(m_DeselectListHole)
End If
End Sub End Sub
#End Region ' Events #End Region ' Events
+14 -1
View File
@@ -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)
+5 -1
View File
@@ -18,6 +18,7 @@ Module ConstIni
Public Const S_GENERAL As String = "General" Public Const S_GENERAL As String = "General"
Public Const K_DEBUG As String = "Debug" Public Const K_DEBUG As String = "Debug"
Public Const K_LICENCE As String = "Licence" Public Const K_LICENCE As String = "Licence"
Public Const K_NETKEY As String = "NetKey"
Public Const K_USERLEVEL As String = "UserLevel" Public Const K_USERLEVEL As String = "UserLevel"
Public Const K_MAXINST As String = "MaxInstances" Public Const K_MAXINST As String = "MaxInstances"
Public Const K_INSTANCES As String = "Instances" Public Const K_INSTANCES As String = "Instances"
@@ -103,6 +104,7 @@ Module ConstIni
Public Const K_ENGRAVENUMBER2 As String = "EngraveNumber2" Public Const K_ENGRAVENUMBER2 As String = "EngraveNumber2"
Public Const K_ENGRAVEDEPTH As String = "EngraveDepth" Public Const K_ENGRAVEDEPTH As String = "EngraveDepth"
Public Const K_ENGRAVESHORT As String = "EngraveShort" Public Const K_ENGRAVESHORT As String = "EngraveShort"
Public Const K_ENGRAVEDEPTH2 As String = "EngraveDepth2"
Public Const K_DRIPOFFSET As String = "DripOffset" Public Const K_DRIPOFFSET As String = "DripOffset"
Public Const K_DRIPOFFSET2 As String = "DripOffset2" Public Const K_DRIPOFFSET2 As String = "DripOffset2"
Public Const K_DRIPDEPTH As String = "DripDepth" Public Const K_DRIPDEPTH As String = "DripDepth"
@@ -110,6 +112,7 @@ Module ConstIni
Public Const K_UNDERDRILLDEPTH As String = "UnderDrillDepth" Public Const K_UNDERDRILLDEPTH As String = "UnderDrillDepth"
Public Const K_FILOTOPOFFSET As String = "FiloTopOffset" Public Const K_FILOTOPOFFSET As String = "FiloTopOffset"
Public Const K_FILOTOPDEPTH As String = "FiloTopDepth" Public Const K_FILOTOPDEPTH As String = "FiloTopDepth"
Public Const K_FILOTOPROUNDOFF As String = "FiloTopRoundOff"
Public Const S_NEST As String = "Nest" Public Const S_NEST As String = "Nest"
Public Const K_DIRECT As String = "Direct" Public Const K_DIRECT As String = "Direct"
@@ -121,7 +124,7 @@ Module ConstIni
Public Const K_TEXTCOLOR As String = "TextColor" Public Const K_TEXTCOLOR As String = "TextColor"
Public Const K_AUTOMATICOPTIMIZE As String = "AutomaticOptimize" Public Const K_AUTOMATICOPTIMIZE As String = "AutomaticOptimize"
Public Const K_AUTOMATICMAXTIME As String = "AutomaticMaxTime" Public Const K_AUTOMATICMAXTIME As String = "AutomaticMaxTime"
Public Const K_DRAGRETTANGLE As String = "DragRettangle" Public Const K_DRAGRECTANGLE As String = "DragRectangle"
Public Const S_SPLIT As String = "Split" Public Const S_SPLIT As String = "Split"
Public Const K_MOVE_LEV As String = "MoveLevel" Public Const K_MOVE_LEV As String = "MoveLevel"
@@ -133,6 +136,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"
+1
View File
@@ -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">
+51 -9
View File
@@ -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
+1 -1
View File
@@ -71,7 +71,7 @@
<!--Quality--> <!--Quality-->
<ComboBox ItemsSource="{Binding CurrWaterjettingQualityList}" <ComboBox ItemsSource="{Binding CurrWaterjettingQualityList}"
SelectedItem="{Binding SelCurrWaterjettingQuality}" SelectedItem="{Binding SelCurrWaterjettingQuality}"
Visibility="{Binding CurrWaterjettingQuality_Visibility}" Visibility="{Binding CurrWaterjetting_Visibility}"
Margin="5,0,0,5" Margin="5,0,0,5"
Grid.Column="1"> Grid.Column="1">
</ComboBox> </ComboBox>
+1 -1
View File
@@ -290,7 +290,7 @@ Public Class CurrMachWindowVM
End Set End Set
End Property End Property
Private m_CurrWaterjetting_Visibility As Visibility Private m_CurrWaterjetting_Visibility As Visibility = Visibility.Collapsed
Public Property CurrWaterjetting_Visibility As Visibility Public Property CurrWaterjetting_Visibility As Visibility
Get Get
Return m_CurrWaterjetting_Visibility Return m_CurrWaterjetting_Visibility
+25
View File
@@ -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
+76
View File
@@ -95,6 +95,82 @@ Friend Module CamAuto
Return True Return True
End Function End Function
Friend Function ResetAllSplitCurv() As Boolean
Dim bOk As Boolean = True
Dim nIdPart As Integer = EgtGetFirstPart()
While nIdPart <> GDB_ID.NULL
' elimino il layer dei flag di separazione "AUX_SPLIT_WJ"
Dim IdAuxLayer As Integer = EgtGetFirstNameInGroup(nIdPart, "AUX_SPLIT_WJ")
EgtErase(IdAuxLayer)
' accedo al Layer OutLoop
Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP)
Dim nIdMy As Integer = EgtGetFirstInGroup(nIdLayerOutLoop)
While nIdMy <> GDB_ID.NULL
EgtRemoveInfo(nIdMy, "JoinEntity")
nIdMy = EgtGetNext(nIdMy)
End While
nIdPart = EgtGetNextPart(nIdPart)
End While
Dim nRawId As Integer = CamAuto.GetCurrentRaw()
nIdPart = EgtGetFirstPartInRawPart(nRawId)
While nIdPart <> GDB_ID.NULL
' elimino il layer dei flag di separazione "AUX_SPLIT_WJ"
Dim IdAuxLayer As Integer = EgtGetFirstNameInGroup(nIdPart, "AUX_SPLIT_WJ")
EgtErase(IdAuxLayer)
' accedo al Layer OutLoop
Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP)
Dim nIdMy As Integer = EgtGetFirstInGroup(nIdLayerOutLoop)
While nIdMy <> GDB_ID.NULL
EgtRemoveInfo(nIdMy, "JoinEntity")
nIdMy = EgtGetNext(nIdMy)
End While
nIdPart = EgtGetNextPartInRawPart(nIdPart)
End While
Return bOk
End Function
Friend Function ResetAllStartCurv() As Boolean
Dim bOk As Boolean = True
Dim nIdPart As Integer = EgtGetFirstPart()
While nIdPart <> GDB_ID.NULL
' accedo al Layer OutLoop
Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP)
EgtRemoveInfo(nIdLayerOutLoop, "Start")
nIdPart = EgtGetNextPart(nIdPart)
End While
Dim nRawId As Integer = CamAuto.GetCurrentRaw()
nIdPart = EgtGetFirstPartInRawPart(nRawId)
While nIdPart <> GDB_ID.NULL
' accedo al Layer OutLoop
Dim nIdLayerOutLoop As Integer = EgtGetFirstNameInGroup(nIdPart, NAME_OUTLOOP)
EgtRemoveInfo(nIdLayerOutLoop, "Start")
nIdPart = EgtGetNextPartInRawPart(nIdPart)
End While
Return bOk
End Function
Friend Function ResetAllBridges() As Boolean
Dim bOk As Boolean = True
Dim nMachGroup As Integer = EgtGetCurrMachGroup()
Dim nBridgesGroup As Integer = EgtGetFirstNameInGroup(nMachGroup, "Bridges")
bOk = EgtErase(nBridgesGroup)
Return bOk
End Function
' verifico che il contorno passato non sia stato separato
Friend Function VerifyOutLoopIsClosed(nIdLayerOutLoop As Integer) As Boolean
Dim nIdMy As Integer = EgtGetFirstInGroup(nIdLayerOutLoop)
While nIdMy <> GDB_ID.NULL
Dim nValInfo As Integer = 1
If EgtGetInfo(nIdMy, "JoinEntity", nValInfo) Then
If nValInfo = 0 Then Return False
End If
EgtRemoveInfo(nIdMy, "JoinEntity")
nIdMy = EgtGetNext(nIdMy)
End While
Return True
End Function
Friend Function RemoveFinalEmptyPhases() As Boolean Friend Function RemoveFinalEmptyPhases() As Boolean
Dim nOpeId As Integer = EgtGetLastOperation() Dim nOpeId As Integer = EgtGetLastOperation()
While nOpeId <> GDB_ID.NULL While nOpeId <> GDB_ID.NULL
+14
View File
@@ -33,6 +33,10 @@ Module ConstMach
Public Const KEY_VACLAY_SEL As String = "Sel" Public Const KEY_VACLAY_SEL As String = "Sel"
' Info in gruppo layout per angolo di rotazione preferito ' Info in gruppo layout per angolo di rotazione preferito
Public Const KEY_VACLAY_PREFROT As String = "PreferredRot" Public Const KEY_VACLAY_PREFROT As String = "PreferredRot"
Public Const KEY_VACLAY_PREFVROTXMINUS As String = "PrefVertRotXMinus"
Public Const KEY_VACLAY_PREFVROTXPLUS As String = "PrefVertRotXPlus"
Public Const KEY_VACLAY_PREFVROTYMINUS As String = "PrefVertRotYMinus"
Public Const KEY_VACLAY_PREFVROTYPLUS As String = "PrefVertRotYPlus"
' Info in gruppo layout per direzione di riferimento ventose per tagli da sotto ' Info in gruppo layout per direzione di riferimento ventose per tagli da sotto
Public Const KEY_VACLAY_DRIPREFDIR As String = "DripRefDir" Public Const KEY_VACLAY_DRIPREFDIR As String = "DripRefDir"
' Info in asse rotante ventosa per step discreti ' Info in asse rotante ventosa per step discreti
@@ -91,6 +95,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"
@@ -153,6 +160,7 @@ Module ConstMach
Public Const NAME_PREVIEW As String = "PV" Public Const NAME_PREVIEW As String = "PV"
' Info in layer contorno interno per FiloTop ' Info in layer contorno interno per FiloTop
Public Const INFO_FILOTOP As String = "FiloTop" Public Const INFO_FILOTOP As String = "FiloTop"
Public Const INFO_ROUNDOFF As String = "RoundOff"
' Info in entità da tagliare per affondamento ' Info in entità da tagliare per affondamento
Public Const INFO_DEPTH As String = "Depth" Public Const INFO_DEPTH As String = "Depth"
Public Const INFO_DEPTH2 As String = "Depth2" Public Const INFO_DEPTH2 As String = "Depth2"
@@ -244,6 +252,12 @@ Module ConstMach
Public Const SELECT_REGION_LAYER As String = "SelectRegion" Public Const SELECT_REGION_LAYER As String = "SelectRegion"
' Info in pezzo per stato rotazione ' Info in pezzo per stato rotazione
Public Const INFO_PARTROT As String = "ROT" Public Const INFO_PARTROT As String = "ROT"
' Info in entità in OutLoop per indicare se è separata WaterJet
Public Const INFO_JOINTENTITY As String = "JoinEntity"
' Nome layer per "*" inidcanti un lato separato nel taglio WaterJet
Public Const INFO_AUX_SPLIT_WJ As String = "AUX_SPLIT_WJ"
' Info in OutLoop per punto inzio lavorazione WaterJet
Public Const INFO_START As String = "Start"
' Nome di pezzo che è una cornice ' Nome di pezzo che è una cornice
Public Const NAME_FRAME As String = "Frame" Public Const NAME_FRAME As String = "Frame"
+5
View File
@@ -198,6 +198,10 @@
Public Const S_MACH_RAWMOVE As String = "RawMove" Public Const S_MACH_RAWMOVE As String = "RawMove"
Public Const K_MACH_RM_ROTATE As String = "Rotate" Public Const K_MACH_RM_ROTATE As String = "Rotate"
Public Const K_MACH_RM_FINALMOVE As String = "FinalMove" Public Const K_MACH_RM_FINALMOVE As String = "FinalMove"
Public Const K_MACH_WEIGHT_SINGLEPLUGGER As String = "MaxWeightSinglePlugger"
Public Const K_MACH_WEIGHT_DOUBLEPLUGGER As String = "MaxWeightDoublePlugger"
Public Const K_MACH_ROTATEVACUUMFOREXTRASTROKEY As String = "RotateVacuumForExtraStrokeY"
Public Const K_MACH_ROTATEVACUUMFOREXTRASTROKEX As String = "RotateVacuumForExtraStrokeX"
Public Const S_MACH_REG As String = "Reg" Public Const S_MACH_REG As String = "Reg"
Public Const K_MACH_MAX_ROT_ANG As String = "MaxRotAng" Public Const K_MACH_MAX_ROT_ANG As String = "MaxRotAng"
@@ -260,6 +264,7 @@
Public Const K_CURROFFICEMATERIAL As String = "CurrOfficeMaterial" Public Const K_CURROFFICEMATERIAL As String = "CurrOfficeMaterial"
Public Const K_MATERIAL As String = "Material" Public Const K_MATERIAL As String = "Material"
Public Const K_FROMDBWATERJET As String = "FromDBWaterJet" Public Const K_FROMDBWATERJET As String = "FromDBWaterJet"
Public Const K_AVERAGEDENSITY As String = "AverageDensity"
Public Const S_SETUP As String = "SetUp" Public Const S_SETUP As String = "SetUp"
Public Const K_DEFAULT As String = "Default" Public Const K_DEFAULT As String = "Default"
+321 -74
View File
@@ -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
View File
@@ -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
+152 -5
View File
@@ -8,7 +8,24 @@ Module VacuumCups
Private m_nVacId As Integer = GDB_ID.NULL Private m_nVacId As Integer = GDB_ID.NULL
Private m_nRefId As Integer = GDB_ID.NULL Private m_nRefId As Integer = GDB_ID.NULL
Private m_dPreferredRot As Double = 0 Private m_dPreferredRot As Double = 0
Private m_dPrefVertRotXMinus As Double = 0
Private m_dPrefVertRotXPlus As Double = 0
Private m_dPrefVertRotYMinus As Double = 0
Private m_dPrefVertRotYPlus As Double = 0
Private m_dDripRefAng As Double = 0 Private m_dDripRefAng As Double = 0
' dati carico massimo manipolatore
Private m_RawDensity As Double = 2500
Private m_RawWeight As Double = 0
Private m_MaxWeightSinglePlugger As Double = 250
Private m_MaxWeightDoublePlugger As Double = 750
Public bOverWeight As Boolean = False
' dati per rotazione ventose vicono al fine corsa Y e X
Private bRotateVacuumNearExtraStrokeY As Boolean = False
Private bRotateVacuumNearExtraStrokeX As Boolean = False
' dati stroke
Public bExtraStroke As Boolean = False
Public ptStartPointLift As Point3d
Public dDegRotStartAng As Double
' Nome del gruppo temporaneo per le ventose ' Nome del gruppo temporaneo per le ventose
Private Const VACTMP_GRP As String = "VacTmp" Private Const VACTMP_GRP As String = "VacTmp"
@@ -48,6 +65,20 @@ Module VacuumCups
Return m_nVacType Return m_nVacType
End Function End Function
Friend Sub GetWeightInformation(Density As Double, MaxSingle As Double, MaxDouble As Double)
m_RawDensity = Density
m_MaxWeightSinglePlugger = MaxSingle
m_MaxWeightDoublePlugger = MaxDouble
End Sub
Friend Sub GetRotationForExtraStrokeY(Rotate As Boolean)
bRotateVacuumNearExtraStrokeY = Rotate
End Sub
Friend Sub GetRotationForExtraStrokeX(Rotate As Boolean)
bRotateVacuumNearExtraStrokeX = Rotate
End Sub
Friend Function GetVacuumId() As Integer Friend Function GetVacuumId() As Integer
Return m_nVacId Return m_nVacId
End Function End Function
@@ -64,6 +95,8 @@ Module VacuumCups
' Identificativo riferimento della testa nella macchina ' Identificativo riferimento della testa nella macchina
Dim nT1Id As Integer = EgtGetFirstNameInGroup(EgtGetHeadId(VACUUM_HEAD), HEAD_FIRST_EXIT) Dim nT1Id As Integer = EgtGetFirstNameInGroup(EgtGetHeadId(VACUUM_HEAD), HEAD_FIRST_EXIT)
If nT1Id = GDB_ID.NULL Then Return False If nT1Id = GDB_ID.NULL Then Return False
' imposto la l'uscita della ventosa come fosse l'uscita di un utensile
EgtSetCalcTool("", "H4", 1)
' Creo gruppo temporaneo in cui copiarli ' Creo gruppo temporaneo in cui copiarli
m_nTempId = EgtCreateGroup(GDB_ID.ROOT) m_nTempId = EgtCreateGroup(GDB_ID.ROOT)
If m_nTempId = GDB_ID.NULL Then Return False If m_nTempId = GDB_ID.NULL Then Return False
@@ -73,7 +106,12 @@ Module VacuumCups
m_nVacId = EgtCopyGlob(nLayId, m_nTempId) m_nVacId = EgtCopyGlob(nLayId, m_nTempId)
If m_nVacId = GDB_ID.NULL Then Return False If m_nVacId = GDB_ID.NULL Then Return False
' Angolo di rotazione preferito ' Angolo di rotazione preferito
EgtGetInfo( m_nVacId, KEY_VACLAY_PREFROT, m_dPreferredRot) EgtGetInfo(m_nVacId, KEY_VACLAY_PREFROT, m_dPreferredRot)
' Angoli di rotazione preferiti per ventosa in verticale (lungo Y) a sinistra e a destra del centro tavola
EgtGetInfo(m_nVacId, KEY_VACLAY_PREFVROTXMINUS, m_dPrefVertRotXMinus)
EgtGetInfo(m_nVacId, KEY_VACLAY_PREFVROTXPLUS, m_dPrefVertRotXPlus)
EgtGetInfo(m_nVacId, KEY_VACLAY_PREFVROTYMINUS, m_dPrefVertRotYMinus)
EgtGetInfo(m_nVacId, KEY_VACLAY_PREFVROTYPLUS, m_dPrefVertRotYPlus)
' Direzione di riferimento per tagli Drip ' Direzione di riferimento per tagli Drip
EgtGetInfo( m_nVacId, KEY_VACLAY_DRIPREFDIR, m_dDripRefAng) EgtGetInfo( m_nVacId, KEY_VACLAY_DRIPREFDIR, m_dDripRefAng)
' Nascondo il gruppo ma rendo visibili le curve di contorno delle ventose ' Nascondo il gruppo ma rendo visibili le curve di contorno delle ventose
@@ -160,6 +198,18 @@ Module VacuumCups
EgtGetBBoxGlob(nRKerfId, GDB_BB.STANDARD, b3Kerf) EgtGetBBoxGlob(nRKerfId, GDB_BB.STANDARD, b3Kerf)
Dim ptKerfCen As Point3d Dim ptKerfCen As Point3d
EgtCentroid(nRKerfId, GDB_ID.ROOT, ptKerfCen) EgtCentroid(nRKerfId, GDB_ID.ROOT, ptKerfCen)
'-------------------- INIZIO CALCOLO PESO --------------------
' recupero l'area del grezzo da muovere
Dim RawArea As Double = 0
' superficie del grezzo senza considerare eventuali fori
EgtSurfFrGrossArea(nRKerfId, RawArea)
' volume calcolato in mmc
Dim RawVolume As Double = RawArea * b3Raw.DimZ()
' peso calolato in kg
m_RawWeight = RawVolume * m_RawDensity / Math.Pow(10, 9)
'-------------------- FINE CALCOLO PESO --------------------
' Eseguo ricerca ' Eseguo ricerca
If FindVacuumCupsOnRaw(nRawId, ptRawCen, b3Kerf, ptKerfCen, nKerfId, nRKerfId, rmData) Then If FindVacuumCupsOnRaw(nRawId, ptRawCen, b3Kerf, ptKerfCen, nKerfId, nRKerfId, rmData) Then
Return True Return True
@@ -261,6 +311,7 @@ Module VacuumCups
Dim sCups() As String = Nothing Dim sCups() As String = Nothing
Dim sCups2() As String = Nothing Dim sCups2() As String = Nothing
If Not GetVacuumCupSelection(nI, sCups, sCups2) Then Return False If Not GetVacuumCupSelection(nI, sCups, sCups2) Then Return False
bExtraStroke = False
' Determino validità soluzioni della configurazione ' Determino validità soluzioni della configurazione
Dim vtMove As New Vector3d Dim vtMove As New Vector3d
Dim ptRotCen As New Point3d Dim ptRotCen As New Point3d
@@ -363,6 +414,26 @@ Module VacuumCups
If b3Vac.IsEmpty() Then Return INFINITO If b3Vac.IsEmpty() Then Return INFINITO
' Se box maggiore di quello del pezzo, scarto soluzione ' Se box maggiore di quello del pezzo, scarto soluzione
If b3Vac.Radius() > b3Raw.Radius() Then Return INFINITO If b3Vac.Radius() > b3Raw.Radius() Then Return INFINITO
'-------------------- INIZIO VERIFICA PESO --------------------
bOverWeight = False
Select Case GetPluggerFromCameras(sCups)
Case 2
' se peso del grezzo oltre il limite consentito allora scarto la soluzione
If m_RawWeight > m_MaxWeightDoublePlugger Then
bOverWeight = True
Return INFINITO
End If
Case 1
' se peso del grezzo oltre il limite consentito allora scarto la soluzione
If m_RawWeight > m_MaxWeightSinglePlugger Then
bOverWeight = True
Return INFINITO
End If
End Select
'-------------------- FINE VERIFICA PESO --------------------
' Recupero l'area della tavola
Dim b3Tab As New BBox3d
EgtGetTableArea(1, b3Tab)
' Determino il movimento ' Determino il movimento
vtMove = ptRawCen - b3Vac.Center() vtMove = ptRawCen - b3Vac.Center()
b3Vac.Move(vtMove) b3Vac.Move(vtMove)
@@ -374,11 +445,26 @@ Module VacuumCups
frMinRect.VersX().ToSpherical(dLen, dAngVertDeg, dAngOrizzDeg) frMinRect.VersX().ToSpherical(dLen, dAngVertDeg, dAngOrizzDeg)
dRotAngDeg = dAngOrizzDeg dRotAngDeg = dAngOrizzDeg
If b3Vac.DimY() > b3Vac.DimX() + EPS_SMALL Then dRotAngDeg -= 90 If b3Vac.DimY() > b3Vac.DimX() + EPS_SMALL Then dRotAngDeg -= 90
Dim dPreferredRot As Double = m_dPreferredRot
If bRotateVacuumNearExtraStrokeX And (Math.Abs(dRotAngDeg - 90) < 45 Or Math.Abs(dRotAngDeg - 270) < 45) Then
If frMinRect.Orig().x < b3Tab.Center().x Then
dPreferredRot = m_dPrefVertRotXMinus
Else
dPreferredRot = m_dPrefVertRotXPlus
End If
ElseIf bRotateVacuumNearExtraStrokeY And (Math.Abs(dRotAngDeg - 90) > 45 Or Math.Abs(dRotAngDeg - 270) > 45) Then
' se l'orientemanto è orizzontale e la macchina è stata abilitata
If frMinRect.Orig().y < b3Tab.Center().y Then
dPreferredRot = m_dPrefVertRotYPlus
Else
dPreferredRot = m_dPrefVertRotYMinus
End If
End If
Dim dAngDelta As Double = If( Math.Abs( b3Vac.DimY() - b3Vac.DimX()) < 10 * EPS_SMALL, 90, 180) Dim dAngDelta As Double = If( Math.Abs( b3Vac.DimY() - b3Vac.DimX()) < 10 * EPS_SMALL, 90, 180)
While dRotAngDeg - m_dPreferredRot >= dAngDelta / 2 While dRotAngDeg - dPreferredRot >= dAngDelta / 2
dRotAngDeg -= dAngDelta dRotAngDeg -= dAngDelta
End While End While
While dRotAngDeg - m_dPreferredRot <= -dAngDelta / 2 While dRotAngDeg - dPreferredRot <= -dAngDelta / 2
dRotAngDeg += dAngDelta dRotAngDeg += dAngDelta
End While End While
Else Else
@@ -430,13 +516,53 @@ Module VacuumCups
' Applico movimento e rotazione al punto ' Applico movimento e rotazione al punto
ptRef.Move(vtMove) ptRef.Move(vtMove)
ptRef.Rotate(ptRotCen, Vector3d.Z_AX(), dRotAngDeg) ptRef.Rotate(ptRotCen, Vector3d.Z_AX(), dRotAngDeg)
' -------------- INIZIO verifica di essere nel limite delle corse macchina --------------
If VerifyOutOfStrokes(ptRef, dRotAngDeg) <> 0 Then
bExtraStroke = True
Return INFINITO
End If
' se la posizione è accettbaile allora salvo i dati
ptStartPointLift = ptRef
dDegRotStartAng = dRotAngDeg
' -------------- FINE verifica di essere nel limite delle corse macchina --------------
' Ne calcolo la distanza dal centro della tavola ' Ne calcolo la distanza dal centro della tavola
Dim b3Tab As New BBox3d
EgtGetTableArea(1, b3Tab)
Dim dDist As Double = Point3d.DistXY(ptRef, b3Tab.Center()) Dim dDist As Double = Point3d.DistXY(ptRef, b3Tab.Center())
Return dDist Return dDist
End Function End Function
' assegante le posizioni del centro delle ventose e l'angolo di posizionamento orizzontale verifica che la posizione sia raggiungibile
Public Function VerifyOutOfStrokes(ptRef As Point3d, dRotAngDeg As Double) As Integer
Dim dX, dY, dZ As Double
Dim nStat As Integer
Dim dCHome As Double
EgtGetAxisHomePos("C", dCHome)
' imposto la l'uscita della ventosa come fosse l'uscita di un utensile
EgtSetCalcTool("", "H4", 1)
EgtGetCalcPositions(ptRef, dRotAngDeg + dCHome, 0, nStat, dX, dY, dZ)
EgtVerifyOutstroke(dX, dY, dZ, dRotAngDeg + dCHome, 0, nStat)
Return nStat
End Function
' dall'informazione di extra corsa recupera il valore indicato
Public Function GetExtraStrokeValue(sInfo As String) As Double
Dim dExtraStroke As Double = 0
Dim sItems As String() = sInfo.Split("="c)
If sItems.Count = 2 Then
Dim nStartIndex As Integer = 0
For Each ItemChar As Char In sItems(1)
If ItemChar = "("c Then
Exit For
End If
nStartIndex += 1
Next
If nStartIndex > 0 Then
Dim sValue As String = sItems(1).Remove(nStartIndex, sItems(1).Count - nStartIndex)
StringToLen(sValue, dExtraStroke)
End If
End If
Return dExtraStroke
End Function
Private Function TestVacuumCups(nCups() As Integer, nRawRegId As Integer, Private Function TestVacuumCups(nCups() As Integer, nRawRegId As Integer,
vtMove As Vector3d, ptRotCen As Point3d, dRotAngDeg As Double) As Boolean vtMove As Vector3d, ptRotCen As Point3d, dRotAngDeg As Double) As Boolean
' Eseguo verifica delle ventose rispetto al grezzo ' Eseguo verifica delle ventose rispetto al grezzo
@@ -457,6 +583,27 @@ Module VacuumCups
Return bVacOk Return bVacOk
End Function End Function
Private Function GetPluggerFromCameras(sCups() As String) As Integer
Dim nCountPlunger As Integer = 1
Dim bPlugger1 As Boolean = False
Dim bPlugger2 As Boolean = False
For Each Camera As String In sCups
If (Camera.Contains("1") Or Camera.Contains("2") Or Camera.Contains("3")) Then
bPlugger1 = True
Else
bPlugger2 = True
End If
Next
' verifico quali sono le camere attive
If bPlugger1 And bPlugger2 Then
nCountPlunger = 2
ElseIf Not bPlugger1 And Not bPlugger2 Then
nCountPlunger = 0
End If
' restituisco il numero di Plugger in uso
Return nCountPlunger
End Function
Friend Function SaveOneMoveInfo(nId As Integer, rmData As RawMoveData) As Boolean Friend Function SaveOneMoveInfo(nId As Integer, rmData As RawMoveData) As Boolean
' Assegno le informazioni ' Assegno le informazioni
EgtSetInfo(nId, "Id", rmData.m_nId) EgtSetInfo(nId, "Id", rmData.m_nId)
+2 -1
View File
@@ -984,7 +984,8 @@ Friend Module VeinMatching
' Esporto il file come immagine ' Esporto il file come immagine
EgtSetCurrentContext(m_nVeinCtx) EgtSetCurrentContext(m_nVeinCtx)
Dim bOk As Boolean = (EgtGetFileType(sFilePath) = FT.IMG) Dim bOk As Boolean = (EgtGetFileType(sFilePath) = FT.IMG)
bOk = bOk AndAlso EgtGetImage(EgtGetShowMode(), New Color3d(255, 255, 255), New Color3d(255, 255, 255), bOk = bOk AndAlso EgtGetImage(DirectCast( EgtGetShowMode(), EgtInterface.SM),
New Color3d(255, 255, 255), New Color3d(255, 255, 255),
m_nImgWidth, m_nImgHeight, sFilePath) m_nImgWidth, m_nImgHeight, sFilePath)
' Ripristino il contesto originale ' Ripristino il contesto originale
EgtSetCurrentContext(nMainCtx) EgtSetCurrentContext(nMainCtx)
+9 -3
View File
@@ -192,11 +192,13 @@ Public Class MainWindowM
Dim sNestKey As String = "" Dim sNestKey As String = ""
EgtUILib.GetPrivateProfileString( S_LICENCE, K_NESTKEY, "", sNestKey, sLicFile) EgtUILib.GetPrivateProfileString( S_LICENCE, K_NESTKEY, "", sNestKey, sLicFile)
EgtSetNestKey( sNestKey) EgtSetNestKey( sNestKey)
Dim bNetHwKey As Boolean = ( GetMainPrivateProfileInt(S_GENERAL, K_NETKEY, 0) = 1)
EgtSetNetHwKey( bNetHwKey)
' Verifico abilitazione nesting automatico ' Verifico abilitazione nesting automatico
m_bAutoNestOption = Not String.IsNullOrWhiteSpace( sNestKey) m_bAutoNestOption = Not String.IsNullOrWhiteSpace( sNestKey)
' Recupero livello e opzioni della chiave ' Recupero livello e opzioni della chiave
Dim bKey As Boolean = EgtGetKeyLevel(9423, 2401, 1, m_nKeyLevel) And Dim bKey As Boolean = EgtGetKeyLevel(9423, 2406, 1, m_nKeyLevel) And
EgtGetKeyOptions(9423, 2401, 1, m_nKeyOptions) EgtGetKeyOptions(9423, 2406, 1, m_nKeyOptions)
' Verifico abilitazione prodotto ' Verifico abilitazione prodotto
Dim bProd As Boolean = GetKeyOption(KEY_OPT.OFFICE_BASE) Dim bProd As Boolean = GetKeyOption(KEY_OPT.OFFICE_BASE)
' Inizializzazione generale di EgtInterface ' Inizializzazione generale di EgtInterface
@@ -267,10 +269,14 @@ Public Class MainWindowM
EgtOutLog("KeyOptions : " & bKey.ToString() & " " & m_nKeyOptions.ToString() & " " & bProd.ToString()) EgtOutLog("KeyOptions : " & bKey.ToString() & " " & m_nKeyOptions.ToString() & " " & bProd.ToString())
EgtPHOTOLib.MainData.SetConfigDir(m_sConfigDir) EgtPHOTOLib.MainData.SetConfigDir(m_sConfigDir)
EgtPHOTOLib.MainData.SetKeyLevel(m_nKeyLevel) EgtPHOTOLib.MainData.SetKeyLevel(m_nKeyLevel)
EgtPHOTOLib.MainData.SetKeyOptions( CInt( m_nKeyOptions)) EgtPHOTOLib.MainData.SetKeyOptions(CInt(m_nKeyOptions))
EgtPHOTOLib.MainData.SetPhotoDir(m_sPhotoDir) EgtPHOTOLib.MainData.SetPhotoDir(m_sPhotoDir)
EgtPHOTOLib.MainData.SetBackUpDir(m_sBackUpDir) EgtPHOTOLib.MainData.SetBackUpDir(m_sBackUpDir)
EgtPHOTOLib.MainData.SetIsOmagOFFICE(True) EgtPHOTOLib.MainData.SetIsOmagOFFICE(True)
EgtPHOTOLib.MainData.SetUser(Environment.MachineName & "\" & Environment.UserName & " (" & nInstance.ToString() & ")")
Dim sIdKey As String = String.Empty
EgtGetKeyInfo(sIdKey)
EgtPHOTOLib.MainData.SetKey(sIdKey)
End Sub End Sub
Private Sub ManageInstance() Private Sub ManageInstance()
+2 -2
View File
@@ -69,6 +69,6 @@ Imports System.Windows
' by using the '*' as shown below: ' by using the '*' as shown below:
' <Assembly: AssemblyVersion("1.0.*")> ' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("2.4.1.3")> <Assembly: AssemblyVersion("2.4.7.1")>
<Assembly: AssemblyFileVersion("2.4.1.3")> <Assembly: AssemblyFileVersion("2.4.7.1")>
+5 -1
View File
@@ -111,7 +111,7 @@ Public Class MyMachGroupPanelVM
Dim nTabInd As Integer = 1 Dim nTabInd As Integer = 1
Dim nTabCnt As Integer = CamAuto.GetTableCount() Dim nTabCnt As Integer = CamAuto.GetTableCount()
If nTabCnt > 1 And nTabCnt <= 3 Then If nTabCnt > 1 And nTabCnt <= 3 Then
Dim dlg As New SelectTableWindowV(Application.Current.MainWindow, New SelectTableWindowVM(nTabCnt)) Dim dlg As New SelectTableWindowV(Application.Current.MainWindow, New SelectTableWindowVM(DirectCast(nTabCnt, SelectTableWindowVM.TableNumOpt)))
dlg.ShowDialog() dlg.ShowDialog()
nTabInd = dlg.m_SelTable nTabInd = dlg.m_SelTable
End If End If
@@ -248,6 +248,10 @@ Public Class MyMachGroupPanelVM
' aggiungo alla lista delle lastre correnti/orig ' aggiungo alla lista delle lastre correnti/orig
Dim sSlabNameDB As String = GetSlabName() Dim sSlabNameDB As String = GetSlabName()
LoadSlabsList(sSlabNameDB) LoadSlabsList(sSlabNameDB)
' imposto la visibilità dei comandi per il waterjet
OmagOFFICEMap.refNestingTabVM.Set_WJ_Cmd_Visibility()
Return True Return True
End Function End Function
+31 -2
View File
@@ -223,6 +223,8 @@ Public Class MySceneHostVM
End Sub End Sub
Private Function ExecExport(sDirDest As String) As Boolean Private Function ExecExport(sDirDest As String) As Boolean
' salvo il nome della macchina correntemente selezionata
Dim CurrentSelectedMachGroup As String = OmagOFFICEMap.refMachGroupPanelVM.SelectedMachGroup.Machine
' Path completa del progetto corrente ' Path completa del progetto corrente
Dim sFilePath As String = String.Empty Dim sFilePath As String = String.Empty
EgtGetCurrFilePath(sFilePath) EgtGetCurrFilePath(sFilePath)
@@ -282,10 +284,10 @@ Public Class MySceneHostVM
File.Copy(sOriPath, sNewPath, True) File.Copy(sOriPath, sNewPath, True)
Catch ex As Exception Catch ex As Exception
bOk = False bOk = False
EgtOutLog( "Slab image not found :" & sOriPath) EgtOutLog("Slab image not found :" & sOriPath)
End Try End Try
EgtSetName(nPhotoId, PHOTO_NAME) EgtSetName(nPhotoId, PHOTO_NAME)
EgtChangePhotoCenterAsFlatScan( nPhotoId) EgtChangePhotoCenterAsFlatScan(nPhotoId)
End If End If
' Elimino gli altri gruppi di lavorazioni ' Elimino gli altri gruppi di lavorazioni
For Each nMGrpId As Integer In vMchGrps For Each nMGrpId As Integer In vMchGrps
@@ -308,6 +310,25 @@ Public Class MySceneHostVM
Dim nMarkId As Integer = EgtCreateGroup(GDB_ID.ROOT) Dim nMarkId As Integer = EgtCreateGroup(GDB_ID.ROOT)
EgtSetName(nMarkId, NAME_PROJMARK) EgtSetName(nMarkId, NAME_PROJMARK)
EgtSetLevel(nMarkId, GDB_LV.SYSTEM) EgtSetLevel(nMarkId, GDB_LV.SYSTEM)
' Imposto la macchina: salvo l'altezza della sovratavola
Dim sMachine As String = String.Empty
EgtGetInfo(nMchGrpId, "Machine", sMachine)
If Not String.IsNullOrEmpty(sMachine) Then
InitCurrentMachine(OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot, sMachine,
OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.PRODUCTION_LINE),
OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.ENABLE_MILL),
OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.ENABLE_POLISHING),
OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.ENABLE_WJ),
True)
Select Case GetCurrentTable()
Case 3
EgtSetInfo(nMarkId, K_TAB3_ADDITIONALTABLE, CurrentMachine.dAdditionalTable)
Case 2
EgtSetInfo(nMarkId, K_TAB2_ADDITIONALTABLE, CurrentMachine.dAdditionalTable)
Case Else
EgtSetInfo(nMarkId, K_ADDITIONALTABLE, CurrentMachine.dAdditionalTable)
End Select
End If
Dim nReducedCut As Integer = 1 Dim nReducedCut As Integer = 1
EgtGetInfo(nMchGrpId, INFO_REDUCEDCUT, nReducedCut) EgtGetInfo(nMchGrpId, INFO_REDUCEDCUT, nReducedCut)
EgtSetInfo(nMarkId, INFO_REDUCEDCUT, nReducedCut) EgtSetInfo(nMarkId, INFO_REDUCEDCUT, nReducedCut)
@@ -326,6 +347,13 @@ Public Class MySceneHostVM
' Salvo il file ' Salvo il file
If Not EgtSaveFile(sFileDest, NGE.CMPTEXT) Then bOk = False If Not EgtSaveFile(sFileDest, NGE.CMPTEXT) Then bOk = False
Next Next
' reimposto la macchina corrente
InitCurrentMachine(OmagOFFICEMap.refMainWindowVM.MainWindowM.sMachinesRoot, CurrentSelectedMachGroup,
OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.PRODUCTION_LINE),
OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.ENABLE_MILL),
OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.ENABLE_POLISHING),
OmagOFFICEMap.refMainWindowVM.MainWindowM.GetKeyOption(KEY_OPT.ENABLE_WJ),
True)
' Distruggo il contesto corrente e ripristino quello originale ' Distruggo il contesto corrente e ripristino quello originale
EgtSetCurrentContext(nCurrCtx) EgtSetCurrentContext(nCurrCtx)
EgtDeleteContext(nCtx) EgtDeleteContext(nCtx)
@@ -769,6 +797,7 @@ Public Class MySceneHostVM
Case OptionPanelVM.Tabs.NESTING Case OptionPanelVM.Tabs.NESTING
OmagOFFICEMap.refNestingTabVM.OnKeyDownScene(sender, e) OmagOFFICEMap.refNestingTabVM.OnKeyDownScene(sender, e)
Case OptionPanelVM.Tabs.MACHINING Case OptionPanelVM.Tabs.MACHINING
OmagOFFICEMap.refSplitModeVM.OnKeyDownScene(sender, e)
Case OptionPanelVM.Tabs.SIMUL Case OptionPanelVM.Tabs.SIMUL
End Select End Select
End Sub End Sub
+8
View File
@@ -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>
+12 -5
View File
@@ -224,13 +224,17 @@ Public Class MachiningTabVM
End Property End Property
Public Sub Prev(ByVal param As Object) Public Sub Prev(ByVal param As Object)
Dim bOk As Boolean = True
' Dichiaro solo visualizzazione ' Dichiaro solo visualizzazione
m_bIsShow = True m_bIsShow = True
If m_MachiningMode = MachiningModeOpt.SPLIT Then If m_MachiningMode = MachiningModeOpt.SPLIT Then
OmagOFFICEMap.refSplitModeVM.ExitSplitRaw(False) OmagOFFICEMap.refSplitModeVM.ExitSplitRaw(False)
Else Else
OmagOFFICEMap.refMoveRawModeVM.ExitMoveRaw() ' verifico collisione dei pezzi in fase di scarico
bOk = OmagOFFICEMap.refMoveRawModeVM.ExitMoveRaw()
End If End If
' se trovata interferenza tra grezzi (dopo movimentazione) esco
If Not bOk Then Return
' Torno alla fase precedente ' Torno alla fase precedente
EgtSetCurrPhase(EgtGetCurrPhase() - 1) EgtSetCurrPhase(EgtGetCurrPhase() - 1)
' Si va sempre in Split ' Si va sempre in Split
@@ -255,19 +259,22 @@ Public Class MachiningTabVM
End Property End Property
Public Sub NextCmd(ByVal param As Object) Public Sub NextCmd(ByVal param As Object)
Dim bOk As Boolean = True
If m_MachiningMode = MachiningModeOpt.SPLIT Then If m_MachiningMode = MachiningModeOpt.SPLIT Then
OmagOFFICEMap.refSplitModeVM.ExitSplitRaw(False) OmagOFFICEMap.refSplitModeVM.ExitSplitRaw(False)
MachiningMode = MachiningModeOpt.MOVERAWPART MachiningMode = MachiningModeOpt.MOVERAWPART
AutoVisibility = Visibility.Hidden AutoVisibility = Visibility.Hidden
OmagOFFICEMap.refMoveRawModeVM.InitMoveRaw() bOk = OmagOFFICEMap.refMoveRawModeVM.InitMoveRaw()
Else Else
OmagOFFICEMap.refMoveRawModeVM.ExitMoveRaw() ' se verificata una interferenza allora esco
bOk = OmagOFFICEMap.refMoveRawModeVM.ExitMoveRaw()
If Not bOk Then Return
MachiningMode = MachiningModeOpt.SPLIT MachiningMode = MachiningModeOpt.SPLIT
AutoVisibility = Visibility.Visible AutoVisibility = Visibility.Visible
OmagOFFICEMap.refSplitModeVM.InitSplitRaw() OmagOFFICEMap.refSplitModeVM.InitSplitRaw()
End If End If
' Aggiorno possibilità di uscire ' Se non ci sono interferenze tra i grezzi -> aggiorno possibilità di uscire
ManageExit() If bOk Then ManageExit()
End Sub End Sub
#End Region ' NextCommand #End Region ' NextCommand
@@ -4,6 +4,7 @@
xmlns:EgtWPFLib5="clr-namespace:EgtWPFLib5;assembly=EgtWPFLib5" xmlns:EgtWPFLib5="clr-namespace:EgtWPFLib5;assembly=EgtWPFLib5"
IsMinimizable="False" IsMinimizable="False"
ShowInTaskbar="False" ShowInTaskbar="False"
Title="{Binding Title}"
Style="{DynamicResource {x:Type EgtWPFLib5:EgtCustomWindow}}" Style="{DynamicResource {x:Type EgtWPFLib5:EgtCustomWindow}}"
Height="200" Width="400" Height="200" Width="400"
WindowStartupLocation="CenterOwner"> WindowStartupLocation="CenterOwner">
@@ -3,6 +3,15 @@ Imports EgtUILib
Public Class ModifStartEndCutWindowVM Public Class ModifStartEndCutWindowVM
Private m_Title As String = String.Empty
Public Property Title As String
Get
Return m_Title
End Get
Set(value As String)
m_Title = value
End Set
End Property
Public ReadOnly Property ValueMsg As String Public ReadOnly Property ValueMsg As String
Get Get
Return EgtMsg(MSG_SPLITPAGEUC + 35) Return EgtMsg(MSG_SPLITPAGEUC + 35)
@@ -4,6 +4,7 @@
xmlns:EgtWPFLib5="clr-namespace:EgtWPFLib5;assembly=EgtWPFLib5" xmlns:EgtWPFLib5="clr-namespace:EgtWPFLib5;assembly=EgtWPFLib5"
IsMinimizable="False" IsMinimizable="False"
ShowInTaskbar="False" ShowInTaskbar="False"
Title="{Binding Title}"
Style="{DynamicResource {x:Type EgtWPFLib5:EgtCustomWindow}}" Style="{DynamicResource {x:Type EgtWPFLib5:EgtCustomWindow}}"
Height="400" Width="400" Height="400" Width="400"
WindowStartupLocation="CenterOwner"> WindowStartupLocation="CenterOwner">
@@ -6,6 +6,15 @@ Imports EgtWPFLib5
Public Class ModifStartEndWjWindowVM Public Class ModifStartEndWjWindowVM
Inherits VMBase Inherits VMBase
Private m_Title As String = String.Empty
Public Property Title As String
Get
Return m_Title
End Get
Set(value As String)
m_Title = value
End Set
End Property
Public ReadOnly Property ValueMsg As String Public ReadOnly Property ValueMsg As String
Get Get
Return EgtMsg(MSG_SPLITPAGEUC + 35) Return EgtMsg(MSG_SPLITPAGEUC + 35)
+259 -13
View File
@@ -17,6 +17,7 @@ Public Class MoveRawModeVM
Private m_bRemovedRaw As Boolean = False ' flag per rimozione manuale pezzi Private m_bRemovedRaw As Boolean = False ' flag per rimozione manuale pezzi
Private m_RawMoveDataList As New List(Of RawMoveData) ' dati di movimento Private m_RawMoveDataList As New List(Of RawMoveData) ' dati di movimento
Private m_bRawWithCups As Boolean = False ' flag per pezzo corrente con ventose Private m_bRawWithCups As Boolean = False ' flag per pezzo corrente con ventose
Private m_CurrRawOnVacuum As Integer = GDB_ID.NULL ' identificativo pezzo correntemente attaccato alle ventose
Private m_dMoveStep As Double Private m_dMoveStep As Double
Public Property MoveStep As String Public Property MoveStep As String
@@ -108,6 +109,17 @@ Public Class MoveRawModeVM
#Region "METHODS" #Region "METHODS"
Friend Function InitMoveRaw() As Boolean Friend Function InitMoveRaw() As Boolean
'' verifico che il pezzo sia depositabile
'If VerifyCollisionWithOtherRawPart(m_CurrRawOnVacuum) Then
' ' mantengo la selezione del pezzo
' EgtSetStatus(m_CurrRawOnVacuum, GDB_ST.SEL)
' OmagOFFICEMap.refStatusBarVM.SetOutputMessage("Collisione pezzi", 3, MSG_TYPE.ERROR_)
' EgtDraw()
' ' non cambio pagina
' Return False
'End If
' resetto l'inidice del pezzo da mnovimentare
m_CurrRawOnVacuum = GDB_ID.NULL
' Deseleziono tutto ' Deseleziono tutto
EgtDeselectAll() EgtDeselectAll()
' Recupero i tagli allungati prima definiti ' Recupero i tagli allungati prima definiti
@@ -158,14 +170,14 @@ Public Class MoveRawModeVM
' Distanza iniziale ' Distanza iniziale
m_dCurrDist = 0 m_dCurrDist = 0
End If End If
' Non dovrebbe mai accadere, ma inizializzo con default ' Non dovrebbe mai accadere, ma inizializzo con default
Else Else
m_vtDir = Vector3d.Y_AX() m_vtDir = Vector3d.Y_AX()
m_ptMid = Point3d.ORIG() m_ptMid = Point3d.ORIG()
m_dOrigDist = 0 m_dOrigDist = 0
m_dCurrDist = 0 m_dCurrDist = 0
End If End If
' Altrimenti movimento con ventose ' Altrimenti movimento con ventose
Else Else
m_bRemovedRaw = False m_bRemovedRaw = False
m_bRawWithCups = False m_bRawWithCups = False
@@ -182,7 +194,7 @@ Public Class MoveRawModeVM
If OmagOFFICEMap.refMachiningTabVM.ByHand Then If OmagOFFICEMap.refMachiningTabVM.ByHand Then
LRArrowVisibility = Visibility.Hidden LRArrowVisibility = Visibility.Hidden
RotationVisibility = Visibility.Hidden RotationVisibility = Visibility.Hidden
' Altrimenti per movimento con ventose ' Altrimenti per movimento con ventose
Else Else
LRArrowVisibility = Visibility.Visible LRArrowVisibility = Visibility.Visible
RotationVisibility = If(CurrentMachine.bRawSplMovRotate, Visibility.Visible, Visibility.Hidden) RotationVisibility = If(CurrentMachine.bRawSplMovRotate, Visibility.Visible, Visibility.Hidden)
@@ -195,6 +207,17 @@ Public Class MoveRawModeVM
End Function End Function
Friend Function ExitMoveRaw() As Boolean Friend Function ExitMoveRaw() As Boolean
' verifico che il pezzo sia depositabile
If VerifyCollisionWithOtherRawPart(m_CurrRawOnVacuum) Then
' mantengo la selezione del pezzo
EgtSetStatus(m_CurrRawOnVacuum, GDB_ST.SEL)
OmagOFFICEMap.refStatusBarVM.SetOutputMessage("Collisione pezzi", 3, MSG_TYPE.ERROR_)
EgtDraw()
' non cambio pagina
Return False
End If
' resetto l'inidice del pezzo da mnovimentare
m_CurrRawOnVacuum = GDB_ID.NULL
' Deseleziono tutto ' Deseleziono tutto
EgtDeselectAll() EgtDeselectAll()
' Se movimento con ventose ' Se movimento con ventose
@@ -249,6 +272,141 @@ Public Class MoveRawModeVM
NotifyPropertyChanged("MoveStep") NotifyPropertyChanged("MoveStep")
End Sub End Sub
' verifica che la posizione di rialascio sia corretta, altrimenti coreggo il vettore di posizione
Private Function VerifyReleasdPositionIsValid(ByRef vtMove As Vector3d) As Boolean
Dim bOk As Boolean = True
' determino il punto finale dello spostamento
Dim ptEndPointLift As Point3d = VacuumCups.ptStartPointLift
ptEndPointLift.x += vtMove.x
ptEndPointLift.y += vtMove.y
Dim sInfo As String = String.Empty
Select Case VacuumCups.VerifyOutOfStrokes(ptEndPointLift, VacuumCups.dDegRotStartAng)
Case 1
' extra corsa sulla x-: devo ridurre del valore di extra corsa
EgtGetOutstrokeInfo(sInfo)
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_SIMULATIONPAGEUC + 2) & " " & sInfo, 3, MSG_TYPE.WARNING) 'Extracorsa ...
ptEndPointLift.x -= vtMove.x
Dim dMaxMove As Double = VacuumCups.GetExtraStrokeValue(sInfo)
If Math.Abs(dMaxMove - vtMove.x) <= EPS_SMALL * 100 Then
vtMove.x = 0
Else
vtMove.x -= dMaxMove - EPS_SMALL * 100
End If
ptEndPointLift.x += vtMove.x
bOk = False
Case 2
' extra corsa sulla x+: devo ridurre del valore di extra corsa
EgtGetOutstrokeInfo(sInfo)
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_SIMULATIONPAGEUC + 2) & " " & sInfo, 3, MSG_TYPE.WARNING) 'Extracorsa ...
ptEndPointLift.x -= vtMove.x
Dim dMaxMove As Double = VacuumCups.GetExtraStrokeValue(sInfo)
If Math.Abs(dMaxMove - vtMove.x) <= EPS_SMALL * 100 Then
vtMove.x = 0
Else
vtMove.x -= dMaxMove + EPS_SMALL * 100
End If
ptEndPointLift.x += vtMove.x
bOk = False
Case 4
' extra corsa sulla y-
EgtGetOutstrokeInfo(sInfo)
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_SIMULATIONPAGEUC + 2) & " " & sInfo, 3, MSG_TYPE.WARNING) 'Extracorsa ...
ptEndPointLift.y -= vtMove.y
Dim dMaxMove As Double = VacuumCups.GetExtraStrokeValue(sInfo)
If Math.Abs(dMaxMove - vtMove.y) <= EPS_SMALL * 100 Then
vtMove.y = 0
Else
vtMove.y -= dMaxMove - EPS_SMALL * 100
End If
ptEndPointLift.y += vtMove.y
bOk = False
Case 8
' extra corsa sulla y+
EgtGetOutstrokeInfo(sInfo)
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_SIMULATIONPAGEUC + 2) & " " & sInfo, 3, MSG_TYPE.WARNING) 'Extracorsa ...
ptEndPointLift.y -= vtMove.y
Dim dMaxMove As Double = VacuumCups.GetExtraStrokeValue(sInfo)
If Math.Abs(dMaxMove - vtMove.y) <= EPS_SMALL * 100 Then
vtMove.y = 0
Else
vtMove.y -= dMaxMove + EPS_SMALL * 100
End If
ptEndPointLift.y += vtMove.y
bOk = False
End Select
' il movimento del pezzo è accettabile, aggiorno le posizione per la verifica dello step successivo
VacuumCups.ptStartPointLift = ptEndPointLift
Return bOk
End Function
' verifica che la posizione di rialascio sia corretta, altrimenti coreggo l'angolo di posizione
Private Function VerifyReleasdAngleIsValid(ByRef dAngDeg As Double, ByVal ptCenter As Point3d) As Boolean
Dim bOk As Boolean = True
' determino il punto finale dello spostamento
Dim ptEndPointLift As Point3d = VacuumCups.ptStartPointLift
Dim dDegRotEndAng As Double = VacuumCups.dDegRotStartAng + dAngDeg
ptEndPointLift.Rotate(ptCenter, Vector3d.Z_AX(), dAngDeg)
Dim sInfo As String = String.Empty
Select Case VacuumCups.VerifyOutOfStrokes(ptEndPointLift, dDegRotEndAng)
Case 16
' extra corsa sulla c-
EgtGetOutstrokeInfo(sInfo)
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_SIMULATIONPAGEUC + 2) & " " & sInfo, 3, MSG_TYPE.WARNING) 'Extracorsa ...
ptEndPointLift.Rotate(ptCenter, Vector3d.Z_AX(), -dAngDeg)
dDegRotEndAng -= dAngDeg
dAngDeg += VacuumCups.GetExtraStrokeValue(sInfo) + EPS_SMALL
dDegRotEndAng += dAngDeg
ptEndPointLift.Rotate(ptCenter, Vector3d.Z_AX(), dAngDeg)
bOk = False
Case 34
' extra corsa sulla c+
EgtGetOutstrokeInfo(sInfo)
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_SIMULATIONPAGEUC + 2) & " " & sInfo, 3, MSG_TYPE.WARNING) 'Extracorsa ...
ptEndPointLift.Rotate(ptCenter, Vector3d.Z_AX(), -dAngDeg)
dDegRotEndAng -= dAngDeg
dAngDeg -= VacuumCups.GetExtraStrokeValue(sInfo) + EPS_SMALL
dDegRotEndAng += dAngDeg
ptEndPointLift.Rotate(ptCenter, Vector3d.Z_AX(), dAngDeg)
bOk = False
End Select
' il movimento del pezzo è accettabile, aggiorno le posizione per la verifica dello step successivo
VacuumCups.ptStartPointLift = ptEndPointLift
VacuumCups.dDegRotStartAng = dDegRotEndAng
Return bOk
End Function
' Veririfica che il grezzo non entri in colliosione con altri pezzi
Private Function VerifyCollisionWithOtherRawPart(nIdOnVacumm As Integer) As Boolean
If nIdOnVacumm = GDB_ID.NULL Then Return False
' Creo gruppo temporaneo in cui generare le superfici per la veririfica di collisione
Dim m_nTempId As Integer = EgtCreateGroup(GDB_ID.ROOT)
If m_nTempId = GDB_ID.NULL Then Return False
EgtSetName(m_nTempId, "RawTemp")
Dim nIdActualRawOutLine As Integer = EgtGetFirstNameInGroup(nIdOnVacumm, "RawOutline")
Dim ActualRawFlatRegion As Integer = EgtCreateSurfFlatRegion(m_nTempId, nIdActualRawOutLine)
Dim nCurrPhase As Integer = EgtGetCurrPhase()
Dim nRawGroupId = EgtGetParent(EgtGetFirstRawPart())
Dim nIdRaw As Integer = EgtGetFirstRawPart()
' ciclo su tutti i grezzi per veririficare eventuali collisioni
While nIdRaw <> GDB_ID.NULL
' verifico la fase del grezzo
If EgtVerifyRawPartCurrPhase(nIdRaw) And nIdOnVacumm <> nIdRaw Then
' recupero il contorno del pezzo
Dim nIdRawOutLine As Integer = EgtGetFirstNameInGroup(nIdRaw, "RawOutline")
Dim nIdRawFlatRegion As Integer = EgtCreateSurfFlatRegion(m_nTempId, nIdRawOutLine)
If EgtSurfFrIntersect(nIdRawFlatRegion, ActualRawFlatRegion) Then
If EgtExistsObj(nIdRawFlatRegion) Then
EgtErase(m_nTempId)
' esiste una intersezione delle superfici
Return True
End If
End If
End If
nIdRaw = EgtGetNextRawPart(nIdRaw)
End While
EgtErase(m_nTempId)
Return False
End Function
#End Region ' METHODS #End Region ' METHODS
#Region "COMMANDS" #Region "COMMANDS"
@@ -286,9 +444,15 @@ Public Class MoveRawModeVM
Else Else
If m_bRawWithCups Then If m_bRawWithCups Then
Dim vtMove As New Vector3d(0, m_dMoveStep, 0) Dim vtMove As New Vector3d(0, m_dMoveStep, 0)
' ----------- INIZIO verifica di essere entro i limiti macchina -----------
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
VerifyReleasdPositionIsValid(vtMove)
' ----------- FINE verifica di essere entro i limiti macchina -----------
If EgtMoveRawPart(nRawId, vtMove) Then If EgtMoveRawPart(nRawId, vtMove) Then
EgtMove(GetVacuumId(), vtMove, GDB_RT.GLOB) EgtMove(GetVacuumId(), vtMove, GDB_RT.GLOB)
AddRawMoveData(nRawId, vtMove, m_RawMoveDataList) AddRawMoveData(nRawId, vtMove, m_RawMoveDataList)
Else
VacuumCups.ptStartPointLift.y -= vtMove.y
End If End If
Else Else
' Pezzo troppo piccolo : non si può muovere ' Pezzo troppo piccolo : non si può muovere
@@ -320,9 +484,15 @@ Public Class MoveRawModeVM
While nRawId <> GDB_ID.NULL While nRawId <> GDB_ID.NULL
If m_bRawWithCups Then If m_bRawWithCups Then
Dim vtMove As New Vector3d(-m_dMoveStep, 0, 0) Dim vtMove As New Vector3d(-m_dMoveStep, 0, 0)
' ----------- INIZIO verifica di essere entro i limiti macchina -----------
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
VerifyReleasdPositionIsValid(vtMove)
' ----------- FINE verifica di essere entro i limiti macchina -----------
If EgtMoveRawPart(nRawId, vtMove) Then If EgtMoveRawPart(nRawId, vtMove) Then
EgtMove(GetVacuumId(), vtMove, GDB_RT.GLOB) EgtMove(GetVacuumId(), vtMove, GDB_RT.GLOB)
AddRawMoveData(nRawId, vtMove, m_RawMoveDataList) AddRawMoveData(nRawId, vtMove, m_RawMoveDataList)
Else
VacuumCups.ptStartPointLift.x -= vtMove.x
End If End If
Else Else
' Pezzo troppo piccolo : non si può muovere ' Pezzo troppo piccolo : non si può muovere
@@ -353,9 +523,15 @@ Public Class MoveRawModeVM
While nRawId <> GDB_ID.NULL While nRawId <> GDB_ID.NULL
If m_bRawWithCups Then If m_bRawWithCups Then
Dim vtMove As New Vector3d(m_dMoveStep, 0, 0) Dim vtMove As New Vector3d(m_dMoveStep, 0, 0)
' ----------- INIZIO verifica di essere entro i limiti macchina -----------
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
VerifyReleasdPositionIsValid(vtMove)
' ----------- FINE verifica di essere entro i limiti macchina -----------
If EgtMoveRawPart(nRawId, vtMove) Then If EgtMoveRawPart(nRawId, vtMove) Then
EgtMove(GetVacuumId(), vtMove, GDB_RT.GLOB) EgtMove(GetVacuumId(), vtMove, GDB_RT.GLOB)
AddRawMoveData(nRawId, vtMove, m_RawMoveDataList) AddRawMoveData(nRawId, vtMove, m_RawMoveDataList)
Else
VacuumCups.ptStartPointLift.x -= vtMove.x
End If End If
Else Else
' Pezzo troppo piccolo : non si può muovere ' Pezzo troppo piccolo : non si può muovere
@@ -403,9 +579,15 @@ Public Class MoveRawModeVM
Else Else
If m_bRawWithCups Then If m_bRawWithCups Then
Dim vtMove As New Vector3d(0, -m_dMoveStep, 0) Dim vtMove As New Vector3d(0, -m_dMoveStep, 0)
' ----------- INIZIO verifica di essere entro i limiti macchina -----------
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
VerifyReleasdPositionIsValid(vtMove)
' ----------- FINE verifica di essere entro i limiti macchina -----------
If EgtMoveRawPart(nRawId, vtMove) Then If EgtMoveRawPart(nRawId, vtMove) Then
EgtMove(GetVacuumId(), vtMove, GDB_RT.GLOB) EgtMove(GetVacuumId(), vtMove, GDB_RT.GLOB)
AddRawMoveData(nRawId, vtMove, m_RawMoveDataList) AddRawMoveData(nRawId, vtMove, m_RawMoveDataList)
Else
VacuumCups.ptStartPointLift.y -= vtMove.y
End If End If
Else Else
' Pezzo troppo piccolo : non si può muovere ' Pezzo troppo piccolo : non si può muovere
@@ -437,12 +619,19 @@ Public Class MoveRawModeVM
While nRawId <> GDB_ID.NULL While nRawId <> GDB_ID.NULL
If m_bRawWithCups Then If m_bRawWithCups Then
Dim dAng As Double = m_dRotationStep Dim dAng As Double = m_dRotationStep
' ----------- INIZIO verifica di essere entro i limiti macchina -----------
' Recupero il centro del grezzo
Dim ptRawCen As Point3d
EgtGetRawPartCenter(nRawId, ptRawCen)
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
VerifyReleasdAngleIsValid(dAng, ptRawCen)
' ----------- FINE verifica di essere entro i limiti macchina -----------
If EgtRotateRawPart(nRawId, Vector3d.Z_AX(), dAng) Then If EgtRotateRawPart(nRawId, Vector3d.Z_AX(), dAng) Then
' Recupero il centro del grezzo
Dim ptRawCen As Point3d
EgtGetRawPartCenter(nRawId, ptRawCen)
EgtRotate(GetVacuumId(), ptRawCen, Vector3d.Z_AX(), dAng, GDB_RT.GLOB) EgtRotate(GetVacuumId(), ptRawCen, Vector3d.Z_AX(), dAng, GDB_RT.GLOB)
AddRawMoveData(nRawId, dAng, m_RawMoveDataList) AddRawMoveData(nRawId, dAng, m_RawMoveDataList)
Else
VacuumCups.ptStartPointLift.Rotate(ptRawCen, Vector3d.Z_AX(), dAng)
VacuumCups.dDegRotStartAng -= dAng
End If End If
Else Else
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_MOVERAWPAGEUC + 2), 3, MSG_TYPE.WARNING) OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_MOVERAWPAGEUC + 2), 3, MSG_TYPE.WARNING)
@@ -472,12 +661,19 @@ Public Class MoveRawModeVM
While nRawId <> GDB_ID.NULL While nRawId <> GDB_ID.NULL
If m_bRawWithCups Then If m_bRawWithCups Then
Dim dAng As Double = -m_dRotationStep Dim dAng As Double = -m_dRotationStep
' ----------- INIZIO verifica di essere entro i limiti macchina -----------
' Recupero il centro del grezzo
Dim ptRawCen As Point3d
EgtGetRawPartCenter(nRawId, ptRawCen)
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
VerifyReleasdAngleIsValid(dAng, ptRawCen)
' ----------- FINE verifica di essere entro i limiti macchina -----------
If EgtRotateRawPart(nRawId, Vector3d.Z_AX(), dAng) Then If EgtRotateRawPart(nRawId, Vector3d.Z_AX(), dAng) Then
' Recupero il centro del grezzo
Dim ptRawCen As Point3d
EgtGetRawPartCenter(nRawId, ptRawCen)
EgtRotate(GetVacuumId(), ptRawCen, Vector3d.Z_AX(), dAng, GDB_RT.GLOB) EgtRotate(GetVacuumId(), ptRawCen, Vector3d.Z_AX(), dAng, GDB_RT.GLOB)
AddRawMoveData(nRawId, dAng, m_RawMoveDataList) AddRawMoveData(nRawId, dAng, m_RawMoveDataList)
Else
VacuumCups.ptStartPointLift.Rotate(ptRawCen, Vector3d.Z_AX(), dAng)
VacuumCups.dDegRotStartAng -= dAng
End If End If
Else Else
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_MOVERAWPAGEUC + 2), 3, MSG_TYPE.WARNING) OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_MOVERAWPAGEUC + 2), 3, MSG_TYPE.WARNING)
@@ -545,17 +741,49 @@ Public Class MoveRawModeVM
' Se trovato il grezzo ' Se trovato il grezzo
If nParentId = nRawGroupId Then If nParentId = nRawGroupId Then
Dim nStat As Integer = GDB_ST.ON_ Dim nStat As Integer = GDB_ST.ON_
' Se il pezzo corrente è selezionato allora lo disattivo -> deposito del pezzo
EgtGetStatus(nId, nStat) EgtGetStatus(nId, nStat)
If nStat = GDB_ST.SEL Then If nStat = GDB_ST.SEL Then
EgtSetStatus(nId, GDB_ST.ON_) EgtSetStatus(nId, GDB_ST.ON_)
' Se con ventose, le nascondo ' prima di rilasciare il pezzo verifico che non vada in collisione con altri pezzi sulla tavola
If Not OmagOFFICEMap.refMachiningTabVM.ByHand Then EgtSetStatus(GetVacuumId(), GDB_ST.OFF) If VerifyCollisionWithOtherRawPart(nId) Then
' mantengo la selezione del pezzo
EgtSetStatus(nId, GDB_ST.SEL)
OmagOFFICEMap.refStatusBarVM.SetOutputMessage("Collisione pezzi", 3, MSG_TYPE.ERROR_)
Else
' Se con ventose, le nascondo
If Not OmagOFFICEMap.refMachiningTabVM.ByHand Then EgtSetStatus(GetVacuumId(), GDB_ST.OFF)
End If
Else Else
' verifico che il pezzo precedente possa essere depositato correttamente
If VerifyCollisionWithOtherRawPart(m_CurrRawOnVacuum) Then
' mantengo la selezione del pezzo
EgtSetStatus(m_CurrRawOnVacuum, GDB_ST.SEL)
OmagOFFICEMap.refStatusBarVM.SetOutputMessage("Collisione pezzi", 3, MSG_TYPE.ERROR_)
EgtDraw()
' esco dal ciclo, prima devo depositare correttamente il pezzo
Exit While
End If
' salvo l'indice del pezzo correntemente attaccato alle ventose
m_CurrRawOnVacuum = nId
EgtDeselectAll() EgtDeselectAll()
EgtSetStatus(nId, GDB_ST.SEL) EgtSetStatus(nId, GDB_ST.SEL)
' Se con ventose, le posiziono sul grezzo ' Se con ventose, le posiziono sul grezzo
If Not OmagOFFICEMap.refMachiningTabVM.ByHand Then If Not OmagOFFICEMap.refMachiningTabVM.ByHand Then
Dim rmData As New RawMoveData Dim rmData As New RawMoveData
' inizializzo i dati del grezzo per il cacolo del peso
Dim MaxSinglePlugger As Double = 250
MaxSinglePlugger = GetPrivateProfileDouble(S_MACH_RAWMOVE, K_MACH_WEIGHT_SINGLEPLUGGER, MaxSinglePlugger, sMachIniFile)
Dim MaxDoublePlugger As Double = 750
MaxDoublePlugger = GetPrivateProfileDouble(S_MACH_RAWMOVE, K_MACH_WEIGHT_DOUBLEPLUGGER, MaxDoublePlugger, sMachIniFile)
Dim AverageDensity As Double = 2700
AverageDensity = GetPrivateProfileDouble(S_MATERIALS, K_AVERAGEDENSITY, AverageDensity, sMachIniFile)
VacuumCups.GetWeightInformation(AverageDensity, MaxSinglePlugger, MaxDoublePlugger)
VacuumCups.GetRotationForExtraStrokeY(GetPrivateProfileInt(S_MACH_RAWMOVE, K_MACH_ROTATEVACUUMFOREXTRASTROKEY, 0, sMachIniFile) <> 0)
VacuumCups.GetRotationForExtraStrokeX(GetPrivateProfileInt(S_MACH_RAWMOVE, K_MACH_ROTATEVACUUMFOREXTRASTROKEX, 0, sMachIniFile) <> 0)
If PutVacuumCupsOnRaw(nId, rmData) Then If PutVacuumCupsOnRaw(nId, rmData) Then
' Visualizzo le ventose ' Visualizzo le ventose
EgtSetStatus(GetVacuumId(), GDB_ST.ON_) EgtSetStatus(GetVacuumId(), GDB_ST.ON_)
@@ -565,10 +793,19 @@ Public Class MoveRawModeVM
' Reset eventuale messaggio ' Reset eventuale messaggio
OmagOFFICEMap.refStatusBarVM.ClearOutputMessage() OmagOFFICEMap.refStatusBarVM.ClearOutputMessage()
Else Else
' Visualizzo le ventose
EgtSetStatus(GetVacuumId(), GDB_ST.OFF)
' Aggiorno i dati ' Aggiorno i dati
m_bRawWithCups = False m_bRawWithCups = False
' Messaggio di avvertimento (Pezzo troppo piccolo : non si può muovere) If VacuumCups.bOverWeight Then
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_MOVERAWPAGEUC + 2), 3, MSG_TYPE.WARNING) ' Messaggio di avvertimento (Pezzo troppo piccolo : non si può muovere)
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_MOVERAWPAGEUC + 4), 3, MSG_TYPE.WARNING)
ElseIf VacuumCups.bExtraStroke Then
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_MOVERAWPAGEUC + 5), 3, MSG_TYPE.WARNING) 'Pezzo oltre le corse : non si può muovere
Else
' Messaggio di avvertimento (Pezzo troppo piccolo : non si può muovere)
OmagOFFICEMap.refStatusBarVM.SetOutputMessage(EgtMsg(MSG_MOVERAWPAGEUC + 2), 3, MSG_TYPE.WARNING)
End If
End If End If
End If End If
End If End If
@@ -577,6 +814,15 @@ Public Class MoveRawModeVM
End If End If
nId = EgtGetNextObjInSelWin() nId = EgtGetNextObjInSelWin()
End While End While
' clicco su un oggetto che non è un grezzo -> verifico che il pezzo precedente possa essere depositato correttamente
If VerifyCollisionWithOtherRawPart(m_CurrRawOnVacuum) Then
' mantengo la selezione del pezzo
EgtSetStatus(m_CurrRawOnVacuum, GDB_ST.SEL)
OmagOFFICEMap.refStatusBarVM.SetOutputMessage("Collisione pezzi", 3, MSG_TYPE.ERROR_)
EgtDraw()
End If
End Sub End Sub
#End Region ' EVENTS #End Region ' EVENTS
+37 -18
View File
@@ -29,11 +29,13 @@
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<Button Grid.Column="1" <Button Grid.Column="1"
IsEnabled="{Binding bEnabledCommandMove}"
Style="{StaticResource OptionPanel_Button}" Style="{StaticResource OptionPanel_Button}"
Command="{Binding MoveUpCommand}"> Command="{Binding MoveUpCommand}">
<Image Source="/Resources/MachiningTab/UpArrow.png"/> <Image Source="/Resources/MachiningTab/UpArrow.png"/>
</Button> </Button>
<Button Grid.Column="2" <Button Grid.Column="2"
IsEnabled="{Binding bEnabledCommandMove}"
Style="{StaticResource OptionPanel_Button}" Style="{StaticResource OptionPanel_Button}"
Command="{Binding MoveDownCommand}"> Command="{Binding MoveDownCommand}">
<Image Source="/Resources/MachiningTab/DownArrow.png"/> <Image Source="/Resources/MachiningTab/DownArrow.png"/>
@@ -67,23 +69,38 @@
<StackPanel> <StackPanel>
<UniformGrid Columns="3" Margin="0,0,0,5"> <UniformGrid Columns="3" Margin="0,0,0,5">
<Grid>
<Button Content="{Binding CutMsg}" <Button Content="{Binding CutMsg}"
Style="{StaticResource OptionPanel_TextWrapButton}" Style="{StaticResource OptionPanel_TextWrapButton}"
Command="{Binding CutCommand}" Command="{Binding CutCommand}"
Visibility="{Binding CutBtnVisibility}" Visibility="{Binding CutBtnVisibility}"
Margin="0,0,2.5,0"/> Margin="0,0,2.5,0"/>
<ToggleButton Grid.Row="0"
Content="{Binding BridgeMsg}"
Style="{StaticResource OptionPanel_ToggleWrapButton}"
IsChecked="{Binding BridgeBtn_IsChecked}"
Visibility="{Binding BridgeBtnVisibility}"
Margin="0,0,2.5,0" Padding="0"/>
</Grid>
<Button Content="{Binding CutStartMsg}" <Button Content="{Binding CutStartMsg}"
Style="{StaticResource OptionPanel_TextWrapButton}" Style="{StaticResource OptionPanel_TextWrapButton}"
Command="{Binding CutStartCommand}" Command="{Binding CutStartCommand}"
Visibility="{Binding CutStartBtnVisibility}" Visibility="{Binding CutStartBtnVisibility}"
Margin="2.5,0,2.5,0"/> Margin="2.5,0,2.5,0"/>
<Button Content="{Binding CutEndMsg}" <Grid>
Style="{StaticResource OptionPanel_TextWrapButton}" <Button Content="{Binding CutEndMsg}"
Command="{Binding CutEndCommand}" Style="{StaticResource OptionPanel_TextWrapButton}"
Visibility="{Binding CutEndBtnVisibility}" Command="{Binding CutEndCommand}"
Margin="2.5,0,0,0"/> Visibility="{Binding CutEndBtnVisibility}"
Margin="2.5,0,0,0"/>
<ToggleButton Grid.Row="0"
Content="{Binding BridgeDeleteMsg}"
Style="{StaticResource OptionPanel_ToggleWrapButton}"
IsChecked="{Binding BridgeDeleteBtn_IsChecked}"
Visibility="{Binding BridgeDeleteBtnVisibility}"
Margin="2.5,0,0,0" Padding="0"/>
</Grid>
</UniformGrid> </UniformGrid>
<Grid Visibility="{Binding AllExtRedVisibility}"> <Grid Visibility="{Binding AllExtRedVisibility}">
@@ -136,23 +153,25 @@
</UniformGrid> </UniformGrid>
<UniformGrid Columns="3" Margin="0,0,0,5"> <UniformGrid Columns="3" Margin="0,0,0,5">
<Button Content="{Binding OutCenEndMsg}" <Button Content="{Binding OutCenEndMsg}"
Style="{StaticResource OptionPanel_TextWrapButton}" Style="{StaticResource OptionPanel_TextWrapButton}"
Command="{Binding OutCenEndCommand}" Command="{Binding OutCenEndCommand}"
Visibility="{Binding OutCenEndBtnVisibility}" Visibility="{Binding OutCenEndBtnVisibility}"
Margin="0,0,2.5,0" Padding="0"/> Margin="0,0,2.5,0" Padding="0"/>
<Button Content="{Binding AllOutEndMsg}" <Button Content="{Binding AllOutEndMsg}"
Style="{StaticResource OptionPanel_TextWrapButton}" Style="{StaticResource OptionPanel_TextWrapButton}"
Command="{Binding AllOutEndCommand}" Command="{Binding AllOutEndCommand}"
Visibility="{Binding AllOutEndBtnVisibility}" Visibility="{Binding AllOutEndBtnVisibility}"
Margin="2.5,0,2.5,0"/> Margin="2.5,0,2.5,0"/>
<Button Content="{Binding AllCenEndMsg}" <Button Content="{Binding AllCenEndMsg}"
Style="{StaticResource OptionPanel_TextWrapButton}" Style="{StaticResource OptionPanel_TextWrapButton}"
Command="{Binding AllCenEndCommand}" Command="{Binding AllCenEndCommand}"
Visibility="{Binding AllCenEndBtnVisibility}" Visibility="{Binding AllCenEndBtnVisibility}"
Margin="2.5,0,0,0"/> Margin="2.5,0,0,0"/>
</UniformGrid> </UniformGrid>
<UniformGrid Columns="3" Margin="0,0,0,5"> <UniformGrid Columns="3" Margin="0,0,0,5">
File diff suppressed because it is too large Load Diff
@@ -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
+34 -19
View File
@@ -137,34 +137,49 @@
</Border> </Border>
<UniformGrid Grid.Column="0" Columns="2" Margin="0,0,0,5"> <UniformGrid Grid.Column="0" Columns="2" Margin="0,0,0,5">
<Button Content="{Binding InsertPartMsg}" <Button Content="{Binding InsertPartMsg}"
Style="{StaticResource OptionPanel_TextButton}" Style="{StaticResource OptionPanel_TextButton}"
Command="{Binding InsertPartCommand}" Command="{Binding InsertPartCommand}"
Margin="0,0,2.5,0"/> Margin="0,0,2.5,0"/>
<Button Content="{Binding StorePartMsg}" <Button Content="{Binding StorePartMsg}" Grid.Column="1"
Style="{StaticResource OptionPanel_TextButton}" Style="{StaticResource OptionPanel_TextButton}"
Command="{Binding StorePartCommand}" Command="{Binding StorePartCommand}"
Margin="2.5,0,0,0"/> Margin="2.5,0,0,0"/>
<!--<ToggleButton Content="{Binding StartCurvWJMsg}" Grid.Column="2"
Visibility="{Binding StartCurvWJ_Visibility}"
Style="{StaticResource OptionPanel_ToggleButton}"
IsChecked="{Binding bStartCurvWJ}"
Margin="2.5,0,2.5,0"/>-->
</UniformGrid> </UniformGrid>
<Grid Margin="0,0,-2.5,5"> <UniformGrid Grid.Column="0" Columns="{Binding CountColumn}" Margin="0,0,0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Button Content="{Binding RemovePartMsg}" <Button Content="{Binding RemovePartMsg}"
Grid.ColumnSpan="{Binding DragRettangle_Cl_Span}"
Style="{StaticResource OptionPanel_TextButton}" Style="{StaticResource OptionPanel_TextButton}"
Command="{Binding RemovePartCommand}" Command="{Binding RemovePartCommand}"
Margin="0,0,2.5,0"/> Margin="0,0,2.5,0"/>
<ToggleButton Content="{Binding DragRettangleMsg}" Grid.Column="1" <ToggleButton Content="{Binding DragRectangleMsg}" Grid.Column="1"
Visibility="{Binding DragRettangle_Visibility}" Visibility="{Binding DragRectangle_Visibility}"
Style="{StaticResource OptionPanel_ToggleButton}" Style="{StaticResource OptionPanel_ToggleButton}"
IsChecked="{Binding bDragRettangle}" IsChecked="{Binding bDragRectangle}"
Margin="2.5,0,2.5,0"/> Margin="2.5,0,2.5,0"/>
</Grid> <!--<ToggleButton Content="{Binding SplitCurvWJMsg}" Grid.Column="2"
Visibility="{Binding SplitCurvWJ_Visibility}"
Style="{StaticResource OptionPanel_ToggleButton}"
IsChecked="{Binding bSplitCurvWJ}"
Margin="2.5,0,2.5,0"/>-->
</UniformGrid>
<UniformGrid Grid.Column="0" Columns="2" Margin="0,0,0,5" Visibility="{Binding WJ_Cmd_Visibility}">
<ToggleButton Content="{Binding SplitCurvWJMsg}" Grid.Column="2"
Style="{StaticResource OptionPanel_ToggleButton}"
IsChecked="{Binding bSplitCurvWJ}"
Margin="2.5,0,2.5,0"/>
<ToggleButton Content="{Binding StartCurvWJMsg}" Grid.Column="2"
Style="{StaticResource OptionPanel_ToggleButton}"
IsChecked="{Binding bStartCurvWJ}"
Margin="2.5,0,2.5,0"/>
</UniformGrid>
<UniformGrid Columns="2" Margin="0,0,0,5"> <UniformGrid Columns="2" Margin="0,0,0,5">
<Button Content="{Binding SelectAllMsg}" <Button Content="{Binding SelectAllMsg}"
File diff suppressed because it is too large Load Diff
+31 -5
View File
@@ -1,4 +1,6 @@
Imports System.IO Imports System.Threading
Imports System.Windows.Threading
Imports System.IO
Imports System.Collections.ObjectModel Imports System.Collections.ObjectModel
Imports EgtWPFLib5 Imports EgtWPFLib5
Imports EgtPHOTOLib Imports EgtPHOTOLib
@@ -7,6 +9,10 @@ Imports EgtUILib
Public Class RawPartTabVM Public Class RawPartTabVM
Inherits VMBase Inherits VMBase
' Timer
Private m_TimerIsBusy As Boolean = False
Private m_RefreshTimer As New DispatcherTimer
Friend OmagPhoto As OmagPhotoV Friend OmagPhoto As OmagPhotoV
Private m_OmagPhotoVM As OmagPhotoVM Private m_OmagPhotoVM As OmagPhotoVM
@@ -1678,8 +1684,11 @@ Public Class RawPartTabVM
End Sub End Sub
Private Sub AdjustRawPartOnExit() Private Sub AdjustRawPartOnExit()
' Se non c'è il grezzo, esco ' Se non c'è il grezzo, esco dopo aver nascosto eventuale foto
If EstCalc.GetRawId() = GDB_ID.NULL Then Return If EstCalc.GetRawId() = GDB_ID.NULL Then
ShowPhoto(False)
Return
End If
' Disabilito impostazione modificato ' Disabilito impostazione modificato
Dim bOldEnMod = EgtGetEnableModified() Dim bOldEnMod = EgtGetEnableModified()
If bOldEnMod Then EgtDisableModified() If bOldEnMod Then EgtDisableModified()
@@ -2031,11 +2040,17 @@ Public Class RawPartTabVM
' inserisco in elenco solo i materiali della macchina corrente ' inserisco in elenco solo i materiali della macchina corrente
AddHandler PhotoMap.refOptionPanelVM.SlabIsSelectedOFFICE, AddressOf OmagOFFICEMap.refRawPartTabVM.ClosePhotoWnd AddHandler PhotoMap.refOptionPanelVM.SlabIsSelectedOFFICE, AddressOf OmagOFFICEMap.refRawPartTabVM.ClosePhotoWnd
' Dim OmagPhotoWnd As New OmagPhotoV(Application.Current.MainWindow(), New OmagPhotoVM) ' lancio il timer di aggiornamento dell'interfaccia, per la gestione di due OmagPHOTO che accedono allo stesso SQL
'OmagPhotoWnd.ShowDialog() AddHandler m_RefreshTimer.Tick, AddressOf RefreshTimer_Tick
m_RefreshTimer.Interval = TimeSpan.FromMilliseconds(2000)
m_RefreshTimer.Start()
' apro la finestra per accedere al DB delle lastre
Me.OmagPhoto = New OmagPhotoV Me.OmagPhoto = New OmagPhotoV
OmagPhoto.ShowDialog() OmagPhoto.ShowDialog()
m_RefreshTimer.Stop()
EgtSetCurrentContext(EgtPHOTOLib.MainData.PreviousContext) EgtSetCurrentContext(EgtPHOTOLib.MainData.PreviousContext)
EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx()) EgtSetCurrentContext(OmagOFFICEMap.refSceneHostVM.MainScene.GetCtx())
@@ -2153,6 +2168,17 @@ Public Class RawPartTabVM
EgtDraw() EgtDraw()
End Sub End Sub
' per la gestione di due OmagPHOTO che accedono allo stesso SQL
Private Sub RefreshTimer_Tick()
If Not m_TimerIsBusy And PhotoMap.refProjectVM.SelProjectMode = ProjectSlabVM.ProjectModeOpt.LIST Then
m_TimerIsBusy = True
m_RefreshTimer.Stop()
EgtPHOTOLib.PhotoMap.refListPageVM.RefreshLisPage()
m_TimerIsBusy = False
m_RefreshTimer.Start()
End If
End Sub
#End Region ' PhotoCommand #End Region ' PhotoCommand
#Region "ConfirmPhotoCommand" #Region "ConfirmPhotoCommand"
+1 -1
View File
@@ -71,7 +71,7 @@ Public Class OptionWindowVM
OmagOFFICEMap.refRawPartTabVM.Refresh(PrevMeasureUnit) OmagOFFICEMap.refRawPartTabVM.Refresh(PrevMeasureUnit)
OmagOFFICEMap.refNestingTabVM.Refresh(PrevMeasureUnit) OmagOFFICEMap.refNestingTabVM.Refresh(PrevMeasureUnit)
OmagOFFICEMap.refMoveRawModeVM.Refresh(PrevMeasureUnit) OmagOFFICEMap.refMoveRawModeVM.Refresh(PrevMeasureUnit)
OmagOFFICEMap.refSimulTabVM.MySimul.Refresh(PrevMeasureUnit) If Not IsNothing(OmagOFFICEMap.refSimulTabVM.MySimul) Then OmagOFFICEMap.refSimulTabVM.MySimul.Refresh(PrevMeasureUnit)
End If End If
End Set End Set
End Property End Property
+14 -1
View File
@@ -172,6 +172,19 @@
Grid.Column="1"/> Grid.Column="1"/>
</Grid> </Grid>
</Grid> <Grid Visibility="{Binding Parameter5_Visibility}"
Grid.Row="5"
Margin="0,0,0,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.8*"/>
<ColumnDefinition Width="1.2*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Parameter5Msg}" Grid.Row="2"/>
<CheckBox IsChecked="{Binding Parameter5ChBx}" HorizontalAlignment="Center"
Grid.Column="1"/>
</Grid>
</Grid>
</UserControl> </UserControl>
+235 -19
View File
@@ -143,6 +143,7 @@ Public Class SideEntityControlVM
StringToLen(value, m_Parameter1) StringToLen(value, m_Parameter1)
' Recupero il valore ' Recupero il valore
StringToLen(value, m_dDripOffset) StringToLen(value, m_dDripOffset)
StringToLen(value, m_dOffsetFiloTop)
' Creo le geometrie dei gocciolatoi ' Creo le geometrie dei gocciolatoi
RefreshSideAngleText() RefreshSideAngleText()
' Aggiorno i dati delle alette ' Aggiorno i dati delle alette
@@ -203,6 +204,7 @@ Public Class SideEntityControlVM
RefreshSideAngleText() RefreshSideAngleText()
Else Else
m_dDripOffset2 = m_Parameter2 m_dDripOffset2 = m_Parameter2
m_dDepthFiloTop = m_Parameter2
' Creo le geometrie dei gocciolatoi ' Creo le geometrie dei gocciolatoi
RefreshSideAngleText() RefreshSideAngleText()
End If End If
@@ -347,11 +349,16 @@ Public Class SideEntityControlVM
Return LenToString(m_Parameter4, 2) Return LenToString(m_Parameter4, 2)
End Get End Get
Set(value As String) Set(value As String)
If m_Mode <> ModeOpt.SIDEANGLE Then If m_Mode = ModeOpt.DRIP Then
StringToLen(value, m_Parameter4) StringToLen(value, m_Parameter4)
m_dDripShort = m_Parameter4 m_dDripShort = m_Parameter4
' Creo le geometrie dei gocciolatoi ' Creo le geometrie dei gocciolatoi
RefreshSideAngleText() RefreshSideAngleText()
ElseIf m_Mode = ModeOpt.ENGRAVE Then
StringToLen(value, m_Parameter4)
m_dEngraveDepth2 = m_Parameter4
' Creo le geometrie dei gocciolatoi
RefreshSideAngleText()
End If End If
End Set End Set
End Property End Property
@@ -362,6 +369,41 @@ Public Class SideEntityControlVM
#End Region 'Parameter 4 #End Region 'Parameter 4
#Region "Parameter 5"
Private m_Parameter5_Visibility As Visibility
Public Property Parameter5_Visibility As Visibility
Get
Return m_Parameter5_Visibility
End Get
Set(value As Visibility)
m_Parameter5_Visibility = value
NotifyPropertyChanged(NameOf(Parameter5_Visibility))
End Set
End Property
Private m_Parameter5ChBx As Boolean
Public Property Parameter5ChBx As Boolean
Get
Return m_Parameter5ChBx
End Get
Set(value As Boolean)
If m_Mode = ModeOpt.FILOTOP Then
m_bCornerRadius = value
' Creo le geometrie dei gocciolatoi
RefreshSideAngleText()
m_Parameter5ChBx = m_bCornerRadius
End If
NotifyPropertyChanged("Parameter5ChBx")
End Set
End Property
Private Sub SetParameter5(value As Boolean)
m_Parameter5ChBx = value
NotifyPropertyChanged("Parameter5ChBx")
End Sub
#End Region 'Parameter 5
Private m_dSideAngle As Double = 0 Private m_dSideAngle As Double = 0
Private m_HeightA As Double = 0 Private m_HeightA As Double = 0
@@ -369,13 +411,16 @@ Public Class SideEntityControlVM
Private m_DeltaAngF As Double = 0 Private m_DeltaAngF As Double = 0
Private m_DeltaAngA As Double = 0 Private m_DeltaAngA As Double = 0
Private m_SelList As New List(Of Integer)
Private m_dOffsetFiloTop As Double = 5 Private m_dOffsetFiloTop As Double = 5
Private m_dDepthFiloTop As Double = 5 Private m_dDepthFiloTop As Double = 5
Private m_bCornerRadius As Boolean = False
Private m_dDripOffset As Double = 10 Private m_dDripOffset As Double = 10
Private m_dDripOffset2 As Double = 0 Private m_dDripOffset2 As Double = 0
Private m_nEngrNbr2 As Integer = 1 Private m_nEngrNbr2 As Integer = 1
Private m_dDripDepth As Double = 10 Private m_dDripDepth As Double = 10
Private m_dEngraveDepth2 As Double = 5
Private m_dDripShort As Double = 0 Private m_dDripShort As Double = 0
Private m_CallingWndScene As Scene Private m_CallingWndScene As Scene
@@ -415,16 +460,26 @@ Public Class SideEntityControlVM
End Set End Set
End Property End Property
Private m_Parameter4Msg As String = EgtMsg(MSG_IMPORTPAGEUC + 12) Private m_Parameter4Msg As String = EgtMsg(MSG_IMPORTPAGEUC + 11) & "2"
Public Property Parameter4Msg As String Public Property Parameter4Msg As String
Get Get
Return m_Parameter4Msg ' Accorciamento Return m_Parameter4Msg ' Affondamento2
End Get End Get
Set(value As String) Set(value As String)
m_Parameter4Msg = value m_Parameter4Msg = value
End Set End Set
End Property End Property
Private m_Parameter5Msg As String = "RoundOff"
Public Property Parameter5Msg As String
Get
Return m_Parameter5Msg ' Arrotonda
End Get
Set(value As String)
m_Parameter5Msg = value
End Set
End Property
#End Region ' Messages #End Region ' Messages
#Region "CONSTRUCTOR" #Region "CONSTRUCTOR"
@@ -470,21 +525,26 @@ Public Class SideEntityControlVM
Parameter2_Visibility = Visibility.Visible Parameter2_Visibility = Visibility.Visible
Parameter2ab_Visibility = Visibility.Hidden Parameter2ab_Visibility = Visibility.Hidden
Parameter4_Visibility = Visibility.Hidden Parameter4_Visibility = Visibility.Hidden
Parameter5_Visibility = Visibility.Hidden
ElseIf m_Mode = ModeOpt.FILOTOP Then ElseIf m_Mode = ModeOpt.FILOTOP Then
Parameter23_Visibility = Windows.Visibility.Hidden Parameter23_Visibility = Windows.Visibility.Hidden
Parameter2_Visibility = Visibility.Visible Parameter2_Visibility = Visibility.Visible
Parameter2ab_Visibility = Visibility.Hidden Parameter2ab_Visibility = Visibility.Hidden
Parameter4_Visibility = Visibility.Hidden
Parameter5_Visibility = Visibility.Visible
ElseIf m_Mode = ModeOpt.ALZANDFRONT Then ElseIf m_Mode = ModeOpt.ALZANDFRONT Then
Parameter2_Visibility = Visibility.Hidden Parameter2_Visibility = Visibility.Hidden
Parameter23_Visibility = Windows.Visibility.Visible Parameter23_Visibility = Windows.Visibility.Visible
Parameter2ab_Visibility = Visibility.Visible Parameter2ab_Visibility = Visibility.Visible
Parameter4_Visibility = Visibility.Hidden Parameter4_Visibility = Visibility.Hidden
Parameter5_Visibility = Visibility.Hidden
Else Else
' Temporaneamente lo disabilito ' Temporaneamente lo disabilito
Parameter23_Visibility = Windows.Visibility.Visible Parameter23_Visibility = Windows.Visibility.Visible
Parameter4_Visibility = Visibility.Collapsed Parameter4_Visibility = Visibility.Visible
Parameter2ab_Visibility = Visibility.Visible Parameter2ab_Visibility = Visibility.Visible
Parameter2_Visibility = Visibility.Hidden Parameter2_Visibility = Visibility.Hidden
Parameter5_Visibility = Visibility.Hidden
End If End If
'------------------ VALORI E TITOLI PARAMETRI '------------------ VALORI E TITOLI PARAMETRI
@@ -497,12 +557,15 @@ Public Class SideEntityControlVM
ElseIf m_Mode = ModeOpt.FILOTOP Then ElseIf m_Mode = ModeOpt.FILOTOP Then
Parameter1Msg = EgtMsg(MSG_IMPORTPAGEUC + 10) ' Offset Parameter1Msg = EgtMsg(MSG_IMPORTPAGEUC + 10) ' Offset
Dim x As String = EgtMsg(MSG_IMPORTPAGEUC + 11)
Parameter2Msg = EgtMsg(MSG_IMPORTPAGEUC + 11) ' Depth Parameter2Msg = EgtMsg(MSG_IMPORTPAGEUC + 11) ' Depth
Parameter5Msg = "Round Off"
m_dOffsetFiloTop = GetMainPrivateProfileDouble(S_SIDES, K_FILOTOPOFFSET, 5) m_dOffsetFiloTop = GetMainPrivateProfileDouble(S_SIDES, K_FILOTOPOFFSET, 5)
m_dDepthFiloTop = GetMainPrivateProfileDouble(S_SIDES, K_FILOTOPDEPTH, 5) m_dDepthFiloTop = GetMainPrivateProfileDouble(S_SIDES, K_FILOTOPDEPTH, 5)
m_bCornerRadius = GetMainPrivateProfileInt(S_SIDES, K_FILOTOPROUNDOFF, 0) <> 0
SetParameter1(m_dOffsetFiloTop) SetParameter1(m_dOffsetFiloTop)
SetParameter2(m_dDepthFiloTop) SetParameter2(m_dDepthFiloTop)
SetParameter5(m_bCornerRadius)
m_SelList.Clear()
ElseIf m_Mode = ModeOpt.ENGRAVE Or m_Mode = ModeOpt.DRIP Then ElseIf m_Mode = ModeOpt.ENGRAVE Or m_Mode = ModeOpt.DRIP Then
Parameter1Msg = EgtMsg(MSG_IMPORTPAGEUC + 10) ' Offset Parameter1Msg = EgtMsg(MSG_IMPORTPAGEUC + 10) ' Offset
@@ -512,12 +575,13 @@ Public Class SideEntityControlVM
m_nEngrNbr2 = GetMainPrivateProfileInt(S_SIDES, K_ENGRAVENUMBER2, 1) m_nEngrNbr2 = GetMainPrivateProfileInt(S_SIDES, K_ENGRAVENUMBER2, 1)
m_dDripDepth = GetMainPrivateProfileDouble(S_SIDES, K_DRIPDEPTH, 10) m_dDripDepth = GetMainPrivateProfileDouble(S_SIDES, K_DRIPDEPTH, 10)
m_dDripShort = GetMainPrivateProfileDouble(S_SIDES, K_DRIPSHORT, 0) m_dDripShort = GetMainPrivateProfileDouble(S_SIDES, K_DRIPSHORT, 0)
m_dEngraveDepth2 = GetMainPrivateProfileDouble(S_SIDES, K_ENGRAVEDEPTH2, 0)
SetParameter1(m_dDripOffset) SetParameter1(m_dDripOffset)
SetParameter2(m_dDripOffset2) SetParameter2(m_dDripOffset2)
SetParameter2a(m_nEngrNbr2) SetParameter2a(m_nEngrNbr2)
SetParameter2b(m_dDripOffset2) SetParameter2b(m_dDripOffset2)
SetParameter3(m_dDripDepth) SetParameter3(m_dDripDepth)
SetParameter4(m_dDripShort) SetParameter4(m_dEngraveDepth2)
ElseIf m_Mode = ModeOpt.ALZANDFRONT Then ElseIf m_Mode = ModeOpt.ALZANDFRONT Then
' definisco i nomi dei campi ' definisco i nomi dei campi
@@ -536,6 +600,9 @@ Public Class SideEntityControlVM
LoadCurrentCompo() LoadCurrentCompo()
End If End If
' aggiorno i testi sui lati della figura
RefreshSideAngleText()
' Aggiorno visualizzazione ' Aggiorno visualizzazione
If CallingWindow = CallingWindowOpt.COMPO Then If CallingWindow = CallingWindowOpt.COMPO Then
EgtZoom(ZM.ALL) EgtZoom(ZM.ALL)
@@ -609,7 +676,9 @@ Public Class SideEntityControlVM
' Creo le geometrie dei gocciolatoi ' Creo le geometrie dei gocciolatoi
CreateDripGeom(PartId) CreateDripGeom(PartId)
ElseIf m_Mode = ModeOpt.ENGRAVE Then ElseIf m_Mode = ModeOpt.ENGRAVE Then
'--- ??? --- ' --- ??? ---
ElseIf m_Mode = ModeOpt.FILOTOP Then
CreateFiloTopPreView(m_SelList, False)
End If End If
' Aggiorno visualizzazione ' Aggiorno visualizzazione
EgtDraw() EgtDraw()
@@ -717,7 +786,7 @@ Public Class SideEntityControlVM
End If End If
' Aggiorno interfaccia ' Aggiorno interfaccia
If m_CallingWindow = CallingWindowOpt.DXFIMPORT Then If m_CallingWindow = CallingWindowOpt.DXFIMPORT Or m_CallingWindow = CallingWindowOpt.COMPO Then
If m_Mode = ModeOpt.SIDEANGLE Then If m_Mode = ModeOpt.SIDEANGLE Then
For Each Entity In m_SideEntityList For Each Entity In m_SideEntityList
If DirectCast(Entity, SideAngleEntity).dSideAngle <> 0 Then If DirectCast(Entity, SideAngleEntity).dSideAngle <> 0 Then
@@ -1101,6 +1170,9 @@ Public Class SideEntityControlVM
Dim nCrvId = EgtGetFirstInGroup(DripLayer) Dim nCrvId = EgtGetFirstInGroup(DripLayer)
While nCrvId <> GDB_ID.NULL While nCrvId <> GDB_ID.NULL
EgtOffsetCurve(nCrvId, -m_dDripOffset, OFF_TYPE.EXTEND) EgtOffsetCurve(nCrvId, -m_dDripOffset, OFF_TYPE.EXTEND)
If m_Mode = ModeOpt.ENGRAVE Then
EgtSetInfo(nCrvId, INFO_DEPTH, m_dDripDepth)
End If
nCrvId = EgtGetNext(nCrvId) nCrvId = EgtGetNext(nCrvId)
End While End While
' Eventuali curve aggiuntive con offset2 ' Eventuali curve aggiuntive con offset2
@@ -1111,10 +1183,14 @@ Public Class SideEntityControlVM
For i As Integer = 1 To m_nEngrNbr2 For i As Integer = 1 To m_nEngrNbr2
Dim nNewId As Integer = EgtCopy(nCrvId, nCrvId, GDB_POS.AFTER) Dim nNewId As Integer = EgtCopy(nCrvId, nCrvId, GDB_POS.AFTER)
EgtOffsetCurve(nNewId, -i * m_dDripOffset2, OFF_TYPE.EXTEND) EgtOffsetCurve(nNewId, -i * m_dDripOffset2, OFF_TYPE.EXTEND)
If m_Mode = ModeOpt.ENGRAVE Then
EgtSetInfo(nNewId, INFO_DEPTH, m_dEngraveDepth2)
End If
Next Next
nCrvId = nNextCrvId nCrvId = nNextCrvId
End While End While
End If End If
If m_Mode = ModeOpt.DRIP Then If m_Mode = ModeOpt.DRIP Then
' Esplodo nelle curve componenti ' Esplodo nelle curve componenti
nCrvId = EgtGetFirstInGroup(DripLayer) nCrvId = EgtGetFirstInGroup(DripLayer)
@@ -1137,7 +1213,7 @@ Public Class SideEntityControlVM
nCrvId = EgtGetFirstInGroup(DripLayer) nCrvId = EgtGetFirstInGroup(DripLayer)
While nCrvId <> GDB_ID.NULL While nCrvId <> GDB_ID.NULL
EgtSetColor(nCrvId, COL_MCH_DRIPCUT()) EgtSetColor(nCrvId, COL_MCH_DRIPCUT())
EgtSetInfo(nCrvId, INFO_DEPTH, m_dDripDepth) ' EgtSetInfo(nCrvId, INFO_DEPTH, m_dDripDepth)
EgtSetInfo(nCrvId, INFO_STRICT, If(m_dDripShort > EPS_SMALL, "3", "0")) EgtSetInfo(nCrvId, INFO_STRICT, If(m_dDripShort > EPS_SMALL, "3", "0"))
nCrvId = EgtGetNext(nCrvId) nCrvId = EgtGetNext(nCrvId)
End While End While
@@ -1266,8 +1342,9 @@ Public Class SideEntityControlVM
If m_Mode = ModeOpt.SIDEANGLE Then If m_Mode = ModeOpt.SIDEANGLE Then
WriteMainPrivateProfileString(S_SIDES, K_SIDEANGLE, DoubleToString(m_Parameter1, 3)) WriteMainPrivateProfileString(S_SIDES, K_SIDEANGLE, DoubleToString(m_Parameter1, 3))
ElseIf m_Mode = ModeOpt.FILOTOP Then ElseIf m_Mode = ModeOpt.FILOTOP Then
WriteMainPrivateProfileString(S_SIDES, K_FILOTOPOFFSET, DoubleToString(m_Parameter1, 3)) WriteMainPrivateProfileString(S_SIDES, K_FILOTOPOFFSET, LenToString(m_Parameter1, 3))
WriteMainPrivateProfileString(S_SIDES, K_FILOTOPDEPTH, DoubleToString(m_Parameter2, 3)) WriteMainPrivateProfileString(S_SIDES, K_FILOTOPDEPTH, LenToString(m_Parameter2, 3))
WriteMainPrivateProfileString(S_SIDES, K_FILOTOPROUNDOFF, If(m_Parameter5ChBx, "1", "0"))
' Aggiorno affondamento del profilo ' Aggiorno affondamento del profilo
Dim nPartId As Integer = EgtGetFirstPart() Dim nPartId As Integer = EgtGetFirstPart()
While nPartId <> GDB_ID.NULL While nPartId <> GDB_ID.NULL
@@ -1283,10 +1360,10 @@ Public Class SideEntityControlVM
nPartId = EgtGetNextPart(nPartId) nPartId = EgtGetNextPart(nPartId)
End While End While
ElseIf m_Mode = ModeOpt.DRIP Then ElseIf m_Mode = ModeOpt.DRIP Then
WriteMainPrivateProfileString(S_SIDES, K_DRIPOFFSET, DoubleToString(m_dDripOffset, 3)) WriteMainPrivateProfileString(S_SIDES, K_DRIPOFFSET, LenToString(m_dDripOffset, 3))
WriteMainPrivateProfileString(S_SIDES, K_DRIPOFFSET2, DoubleToString(m_dDripOffset2, 3)) WriteMainPrivateProfileString(S_SIDES, K_DRIPOFFSET2, LenToString(m_dDripOffset2, 3))
WriteMainPrivateProfileString(S_SIDES, K_DRIPDEPTH, DoubleToString(m_dDripDepth, 3)) WriteMainPrivateProfileString(S_SIDES, K_DRIPDEPTH, LenToString(m_dDripDepth, 3))
WriteMainPrivateProfileString(S_SIDES, K_DRIPSHORT, DoubleToString(m_dDripShort, 3)) WriteMainPrivateProfileString(S_SIDES, K_DRIPSHORT, LenToString(m_dDripShort, 3))
For Each objEntity In m_SideEntityList For Each objEntity In m_SideEntityList
If TypeOf objEntity Is DripEntity Then If TypeOf objEntity Is DripEntity Then
Dim CurrEntity As DripEntity = DirectCast(objEntity, DripEntity) Dim CurrEntity As DripEntity = DirectCast(objEntity, DripEntity)
@@ -1295,11 +1372,12 @@ Public Class SideEntityControlVM
End If End If
Next Next
ElseIf m_Mode = ModeOpt.ENGRAVE Then ElseIf m_Mode = ModeOpt.ENGRAVE Then
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVEOFFSET, DoubleToString(m_dDripOffset, 3)) WriteMainPrivateProfileString(S_SIDES, K_ENGRAVEOFFSET, LenToString(m_dDripOffset, 3))
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVEOFFSET2, DoubleToString(m_dDripOffset2, 3)) WriteMainPrivateProfileString(S_SIDES, K_ENGRAVEOFFSET2, LenToString(m_dDripOffset2, 3))
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVENUMBER2, m_nEngrNbr2.ToString) WriteMainPrivateProfileString(S_SIDES, K_ENGRAVENUMBER2, m_nEngrNbr2.ToString)
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVEDEPTH, DoubleToString(m_dDripDepth, 3)) WriteMainPrivateProfileString(S_SIDES, K_ENGRAVEDEPTH, LenToString(m_dDripDepth, 3))
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVESHORT, DoubleToString(m_dDripShort, 3)) WriteMainPrivateProfileString(S_SIDES, K_ENGRAVESHORT, LenToString(m_dDripShort, 3))
WriteMainPrivateProfileString(S_SIDES, K_ENGRAVEDEPTH2, LenToString(m_dEngraveDepth2, 3))
For Each objEntity In m_SideEntityList For Each objEntity In m_SideEntityList
If TypeOf objEntity Is DripEntity Then If TypeOf objEntity Is DripEntity Then
Dim CurrEntity As DripEntity = DirectCast(objEntity, DripEntity) Dim CurrEntity As DripEntity = DirectCast(objEntity, DripEntity)
@@ -1736,8 +1814,146 @@ Public Class SideEntityControlVM
End If End If
End Sub End Sub
' ----------------------- FILO TOP -----------------------
Public Sub CreateFiloTopPreView(SelList As List(Of Integer), Optional bReadInfo As Boolean = True)
m_SelList = SelList
If m_SelList.Count < 1 Then Return
Dim nPartId As Integer = EgtGetFirstPart()
While nPartId <> GDB_ID.NULL
Dim nLayId As Integer = EgtGetFirstLayer(nPartId)
While nLayId <> GDB_ID.NULL
Dim sLayName As String = ""
' verifico che lemento corrente appartenga all'elenco degli elementi selezionati
Dim bIsSelected As Boolean = m_SelList.Find(Function(value As Integer)
Return value = nLayId
End Function) <> 0
If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso EgtExistsInfo(nLayId, INFO_FILOTOP) AndAlso bIsSelected Then
' ---------------------- Inizio GESTIONE PREVIEW percorso -------------------------------
Dim nLayFiloTop As Integer = GDB_ID.NULL
Dim nInLoopRef As Integer = GDB_ID.NULL
nLayFiloTop = EgtGetFirstNameInGroup(nPartId, "FiloTop")
EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef)
' verifico il Layer "FiloTop" sia associato all'InLoop corrente
While (nLayFiloTop <> GDB_ID.NULL AndAlso nInLoopRef <> nLayId)
nLayFiloTop = EgtGetNextName(nLayFiloTop, "FiloTop")
EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef)
End While
' se non esiste il Layer "FiloTop"
If nLayFiloTop = GDB_ID.NULL Then
' lo creo
nLayFiloTop = EgtCreateGroup(nPartId)
EgtSetName(nLayFiloTop, "FiloTop")
EgtSetInfo(nLayFiloTop, "InLoopRef", nLayId)
EgtSetInfo(nLayId, "FiloTopRef", nLayFiloTop)
End If
' carico i dati del filo top selezionato
If bReadInfo Then
EgtGetInfo(nLayFiloTop, INFO_OFFSET, m_dOffsetFiloTop)
EgtGetInfo(nLayFiloTop, INFO_DEPTH, m_dDepthFiloTop)
Dim nVal As Integer = If(m_bCornerRadius, 1, 0)
EgtGetInfo(nLayFiloTop, INFO_ROUNDOFF, nVal)
m_bCornerRadius = If(nVal = 1, True, False)
SetParameter1(m_dOffsetFiloTop)
SetParameter2(m_dDepthFiloTop)
SetParameter5(m_bCornerRadius)
End If
' procedo alla creazione della curva
Dim nIdCompoCurve As Integer = GDB_ID.NULL
' cancello un eventuale curva composita creata in precedenza
nIdCompoCurve = EgtGetFirstNameInGroup(nLayFiloTop, "OffsetPreView")
If nIdCompoCurve <> GDB_ID.NULL Then
EgtErase(nIdCompoCurve)
End If
Dim nCompoCurve As New List(Of Integer)
' costruisco il percorso chiuso dati i lati di contorno
Dim nLine As Integer = EgtGetFirstInGroup(nLayId)
While nLine <> GDB_ID.NULL
nCompoCurve.Add(nLine)
nLine = EgtGetNext(nLine)
End While
Dim PtNearStart As Point3d
Dim nInfoRoundOff As Integer = If(m_bCornerRadius, 1, 0)
nIdCompoCurve = EgtCreateCurveCompoByChain(nLayFiloTop, nCompoCurve.ToArray, PtNearStart, False)
EgtSetName(nIdCompoCurve, "OffsetPreView")
' salvo i dati nel layer FiloTop
EgtSetInfo(nLayFiloTop, INFO_OFFSET, m_dOffsetFiloTop)
EgtSetInfo(nLayFiloTop, INFO_DEPTH, m_dDepthFiloTop)
EgtSetInfo(nLayFiloTop, INFO_ROUNDOFF, nInfoRoundOff)
Dim bOk As Boolean = False
' leggo che tipo di offset applicare (Round, Extend)
If nInfoRoundOff <> 1 Then
bOk = EgtOffsetCurve(nIdCompoCurve, -m_dOffsetFiloTop, OFF_TYPE.EXTEND)
Else
bOk = EgtOffsetCurve(nIdCompoCurve, -m_dOffsetFiloTop, OFF_TYPE.FILLET)
End If
' se la generazione della curva non va a buon fine
If Not bOk Then
EgtErase(nLayFiloTop)
EgtRemoveInfo(nLayId, "FiloTopRef")
EgtOutLog("Error in generation OffsetPreView in TopEgde ")
End If
' ---------------------- Fine GESTIONE PREVIEW percorso -------------------------------
End If
nLayId = EgtGetNextLayer(nLayId)
End While
nPartId = EgtGetNextPart(nPartId)
End While
EgtDraw()
End Sub
' riceve la lista dei LayerFiloTop che devono essere eliminati
Public Sub EraseFiloTopPreview(EraseList As List(Of Integer))
Dim m_EraseList As List(Of Integer) = EraseList
If m_EraseList.Count < 1 Then Return
Dim nPartId As Integer = EgtGetFirstPart()
While nPartId <> GDB_ID.NULL
Dim nLayId As Integer = EgtGetFirstLayer(nPartId)
While nLayId <> GDB_ID.NULL
Dim sLayName As String = ""
Dim bIsSelected As Boolean = m_EraseList.Find(Function(value As Integer)
Return value = nLayId
End Function) <> 0
If EgtGetName(nLayId, sLayName) AndAlso sLayName = NAME_INLOOP AndAlso bIsSelected Then
' ---------------------- Inizio GESTIONE PREVIEW percorso -------------------------------
Dim nLayFiloTop As Integer = GDB_ID.NULL
Dim nInLoopRef As Integer = GDB_ID.NULL
nLayFiloTop = EgtGetFirstNameInGroup(nPartId, "FiloTop")
EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef)
' cerco il Layer associato all'InLoop corrente
While (nLayFiloTop <> GDB_ID.NULL AndAlso nInLoopRef <> nLayId)
nLayFiloTop = EgtGetNextName(nLayFiloTop, "FiloTop")
EgtGetInfo(nLayFiloTop, "InLoopRef", nInLoopRef)
End While
' se non esiste il Layer
If nLayFiloTop = GDB_ID.NULL Then
' esco
Return
Else
' lo elimino
EgtErase(nLayFiloTop)
EraseList.Remove(nLayId)
End If
' ---------------------- Fine GESTIONE PREVIEW percorso -------------------------------
End If
nLayId = EgtGetNextLayer(nLayId)
End While
nPartId = EgtGetNextPart(nPartId)
End While
EgtDraw()
End Sub
#End Region ' METHODS #End Region ' METHODS
End Class End Class
Public MustInherit Class SideEntity Public MustInherit Class SideEntity
+2 -2
View File
@@ -128,9 +128,9 @@ Public Class TopCommandBarVM
''' <summary> ''' <summary>
''' Execute the New. This method is invoked by the NewCommand. ''' Execute the New. This method is invoked by the NewCommand.
''' </summary> ''' </summary>
Friend Sub NewCmd(Optional bUseDefaults As Boolean = False) Friend Sub NewCmd()
OmagOFFICEMap.refSceneHostVM.NewProject() OmagOFFICEMap.refSceneHostVM.NewProject()
OmagOFFICEMap.refMachGroupPanelVM.InitMachGroupList(bUseDefaults) OmagOFFICEMap.refMachGroupPanelVM.InitMachGroupList(False)
End Sub End Sub
#End Region ' NewCommand #End Region ' NewCommand
+5 -1
View File
@@ -223,7 +223,11 @@
<Setter Property="Height" Value="30"/> <Setter Property="Height" Value="30"/>
</Style> </Style>
<Style x:Key="OptionPanel_NestingToggleButton" TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Type ToggleButton}}"> <Style x:Key="OptionPanel_ToggleWrapButton" TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Type ToggleButton}}">
<Setter Property="Height" Value="45"/>
</Style>
<Style x:Key="OptionPanel_NestingToggleButton" TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource {x:Type ToggleButton}}">
<Setter Property="Height" Value="60"/> <Setter Property="Height" Value="60"/>
<Setter Property="Width" Value="60"/> <Setter Property="Width" Value="60"/>
</Style> </Style>
-1
View File
@@ -120,7 +120,6 @@ Module OmagOFFICEMap
End Get End Get
End Property End Property
'Public ReadOnly Property refProjectVM As ProjectLibVM 'Public ReadOnly Property refProjectVM As ProjectLibVM
' Get ' Get
' Return PhotoMap.refProjectVM ' Return PhotoMap.refProjectVM