Files
egtstone3d/CompoLib/ParametricCompoVM.vb

171 lines
5.5 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
Private m_nPartId As Integer = GDB_ID.NULL
Public Property nPartId As Integer
Get
Return m_nPartId
End Get
Set(value As Integer)
m_nPartId = value
End Set
End Property
#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(EGT_MESSAGE, 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")
' rinomino il part con un nome univoco
Dim nPart As Integer = EgtGetLastPart()
EgtLuaSetGlobNumVar("TOOL.nId", nPart)
EgtLuaCallFunction("TOOL.RenameNewPart")
EgtLuaCallFunction("TOOL.ReorganizeEdges")
EgtLuaCallFunction("TOOL.ClearVariables")
nPartId = EgtGetLastPart()
End Sub
Public Overrides Sub Conferma()
Map.refSceneHostVM.m_bPreviewShown = False
ExecLua()
EgtDraw()
Close()
End Sub
Public Overrides Sub Annulla()
Dim PartSolidSel As PartSolidM = GetPartSolid(nPartId)
SolidManagerM.Delete(nPartId)
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)
SolidManagerM.RefreshPartSolid(nPartId)
' debug
EgtSaveFile("D:\\Temp\\marmo\\Vein3D\\template.nge", 2)
' debug
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