Files
egtstone3d/CompoLib/ParametricCompoVM.vb
T
2025-02-06 12:15:34 +01:00

134 lines
4.3 KiB
VB.net

Imports System.IO
Imports System.Windows.Forms.AxHost
Imports EgtUILib.EgtInterface
Imports EgtWPFLib5
Public Class ParametricCompoVM
Inherits SceneUserControlVM
#Region "FIELDS & PROPERTIES"
Private sLuaPath As String = String.Empty
#End Region ' Fields & Properties
#Region "CONSTRUCTOR"
Sub New(sFile As String)
MyBase.New()
Title = EGT_PARAMETRIC.ToUpper()
' Recupero path cartella che contiene i componenti
GetMainPrivateProfileString(K_COMPO, COMPO_DIR, "", sLuaPath)
sLuaPath &= sFile
LoadParamList()
' 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(sLuaPath)
Dim sPar As String = "0"
EgtLuaGetGlobStringVar("CMP.Npar", sPar)
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 Sub
Private Sub ExecLua()
Dim nVeinCtx As Integer = Map.refSceneHostVM.MainScene.GetCtx()
If Not File.Exists(sLuaPath) Then
EgtOutLog("Matching error: missing file (" & sLuaPath & ")")
Return
End If
' Parsing
EgtLuaExecFile(sLuaPath)
EgtSetCurrentContext(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.refSceneButtonV.RemoveParametricCompoUC()
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 = False
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