Files
egtstone3d/CompoLib/ParametricCompoVM.vb
Demetrio Cassarino d04d9fedc7 -aggiunto script editor per file lua
-al momento funziona con textbox
2025-02-14 16:55:52 +01:00

147 lines
4.8 KiB
VB.net

Imports System.IO
Imports EgtUILib.EgtInterface
Imports EgtWPFLib5
Public Class ParametricCompoVM
Inherits SceneUserControlVM
#Region "FIELDS & PROPERTIES"
Private m_sLuaPath As String = String.Empty
Friend ReadOnly bFileExsist As Boolean = False
Private m_nVeinCtx As Integer
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New(sFile As String, nVeinCtx As Integer, Optional dir As String = "")
MyBase.New()
m_nVeinCtx = nVeinCtx
Title = EGT_PARAMETRIC.ToUpper()
' Recupero path cartella che contiene i componenti
If Not File.Exists(dir & sFile) Then
GetMainPrivateProfileString(K_COMPO, COMPO_DIR, "", m_sLuaPath)
' Controllo se il file esiste
m_sLuaPath &= sFile
Else
m_sLuaPath = dir & sFile
End If
If File.Exists(m_sLuaPath) Then
LoadParamList()
bFileExsist = True
Else
EgtOutLog("File " & m_sLuaPath & " non esiste nella cartella dei componenti")
End If
' aggiorno visualizzazione
EgtSetView(VT.TOP, False)
EgtZoom(ZM.ALL)
End Sub
#End Region ' Contructor
#Region "METHODS"
Public Overrides Sub LoadParamList()
' Pulisco lista variabili
ParamList.Clear()
EgtLuaExecFile(m_sLuaPath)
Dim sPar As String = "0"
EgtLuaGetGlobStringVar("CMP.Npar", sPar)
If Not String.IsNullOrEmpty(sPar) Then
Dim sName As String = String.Empty
EgtLuaGetGlobStringVar("CMP.Nome", sName)
Dim nPar As Integer = CInt(sPar)
ParamList.Add(New _TextBlockParam("Messaggio", sName, Visibility.Visible))
' Recupero nome, tipo e valore delle variabili globali
For Index As Integer = 1 To nPar
Dim NewCompo As GenericParam = Nothing
If NameTypeValueFromLua(Index, NewCompo) Then
ParamList.Add(NewCompo)
End If
Next
End If
End Sub
Private Sub ExecLua()
If Not File.Exists(m_sLuaPath) Then
EgtOutLog("Matching error: missing file (" & m_sLuaPath & ")")
Return
End If
' Parsing
EgtLuaExecFile(m_sLuaPath)
EgtSetCurrentContext(m_nVeinCtx)
For Index As Integer = 0 To ParamList.Count - 1
If TypeOf ParamList(Index) Is _TextBoxParam Then
Dim _TextBox As _TextBoxParam = DirectCast(ParamList(Index), _TextBoxParam)
EgtLuaSetGlobNumVar("CMP.V" & Index, CDbl(_TextBox.sValue))
ElseIf TypeOf ParamList(Index) Is _CheckBoxParam Then
Dim _CheckBox As _CheckBoxParam = DirectCast(ParamList(Index), _CheckBoxParam)
EgtLuaSetGlobBoolVar("CMP.V" & Index, _CheckBox.IsChecked)
End If
Next
EgtLuaExecLine("CMP_Draw" & "(true)")
EgtLuaResetGlobVar("CMP")
End Sub
Public Overrides Sub Conferma()
Map.refSceneHostVM.m_bPreviewShown = False
ExecLua()
EgtDraw()
Close()
End Sub
Public Overrides Sub Annulla()
EgtErase(EgtGetFirstPart())
EgtDraw()
Close()
End Sub
Public Overrides Sub ShowPreview()
Map.refSceneHostVM.m_bPreviewShown = True
ExecLua()
EgtDraw()
End Sub
Private Sub Close()
Map.refSceneButtonVM.RemoveUC(Map.refSceneButtonVM.m_ParametricCompoUC)
End Sub
Private Function NameTypeValueFromLua(nInd As Integer, ByRef Param As GenericParam) As Boolean
Dim bOk As Boolean = True
Dim sName As String = String.Empty
Dim nType As Integer = 0
bOk = bOk AndAlso EgtLuaGetGlobStringVar(LUA_NAME & nInd.ToString(), sName)
bOk = bOk AndAlso EgtLuaGetGlobIntVar(LUA_TYPE & nInd.ToString(), nType)
Return bOk AndAlso FromLua(nInd, sName, nType, Param)
End Function
Private Function FromLua(nInd As Integer, sName As String, nType As Integer, ByRef Param As GenericParam) As Boolean
Dim sVal As String = String.Empty
Dim dVal As Double = 0
Dim nVal As Integer = 0
Dim bOk As Boolean
Select Case nType
Case ParamType.BOOL
bOk = EgtLuaGetGlobBoolVar(LUA_VALUE & nInd.ToString(), ParamType.BOOL)
Param = New _CheckBoxParam(sName, sVal)
Return bOk
Case ParamType.INT
bOk = EgtLuaGetGlobIntVar(LUA_VALUE & nInd.ToString(), nVal)
Param = New _TextBoxParam(sName, nVal.ToString(), nType)
Return bOk
Case ParamType.LEN, ParamType.DOUB
bOk = EgtLuaGetGlobNumVar(LUA_VALUE & nInd.ToString(), dVal)
Param = New _TextBoxParam(sName, dVal.ToString(), nType)
Return bOk
Case ParamType.STR
bOk = EgtLuaGetGlobStringVar(LUA_VALUE & nInd.ToString(), sVal)
Param = New _TextBoxParam(sName, sVal, nType)
Return bOk
End Select
Return False
End Function
#End Region ' Methods
End Class