diff --git a/CadCutPageUC.xaml b/CadCutPageUC.xaml
index 3161c5a..1e1cb84 100644
--- a/CadCutPageUC.xaml
+++ b/CadCutPageUC.xaml
@@ -60,15 +60,18 @@
-
+
+
+
-
-
-
-
+
+
+
+
+
diff --git a/CadCutPageUC.xaml.vb b/CadCutPageUC.xaml.vb
index 389585a..b2c080f 100644
--- a/CadCutPageUC.xaml.vb
+++ b/CadCutPageUC.xaml.vb
@@ -44,25 +44,8 @@ Public Class CadCutPageUC
End Sub
Private Sub PhotoBtn_Click(sender As Object, e As RoutedEventArgs) Handles PhotoBtn.Click
- EgtLoadTexture("Raw", "C:\EgtData\OmagCut\Images\Img1.jpg", 3500, 2700, False)
- ' !!! PROVVISORIO per video !!!
- ' Se non esiste già il grezzo lo inserisco
- Dim nRawId As Integer = EgtGetFirstRawPart()
- If nRawId = GDB_ID.NULL Then
- ' recupero il colore
- Dim Col As New Color3d(64, 192, 255, 50)
- GetPrivateProfileColor(S_NEST, K_RAWCOLOR, Col, m_MainWindow.GetIniFile())
- nRawId = EgtAddRawPart(Point3d.ORIG(), 3500, 1990, 1, Col)
- ' imposto info di grezzo con texture
- Dim nSolidId = EgtGetFirstNameInGroup(nRawId, "RawSolid")
- EgtSetInfo(nSolidId, "!TXT", "Raw")
- ' Altrimenti lo modifico
- Else
- EgtModifyRawPartSize(nRawId, 3500, 1990, 1)
- End If
- EgtSetInfo(nRawId, "Kerf", 50.ToString("F4", CultureInfo.InvariantCulture))
- ' Sistemo la posizione
- EgtMoveToCornerRawPart(nRawId, New Point3d(0, 0, 0), MCH_CR.BL)
+ ' Carico la foto
+ m_MainWindow.m_CurrentProjectPageUC.LoadPhoto("C:\EgtData\OmagCut\Images\Img1.jpg")
' Aggiorno visualizzazione
EgtZoom(ZM.ALL)
End Sub
@@ -110,15 +93,23 @@ Public Class CadCutPageUC
End Sub
+ Private Sub NewBtn_Click(sender As Object, e As RoutedEventArgs) Handles NewBtn.Click
+ m_MainWindow.m_CurrentProjectPageUC.NewProject()
+ EgtZoom(ZM.ALL)
+ End Sub
+
+ Private Sub LoadBtn_Click(sender As Object, e As RoutedEventArgs) Handles LoadBtn.Click
+ Dim sPath As String = m_MainWindow.GetTempDir() & "\" & "CurrProj.nge"
+ If Not m_MainWindow.m_CurrentProjectPageUC.LoadProject(sPath) Then
+ m_MainWindow.m_CurrentProjectPageUC.NewProject()
+ End If
+ EgtZoom(ZM.ALL)
+ End Sub
+
Private Sub SaveBtn_Click(sender As Object, e As RoutedEventArgs) Handles SaveBtn.Click
Dim sPath As String = m_MainWindow.GetTempDir() & "\" & "CurrProj.nge"
- EgtSaveFile(sPath, NGE.CMPTEXT)
- ' Ripristino visualizzazione di eventuali pezzi in parcheggio (save li nasconde)
- Dim nPartId As Integer = EgtGetFirstPart()
- While nPartId <> GDB_ID.NULL
- EgtSetStatus(nPartId, GDB_ST.ON_)
- nPartId = EgtGetNextPart(nPartId)
- End While
+ m_MainWindow.m_CurrentProjectPageUC.SaveProject(sPath)
+ EgtDraw()
End Sub
Private Sub SimulateBtn_Click(sender As Object, e As RoutedEventArgs) Handles SimulateBtn.Click
diff --git a/ConstIni.vb b/ConstIni.vb
index fd4d94c..1e2f663 100644
--- a/ConstIni.vb
+++ b/ConstIni.vb
@@ -83,10 +83,19 @@ Module ConstIni
Public Const K_FLPCURRDIR As String = "CurrDir"
Public Const S_NEST As String = "Nest"
- Public Const K_RAWCOLOR As String = "RawColor"
Public Const K_DIRECT As String = "Direct"
Public Const K_STEP As String = "Step"
+ Public Const S_RAWPART As String = "RawPart"
+ Public Const K_RAWCOLOR As String = "RawColor"
+ Public Const K_KERFCOLOR As String = "KerfColor"
+ Public Const K_RAWLENGTH As String = "Length"
+ Public Const K_RAWWIDTH As String = "Width"
+ Public Const K_RAWHEIGHT As String = "Height"
+ Public Const K_RAWOFFSX As String = "OffsX"
+ Public Const K_RAWOFFSY As String = "OffsY"
+ Public Const K_RAWKERF As String = "Kerf"
+
Public Const S_MACH As String = "Mach"
Public Const K_MACHINESDIR As String = "MachinesDir"
Public Const K_CURRMACH As String = "CurrMach"
diff --git a/CurrentProjectPageUC.xaml.vb b/CurrentProjectPageUC.xaml.vb
index 75b092e..962f055 100644
--- a/CurrentProjectPageUC.xaml.vb
+++ b/CurrentProjectPageUC.xaml.vb
@@ -1,4 +1,5 @@
Imports EgtUILib
+Imports System.IO
Public Class CurrentProjectPageUC
@@ -20,12 +21,18 @@ Public Class CurrentProjectPageUC
Friend WithEvents CurrentProjectScene As New Scene
Private CurrentProjectSceneHost As New System.Windows.Forms.Integration.WindowsFormsHost
- 'Dichiarazione variabile per altezza grezzo
+ ' Dichiarazione altezza grezzo
Friend m_dRawHeight As Double
' Identificativo del grezzo
Friend m_nRawId As Integer = GDB_ID.NULL
+ ' Costanti
+ Friend Const MACH_GROUP As String = "Mach01"
+ Friend Const MAIN_TAB As String = "MainTab"
+ Friend Const PHOTO_GRP As String = "Photos"
+ Friend Const PHOTO_NAME As String = "Raw"
+
Private Sub CurrentProjectPage_Initialized(sender As Object, e As EventArgs)
'Creazione delle Page UserControl
@@ -141,4 +148,188 @@ Public Class CurrentProjectPageUC
RaiseEvent OnMouseUpScene(sender, e)
End Sub
+ Friend Function NewProject() As Boolean
+ EgtNewFile()
+ ' carico la macchina corrente
+ Dim sCurrMach As String = String.Empty
+ GetPrivateProfileString(S_MACH, K_CURRMACH, "", sCurrMach, m_MainWindow.GetIniFile())
+ If EgtAddMachGroup(MACH_GROUP, sCurrMach) = GDB_ID.NULL Then
+ Return False
+ End If
+ ' imposto la tavola corrente
+ If Not EgtSetTable(MAIN_TAB) Then
+ Return False
+ End If
+ EgtShowOnlyTable(True)
+ Return True
+ End Function
+
+ Friend Function LoadProject(ByVal sPath As String) As Boolean
+ If Not EgtOpenFile(sPath) Then
+ Return False
+ End If
+ ' attivo il gruppo di lavoro corrente
+ Dim nMachGrpId As Integer = EgtGetFirstMachGroup()
+ If Not EgtSetCurrMachGroup(nMachGrpId) Then
+ Return False
+ End If
+ EgtShowOnlyTable(True)
+ ' aggiorno eventuale identificativo grezzo
+ m_nRawId = EgtGetFirstRawPart()
+ ' aggiorno spessore grezzo
+ m_dRawHeight = m_MainWindow.m_RawPartPage.GetRawHeight()
+ HeightTxBx.Text = DoubleToString(m_dRawHeight, 2)
+ ' se presente la foto, ne carico la texture
+ ReloadPhoto()
+ Return True
+ End Function
+
+ Friend Function SaveProject(ByVal sPath As String) As Boolean
+ Dim bOk As Boolean = EgtSaveFile(sPath, NGE.CMPTEXT)
+ ' Ripristino visualizzazione di eventuali pezzi in parcheggio (save li nasconde)
+ ShowParkedParts()
+ Return bOk
+ End Function
+
+ Friend Function LoadPhoto(ByVal sPath As String) As Boolean
+ ' Verifico esistenza file immagine
+ If Not File.Exists(sPath) Then
+ Return False
+ End If
+ ' Leggo file dati aggiuntivi se esiste
+ Dim ptOri As New Point3d(0, 0, 0)
+ Dim ptCen As New Point3d(0, 0, 1)
+ Dim dMMxPixel As Double = 1
+ Dim sAuxPath As String = Path.ChangeExtension(sPath, ".txt")
+ Try
+ Dim sLine As String = String.Empty
+ Dim sr As StreamReader = New StreamReader(sAuxPath)
+ Do While sr.Peek() > -1
+ sLine = sr.ReadLine()
+ sLine = sLine.Replace(" ", "")
+ If sLine.StartsWith("X=") Then
+ StringToDouble(sLine.Substring(2), ptOri.x)
+ ElseIf sLine.StartsWith("Y=") Then
+ StringToDouble(sLine.Substring(2), ptOri.y)
+ ElseIf sLine.StartsWith("Z_Lastra=") Then
+ StringToDouble(sLine.Substring(9), ptOri.z)
+ ElseIf sLine.StartsWith("X_ScaleCenter=") Then
+ StringToDouble(sLine.Substring(14), ptCen.x)
+ ElseIf sLine.StartsWith("Y_ScaleCenter=") Then
+ StringToDouble(sLine.Substring(14), ptCen.y)
+ ElseIf sLine.StartsWith("Z_ScaleCenter=") Then
+ StringToDouble(sLine.Substring(14), ptCen.z)
+ ElseIf sLine.StartsWith("Pixelxmm=") Then
+ Dim dTmp As Double
+ StringToDouble(sLine.Substring(9), dTmp)
+ If dTmp > EPS_SMALL Then
+ dMMxPixel = 1 / dTmp
+ End If
+ End If
+ Loop
+ sr.Close()
+ Catch ex As Exception
+ EgtOutLog("LoadPhoto Error on auxfile : " & sAuxPath)
+ End Try
+ ' Recupero origine della tavola e porto i punti in globale
+ Dim ptTab As Point3d
+ EgtGetTableRef1(ptTab)
+ ptOri.ToGlob(New Frame3d(ptTab))
+ ptCen.ToGlob(New Frame3d(ptTab))
+ ' Recupero le dimensioni della tavola
+ Dim nAreaId As Integer
+ Dim ptMin, ptMax As Point3d
+ If Not EgtGetTableArea1(nAreaId) Or
+ Not EgtGetBBoxGlob(nAreaId, GDB_BB.STANDARD, ptMin, ptMax) Then
+ Return False
+ End If
+ ' Carico la fotografia
+ Return AddPhoto(PHOTO_NAME, sPath, ptOri, ptCen, dMMxPixel, ptMin, ptMax)
+ End Function
+
+ Friend Function ReloadPhoto() As Boolean
+ Dim nPhotoId As Integer = GetPhoto()
+ If nPhotoId = GDB_ID.NULL Then
+ Return True
+ End If
+ ' recupero i dati
+ Dim sPath As String = String.Empty
+ EgtGetInfo(nPhotoId, "!TPA", sPath)
+ Dim dDimX As Double
+ EgtGetInfo(nPhotoId, "!TDX", dDimX)
+ Dim dDimY As Double
+ EgtGetInfo(nPhotoId, "!TDY", dDimY)
+ ' Carico la texture
+ If Not EgtLoadTexture(PHOTO_NAME, sPath, 0, dDimX, dDimY, False) Then
+ Return False
+ End If
+ Return True
+ End Function
+
+ Private Function AddPhoto(ByVal sName As String, ByVal sPath As String,
+ ByVal ptOri As Point3d, ByVal ptCen As Point3d, ByVal dMMxPixel As Double,
+ ByVal ptMin As Point3d, ByVal ptMax As Point3d) As Boolean
+ ' Se non esiste il gruppo per le foto, lo creo
+ Dim nPhGrpId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP)
+ If nPhGrpId = GDB_ID.NULL Then
+ nPhGrpId = EgtCreateGroup(GDB_ID.ROOT)
+ If nPhGrpId = GDB_ID.NULL Then
+ Return False
+ End If
+ EgtSetName(nPhGrpId, PHOTO_GRP)
+ End If
+ EgtSetLevel(nPhGrpId, GDB_LV.SYSTEM)
+ ' Carico la texture
+ If Not EgtLoadTexture(sName, sPath, dMMxPixel, 0, 0, False) Then
+ Return False
+ End If
+ ' Recupero le dimensioni fisiche
+ Dim dDimX, dDimY As Double
+ EgtGetTextureDimensions(sName, dDimX, dDimY)
+ ' Inserisco il rettangolo della foto
+ Dim ptCross As Point3d = ptOri + New Vector3d(dDimX, dDimY, 0)
+ ptOri.x = Math.Max(ptOri.x, ptMin.x)
+ ptOri.y = Math.Max(ptOri.y, ptMin.y)
+ ptCross.x = Math.Min(ptCross.x, ptMax.x)
+ ptCross.y = Math.Min(ptCross.y, ptMax.y)
+ Dim nId As Integer = EgtCreateSurfFrRectangle(nPhGrpId, ptOri, ptCross, GDB_RT.GLOB)
+ If nId = GDB_ID.NULL Then
+ EgtUnloadTexture(sName)
+ Return False
+ End If
+ EgtSetColor(nId, New Color3d(255, 255, 255, 100))
+ EgtSetName(nId, sName)
+ EgtSetInfo(nId, "!TNA", sName)
+ EgtSetInfo(nId, "!TPA", sPath)
+ EgtSetInfo(nId, "!TDX", dDimX)
+ EgtSetInfo(nId, "!TDY", dDimY)
+ EgtSetInfo(nId, "!TFR", New Frame3d(ptOri))
+ Return True
+ End Function
+
+ Friend Function ShowPhoto(ByVal bShow As Boolean) As Boolean
+ ' Recupero la foto
+ Dim nId As Integer = GetPhoto()
+ If nId = GDB_ID.NULL Then
+ Return False
+ End If
+ ' Ne cambio lo stato
+ Return EgtSetStatus(nId, If(bShow, GDB_ST.ON_, GDB_ST.OFF))
+ End Function
+
+ Friend Function GetPhoto() As Integer
+ Dim nPhGrpId As Integer = EgtGetFirstNameInGroup(GDB_ID.ROOT, PHOTO_GRP)
+ Return EgtGetFirstNameInGroup(nPhGrpId, PHOTO_NAME)
+ End Function
+
+ Friend Function GetPhotoTextureRef(ByRef refTxt As Frame3d) As Boolean
+ ' Recupero la foto
+ Dim nId As Integer = GetPhoto()
+ If nId = GDB_ID.NULL Then
+ Return False
+ End If
+ ' Recupero il riferimento
+ Return EgtGetInfo(nId, "!TFR", refTxt)
+ End Function
+
End Class
diff --git a/My Project/AssemblyInfo.vb b/My Project/AssemblyInfo.vb
index 04836f5..50b7f5c 100644
--- a/My Project/AssemblyInfo.vb
+++ b/My Project/AssemblyInfo.vb
@@ -55,5 +55,5 @@ Imports System.Windows
' by using the '*' as shown below:
'
-
-
+
+
diff --git a/NestPageUC.xaml.vb b/NestPageUC.xaml.vb
index 385fb97..864d3be 100644
--- a/NestPageUC.xaml.vb
+++ b/NestPageUC.xaml.vb
@@ -1,14 +1,11 @@
Imports EgtUILib
Public Class NestPageUC
-
' Riferimento alla MainWindow
Private m_MainWindow As MainWindow = Application.Current.MainWindow
Private WithEvents m_CurrProjPage As CurrentProjectPageUC
-
' Flag di pagina attiva
Private m_bActive As Boolean = False
-
' Flag per pezzi selezionati in tavola o fuori
Private m_nPartPos As Integer = PART_POS.NONE_TABLE
Enum PART_POS As Integer
@@ -16,23 +13,19 @@ Public Class NestPageUC
NONE_TABLE = 0
OUT_TABLE = 1
End Enum
-
' Dati del grezzo
Private m_nRawId As Integer = GDB_ID.NULL
Private m_ptRawMin As Point3d
Private m_ptRawMax As Point3d
Private m_dKerf As Double
Private m_dMinDist As Double = 4
-
' Dati movimento
Friend m_dStep As Double = 0
Friend m_dMaxStep As Double = 0
Private m_bMaximizeMove As Boolean = False
-
' Dati per Drag
Private m_bDrag As Boolean = False
Private m_ptPrev As Point3d
-
' Costante per flag di BBox
Dim BBFLAG As Integer = GDB_BB.ONLY_VISIBLE + GDB_BB.IGNORE_TEXT + GDB_BB.IGNORE_DIM
@@ -74,31 +67,31 @@ Public Class NestPageUC
EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSel)
Dim nId As Integer = EgtGetFirstObjInSelWin()
While nId <> GDB_ID.NULL
- ' Recupero l'identificativo del pezzo cui appartiene
- Dim nPartId As Integer = EgtGetParent(EgtGetParent(nId))
- Dim bPartInTable As Boolean = EgtGetParent(nPartId) = m_CurrProjPage.m_nRawId
- If EgtIsPart(nPartId) Or bPartInTable Then
- Dim nStat As Integer = GDB_ST.ON_
- EgtGetStatus(nPartId, nStat)
- ' Se selezionato o posizione oggetto incompatibile con flag posizione selezionati
- If nStat = GDB_ST.SEL Or
- (bPartInTable And m_nPartPos = PART_POS.OUT_TABLE) Or
- (Not bPartInTable And m_nPartPos = PART_POS.IN_TABLE) Then
- ' Deseleziono
- EgtDeselectObj(nPartId)
- ' Se nessun pezzo selezionato, reset flag posizione selezionati
- If EgtGetSelectedObjCount() = 0 Then
- m_nPartPos = PART_POS.NONE_TABLE
- End If
- Else
- EgtSelectObj(nPartId)
- ' Set flag posizione selezionati
- m_nPartPos = IIf(bPartInTable, PART_POS.IN_TABLE, PART_POS.OUT_TABLE)
- End If
- EgtDraw()
- Exit While
- End If
- nId = EgtGetNextObjInSelWin()
+ ' Recupero l'identificativo del pezzo cui appartiene
+ Dim nPartId As Integer = EgtGetParent(EgtGetParent(nId))
+ Dim bPartInTable As Boolean = EgtGetParent(nPartId) = m_CurrProjPage.m_nRawId
+ If EgtIsPart(nPartId) Or bPartInTable Then
+ Dim nStat As Integer = GDB_ST.ON_
+ EgtGetStatus(nPartId, nStat)
+ ' Se selezionato o posizione oggetto incompatibile con flag posizione selezionati
+ If nStat = GDB_ST.SEL Or
+ (bPartInTable And m_nPartPos = PART_POS.OUT_TABLE) Or
+ (Not bPartInTable And m_nPartPos = PART_POS.IN_TABLE) Then
+ ' Deseleziono
+ EgtDeselectObj(nPartId)
+ ' Se nessun pezzo selezionato, reset flag posizione selezionati
+ If EgtGetSelectedObjCount() = 0 Then
+ m_nPartPos = PART_POS.NONE_TABLE
+ End If
+ Else
+ EgtSelectObj(nPartId)
+ ' Set flag posizione selezionati
+ m_nPartPos = IIf(bPartInTable, PART_POS.IN_TABLE, PART_POS.OUT_TABLE)
+ End If
+ EgtDraw()
+ Exit While
+ End If
+ nId = EgtGetNextObjInSelWin()
End While
' Dati per drag
m_bDrag = EgtUnProjectPoint(e.Location, m_ptPrev)
@@ -118,7 +111,8 @@ Public Class NestPageUC
' Ricavo il vettore di movimento
Dim vtMove As Vector3d = ptCurr - m_ptPrev
' Muovo i pezzi selezionati di quanto possibile
- EgtMoveSelectedCluster(vtMove, m_ptRawMin.x, m_ptRawMin.y, m_ptRawMax.x, m_ptRawMax.y, m_dMinDist)
+ EgtMoveSelectedCluster(vtMove, m_ptRawMin.x + m_dKerf, m_ptRawMin.y + m_dKerf,
+ m_ptRawMax.x - m_dKerf, m_ptRawMax.y - m_dKerf, m_dMinDist)
EgtDraw()
' Aggiorno il punto precedente
'm_ptPrev += vtMove
@@ -335,9 +329,10 @@ Public Class NestPageUC
If EgtIsPart(nId) Then
EgtErase(nId)
' Altrimenti pezzo nel grezzo
- Else
- EgtRemovePartFromRawPart(nId)
- EgtErase(nId)
+ ElseIf EgtGetParent(nId) = m_nRawId Then
+ If EgtRemovePartFromRawPart(nId) Then
+ EgtErase(nId)
+ End If
End If
' Passo al successivo selezionato
nId = nNextId
diff --git a/OmagCUT.vbproj b/OmagCUT.vbproj
index df3b3b3..d4d3d6c 100644
--- a/OmagCUT.vbproj
+++ b/OmagCUT.vbproj
@@ -183,9 +183,6 @@
SplitPageUC.xaml
-
- TagliCadUC.xaml
- WorkInProgressPageUC.xaml
@@ -288,10 +285,6 @@
DesignerMSBuild:Compile
-
- Designer
- MSBuild:Compile
- DesignerMSBuild:Compile
diff --git a/RawPartPageUC.xaml b/RawPartPageUC.xaml
index 530ece1..b0e5134 100644
--- a/RawPartPageUC.xaml
+++ b/RawPartPageUC.xaml
@@ -4,7 +4,7 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
- d:DesignHeight="853.3" d:DesignWidth="1280" Loaded="RawPartPage_Loaded" Initialized="RawPartPage_Initialized">
+ d:DesignHeight="853.3" d:DesignWidth="1280" Loaded="RawPartPage_Loaded" Initialized="RawPartPage_Initialized" Unloaded="RawPartPage_Unloaded">
diff --git a/RawPartPageUC.xaml.vb b/RawPartPageUC.xaml.vb
index 2bc4b2f..c7e6526 100644
--- a/RawPartPageUC.xaml.vb
+++ b/RawPartPageUC.xaml.vb
@@ -2,12 +2,23 @@
Imports EgtUILib
Public Class RawPartPageUC
-
+ ' Riferimento alla MainWindow
Dim m_MainWindow As MainWindow = Application.Current.MainWindow
- Dim m_CurrProjPage As CurrentProjectPageUC
-
+ Dim WithEvents m_CurrProjPage As CurrentProjectPageUC
+ ' Flag di pagina attiva
+ Private m_bActive As Boolean = False
+ ' Dati per Drag
+ Private m_bDrag As Boolean = False
+ Private m_ptPrev As Point3d
' Modalità aggiornamento variabili
Friend m_bShowVar As Boolean = False
+ ' Dimensioni grezzo rettangolare
+ Private m_RawLength As Double
+ Private m_RawWidth As Double
+ Private m_RawHeight As Double
+ Private m_RawOffsX As Double
+ Private m_RawOffsY As Double
+ Private m_RawKerf As Double
Private Sub RawPartPage_Initialized(sender As Object, e As EventArgs)
@@ -43,10 +54,12 @@ Public Class RawPartPageUC
Private Sub RawPartPage_Loaded(sender As Object, e As RoutedEventArgs)
m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC
+ m_bActive = True
' Nascondo eventuali pezzi in parcheggio
HideParkedParts()
- ' Aggiorno dimensioni grezzo
- ' Se non esiste già il grezzo lo inserisco
+ ' Visualizzo eventuale foto
+ m_MainWindow.m_CurrentProjectPageUC.ShowPhoto(True)
+ ' Se esiste già il grezzo...
Dim nRawId As Integer = EgtGetFirstRawPart()
If nRawId <> GDB_ID.NULL Then
' origine tavola
@@ -57,35 +70,103 @@ Public Class RawPartPageUC
Dim nFlag As Integer = GDB_BB.ONLY_VISIBLE + GDB_BB.IGNORE_TEXT + GDB_BB.IGNORE_DIM
EgtGetBBoxGlob(nRawId, nFlag, ptMin, ptMax)
' kerf
- Dim dKerf As Double
- EgtGetInfo(nRawId, "Kerf", dKerf)
- m_bShowVar = True
- ' assegno valori ai textbox
- LengthTxBx.Text = DoubleToString((ptMax.x - ptMin.x - 2 * dKerf), 4)
- WidthTxBx.Text = DoubleToString((ptMax.y - ptMin.y - 2 * dKerf), 4)
- HeightTxBx.Text = DoubleToString((ptMax.z - ptMin.z), 4)
- OffsetXTxBx.Text = DoubleToString((ptMin.x - ptOri.x), 4)
- OffsetYTxBx.Text = DoubleToString((ptMin.y - ptOri.y), 4)
- KerfTxBx.Text = DoubleToString(dKerf, 4)
- m_bShowVar = False
+ EgtGetInfo(nRawId, "Kerf", m_RawKerf)
+ ' aggiorno dati grezzo
+ m_RawLength = ptMax.x - ptMin.x - 2 * m_RawKerf
+ m_RawWidth = ptMax.y - ptMin.y - 2 * m_RawKerf
+ m_RawHeight = ptMax.z - ptMin.z
+ m_RawOffsX = ptMin.x - ptOri.x + m_RawKerf
+ m_RawOffsY = ptMin.y - ptOri.y + m_RawKerf
+ ' aggiorno l'apparenza del grezzo
+ AdjustRawPartOnStart()
+ ' Altrimenti lo definisco
Else
- m_bShowVar = True
- LengthTxBx.Text = "2500"
- WidthTxBx.Text = "1500"
- HeightTxBx.Text = "30"
- OffsetXTxBx.Text = "300"
- OffsetYTxBx.Text = "200"
- KerfTxBx.Text = "50"
- m_bShowVar = False
+ ' Leggo da Ini gli ultimi valori
+ m_RawLength = GetPrivateProfileDouble(S_RAWPART, K_RAWLENGTH, 2500, m_MainWindow.GetIniFile())
+ m_RawWidth = GetPrivateProfileDouble(S_RAWPART, K_RAWWIDTH, 1500, m_MainWindow.GetIniFile())
+ m_RawHeight = GetPrivateProfileDouble(S_RAWPART, K_RAWHEIGHT, 30, m_MainWindow.GetIniFile())
+ m_RawOffsX = GetPrivateProfileDouble(S_RAWPART, K_RAWOFFSX, 100, m_MainWindow.GetIniFile())
+ m_RawOffsY = GetPrivateProfileDouble(S_RAWPART, K_RAWOFFSY, 100, m_MainWindow.GetIniFile())
+ m_RawKerf = GetPrivateProfileDouble(S_RAWPART, K_RAWKERF, 50, m_MainWindow.GetIniFile())
End If
' Deseleziono pezzi
EgtDeselectAll()
' Seleziono modalità rettangolo
RectangleBtn.IsChecked = True
+ ' Assegno dati grezzo rettangolare ai textbox
+ m_bShowVar = True
+ LengthTxBx.Text = DoubleToString(m_RawLength, 2)
+ WidthTxBx.Text = DoubleToString(m_RawWidth, 2)
+ HeightTxBx.Text = DoubleToString(m_RawHeight, 2)
+ OffsetXTxBx.Text = DoubleToString(m_RawOffsX, 2)
+ OffsetYTxBx.Text = DoubleToString(m_RawOffsY, 2)
+ KerfTxBx.Text = DoubleToString(m_RawKerf, 2)
+ m_bShowVar = False
+ ' Aggiorno grezzo
UpdateRawPart()
' Imposto il materiale corrente nella combobox
MaterialsCmbx.SelectedIndex = m_MainWindow.m_nCurrentMaterial
+ End Sub
+ Private Sub OnMyMouseDownScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles m_CurrProjPage.OnMouseDownScene
+ ' Verifico di essere il gestore attivo
+ If Not m_bActive Then
+ Return
+ End If
+ ' Si può selezionare solo con il tasto sinistro e se stato NULL
+ If e.Button <> Windows.Forms.MouseButtons.Left Or
+ Not m_CurrProjPage.CurrentProjectScene.IsStatusNull() Then
+ Return
+ End If
+ ' Verifico se selezionato indicativo di grezzo
+ Dim nSolidId = EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, "RawSolid")
+ EgtSetObjFilterForSelect(True, True, True, True, True)
+ Dim nSel As Integer
+ EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSel)
+ Dim nId As Integer = EgtGetFirstObjInSelWin()
+ While nId <> GDB_ID.NULL
+ If nSolidId <> GDB_ID.NULL And nId = nSolidId Then
+ m_bDrag = EgtUnProjectPoint(e.Location, m_ptPrev)
+ Exit While
+ End If
+ End While
+ End Sub
+
+ Private Sub OnMyMouseMoveScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles m_CurrProjPage.OnMouseMoveScene
+ ' Verifico di essere il gestore attivo
+ If Not m_bActive Then
+ Return
+ End If
+ ' Verifico di essere in modalità drag
+ If Not m_bDrag Then
+ Return
+ End If
+ ' Ricavo il punto corrente in coordinate mondo
+ Dim ptCurr As Point3d
+ EgtUnProjectPoint(e.Location, ptCurr)
+ ' Ricavo il vettore di movimento
+ Dim vtMove As Vector3d = ptCurr - m_ptPrev
+ ' Muovo il grezzo
+ EgtMoveRawPart(m_CurrProjPage.m_nRawId, vtMove)
+ EgtDraw()
+ ' Aggiorno gli offset
+ m_RawOffsX += vtMove.x
+ m_RawOffsY += vtMove.y
+ m_bShowVar = True
+ OffsetXTxBx.Text = DoubleToString(m_RawOffsX, 2)
+ OffsetYTxBx.Text = DoubleToString(m_RawOffsY, 2)
+ m_bShowVar = False
+ ' Aggiorno il punto precedente
+ m_ptPrev = ptCurr
+ End Sub
+
+ Private Sub OnMyMouseUpScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles m_CurrProjPage.OnMouseUpScene
+ ' Verifico di essere il gestore attivo
+ If Not m_bActive Then
+ Return
+ End If
+ ' Disabilito modalità drag
+ m_bDrag = False
End Sub
Private Sub MaterialsCmbx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles MaterialsCmbx.SelectionChanged
@@ -94,11 +175,20 @@ Public Class RawPartPageUC
End Sub
Private Sub ExitBtnUC_Click(sender As Object, e As RoutedEventArgs)
+ ' Sistemo il grezzo
+ AdjustRawPartOnExit()
' Ripristino visualizzazione di eventuali pezzi in parcheggio
ShowParkedParts()
' Imposto spessore del grezzo
m_CurrProjPage.m_dRawHeight = GetRawHeight()
- m_CurrProjPage.HeightTxBx.Text = GetRawHeight()
+ m_CurrProjPage.HeightTxBx.Text = m_CurrProjPage.m_dRawHeight
+ ' Salvo nel file Ini le dimensioni del grezzo
+ WritePrivateProfileString(S_RAWPART, K_RAWLENGTH, DoubleToString(m_RawLength, 2), m_MainWindow.GetIniFile())
+ WritePrivateProfileString(S_RAWPART, K_RAWWIDTH, DoubleToString(m_RawWidth, 2), m_MainWindow.GetIniFile())
+ WritePrivateProfileString(S_RAWPART, K_RAWHEIGHT, DoubleToString(m_RawHeight, 2), m_MainWindow.GetIniFile())
+ WritePrivateProfileString(S_RAWPART, K_RAWOFFSX, DoubleToString(m_RawOffsX, 2), m_MainWindow.GetIniFile())
+ WritePrivateProfileString(S_RAWPART, K_RAWOFFSY, DoubleToString(m_RawOffsY, 2), m_MainWindow.GetIniFile())
+ WritePrivateProfileString(S_RAWPART, K_RAWKERF, DoubleToString(m_RawKerf, 2), m_MainWindow.GetIniFile())
' Esco dalla pagina
m_MainWindow.m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(Me)
m_CurrProjPage.CurrProjGrid.Visibility = Windows.Visibility.Visible
@@ -115,13 +205,14 @@ Public Class RawPartPageUC
Public Function GetRawHeight() As Double
Dim nRawId As Integer = EgtGetFirstRawPart()
- If nRawId = GDB_ID.NULL Then
+ Dim nSolidRawId As Integer = EgtGetFirstNameInGroup(nRawId, "RawSolid")
+ If nSolidRawId = GDB_ID.NULL Then
Return 0
End If
' box grezzo
Dim ptMin, ptMax As Point3d
Dim nFlag As Integer = GDB_BB.ONLY_VISIBLE + GDB_BB.IGNORE_TEXT + GDB_BB.IGNORE_DIM
- EgtGetBBoxGlob(nRawId, nFlag, ptMin, ptMax)
+ EgtGetBBoxGlob(nSolidRawId, nFlag, ptMin, ptMax)
Return ptMax.z - ptMin.z
End Function
@@ -131,22 +222,27 @@ Public Class RawPartPageUC
If Not StringToDouble(LengthTxBx.Text, dLength) Or dLength < EPS_SMALL Then
Return
End If
+ m_RawLength = dLength
Dim dWidth As Double
If Not StringToDouble(WidthTxBx.Text, dWidth) Or dWidth < EPS_SMALL Then
Return
End If
+ m_RawWidth = dWidth
Dim dHeight As Double
If Not StringToDouble(HeightTxBx.Text, dHeight) Or dHeight < EPS_SMALL Then
Return
End If
+ m_RawHeight = dHeight
Dim dOffsetX As Double
If Not StringToDouble(OffsetXTxBx.Text, dOffsetX) Then
Return
End If
+ m_RawOffsX = dOffsetX
Dim dOffsetY As Double
If Not StringToDouble(OffsetYTxBx.Text, dOffsetY) Then
Return
End If
+ m_RawOffsY = dOffsetY
Dim dKerf As Double
If Not StringToDouble(KerfTxBx.Text, dKerf) Then
Return
@@ -154,26 +250,97 @@ Public Class RawPartPageUC
If dKerf < EPS_SMALL Then
dKerf = 0
End If
+ m_RawKerf = dKerf
' Se non esiste già il grezzo lo inserisco
Dim nRawId As Integer = EgtGetFirstRawPart()
If nRawId = GDB_ID.NULL Then
' recupero il colore
- Dim Col As New Color3d(64, 192, 255, 50)
- GetPrivateProfileColor(S_NEST, K_RAWCOLOR, Col, m_MainWindow.GetIniFile())
- m_CurrProjPage.m_nRawId = EgtAddRawPart(Point3d.ORIG(), dLength + 2 * dKerf, dWidth + 2 * dKerf, dHeight, Col)
- ' imposto info di grezzo con texture
- Dim nSolidId = EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, "RawSolid")
- EgtSetInfo(nSolidId, "!TXT", "Raw")
+ Dim Col As New Color3d(64, 192, 255, 40)
+ GetPrivateProfileColor(S_RAWPART, K_RAWCOLOR, Col, m_MainWindow.GetIniFile())
+ ' in presenza di foto rendo molto più trasparente
+ If m_CurrProjPage.GetPhoto() <> GDB_ID.NULL Then
+ Col.A = 20
+ End If
+ m_CurrProjPage.m_nRawId = EgtAddRawPart(Point3d.ORIG(), m_RawLength + 2 * m_RawKerf, m_RawWidth + 2 * m_RawKerf, m_RawHeight, Col)
' Altrimenti lo modifico
Else
m_CurrProjPage.m_nRawId = nRawId
- EgtModifyRawPartSize(nRawId, dLength + 2 * dKerf, dWidth + 2 * dKerf, dHeight)
+ EgtModifyRawPartSize(nRawId, m_RawLength + 2 * m_RawKerf, m_RawWidth + 2 * m_RawKerf, m_RawHeight)
End If
- EgtSetInfo(m_CurrProjPage.m_nRawId, "Kerf", dKerf.ToString("F4", CultureInfo.InvariantCulture))
+ UpdateRawPartKerf()
' Sistemo la posizione
- EgtMoveToCornerRawPart(m_CurrProjPage.m_nRawId, New Point3d(dOffsetX, dOffsetY, 0), MCH_CR.BL)
+ EgtMoveToCornerRawPart(m_CurrProjPage.m_nRawId, New Point3d(m_RawOffsX - m_RawKerf, m_RawOffsY - m_RawKerf, 0), MCH_CR.BL)
' Aggiorno visualizzazione
EgtZoom(ZM.ALL)
End Sub
+ Private Function UpdateRawPartKerf() As Boolean
+ ' Recupero il vecchio valore del kerf
+ Dim dOldKerf As Double
+ If Not EgtGetInfo(m_CurrProjPage.m_nRawId, "Kerf", dOldKerf) Then
+ dOldKerf = GetPrivateProfileDouble(S_RAWPART, K_RAWKERF, 30, m_MainWindow.GetIniFile())
+ End If
+ ' Cancello eventuale vecchio contorno di kerf
+ Dim nKerfId As Integer = EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, "Kerf")
+ EgtErase(nKerfId)
+ ' box grezzo
+ Dim ptMin, ptMax As Point3d
+ Dim nFlag As Integer = GDB_BB.ONLY_VISIBLE + GDB_BB.IGNORE_TEXT + GDB_BB.IGNORE_DIM
+ EgtGetBBoxGlob(m_CurrProjPage.m_nRawId, nFlag, ptMin, ptMax)
+ ptMin.x += m_RawKerf
+ ptMin.y += m_RawKerf
+ ptMin.z = ptMax.z
+ ptMax.x -= m_RawKerf
+ ptMax.y -= m_RawKerf
+ ' Creo il nuovo contorno del kerf
+ nKerfId = EgtCreateRectangle2P(m_CurrProjPage.m_nRawId, ptMin, ptMax, GDB_RT.GLOB)
+ EgtSetName(nKerfId, "Kerf")
+ Dim Col As New Color3d(255, 0, 0, 100)
+ GetPrivateProfileColor(S_RAWPART, K_KERFCOLOR, Col, m_MainWindow.GetIniFile())
+ EgtSetColor(nKerfId, Col)
+ ' Salvo il nuovo valore
+ EgtSetInfo(m_CurrProjPage.m_nRawId, "Kerf", DoubleToString(m_RawKerf, 4))
+ Return True
+ End Function
+
+ Private Sub AdjustRawPartOnStart()
+ ' Se non c'è la foto va già bene così
+ If m_CurrProjPage.GetPhoto() = GDB_ID.NULL Then
+ Return
+ End If
+ ' Disabilito la texture della foto
+ Dim nSolidId = EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, "RawSolid")
+ EgtRemoveInfo(nSolidId, "!TNA")
+ ' Sistemo il colore
+ Dim Col As New Color3d(64, 192, 255, 40)
+ GetPrivateProfileColor(S_RAWPART, K_RAWCOLOR, Col, m_MainWindow.GetIniFile())
+ Col.A = 20
+ EgtSetColor(nSolidId, Col, True)
+ End Sub
+
+ Private Sub AdjustRawPartOnExit()
+ ' Se non c'è la foto va già bene così
+ If m_CurrProjPage.GetPhoto() = GDB_ID.NULL Then
+ Return
+ End If
+ ' Carico la texture della foto
+ Dim nSolidId = EgtGetFirstNameInGroup(m_CurrProjPage.m_nRawId, "RawSolid")
+ EgtSetInfo(nSolidId, "!TNA", "Raw")
+ ' Sistemo il riferimento della texture
+ Dim refGlob As New Frame3d
+ EgtGetGroupGlobFrame(m_CurrProjPage.m_nRawId, refGlob)
+ Dim refTxt As New Frame3d
+ m_CurrProjPage.GetPhotoTextureRef(refTxt)
+ refTxt.ToLoc(refGlob)
+ EgtSetInfo(nSolidId, "!TFR", refTxt)
+ ' Sistemo il colore
+ EgtSetColor(nSolidId, New Color3d(255, 255, 255, 100), True)
+ End Sub
+
+ Private Sub RawPartPage_Unloaded(sender As Object, e As RoutedEventArgs)
+ ' Nascondo eventuale foto
+ m_MainWindow.m_CurrentProjectPageUC.ShowPhoto(False)
+ m_bActive = False
+ End Sub
+
End Class
diff --git a/SimulationPageUC.xaml.vb b/SimulationPageUC.xaml.vb
index 017202c..509a8f1 100644
--- a/SimulationPageUC.xaml.vb
+++ b/SimulationPageUC.xaml.vb
@@ -5,12 +5,15 @@ Public Class SimulationPageUC
Dim m_MainWindow As MainWindow = Application.Current.MainWindow
Dim m_CurrProjPage As CurrentProjectPageUC
- 'Dichiarazione delle Page UserControl
+ ' Dichiarazione delle Page UserControl
Friend m_SceneButtons As SceneButtonsUC
- 'Dichiarazione flag PlayPauseBtn
+ ' Dichiarazione flag PlayPauseBtn
Private m_bPlay As Boolean = False
+ ' Flag di progetto da caricare prima di simulare
+ Private m_bToReload As Boolean = False
+
Private Sub SimulationPage_Initialized(sender As Object, e As EventArgs)
'Creazione del UserCOntrol SceneButtons
@@ -26,32 +29,49 @@ Public Class SimulationPageUC
Private Sub SimulationPage_Loaded(sender As Object, e As RoutedEventArgs)
m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC
+ ' Salvo il progetto corrente
+ SaveProject()
' Nascondo eventuali pezzi in parcheggio
HideParkedParts()
' Visualizzo tutta la macchina
EgtShowOnlyTable(False)
+ ' Imposto vista 3d isometrica di tutto
EgtSetView(VT.ISO_SE, False)
EgtZoom(ZM.ALL)
End Sub
Private Sub PlayPauseBtn_Click(sender As Object, e As RoutedEventArgs) Handles PlayPauseBtn.Click
If m_bPlay Then
- 'Metto in pausa
+ ' Metto in pausa
m_bPlay = False
PlayPauseImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("/Resources/Play.png", UriKind.Relative))
Else
- 'Metto in play
+ ' Ricarico il progetto, se necessario
+ If ReloadProject() Then
+ HideParkedParts()
+ EgtShowOnlyTable(False)
+ EgtDraw()
+ End If
+ ' Metto in play
m_bPlay = True
PlayPauseImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("/Resources/Pause.png", UriKind.Relative))
+ ' Eseguo
+ m_bToReload = True
EgtLuaExecFile("C:\EgtData\OmagCut\Config\Simulate.lua")
+ ' Metto in pausa
+ m_bPlay = False
+ PlayPauseImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("/Resources/Play.png", UriKind.Relative))
End If
End Sub
Private Sub ExitBtnUC_Click(sender As Object, e As RoutedEventArgs)
+ ' Ricarico il progetto corrente
+ ReloadProject()
' Ripristino visualizzazione di eventuali pezzi in parcheggio
ShowParkedParts()
' Ripristino visualizzazione della sola tavola
EgtShowOnlyTable(True)
+ ' Imposto vista 2D
EgtSetView(VT.TOP, False)
EgtZoom(ZM.ALL)
' Esco dalla pagina
@@ -61,4 +81,21 @@ Public Class SimulationPageUC
m_MainWindow.m_ActivePage = MainWindow.Pages.CadCut
End Sub
+ Private Sub SaveProject()
+ Dim sPath As String = m_MainWindow.GetTempDir() & "\" & "SimuProj.nge"
+ m_CurrProjPage.SaveProject(sPath)
+ m_bToReload = False
+ End Sub
+
+ Private Function ReloadProject() As Boolean
+ If Not m_bToReload Then
+ Return False
+ End If
+ ' Ricarico
+ Dim sPath As String = m_MainWindow.GetTempDir() & "\" & "SimuProj.nge"
+ m_CurrProjPage.LoadProject(sPath)
+ m_bToReload = False
+ Return True
+ End Function
+
End Class
diff --git a/TagliCadUC.xaml b/TagliCadUC.xaml
deleted file mode 100644
index a4e0124..0000000
--- a/TagliCadUC.xaml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/TagliCadUC.xaml.vb b/TagliCadUC.xaml.vb
deleted file mode 100644
index cea5a57..0000000
--- a/TagliCadUC.xaml.vb
+++ /dev/null
@@ -1,42 +0,0 @@
-Public Class TagliCadUC
-
- Dim MainWindowUC As MainWindow = Application.Current.MainWindow
- 'Dim m_BarLavoraUC As BarLavoraUC
- 'Dim m_BarNestingUC As BarNestingUC
-
- Private Sub TagliCadUC_Initialized(sender As Object, e As EventArgs)
- 'm_BarLavoraUC = New BarLavoraUC
- 'm_BarNestingUC = New BarNestingUC
- End Sub
-
- Private Sub TagliCadUC_Loaded(sender As Object, e As RoutedEventArgs)
- 'RightBtnBarContent.Content = m_BarNestingUC
- End Sub
-
- Private Sub ComponentsBtnUC_Click(sender As Object, e As RoutedEventArgs)
- 'MainWindowUC.TagliCadContent.Content = MainWindowUC.m_ComponentiUC
- End Sub
-
- Private Sub ZoomAllBtnUC_Click(sender As Object, e As RoutedEventArgs)
- 'MainWindowUC.MachiningScene.ZoomAll()
- End Sub
-
- Private Sub LavoraBtnUC_Click(sender As Object, e As RoutedEventArgs)
- 'If (RightBtnBarContent.Content = m_BarNestingUC) Then
- ' RightBtnBarContent.Content = m_BarLavoraUC
- 'Else
- ' RightBtnBarContent.Content = m_BarLavoraUC
- 'End If
- End Sub
-
- Private Sub GrezzoBtnUC_Click(sender As Object, e As RoutedEventArgs)
- 'MainWindowUC.m_GrezzoUC.SetValue(Grid.RowProperty, 1)
- 'MainWindowUC.m_GrezzoUC.SetValue(Grid.RowSpanProperty, 2)
- 'MainWindowUC.MainGrid.Children.Add(MainWindowUC.m_GrezzoUC)
- End Sub
-
- Private Sub ImportBtnUC_Click(sender As Object, e As RoutedEventArgs)
- 'MainWindowUC.TagliCadContent.Content = MainWindowUC.m_FlatPartsImportUC
- End Sub
-
-End Class
diff --git a/Utility.vb b/Utility.vb
index 7d5b2bb..6403b9c 100644
--- a/Utility.vb
+++ b/Utility.vb
@@ -2,19 +2,6 @@
Imports EgtUILib
Module Utility
- Friend Function DoubleToString(ByVal dVal As Double, ByVal nNumDec As UInteger) As String
- Dim sFormat As String = "F" + nNumDec.ToString()
- Dim sVal As String = dVal.ToString(sFormat, CultureInfo.InvariantCulture)
- If nNumDec > 0 Then
- Return sVal.TrimEnd("0".ToCharArray()).TrimEnd(".".ToCharArray)
- Else
- Return sVal
- End If
- End Function
-
- Friend Function StringToDouble(ByVal sVal As String, ByRef dVal As Double) As Boolean
- Return EgtLuaEvalNumExpr(sVal, dVal)
- End Function
Friend Sub HideParkedParts()
Dim nPartId As Integer = EgtGetFirstPart()
@@ -32,4 +19,18 @@ Module Utility
End While
End Sub
+ Friend Function DoubleToString(ByVal dVal As Double, ByVal nNumDec As UInteger) As String
+ Dim sFormat As String = "F" + nNumDec.ToString()
+ Dim sVal As String = dVal.ToString(sFormat, CultureInfo.InvariantCulture)
+ If nNumDec > 0 Then
+ Return sVal.TrimEnd("0".ToCharArray()).TrimEnd(".".ToCharArray)
+ Else
+ Return sVal
+ End If
+ End Function
+
+ Friend Function StringToDouble(ByVal sVal As String, ByRef dVal As Double) As Boolean
+ Return EgtLuaEvalNumExpr(sVal, dVal)
+ End Function
+
End Module