Files
egtbeamwall/EgtBEAMWALL.ViewerOptimizer/MacroFeatureWnd/MacroFeatureWndVM.vb
T
2021-03-31 18:37:07 +02:00

154 lines
6.6 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.IO
Imports EgtUILib
Imports EgtWPFLib5
Imports EgtBEAMWALL.Core
Public Class MacroFeatureWndVM
Inherits VMBase
#Region "FIELDS & PROPERTIES"
' File template per scrittura Macro
Friend Const MACROTEMPLATE_FILE As String = "MacroTemplate.ini"
Friend Const DATETIME As String = "%DATE_TIME%"
Friend Const MACRO_NAME As String = "%MACRO_NAME%"
Friend Const MACRO_ORIG As String = "%x,y,z%"
Friend Const MACRO_DIRX As String = "%xx,xy,xz%"
Friend Const MACRO_DIRY As String = "%yx,yy,yz%"
Friend Const MACRO_DIRZ As String = "%zx,zy,zz%"
'Friend Const MACRO_L As String = "%L%"
'Friend Const MACRO_W As String = "%W%"
'Friend Const MACRO_H As String = "%H%"
'Friend Const MACRO_ID As String = "%Id%"
Friend Const MACRO_VPAR As String = "%vPar%"
Friend Const MACRO_SPAR As String = "%sPar%"
Friend Const MACRO_ADDFEATURE As String = "%AddFeature%"
Friend Event m_CloseWindow(bDialogResult As Boolean)
Private m_FeatureList As New ObservableCollection(Of BTLFeatureVM)
Public ReadOnly Property FeatureList As ObservableCollection(Of BTLFeatureVM)
Get
Return m_FeatureList
End Get
End Property
Private m_nSelFeature As BTLFeatureVM = Nothing
Public Property nSelFeature As BTLFeatureVM
Get
Return m_nSelFeature
End Get
Set(value As BTLFeatureVM)
If value IsNot m_nSelFeature Then
m_nSelFeature = value
End If
End Set
End Property
Private m_sFeatureName As String
Public Property sFeatureName As String
Get
Return m_sFeatureName
End Get
Set(value As String)
If value <> m_sFeatureName Then
m_sFeatureName = value
End If
End Set
End Property
' Definizione comandi
Private m_cmdOk As ICommand
#End Region ' FIELDS & PROPERTIES
#Region "CONSTRUCTOR"
Sub New()
For Each FeatureItem In Map.refProjectVM.BTLStructureVM.SelBTLPart.BTLFeatureVMList
FeatureList.Add(FeatureItem)
Next
End Sub
#End Region ' CONSTRUCTOR
#Region "COMMANDS"
#Region "Ok"
Public ReadOnly Property Ok_Command As ICommand
Get
If m_cmdOk Is Nothing Then
m_cmdOk = New Command(AddressOf Ok)
End If
Return m_cmdOk
End Get
End Property
Public Sub Ok()
'verifico che tutti i campi contengano un valore valido
If Not IsNothing(nSelFeature) AndAlso Not String.IsNullOrEmpty(sFeatureName) Then
WriteMacro(sFeatureName)
RaiseEvent m_CloseWindow(True)
Else
MessageBox.Show("Errore! Impossibile creare una Macro senza selezionare una Feature o col Nome vuoto", "Errore")
End If
End Sub
#End Region ' Ok
#End Region ' COMMANDS
#Region "METHODS"
#Region "Ok"
Friend Sub WriteMacro(sMacroName As String)
' inizio routine di scrittura
Dim FileContent As String() = File.ReadAllLines(Map.refMainWindowVM.MainWindowM.sMacroDir & "\" & MACROTEMPLATE_FILE)
Dim FileName As String = CalcBeamPrivateProfileGRP(nSelFeature.nSelGRP) & "." & nSelFeature.nPRC & FILENAMESEPARATOR & sMacroName
For LineIndex As Integer = 0 To FileContent.Count - 1
Dim sCurrLine As String = FileContent(LineIndex)
FileContent(LineIndex) = FileContent(LineIndex).Replace(DATETIME, System.DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"))
FileContent(LineIndex) = FileContent(LineIndex).Replace(MACRO_NAME, FileName)
FileContent(LineIndex) = FileContent(LineIndex).Replace(MACRO_ORIG, LenToString(nSelFeature.frFRAME.Orig.x, 6) & ", " &
LenToString(nSelFeature.frFRAME.Orig.y, 6) & ", " &
LenToString(nSelFeature.frFRAME.Orig.z, 6))
FileContent(LineIndex) = FileContent(LineIndex).Replace(MACRO_DIRX, DoubleToString(nSelFeature.frFRAME.VersX.x, 6) & ", " &
DoubleToString(nSelFeature.frFRAME.VersX.y, 6) & ", " &
DoubleToString(nSelFeature.frFRAME.VersX.z, 6))
FileContent(LineIndex) = FileContent(LineIndex).Replace(MACRO_DIRY, DoubleToString(nSelFeature.frFRAME.VersY.x, 6) & ", " &
DoubleToString(nSelFeature.frFRAME.VersY.y, 6) & ", " &
DoubleToString(nSelFeature.frFRAME.VersY.z, 6))
FileContent(LineIndex) = FileContent(LineIndex).Replace(MACRO_DIRZ, DoubleToString(nSelFeature.frFRAME.VersZ.x, 6) & ", " &
DoubleToString(nSelFeature.frFRAME.VersZ.y, 6) & ", " &
DoubleToString(nSelFeature.frFRAME.VersZ.z, 6))
If FileContent(LineIndex).Contains(MACRO_VPAR) Or FileContent(LineIndex).Contains(MACRO_SPAR) Then
' recupero i valori di vPar (e sPar) e li separo opportunamente
Dim vPar() As Double = Nothing
Dim sPar As String = String.Empty
Dim s_vPar As String = String.Empty
nSelFeature.BTLFeatureM.CalcParamArray(vPar, sPar)
For Each vParItem In vPar
s_vPar = s_vPar & " " & DoubleToString(vParItem, 3) & ","
Next
s_vPar = s_vPar.TrimStart()
s_vPar = s_vPar.TrimEnd(", ")
FileContent(LineIndex) = FileContent(LineIndex).Replace(MACRO_VPAR, s_vPar)
FileContent(LineIndex) = FileContent(LineIndex).Replace(MACRO_SPAR, If(String.IsNullOrWhiteSpace(sPar), "''", sPar))
End If
FileContent(LineIndex) = FileContent(LineIndex).Replace(MACRO_ADDFEATURE, nSelFeature.nSelGRP & ", " &
nSelFeature.nPRC & ", " &
nSelFeature.nSelSIDE & ", " &
"'" & nSelFeature.sDES & "', " &
"MACRO.PROCID") 'nSelFeature.ParentPart.NewProcId() &
Next
File.WriteAllLines(Map.refMainWindowVM.MainWindowM.sMacroDir & "\" & FileName & ".lua", FileContent, Text.Encoding.UTF8)
End Sub
#End Region ' Ok
#End Region ' METHODS
End Class