Files

3211 lines
115 KiB
VB.net
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Imports EgtUILib.EgtInterface
Imports EgtWPFLib5
Imports Newtonsoft.Json
Imports System.IO
Imports System.Collections.ObjectModel
Imports System.Globalization
Imports EgtWindowMaker.ManageWindowVM
Imports MS.Internal.Text.TextInterface
Imports System.Xml.Serialization
Public Class ManageWindowVM
Inherits VMBase
Public Enum ParamCathegories As Integer
GENERAL = 1
FRAME = 2
SPLIT = 3
SASH = 4
FILL = 5
HARDWARE = 6
End Enum
Public Enum SplitParamPages As Integer
SELECTION = 1
PARAMETERS = 2
End Enum
Public Enum DShowModes
MODE2D = 1
MODESIMPLE3D = 2
MODE3D = 3
End Enum
Private m_SelParamCathegory As ParamCathegories
Public Property SelParamCathegoryIndex As Integer
Get
Return m_SelParamCathegory - 1
End Get
Set(value As Integer)
Select Case m_SelParamCathegory
Case ParamCathegories.SPLIT, ParamCathegories.SASH, ParamCathegories.FILL
If Not IsNothing(m_SelArea) AndAlso Not m_SelArea.bApplied Then
m_SelArea.ParentArea.AreaList.Remove(m_SelArea)
End If
End Select
m_SelParamCathegory = value + 1
Select Case m_SelParamCathegory
Case ParamCathegories.GENERAL
Case ParamCathegories.FRAME
' seleziono area frame
SetSelArea(m_CurrWindow.AreaList(0), True)
' mostro aree di selezione
ManageSplitSelectionSurfaces(False, True)
Case ParamCathegories.SPLIT
' resetto selezione
SetSelArea(Nothing, True)
' mostro aree di selezione
ManageSplitSelectionSurfaces(True, True)
Case ParamCathegories.SASH
' resetto selezione
SetSelArea(Nothing, True)
' mostro aree di selezione
ManageSplitSelectionSurfaces(True, True)
Case ParamCathegories.FILL
' resetto selezione
SetSelArea(Nothing, True)
' mostro aree di selezione
ManageSplitSelectionSurfaces(True, True)
End Select
End Set
End Property
Public ReadOnly Property SelParamCathegory As Integer
Get
Return m_SelParamCathegory
End Get
End Property
Friend Sub ResetParamCathegory()
m_SelParamCathegory = ParamCathegories.GENERAL
NotifyPropertyChanged(NameOf(SelParamCathegoryIndex))
End Sub
Private m_CurrWindow As Window
Public Property CurrWindow As Window
Get
Return m_CurrWindow
End Get
Set(value As Window)
m_CurrWindow = value
End Set
End Property
Private m_SelArea As Area
Public Property SelArea As Area
Get
Return m_SelArea
End Get
Set(value As Area)
m_SelArea = value
End Set
End Property
Private Sub SetSelArea(Area As Area, Optional NotifyProperty As Boolean = False)
m_SelArea = Area
Map.refSceneHostVM.ResetSelIdList()
If Not IsNothing(Area) Then SelSurfFromArea(Area)
If NotifyProperty Then NotifyPropertyChanged(NameOf(SelArea))
End Sub
Private m_DShowMode As DShowModes = DShowModes.MODESIMPLE3D
Friend Sub SetDShowMode(value As DShowModes)
m_DShowMode = value
DrawWindow(False)
End Sub
Public Property bIsShow2DOn As Boolean
Get
Return m_DShowMode = DShowModes.MODE2D
End Get
Set(value As Boolean)
If value Then
m_DShowMode = DShowModes.MODE2D
End If
DrawWindow()
' mostro aree di selezione
ManageSplitSelectionSurfaces(True, True)
End Set
End Property
Public Property bIsShowSimple3DOn As Boolean
Get
Return m_DShowMode = DShowModes.MODESIMPLE3D
End Get
Set(value As Boolean)
If value Then
m_DShowMode = DShowModes.MODESIMPLE3D
End If
DrawWindow()
' mostro aree di selezione
ManageSplitSelectionSurfaces(True, True)
End Set
End Property
Public Property bIsShow3DOn As Boolean
Get
Return m_DShowMode = DShowModes.MODE3D
End Get
Set(value As Boolean)
If value Then
m_DShowMode = DShowModes.MODE3D
End If
DrawWindow()
' mostro aree di selezione
ManageSplitSelectionSurfaces(True, True)
End Set
End Property
Private m_HardwareShowMode As Boolean = True
Public Property HardwareShowMode As Boolean
Get
Return m_HardwareShowMode
End Get
Set(value As Boolean)
m_HardwareShowMode = value
' imposto se mostrare solido ferramenta
Dim gf = EgtLuaCreateGlobTable("WDG")
Dim kl = EgtLuaSetGlobBoolVar("WDG.AUXSTATUS", m_HardwareShowMode)
Dim kj = EgtLuaCallFunction("WinSetAuxGrpStatus")
Dim go = EgtLuaResetGlobVar("WDG")
EgtDraw()
End Set
End Property
#Region "Split"
'Private m_nSplitParamPage As SplitParamPages
'Public Property nSplitParamPageIndex As Integer
' Get
' Return m_nSplitParamPage - 1
' End Get
' Set(value As Integer)
' m_nSplitParamPage = value + 1
' End Set
'End Property
Private Sub SetSplitParamPage(nValue As SplitParamPages)
Select Case nValue
Case SplitParamPages.SELECTION
' mostro aree di selezione
For Each Area In m_CurrWindow.AreaList
Area.ManageSelectionSurface(GDB_ST.ON_)
Next
End Select
'm_nSplitParamPage = nValue
'NotifyPropertyChanged(NameOf(nSplitParamPageIndex))
End Sub
Friend ReadOnly Property SplitParamPage As SplitParamPages
Get
Return If(IsNothing(m_SelArea), SplitParamPages.SELECTION, SplitParamPages.PARAMETERS)
End Get
End Property
Private Sub ManageSplitSelectionSurfaces(bShow As Boolean, Optional bDraw As Boolean = False)
' mostro aree di selezione
For Each Area In m_CurrWindow.AreaList
Area.ManageSelectionSurface(bShow)
Next
If bDraw Then EgtDraw()
End Sub
#End Region ' Split
Private m_HardwareList As New List(Of Hardware)
Public ReadOnly Property HardwareList As List(Of Hardware)
Get
Return m_HardwareList
End Get
End Property
' Definizione comandi
Private m_cmdRead As ICommand
Private m_cmdWrite As ICommand
Private m_cmdFillGlass As ICommand
Private m_cmdFillWood As ICommand
Private m_cmdDraw As ICommand
Private m_cmdApplyFrame As ICommand
Private m_cmdApplySplit As ICommand
Private m_cmdDeleteArea As ICommand
Private m_cmdApplySash As ICommand
Private m_cmdApplyFill As ICommand
Sub New()
Map.SetRefManageWindowVM(Me)
' assegno funzioni a delegati
Area.m_delDrawWindow = AddressOf DrawWindow
FrameDimension.m_delDrawWindow = AddressOf DrawWindow
Joint.m_delDrawWindow = AddressOf DrawWindow
Split.m_delDrawWindow = AddressOf DrawWindow
Sash.m_delDrawWindow = AddressOf DrawWindow
' imposto path profilo per lua
Dim gg = EgtLuaExecFile(Map.refMainWindowVM.MainWindowM.sBaseDir & "\" & DESIGNING_DIR & "\WinProject.lua")
Dim gf = EgtLuaCreateGlobTable("WDG")
Dim kk = EgtLuaSetGlobStringVar("WDG.PROFILEPATH", Map.refMainWindowVM.MainWindowM.sProfileDir)
Dim ke = EgtLuaCallFunction("SetProfilePath")
Dim ud = EgtLuaResetGlobVar("WDG")
' carico lista hardware
RefreshHardwareList()
' creo nuova finestra
NewWindow()
End Sub
Friend Sub NewWindow()
' creo la finestra
CurrWindow = New Window
CurrWindow.sProfilePath = "Profilo78"
Dim Frame As Frame = Frame.CreateFrame(m_CurrWindow)
m_CurrWindow.AreaList.Add(Frame)
'' carico lista hardware
'RefreshHardwareList()
' disegno la finestra
DrawWindow()
End Sub
Private Function SearchAreaById(Area As Area, nAreaId As Integer) As Area
If Area.nAreaId = nAreaId Then
Return Area
Else
For Each ChildArea In Area.AreaList
Dim ResArea As Area = SearchAreaById(ChildArea, nAreaId)
If Not IsNothing(ResArea) Then Return ResArea
Next
End If
Return Nothing
End Function
Friend Function GetAreaFromId(nId As Integer) As Area
' recupero nome e Id dell'area selezionata
Dim nSelLayerId As Integer = EgtGetParent(nId)
Dim sSelLayerName As String = ""
EgtGetName(nSelLayerId, sSelLayerName)
Dim nSelAreaId As Integer = EgtGetParent(nSelLayerId)
' recupero eventuale riferimento ad area originale (per split multipli)
Dim nOrigSplitAreaId As Integer = GDB_ID.NULL
EgtGetInfo(nSelAreaId, LUA_WIN_ORIGSPLIT, nOrigSplitAreaId)
If nOrigSplitAreaId <> GDB_ID.NULL Then
nSelAreaId = nOrigSplitAreaId
End If
'
Dim nSelAreaType As Integer = 0
EgtGetInfo(nSelAreaId, WIN_AREATYPE, nSelAreaType)
Dim bFrenchSash As Boolean = False
If m_SelParamCathegory = ParamCathegories.SASH AndAlso nSelAreaType = AreaTypes.SASH Then
' recupero Parent area e verifico se e' di tipo Splitted
Dim nParentAreaId As Integer = EgtGetParent(nSelAreaId)
Dim nParentAreaType As Integer = 0
EgtGetInfo(nParentAreaId, WIN_AREATYPE, nParentAreaType)
If nParentAreaType = LuaAreaTypes.SPLIT OrElse nParentAreaType = LuaAreaTypes.NULL Then
' recupero area Split originale e verifico se e' di tipo French
If Not EgtGetInfo(EgtGetParent(nParentAreaId), LUA_WIN_ORIGSPLIT, nOrigSplitAreaId) Then
nOrigSplitAreaId = EgtGetParent(nParentAreaId)
End If
Dim nSplitLayerId As Integer = EgtGetFirstNameInGroup(nOrigSplitAreaId, LUA_WIN_SPLIT)
Dim nSplitType As Integer = 0
EgtGetInfo(nSplitLayerId, LUA_WIN_SPLITTYPE, nSplitType)
If nSplitType = LuaSplitTypes.FRENCH Then
bFrenchSash = True
nSelAreaId = nOrigSplitAreaId
End If
End If
End If
' cerco l'Id area tra le aree della grafica
Dim SelArea As Area = Nothing
For Each Frame In m_CurrWindow.AreaList
SelArea = SearchAreaById(Frame, nSelAreaId)
If Not IsNothing(SelArea) Then Exit For
Next
' se area splitselection e tipo non split, prendo il figlio
If (sSelLayerName = LUA_WIN_SPLITSELECTION OrElse bFrenchSash) AndAlso (SelArea.AreaType = AreaTypes.FRAME OrElse SelArea.AreaType = AreaTypes.SASH OrElse SelArea.AreaType = AreaTypes.FILL) Then
SelArea = SelArea.AreaList(0)
End If
Return SelArea
End Function
Friend Sub SelAreaFromId(nSelId As Integer)
Dim SelArea As Area = GetAreaFromId(nSelId)
Dim ResAreaList As New List(Of Area)({SelArea})
Select Case m_SelParamCathegory
Case ParamCathegories.SPLIT
For Each ResArea In ResAreaList
Select Case ResArea.AreaType
Case AreaTypes.FRAME, AreaTypes.SASH, AreaTypes.SPLITTED
If ResArea.AreaList.Count = 0 Then
' aggiungo Area split di default
Dim SplitArea As Split = Split.CreateSplit(ResArea, SplitShapes.VERTICAL)
' imposto i parametri di default
SplitArea.SetSplitQty(1, True)
'aggiungo area
ResArea.AreaList.Add(SplitArea)
' la imposto come selezionata
m_SelArea = SplitArea
NotifyPropertyChanged(NameOf(SelArea))
ElseIf ResArea.AreaList(0).AreaType = AreaTypes.SPLIT Then
m_SelArea = ResArea.AreaList(0)
NotifyPropertyChanged(NameOf(SelArea))
End If
Case AreaTypes.SPLIT
m_SelArea = ResArea
NotifyPropertyChanged(NameOf(SelArea))
End Select
Next
Case ParamCathegories.SASH
For Each ResArea In ResAreaList
Select Case ResArea.AreaType
Case AreaTypes.FRAME, AreaTypes.SPLITTED
If ResArea.AreaList.Count = 0 Then
' aggiungo Area sash di default
Dim SashArea As Sash = Sash.CreateSash(ResArea)
' imposto i parametri di default
SashArea.SetSashType(SashTypes.NULL)
SashArea.SetSashQty(1)
'aggiungo area
ResArea.AreaList.Add(SashArea)
' la imposto come selezionata
m_SelArea = SashArea
NotifyPropertyChanged(NameOf(SelArea))
ElseIf ResArea.AreaList(0).AreaType = AreaTypes.SASH Then
m_SelArea = ResArea.AreaList(0)
NotifyPropertyChanged(NameOf(SelArea))
End If
Case AreaTypes.SASH
m_SelArea = ResArea
NotifyPropertyChanged(NameOf(SelArea))
End Select
Next
Case ParamCathegories.FILL
For Each ResArea In ResAreaList
Select Case ResArea.AreaType
Case AreaTypes.SASH, AreaTypes.FRAME, AreaTypes.SPLITTED
If ResArea.AreaList.Count = 0 Then
' aggiungo Area fill di default
Dim FillArea As Fill = Fill.CreateFill(ResArea, FillTypes.GLASS)
' imposto i parametri di default
FillArea.SetFillType(FillTypes.GLASS)
'aggiungo area
ResArea.AreaList.Add(FillArea)
' la imposto come selezionata
m_SelArea = FillArea
NotifyPropertyChanged(NameOf(SelArea))
ElseIf ResArea.AreaList(0).AreaType = AreaTypes.FILL Then
m_SelArea = ResArea.AreaList(0)
NotifyPropertyChanged(NameOf(SelArea))
End If
Case AreaTypes.FILL
m_SelArea = ResArea
NotifyPropertyChanged(NameOf(SelArea))
End Select
Next
End Select
End Sub
Friend Sub DeselAreaFromId()
' se creazione area non confermata, elimino l'area
Select Case m_SelParamCathegory
Case ParamCathegories.SPLIT, ParamCathegories.SASH, ParamCathegories.FILL
If Not IsNothing(m_SelArea) AndAlso Not m_SelArea.bApplied Then
m_SelArea.ParentArea.AreaList.Remove(m_SelArea)
End If
End Select
m_SelArea = Nothing
NotifyPropertyChanged(NameOf(SelArea))
End Sub
Friend Sub SelAreaFromSurf(nAreaId As Integer)
For Each Frame In m_CurrWindow.AreaList
Dim ResArea As Area = FindArea(Frame, nAreaId)
If Not IsNothing(ResArea) Then
m_SelArea = ResArea
NotifyPropertyChanged(NameOf(SelArea))
Return
End If
Next
End Sub
Friend Sub SelSurfFromArea(Area As Area)
Dim nSelectionLayerId As Integer = EgtGetFirstNameInGroup(Area.nAreaId, WIN_SELECTION)
Dim nSelectionAreaId As Integer = EgtGetFirstInGroup(nSelectionLayerId)
EgtDeselectAll()
EgtSelectObj(nSelectionAreaId)
EgtDraw()
End Sub
Private Function FindArea(ParentArea As Area, nAreaId As Integer) As Area
If nAreaId = ParentArea.nAreaId Then
Return ParentArea
Else
For Each ChildArea In ParentArea.AreaList
Dim ResArea As Area = FindArea(ChildArea, nAreaId)
If Not IsNothing(ResArea) Then Return ResArea
Next
End If
Return Nothing
End Function
Private Sub FindArea2(ParentArea As Area, nAreaId As Integer, ResultList As List(Of Area))
If nAreaId = ParentArea.nAreaId Then
ResultList.Add(ParentArea)
End If
For Each ChildArea In ParentArea.AreaList
Dim ResArea As Area = FindArea(ChildArea, nAreaId)
If Not IsNothing(ResArea) Then ResultList.Add(ResArea)
Next
End Sub
Friend Function OnMouseSelectingObj(nId As Integer) As Boolean
Dim nStatus As Integer
EgtGetStatus(nId, nStatus)
If nStatus = GDB_ST.OFF Then Return False
Dim nLayerId As Integer = EgtGetParent(nId)
If nLayerId = GDB_ID.NULL Then Return False
Dim sLayerName As String = ""
EgtGetName(nLayerId, sLayerName)
If String.IsNullOrWhiteSpace(sLayerName) Then Return False
Return sLayerName = WIN_SELECTION OrElse sLayerName = LUA_WIN_SPLITSELECTION
End Function
Friend Function FindAreaIdFromGeomId(nId As Integer) As Integer
Dim nAreaId As Integer = EgtGetParent(EgtGetParent(nId))
Dim nAreaType As Integer = 0
If EgtGetInfo(nAreaId, WIN_AREATYPE, nAreaType) Then
Return nAreaId
Else
Return GDB_ID.NULL
End If
End Function
Private Function DrawWindow(Optional bDraw As Boolean = True) As Boolean
If IsNothing(m_CurrWindow) OrElse String.IsNullOrWhiteSpace(m_CurrWindow.sProfilePath) OrElse m_CurrWindow.AreaList.Count = 0 Then Return False
EgtNewFile()
Dim gf = EgtLuaCreateGlobTable("WDG")
' importo profilo
Dim hh = EgtLuaSetGlobStringVar("WDG.PROFILE", m_CurrWindow.sProfilePath)
If Not EgtLuaCallFunction("WinCreate_ImportProfile") Then Return False
' creo aree
For Each Area In m_CurrWindow.AreaList
If Not Area.DrawArea(Area, GDB_ID.ROOT) Then Return False
Next
'EgtSaveFile("c:\\Temp\\TestFinestreAnta.nge", NGE.CMPTEXT)
' imposto se calcolare i solidi o meno
Dim kk = EgtLuaSetGlobBoolVar("WDG.VALUE", If(m_DShowMode = DShowModes.MODE2D, False, True))
Dim ke = EgtLuaCallFunction("WinCalculate_SetCalcSolid")
Dim dk = EgtLuaSetGlobBoolVar("WDG.VALUE", If(m_DShowMode = DShowModes.MODESIMPLE3D, True, False))
Dim de = EgtLuaCallFunction("WinCalculate_SetSimplifiedSolid")
' creo i pezzi
Dim kt = EgtLuaSetGlobIntVar("WDG.FRAMEID", m_CurrWindow.AreaList(0).nAreaId)
Dim uu = EgtLuaCallFunction("WinCalculate_CreatePartFromArea")
Dim krt = EgtLuaSetGlobIntVar("WDG.FRAMEID", m_CurrWindow.AreaList(0).nAreaId)
Dim uru = EgtLuaCallFunction("WinCalculate_AddHardware")
Dim kre = EgtLuaSetGlobIntVar("WDG.FRAMEID", m_CurrWindow.AreaList(0).nAreaId)
Dim krv = EgtLuaSetGlobBoolVar("WDG.DRAW", True)
Dim ure = EgtLuaCallFunction("WinCalculate_AddAccessories")
Dim ud = EgtLuaResetGlobVar("WDG")
' recupero aree di selezione
For Each Area In m_CurrWindow.AreaList
Area.GetSelectionArea()
Next
EgtZoom(ZM.ALL, bDraw)
Return True
End Function
Friend Function GetImage(FilePath As String) As Boolean
Dim gg = EgtLuaExecFile(Map.refMainWindowVM.MainWindowM.sBaseDir & "\" & DESIGNING_DIR & "\WinProject.lua")
Dim gf = EgtLuaCreateGlobTable("WDG")
Dim kyv = EgtLuaSetGlobStringVar("WDG.FILE", FilePath)
Dim uye = EgtLuaCallFunction("WinGetImage")
Dim ud = EgtLuaResetGlobVar("WDG")
Return True
End Function
Private Sub RefreshHardwareList()
m_HardwareList.Clear()
' aggiungo campo vuoto
m_HardwareList.Add(New Hardware("000000", "", "", "", 0, 0))
' creo file di lettura tipi hardware per Agb
Dim sNow As String = DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")
Dim sInputFile As String = "a:\InputBatch\Input" & sNow & ".txt"
Dim sHardwareListPath As String = "C:\AGB3000NG\OutputBatch\OutputHardwareList" & sNow & ".txt"
Dim sOutputFile = "a:\OutputBatch\OutputHardwareList" & sNow & ".txt"
Dim sText As String = "OUTPUTKIT=" & sHardwareListPath & Environment.NewLine &
"DATAREQUEST=SE" & Environment.NewLine &
"RUN"
If Not Directory.Exists(Path.GetDirectoryName(sInputFile)) Then
EgtOutLog("Error! Path for Agb program not found!")
MessageBox.Show("Path for Agb program not found!", "Error!", MessageBoxButton.OK, MessageBoxImage.Error)
Return
End If
File.WriteAllText(sInputFile, sText)
' attendo scrittura output
Dim nWait As Integer = 0
While Not File.Exists(sOutputFile) And nWait < 20
nWait = nWait + 1
Threading.Thread.Sleep(500)
End While
Threading.Thread.Sleep(500)
Dim sInputFileOk As String = Path.ChangeExtension(sInputFile, ".ok")
Dim sInputFileErr As String = Path.ChangeExtension(sInputFile, ".err")
If File.Exists(sInputFileOk) Then
If File.Exists(sOutputFile) Then
Dim FileHardwareList() As String = File.ReadAllLines(sOutputFile)
For Each HardwareLine In FileHardwareList
Dim FileLineArgs() As String = HardwareLine.Split(";"c)
If FileLineArgs.Count < 8 Then Continue For
Dim nSashQty As Integer = 0
Dim nSashPosition As Integer = 0
Integer.TryParse(FileLineArgs(6), nSashQty)
Integer.TryParse(FileLineArgs(7), nSashPosition)
m_HardwareList.Add(New Hardware(FileLineArgs(2), FileLineArgs(3), FileLineArgs(4), FileLineArgs(5), nSashQty, nSashPosition))
Next
Try
File.Delete(sOutputFile)
Catch ex As Exception
End Try
Else
MessageBox.Show("File di risposta lista hardware non trovato!", "Errore!", MessageBoxButton.OK, MessageBoxImage.Error)
End If
Try
File.Delete(sInputFileOk)
Catch ex As Exception
End Try
ElseIf File.Exists(sInputFileErr) Then
MessageBox.Show("Errore nella lettura della lista hardware! " & Environment.NewLine & File.ReadAllText(sInputFileErr), "Error!", MessageBoxButton.OK, MessageBoxImage.Error)
Try
File.Delete(sInputFileErr)
Catch ex As Exception
End Try
Else
MessageBox.Show("Errore nella lettura della lista hardware!", "Errore!", MessageBoxButton.OK, MessageBoxImage.Error)
End If
End Sub
Private Sub RefreshSashHardware(CurrArea As Area)
If CurrArea.AreaType = AreaTypes.SASH Then
DirectCast(CurrArea, Sash).RefreshHardwareList()
End If
For Each Child In CurrArea.AreaList
RefreshSashHardware(Child)
Next
End Sub
#Region "COMMANDS"
#Region "Read"
Public ReadOnly Property Read_Command As ICommand
Get
If m_cmdRead Is Nothing Then
m_cmdRead = New Command(AddressOf Read)
End If
Return m_cmdRead
End Get
End Property
Public Sub Read(FilePath As String)
Dim sReadedFile As String = File.ReadAllText(FilePath)
Dim WindowFromJson As JsonWindow = JsonConvert.DeserializeObject(Of JsonWindow)(sReadedFile, New PolymorphicJsonConverter)
m_CurrWindow = WindowFromJson.Deserialize()
NotifyPropertyChanged(NameOf(CurrWindow))
Draw()
End Sub
#End Region ' Read
#Region "Write"
Public ReadOnly Property Write_Command As ICommand
Get
If m_cmdWrite Is Nothing Then
m_cmdWrite = New Command(AddressOf Write)
End If
Return m_cmdWrite
End Get
End Property
Public Sub Write(FilePath As String)
Dim JsonFromWindow As String = JsonConvert.SerializeObject(m_CurrWindow.Serialize(), Formatting.Indented)
File.WriteAllText(FilePath, JsonFromWindow)
End Sub
#End Region ' Write
#Region "FillGlass"
Public ReadOnly Property FillGlass_Command As ICommand
Get
If m_cmdFillGlass Is Nothing Then
m_cmdFillGlass = New Command(AddressOf FillGlass)
End If
Return m_cmdFillGlass
End Get
End Property
Public Sub FillGlass()
If m_SelArea.AreaType = AreaTypes.FILL Then
DirectCast(m_SelArea, Fill).SetFillType(FillTypes.GLASS)
Else
m_SelArea.AreaList.Add(Fill.CreateFill(m_SelArea, FillTypes.GLASS))
End If
DrawWindow(False)
' mostro aree di selezione
ManageSplitSelectionSurfaces(True, False)
' riseleziono superficie di selezione dell'area selezionata
If Not IsNothing(m_SelArea) Then
Dim nSelLayerId As Integer = EgtGetFirstNameInGroup(m_SelArea.nAreaId, WIN_SELECTION)
Dim nSelId As Integer = EgtGetFirstInGroup(nSelLayerId)
EgtSetAlpha(nSelId, 70)
EgtSelectObj(nSelId)
End If
EgtDraw()
End Sub
#End Region ' FillGlass
#Region "FillWood"
Public ReadOnly Property FillWood_Command As ICommand
Get
If m_cmdFillWood Is Nothing Then
m_cmdFillWood = New Command(AddressOf FillWood)
End If
Return m_cmdFillWood
End Get
End Property
Public Sub FillWood()
If m_SelArea.AreaType = AreaTypes.FILL Then
DirectCast(m_SelArea, Fill).SetFillType(FillTypes.WOOD)
Else
m_SelArea.AreaList.Add(Fill.CreateFill(m_SelArea, FillTypes.WOOD))
End If
DrawWindow(False)
' mostro aree di selezione
ManageSplitSelectionSurfaces(True, False)
' riseleziono superficie di selezione dell'area selezionata
If Not IsNothing(m_SelArea) Then
Dim nSelLayerId As Integer = EgtGetFirstNameInGroup(m_SelArea.nAreaId, WIN_SELECTION)
Dim nSelId As Integer = EgtGetFirstInGroup(nSelLayerId)
EgtSetAlpha(nSelId, 70)
EgtSelectObj(nSelId)
End If
EgtDraw()
End Sub
#End Region ' FillWood
#Region "Draw"
Public ReadOnly Property Draw_Command As ICommand
Get
If m_cmdDraw Is Nothing Then
m_cmdDraw = New Command(AddressOf Draw)
End If
Return m_cmdDraw
End Get
End Property
Public Sub Draw()
DrawWindow()
End Sub
#End Region ' Draw
#Region "ApplyFrame"
Public ReadOnly Property ApplyFrame_Command As ICommand
Get
If m_cmdApplyFrame Is Nothing Then
m_cmdApplyFrame = New Command(AddressOf ApplyFrame)
End If
Return m_cmdApplyFrame
End Get
End Property
Public Sub ApplyFrame()
' deseleziono entita' selezionata
Dim nDeselGeomId As Integer = GDB_ID.NULL
If m_SelArea.bApplied Then
nDeselGeomId = EgtGetFirstInGroup(m_SelArea.SelectionGeomId)
Else
nDeselGeomId = EgtGetFirstInGroup(m_SelArea.ParentArea.SelectionGeomId)
End If
Map.refSceneHostVM.DeselectGeometry(nDeselGeomId)
' lancio ricalcolo
DrawWindow(False)
'' mostro aree di selezione
'ManageSplitSelectionSurfaces(True, False)
'' riseleziono nuova area selezionata
'If Not IsNothing(m_SelArea) Then
' Dim nSelGeomId As Integer = EgtGetFirstInGroup(m_SelArea.SelectionGeomId)
' Map.refSceneHostVM.SelectGeometry(nSelGeomId)
'End If
' cancello lista aree evidenziate
Map.refSceneHostVM.ResetShownAreaList()
EgtDraw()
' aggiorno lista hardware
For Each Area In m_CurrWindow.AreaList
RefreshSashHardware(Area)
Next
End Sub
#End Region ' ApplyFrame
#Region "ApplySplit"
Public ReadOnly Property ApplySplit_Command As ICommand
Get
If m_cmdApplySplit Is Nothing Then
m_cmdApplySplit = New Command(AddressOf ApplySplit)
End If
Return m_cmdApplySplit
End Get
End Property
Public Sub ApplySplit()
' deseleziono entita' selezionata
Dim nDeselGeomId As Integer = GDB_ID.NULL
If m_SelArea.bApplied Then
nDeselGeomId = EgtGetFirstInGroup(m_SelArea.SelectionGeomId)
Else
nDeselGeomId = EgtGetFirstInGroup(m_SelArea.ParentArea.SelectionGeomId)
End If
Map.refSceneHostVM.DeselectGeometry(nDeselGeomId)
' creo o rimuovo aree in base a quantita'
Dim SplitArea As Split = DirectCast(m_SelArea, Split)
For Splitindex = SplitArea.AreaList.Count To SplitArea.SplitPositionList.Count - 1
SplitArea.AreaList.Add(Splitted.CreateSplitted(SplitArea))
Next
For Splitindex = SplitArea.SplitPositionList.Count To SplitArea.AreaList.Count - 1
SplitArea.AreaList.Remove(SplitArea.AreaList(SplitArea.AreaList.Count - 1))
Next
' se necessario, segno area come applicata
If Not m_SelArea.bApplied Then
m_SelArea.AppliedDone()
End If
' lancio ricalcolo
DrawWindow(False)
' mostro aree di selezione
ManageSplitSelectionSurfaces(True, False)
' riseleziono nuova area selezionata
If Not IsNothing(m_SelArea) Then
Dim nSelGeomId As Integer = EgtGetFirstInGroup(m_SelArea.SelectionGeomId)
Map.refSceneHostVM.SelectGeometry(nSelGeomId)
End If
' cancello lista aree evidenziate
Map.refSceneHostVM.ResetShownAreaList()
EgtDraw()
End Sub
#End Region ' ApplySplit
#Region "ApplySash"
Public ReadOnly Property ApplySash_Command As ICommand
Get
If m_cmdApplySash Is Nothing Then
m_cmdApplySash = New Command(AddressOf ApplySash)
End If
Return m_cmdApplySash
End Get
End Property
Public Sub ApplySash()
' deseleziono entita' selezionata
Dim nDeselGeomId As Integer = GDB_ID.NULL
If m_SelArea.bApplied Then
nDeselGeomId = EgtGetFirstInGroup(m_SelArea.SelectionGeomId)
Else
nDeselGeomId = EgtGetFirstInGroup(m_SelArea.ParentArea.SelectionGeomId)
End If
Map.refSceneHostVM.DeselectGeometry(nDeselGeomId)
' creo o rimuovo aree in base a quantita'
Dim SashArea As Sash = DirectCast(m_SelArea, Sash)
If SashArea.SashList.Count = 1 Then
Dim ContentArea As New List(Of Area)
While SashArea.AreaList.Count > 0
If SashArea.AreaList.Count = 1 AndAlso SashArea.AreaList(0).AreaList.Count > 0 Then
For Each Area In SashArea.AreaList(0).AreaList
ContentArea.Add(Area)
Next
End If
SashArea.AreaList.Remove(SashArea.AreaList(SashArea.AreaList.Count - 1))
End While
If ContentArea.Count > 0 Then
SashArea.AreaList = ContentArea
End If
Else
Dim ContentArea As New List(Of Area)
' se devo aggiungere aree e ho gia' del contenuto
If SashArea.AreaList.Count = 1 AndAlso SashArea.SashList.Count > SashArea.AreaList.Count Then
For Each Area In SashArea.AreaList
ContentArea.Add(Area)
Next
SashArea.AreaList.Clear()
End If
For Splitindex = SashArea.AreaList.Count To SashArea.SashList.Count - 1
SashArea.AreaList.Add(Splitted.CreateSplitted(SashArea))
Next
For Splitindex = SashArea.SashList.Count To SashArea.AreaList.Count - 1
SashArea.AreaList.Remove(SashArea.AreaList(SashArea.AreaList.Count - 1))
Next
If ContentArea.Count > 0 Then
SashArea.AreaList(0).AreaList = ContentArea
End If
End If
' se necessario, segno area come applicata
If Not m_SelArea.bApplied Then
m_SelArea.AppliedDone()
End If
' lancio ricalcolo
DrawWindow(False)
' mostro aree di selezione
ManageSplitSelectionSurfaces(True, False)
' riseleziono nuova area selezionata
If Not IsNothing(m_SelArea) Then
Dim nSelGeomId As Integer = EgtGetFirstInGroup(m_SelArea.SelectionGeomId)
Map.refSceneHostVM.SelectGeometry(nSelGeomId)
End If
' cancello lista aree evidenziate
Map.refSceneHostVM.ResetShownAreaList()
EgtDraw()
End Sub
#End Region ' ApplySash
#Region "ApplyFill"
Public ReadOnly Property ApplyFill_Command As ICommand
Get
If m_cmdApplyFill Is Nothing Then
m_cmdApplyFill = New Command(AddressOf ApplyFill)
End If
Return m_cmdApplyFill
End Get
End Property
Public Sub ApplyFill()
' deseleziono entita' selezionata
Dim nDeselGeomId As Integer = GDB_ID.NULL
If m_SelArea.bApplied Then
nDeselGeomId = EgtGetFirstInGroup(m_SelArea.SelectionGeomId)
Else
nDeselGeomId = EgtGetFirstInGroup(m_SelArea.ParentArea.SelectionGeomId)
End If
Map.refSceneHostVM.DeselectGeometry(nDeselGeomId)
' se necessario, segno area come applicata
If Not m_SelArea.bApplied Then
m_SelArea.AppliedDone()
End If
' lancio ricalcolo
DrawWindow(False)
' mostro aree di selezione
ManageSplitSelectionSurfaces(True, False)
' riseleziono nuova area selezionata
If Not IsNothing(m_SelArea) Then
Dim nSelGeomId As Integer = EgtGetFirstInGroup(m_SelArea.SelectionGeomId)
Map.refSceneHostVM.SelectGeometry(nSelGeomId)
End If
' cancello lista aree evidenziate
Map.refSceneHostVM.ResetShownAreaList()
EgtDraw()
End Sub
#End Region ' ApplySash
#Region "DeleteArea"
Public ReadOnly Property DeleteArea_Command As ICommand
Get
If m_cmdDeleteArea Is Nothing Then
m_cmdDeleteArea = New Command(AddressOf DeleteArea)
End If
Return m_cmdDeleteArea
End Get
End Property
Public Sub DeleteArea()
' deseleziono entita' selezionata
Dim nDeselGeomId As Integer = GDB_ID.NULL
If m_SelArea.bApplied Then
nDeselGeomId = EgtGetFirstInGroup(m_SelArea.SelectionGeomId)
Else
nDeselGeomId = EgtGetFirstInGroup(m_SelArea.ParentArea.SelectionGeomId)
End If
Map.refSceneHostVM.DeselectGeometry(nDeselGeomId)
' se e' split e ha area sotto lo splitted
If m_SelArea.AreaType = AreaTypes.SPLIT AndAlso m_SelArea.bApplied AndAlso Not IsNothing(m_SelArea.AreaList(0)) AndAlso m_SelArea.AreaList(0).AreaList.Count > 0 AndAlso Not IsNothing(m_SelArea.AreaList(0).AreaList(0)) Then
' recupero posizione dello split
Dim nSplitIndex As Integer = m_SelArea.ParentArea.AreaList.IndexOf(m_SelArea)
' porto area sotto in sostituzione dello split
m_SelArea.ParentArea.AreaList(nSplitIndex) = m_SelArea.AreaList(0).AreaList(0)
m_SelArea.AreaList(0).AreaList(0).SetParentArea(m_SelArea.ParentArea)
Else
m_SelArea.ParentArea.AreaList.Remove(m_SelArea)
End If
DeselAreaFromId()
DrawWindow(False)
' mostro aree di selezione
ManageSplitSelectionSurfaces(True, True)
' cancello lista aree evidenziate
Map.refSceneHostVM.ResetShownAreaList()
End Sub
#End Region ' DeleteArea
#End Region ' COMMANDS
End Class
Public Class FrameDimension
Inherits VMBase
' Actions
Friend Shared m_delDrawWindow As Action
Private m_bIsLen As Boolean = False
Private m_nIndex As Integer
Public ReadOnly Property nIndex As Integer
Get
Return m_nIndex
End Get
End Property
Private m_sName As String
Public ReadOnly Property sName As String
Get
Return m_sName
End Get
End Property
Private m_dValue As Double
Public Property dValue As Double
Get
Return m_dValue
End Get
Set(value As Double)
m_dValue = value
'm_delDrawWindow()
End Set
End Property
Sub New(nIndex As Integer, sName As String, dValue As Double, bIsLen As Boolean)
m_nIndex = nIndex
m_sName = sName
m_dValue = dValue
m_bIsLen = bIsLen
End Sub
Friend Function Serialize() As JsonFrameDimension
Dim JsonFrameDimension As JsonFrameDimension = New JsonFrameDimension(m_nIndex, m_sName, m_dValue)
Return JsonFrameDimension
End Function
End Class
Public Class SashDimension
Inherits VMBase
' reference
Private m_Parent As Sash
' Actions
Friend Shared m_delDrawWindow As Action
Private m_bIsRelative As Boolean = False
Public ReadOnly Property bIsRelative As Boolean
Get
Return m_bIsRelative
End Get
End Property
Private m_OpeningTypeList As New List(Of IdNameStruct)({New IdNameStruct(Openings.TURNONLY_LEFT, ">"),
New IdNameStruct(Openings.TURNONLY_RIGHT, "<"),
New IdNameStruct(Openings.TILTTURN_LEFT, ">*"),
New IdNameStruct(Openings.TILTTURN_RIGHT, "<*"),
New IdNameStruct(Openings.TILTONLY_TOP, "˄"),
New IdNameStruct(Openings.TILTONLY_BOTTOM, "˅"),
New IdNameStruct(Openings.PIVOT, ""),
New IdNameStruct(Openings.FIXED, "X"),
New IdNameStruct(Openings.COMPLANARSLIDE_LEFT, "-→"),
New IdNameStruct(Openings.COMPLANARSLIDE_RIGHT, "←-"),
New IdNameStruct(Openings.LIFTSLIDE_LEFT, "┌→"),
New IdNameStruct(Openings.LIFTSLIDE_RIGHT, "←┐")})
Public ReadOnly Property OpeningTypeList As List(Of IdNameStruct)
Get
Return m_OpeningTypeList
End Get
End Property
Private m_SelOpeningType As IdNameStruct
Public Property SelOpeningType As IdNameStruct
Get
Return m_SelOpeningType
End Get
Set(value As IdNameStruct)
m_SelOpeningType = value
m_Parent.RefreshHardwareList()
m_Parent.RefreshHardwareOptionList()
m_Parent.SetFirstHardware()
End Set
End Property
Public ReadOnly Property OpeningType As Openings
Get
Return m_SelOpeningType.Id
End Get
End Property
Friend Sub SetOpeningType(value As Openings)
m_SelOpeningType = m_OpeningTypeList.FirstOrDefault(Function(x) x.Id = value)
NotifyPropertyChanged(NameOf(SelOpeningType))
End Sub
Private m_bHasHandle As Boolean
Public Property bHasHandle As Boolean
Get
Return m_bHasHandle
End Get
Set(value As Boolean)
m_bHasHandle = value
End Set
End Property
Friend Sub SetHasHandle(value As Boolean)
m_bHasHandle = value
NotifyPropertyChanged(NameOf(bHasHandle))
End Sub
Private m_dDimension As Double
Public Property dDimension As Double
Get
Return m_dDimension
End Get
Set(value As Double)
' se sono in percentuale
If m_bIsRelative Then
' verifico se ci sono assoluti
Dim RelativeDimList As List(Of SashDimension) = m_Parent.SashList.Where(Function(x) x.bIsRelative).ToList()
If RelativeDimList.Count > 0 Then
If m_Parent.bIsPercentage Then
Dim nIndex As Integer = RelativeDimList.IndexOf(Me)
If value < m_dDimension Then
If nIndex < RelativeDimList.Count - 1 Then
RelativeDimList(nIndex + 1).SetDimension(RelativeDimList(nIndex + 1).dDimension + (m_dDimension - value))
ElseIf RelativeDimList.Count > 1 Then
RelativeDimList(nIndex - 1).SetDimension(RelativeDimList(nIndex - 1).dDimension + (m_dDimension - value))
Else
m_dDimension = 100
Return
End If
Else
Dim dRes As Double = value
If nIndex < RelativeDimList.Count - 1 Then
For nInd = 0 To nIndex - 1
dRes += RelativeDimList(nInd).dDimension
Next
dRes = (100 - dRes) / (RelativeDimList.Count - nIndex - 1)
For Ind = nIndex + 1 To RelativeDimList.Count - 1
RelativeDimList(Ind).SetDimension(dRes)
Next
ElseIf RelativeDimList.Count > 1 Then
For Ind = nIndex + 1 To RelativeDimList.Count - 1
dRes += RelativeDimList(Ind).dDimension
Next
dRes = (100 - dRes) / (nIndex - 1)
For nInd = 0 To nIndex - 1
RelativeDimList(nInd).SetDimension(dRes)
Next
Else
m_dDimension = 100
Return
End If
End If
Else
End If
End If
' tolgo percentuale degli assoluti
' recupero prima percentuale successiva
' verifico se devo aggiungere o sottrarre
'
' se aggiungere, lo faccio
'
' se sottrarre, verifico se posso sottrarre quanto necessario
' se non basta, provo con successiva
' se nessuna basta, tolgo un po' da ciascuna
End If
m_dDimension = value
End Set
End Property
Friend Sub SetDimension(dValue As Double)
m_dDimension = dValue
NotifyPropertyChanged(NameOf(dDimension))
End Sub
Sub New(dDimension As Double, bIsRelative As Boolean, Parent As Sash)
m_dDimension = dDimension
m_bIsRelative = bIsRelative
m_Parent = Parent
' assengno maniglia
If Parent.SashList.Count = 0 OrElse Not Parent.SashList.Any(Function(x) x.bHasHandle) Then
m_bHasHandle = True
End If
' assegno tipo di anta
If Parent.SashList.Count = 0 Then
SetOpeningType(Openings.TILTTURN_LEFT)
ElseIf Parent.SashList.Count = 1 Then
Select Case Parent.SashList(0).OpeningType
Case Openings.TURNONLY_LEFT
SetOpeningType(Openings.TURNONLY_RIGHT)
Case Openings.TURNONLY_RIGHT
SetOpeningType(Openings.TURNONLY_LEFT)
Case Openings.TILTTURN_LEFT
SetOpeningType(Openings.TILTTURN_RIGHT)
Case Openings.TILTTURN_RIGHT
SetOpeningType(Openings.TILTTURN_LEFT)
Case Openings.TILTONLY_TOP
SetOpeningType(Openings.TILTONLY_BOTTOM)
Case Openings.TILTONLY_BOTTOM
SetOpeningType(Openings.TILTONLY_TOP)
Case Openings.COMPLANARSLIDE_LEFT
SetOpeningType(Openings.COMPLANARSLIDE_RIGHT)
Case Openings.COMPLANARSLIDE_RIGHT
SetOpeningType(Openings.COMPLANARSLIDE_LEFT)
Case Openings.LIFTSLIDE_LEFT
SetOpeningType(Openings.LIFTSLIDE_RIGHT)
Case Openings.LIFTSLIDE_RIGHT
SetOpeningType(Openings.LIFTSLIDE_LEFT)
End Select
Else
SetOpeningType(Parent.SashList(Parent.SashList.Count - 1).OpeningType)
End If
End Sub
Friend Function Serialize() As JsonSashDimension
Dim JsonSashDimension As JsonSashDimension = New JsonSashDimension(OpeningType, m_bHasHandle, m_dDimension)
Return JsonSashDimension
End Function
End Class
Public Class SplitDimension
Inherits VMBase
' reference
Private m_Parent As Split
'Private ReadOnly Property DimensionList As ObservableCollection(Of SplitDimension)
' Get
' Return m_Parent.SplitPositionList
' End Get
'End Property
Private m_bIsRelative As Boolean = False
Public ReadOnly Property bIsRelative As Boolean
Get
Return m_bIsRelative
End Get
End Property
Friend Sub SetIsRelative(value As Boolean)
m_bIsRelative = value
End Sub
Private m_dDimension As Double
Public Property dDimension As Double
Get
Return m_dDimension
End Get
Set(value As Double)
' se sono in percentuale
If m_bIsRelative Then
' verifico se ci sono assoluti
Dim RelativeDimList As List(Of SplitDimension) = m_Parent.SplitPositionList.Where(Function(x) x.bIsRelative).ToList()
If RelativeDimList.Count > 0 Then
If m_Parent.bIsPercentage Then
Dim nIndex As Integer = RelativeDimList.IndexOf(Me)
If value < m_dDimension Then
If nIndex < RelativeDimList.Count - 1 Then
RelativeDimList(nIndex + 1).SetDimension(RelativeDimList(nIndex + 1).dDimension + (m_dDimension - value))
ElseIf RelativeDimList.Count > 1 Then
RelativeDimList(nIndex - 1).SetDimension(RelativeDimList(nIndex - 1).dDimension + (m_dDimension - value))
Else
m_dDimension = 100
Return
End If
Else
Dim dRes As Double = value
If nIndex < RelativeDimList.Count - 1 Then
For nInd = 0 To nIndex - 1
dRes += RelativeDimList(nInd).dDimension
Next
dRes = (100 - dRes) / (RelativeDimList.Count - nIndex - 1)
For Ind = nIndex + 1 To RelativeDimList.Count - 1
RelativeDimList(Ind).SetDimension(dRes)
Next
ElseIf RelativeDimList.Count > 1 Then
For Ind = nIndex + 1 To RelativeDimList.Count - 1
dRes += RelativeDimList(Ind).dDimension
Next
dRes = (100 - dRes) / (nIndex - 1)
For nInd = 0 To nIndex - 1
RelativeDimList(nInd).SetDimension(dRes)
Next
Else
m_dDimension = 100
Return
End If
End If
Else
End If
End If
' tolgo percentuale degli assoluti
' recupero prima percentuale successiva
' verifico se devo aggiungere o sottrarre
'
' se aggiungere, lo faccio
'
' se sottrarre, verifico se posso sottrarre quanto necessario
' se non basta, provo con successiva
' se nessuna basta, tolgo un po' da ciascuna
End If
m_dDimension = value
End Set
End Property
Friend Sub SetDimension(dValue As Double)
m_dDimension = dValue
NotifyPropertyChanged(NameOf(dDimension))
End Sub
Sub New(dDimension As Double, bIsRelative As Boolean, Parent As Split)
m_dDimension = dDimension
m_bIsRelative = bIsRelative
m_Parent = Parent
End Sub
Friend Function Serialize() As JsonSplitDimension
Dim JsonSplitDimension As JsonSplitDimension = New JsonSplitDimension(m_bIsRelative, m_dDimension)
Return JsonSplitDimension
End Function
End Class
Public Class Window
Inherits VMBase
Private m_sProfilePath As String
Public Property sProfilePath As String
Get
Return m_sProfilePath
End Get
Set(value As String)
m_sProfilePath = value
' salvo soglia precedente
Dim PrevSelThresholdTypeList As New List(Of Integer)
Dim PrevSelThresholdList As New List(Of String)
For Each Area In AreaList
If Area.AreaType = AreaTypes.FRAME Then
PrevSelThresholdTypeList.Add(Area.SelThresholdType.Id)
PrevSelThresholdList.Add(Area.SelThreshold.Name)
End If
Next
' carico soglie
Dim gf = EgtLuaCreateGlobTable("WDG")
Dim kk = EgtLuaSetGlobStringVar("WDG.PROFILE", m_sProfilePath)
Dim ke = EgtLuaCallFunction("GetProfileThresholdsList")
Dim bFound As Boolean = True
Dim nType As Integer = 0
Dim sName As String = ""
Dim nIndex = 1
While bFound
bFound = EgtLuaGetGlobIntVar("WDG.THRESHOLDSLIST." & nIndex & ".nType", nType)
If bFound Then
EgtLuaGetGlobStringVar("WDG.THRESHOLDSLIST." & nIndex & ".sName", sName)
m_ThresholdList.Add(New IdNameStruct(nType, sName))
nIndex += 1
End If
End While
Dim ThresholdTypes = (From Threshold In m_ThresholdList
Select Threshold.Id
Order By Id).Distinct()
For Each Threshold In ThresholdTypes
m_ThresholdTypeList.Add(New IdNameStruct(Threshold, GetThresholdTypeNameFromId(Threshold)))
Next
Dim ud = EgtLuaResetGlobVar("WDG")
' aggiorno lista soglie filtrate per tipo
m_ThresholdList_View.Refresh()
' provo a ripristinare soglia precedente
Dim nThresholdIndex As Integer = 0
For Each Area In AreaList
If Area.AreaType = AreaTypes.FRAME Then
If PrevSelThresholdTypeList.Count >= nThresholdIndex Then
Dim SelThresholdType As IdNameStruct = m_ThresholdTypeList.First(Function(x) x.Id)
If Not IsNothing(SelThresholdType) Then
Area.SelThresholdType = SelThresholdType
End If
Dim SelThreshold As IdNameStruct = m_ThresholdList.First(Function(x) x.Name)
If Not IsNothing(SelThreshold) Then
Area.SelThreshold = SelThreshold
End If
End If
nThresholdIndex += 1
End If
Next
End Set
End Property
Private m_ThresholdTypeList As New List(Of IdNameStruct)
Public ReadOnly Property ThresholdTypeList As List(Of IdNameStruct)
Get
Return m_ThresholdTypeList
End Get
End Property
Private m_ThresholdList_View As CollectionView = Nothing
Private m_ThresholdList As New ObservableCollection(Of IdNameStruct)
Public ReadOnly Property ThresholdList As ObservableCollection(Of IdNameStruct)
Get
Return m_ThresholdList
End Get
End Property
Private m_AreaList As New ObservableCollection(Of Frame)
Public Property AreaList As ObservableCollection(Of Frame)
Get
Return m_AreaList
End Get
Set(value As ObservableCollection(Of Frame))
m_AreaList = value
End Set
End Property
Sub New()
m_ThresholdList_View = CollectionViewSource.GetDefaultView(ThresholdList)
End Sub
Private Function GetThresholdTypeNameFromId(Id As Integer) As String
Select Case Id
Case 1
Return "Soglia"
Case 2
Return "Legno"
Case 3
Return "Gocciolatoio in alluminio"
Case Else
Return ""
End Select
End Function
Friend Function Serialize() As JsonWindow
Dim JsonWindow As New JsonWindow(m_sProfilePath)
For Each Area In m_AreaList
JsonWindow.AreaList.Add(Area.Serialize())
Next
Return JsonWindow
End Function
End Class
Public Class Area
Inherits VMBase
' Actions
Friend Shared m_delDrawWindow As Action
Protected m_nAreaId As Integer = GDB_ID.NULL
Public Property nAreaId As Integer
Get
Return m_nAreaId
End Get
Set(value As Integer)
m_nAreaId = value
End Set
End Property
Private m_AreaList As New List(Of Area)
Public Property AreaList As List(Of Area)
Get
Return m_AreaList
End Get
Set(value As List(Of Area))
m_AreaList = value
End Set
End Property
Private m_AreaType As AreaTypes
Public Property AreaType As AreaTypes
Get
Return m_AreaType
End Get
Set(value As AreaTypes)
m_AreaType = value
m_delDrawWindow()
End Set
End Property
Friend Sub SetAreaType(AreaType As AreaTypes)
m_AreaType = AreaType
End Sub
Private m_ParentArea As Area
Public ReadOnly Property ParentArea As Area
Get
Return m_ParentArea
End Get
End Property
Friend Sub SetParentArea(ParentArea As Area)
m_ParentArea = ParentArea
End Sub
Private m_SelectionGeomIds(30) As Integer
Public ReadOnly Property SelectionGeomIds As Integer()
Get
Return m_SelectionGeomIds
End Get
End Property
Public ReadOnly Property SelectionGeomId As Integer
Get
Return m_SelectionGeomIds(0)
End Get
End Property
Friend Sub SetSelectionGeomId(nId As Integer)
m_SelectionGeomIds(0) = nId
End Sub
Private m_bApplied As Boolean = False
Public ReadOnly Property bApplied As Boolean
Get
Return m_bApplied
End Get
End Property
Friend Sub AppliedDone()
m_bApplied = True
End Sub
Sub New(ParentArea As Area)
m_ParentArea = ParentArea
End Sub
Friend Shared Function CreateArea(ParentArea As Area) As Area
Dim Area As New Area(ParentArea)
Area.SetAreaType(AreaTypes.NULL)
Return Area
End Function
Friend Overridable Function DrawArea(Area As Area, nAreaId As Integer) As Boolean
Return True
End Function
Friend Overridable Function GetSelectionArea() As Boolean
Return True
End Function
Friend Overridable Function Serialize() As JsonArea
Return Nothing
End Function
Friend Sub ManageSelectionSurface(bShow As Boolean)
Dim nStatus As Integer = 0
Select Case Map.refManageWindowVM.SelParamCathegory
Case ParamCathegories.FRAME
Select Case AreaType
Case AreaTypes.FRAME
nStatus = GDB_ST.OFF
Case AreaTypes.SPLIT
nStatus = GDB_ST.OFF
Case AreaTypes.SPLITTED
nStatus = GDB_ST.OFF
Case AreaTypes.SASH
nStatus = GDB_ST.OFF
Case AreaTypes.FILL
nStatus = GDB_ST.OFF
End Select
Case ParamCathegories.SPLIT
Select Case AreaType
Case AreaTypes.FRAME
nStatus = If(m_AreaList.Count = 0, GDB_ST.ON_, GDB_ST.OFF)
Case AreaTypes.SPLIT
nStatus = GDB_ST.ON_
Case AreaTypes.SPLITTED
nStatus = If(m_AreaList.Count = 0, GDB_ST.ON_, GDB_ST.OFF)
Case AreaTypes.SASH
nStatus = If(m_AreaList.Count = 0, GDB_ST.ON_, GDB_ST.OFF)
Case AreaTypes.FILL
nStatus = GDB_ST.OFF
End Select
Case ParamCathegories.SASH
Select Case AreaType
Case AreaTypes.FRAME
nStatus = If(m_AreaList.Count = 0, GDB_ST.ON_, GDB_ST.OFF)
Case AreaTypes.SPLIT
nStatus = GDB_ST.OFF
Case AreaTypes.SPLITTED
nStatus = If((ParentArea.AreaType = AreaTypes.SASH AndAlso ParentArea.AreaList.Count > 1) OrElse (ParentArea.AreaType <> AreaTypes.SASH AndAlso m_AreaList.Count = 0), GDB_ST.ON_, GDB_ST.OFF)
Case AreaTypes.SASH
nStatus = GDB_ST.ON_
Case AreaTypes.FILL
nStatus = GDB_ST.OFF
End Select
Case ParamCathegories.FILL
Select Case AreaType
Case AreaTypes.FRAME
nStatus = If(m_AreaList.Count = 0, GDB_ST.ON_, GDB_ST.OFF)
Case AreaTypes.SPLIT
nStatus = GDB_ST.OFF
Case AreaTypes.SPLITTED
nStatus = If(m_AreaList.Count = 0, GDB_ST.ON_, GDB_ST.OFF)
Case AreaTypes.SASH
nStatus = If(m_AreaList.Count = 0, GDB_ST.ON_, GDB_ST.OFF)
Case AreaTypes.FILL
nStatus = GDB_ST.ON_
End Select
End Select
For Each SelGeomId In SelectionGeomIds
If SelGeomId = 0 OrElse SelGeomId = GDB_ID.NULL Then Exit For
EgtSetStatus(SelGeomId, nStatus)
Next
For Each Area In m_AreaList
Area.ManageSelectionSurface(bShow)
Next
End Sub
End Class
Public Class Frame
Inherits Area
Private m_ShapeList As New ObservableCollection(Of IdNameStruct)({New IdNameStruct(Shapes.RECTANGLE, "Rectangle"),
New IdNameStruct(Shapes.RIGHTCHAMFER, "Right Chamfer"),
New IdNameStruct(Shapes.LEFTCHAMFER, "Left Chamfer"),
New IdNameStruct(Shapes.DOUBLECHAMFER, "Double Chamfer"),
New IdNameStruct(Shapes.ARC, "Arc"),
New IdNameStruct(Shapes.ARC_FULL, "Arc Full"),
New IdNameStruct(Shapes.DOUBLEARC, "Double Arc"),
New IdNameStruct(Shapes.TRIANGLE, "Triangle")})
'New IdNameStruct(Shapes.FILLET, "Fillet"),
'New IdNameStruct(Shapes.DOUBLEARC, "Double Arc"),
'New IdNameStruct(Shapes.CUSTOM, "Custom")})
Public ReadOnly Property ShapeList As ObservableCollection(Of IdNameStruct)
Get
Return m_ShapeList
End Get
End Property
Private m_Shape As Shapes
Public Property SelShapeIndex As Integer
Get
Return IdNameStruct.IndFromId(m_Shape, m_ShapeList)
End Get
Set(value As Integer)
Dim SelShape = IdNameStruct.IdFromInd(value, m_ShapeList)
' verifico parametri Dimension
m_DimensionList.Clear()
Select Case SelShape
Case Shapes.RECTANGLE, Shapes.ARC_FULL
DimensionList.Add(New FrameDimension(1, "Width", 1500, True))
DimensionList.Add(New FrameDimension(2, "Height", 1800, True))
Case Shapes.RIGHTCHAMFER
DimensionList.Add(New FrameDimension(1, "Width", 1500, True))
DimensionList.Add(New FrameDimension(2, "Left Height", 1800, True))
DimensionList.Add(New FrameDimension(3, "Right Height", 1500, True))
Case Shapes.LEFTCHAMFER
DimensionList.Add(New FrameDimension(1, "Width", 1500, True))
DimensionList.Add(New FrameDimension(2, "Left Height", 1500, True))
DimensionList.Add(New FrameDimension(3, "Right Height", 1800, True))
Case Shapes.DOUBLECHAMFER, Shapes.ARC
DimensionList.Add(New FrameDimension(1, "Width", 1500, True))
DimensionList.Add(New FrameDimension(2, "Height", 1500, True))
DimensionList.Add(New FrameDimension(3, "Full Height", 1800, True))
Case Shapes.DOUBLEARC
DimensionList.Add(New FrameDimension(1, "Width", 1500, True))
DimensionList.Add(New FrameDimension(2, "Height", 1500, True))
DimensionList.Add(New FrameDimension(3, "Full Height", 2400, True))
Case Shapes.TRIANGLE
DimensionList.Add(New FrameDimension(1, "Width", 2000, True))
DimensionList.Add(New FrameDimension(2, "Height", 1500, True))
DimensionList.Add(New FrameDimension(3, "Height projection", 0, True))
Case Shapes.CUSTOM
DimensionList.Clear()
End Select
' verifico parametri Joint
m_JointList.Clear()
Select Case SelShape
Case Shapes.RECTANGLE, Shapes.RIGHTCHAMFER, Shapes.LEFTCHAMFER, Shapes.DOUBLECHAMFER, Shapes.ARC, Shapes.DOUBLEARC
JointList.Add(New Joint(1, Joints.FULL_H))
JointList.Add(New Joint(2, Joints.FULL_H))
JointList.Add(New Joint(3, Joints.FULL_H))
JointList.Add(New Joint(4, Joints.FULL_H))
Case Shapes.ARC_FULL
JointList.Add(New Joint(1, Joints.FULL_H))
JointList.Add(New Joint(2, Joints.FULL_H))
JointList.Add(New Joint(3, Joints.ANGLED))
JointList.Add(New Joint(4, Joints.ANGLED))
Case Shapes.TRIANGLE
JointList.Add(New Joint(1, Joints.FULL_H))
JointList.Add(New Joint(2, Joints.FULL_H))
JointList.Add(New Joint(3, Joints.ANGLED))
Case Shapes.CUSTOM
JointList.Clear()
End Select
m_Shape = SelShape
End Set
End Property
Friend Sub SetSelShape(Value As Shapes)
DimensionList.Clear()
' aggiungo Dimension
Select Case Value
Case Shapes.RECTANGLE, Shapes.ARC_FULL
DimensionList.Add(New FrameDimension(1, "Width", 1500, True))
DimensionList.Add(New FrameDimension(2, "Height", 1800, True))
Case Shapes.RIGHTCHAMFER
DimensionList.Add(New FrameDimension(1, "Width", 1500, True))
DimensionList.Add(New FrameDimension(2, "Left Height", 1800, True))
DimensionList.Add(New FrameDimension(3, "Right Height", 1500, True))
Case Shapes.LEFTCHAMFER
DimensionList.Add(New FrameDimension(1, "Width", 1500, True))
DimensionList.Add(New FrameDimension(2, "Left Height", 1500, True))
DimensionList.Add(New FrameDimension(3, "Right Height", 1800, True))
Case Shapes.DOUBLECHAMFER, Shapes.ARC
DimensionList.Add(New FrameDimension(1, "Width", 1500, True))
DimensionList.Add(New FrameDimension(2, "Height", 1500, True))
DimensionList.Add(New FrameDimension(3, "Full Height", 1800, True))
Case Shapes.DOUBLEARC
DimensionList.Add(New FrameDimension(1, "Width", 1500, True))
DimensionList.Add(New FrameDimension(2, "Height", 1500, True))
DimensionList.Add(New FrameDimension(3, "Full Height", 2400, True))
Case Shapes.TRIANGLE
DimensionList.Add(New FrameDimension(1, "Width", 2000, True))
DimensionList.Add(New FrameDimension(2, "Height", 1500, True))
DimensionList.Add(New FrameDimension(3, "Height projection", 0, True))
Case Shapes.CUSTOM
DimensionList.Clear()
End Select
' aggiungo Joint
Dim nJointQty As Integer = 4
Select Case Value
Case Shapes.RECTANGLE, Shapes.RIGHTCHAMFER, Shapes.LEFTCHAMFER, Shapes.DOUBLECHAMFER, Shapes.ARC, Shapes.DOUBLEARC
JointList.Add(New Joint(1, Joints.FULL_H))
JointList.Add(New Joint(2, Joints.FULL_H))
JointList.Add(New Joint(3, Joints.FULL_H))
JointList.Add(New Joint(4, Joints.FULL_H))
Case Shapes.ARC_FULL
JointList.Add(New Joint(1, Joints.FULL_H))
JointList.Add(New Joint(2, Joints.FULL_H))
JointList.Add(New Joint(3, Joints.ANGLED))
JointList.Add(New Joint(4, Joints.ANGLED))
Case Shapes.TRIANGLE
JointList.Add(New Joint(1, Joints.FULL_H))
JointList.Add(New Joint(2, Joints.FULL_H))
JointList.Add(New Joint(3, Joints.ANGLED))
Case Shapes.CUSTOM
JointList.Clear()
End Select
m_Shape = Value
NotifyPropertyChanged(NameOf(SelShapeIndex))
End Sub
Public ReadOnly Property Shape As Shapes
Get
Return m_Shape
End Get
End Property
Private m_DimensionList As New ObservableCollection(Of FrameDimension)
Public ReadOnly Property DimensionList As ObservableCollection(Of FrameDimension)
Get
Return m_DimensionList
End Get
End Property
Private m_JointList As New ObservableCollection(Of Joint)
Public Property JointList As ObservableCollection(Of Joint)
Get
Return m_JointList
End Get
Set(value As ObservableCollection(Of Joint))
m_JointList = value
End Set
End Property
Private m_bBottomRail As Boolean
Public Property BottomRail As Boolean
Get
Return m_bBottomRail
End Get
Set(value As Boolean)
m_bBottomRail = value
m_delDrawWindow()
End Set
End Property
Friend Sub SetBottomRail(bBottomRail As Boolean)
m_bBottomRail = bBottomRail
End Sub
Private m_nBottomRailQty As Integer = 0
Public Property BottomRailQty As Integer
Get
Return m_nBottomRailQty
End Get
Set(value As Integer)
m_nBottomRailQty = value
End Set
End Property
Friend Sub SetBottomRailQty(nBottomRailQty As Integer)
m_nBottomRailQty = nBottomRailQty
End Sub
Private m_SelThresholdType As IdNameStruct
Public Property SelThresholdType As IdNameStruct
Get
Return m_SelThresholdType
End Get
Set(value As IdNameStruct)
m_SelThresholdType = value
End Set
End Property
Private m_ThresholdList_View As CollectionView = Nothing
Private m_SelThreshold As IdNameStruct
Public Property SelThreshold As IdNameStruct
Get
Return m_SelThreshold
End Get
Set(value As IdNameStruct)
m_SelThreshold = value
End Set
End Property
Private m_Outline As ObservableCollection(Of Curve)
Public Property Outline As ObservableCollection(Of Curve)
Get
Return m_Outline
End Get
Set(value As ObservableCollection(Of Curve))
m_Outline = value
End Set
End Property
Sub New(ParentArea As Area)
MyBase.New(ParentArea)
m_ThresholdList_View = CollectionViewSource.GetDefaultView(Map.refManageWindowVM.CurrWindow.ThresholdList)
m_ThresholdList_View.Filter = AddressOf ThresholdTypeFilter
End Sub
Private Function ThresholdTypeFilter(ThresholdType As Object) As Boolean
Return m_SelThresholdType.Id = ThresholdType.id
End Function
Friend Shared Function CreateFrame(Window As Window) As Area
Dim NewFrame As New Frame(Nothing)
NewFrame.SetAreaType(AreaTypes.FRAME)
NewFrame.SetSelShape(Shapes.RECTANGLE)
NewFrame.SetBottomRail(False)
NewFrame.SetBottomRailQty(0)
NewFrame.AppliedDone()
Return NewFrame
End Function
Private Function ConvertShape(value As Shapes) As LuaShapes
Select Case value
Case Shapes.RECTANGLE
Return LuaShapes.RECT
Case Shapes.RIGHTCHAMFER
Return LuaShapes.CHAMFER_SIDE
Case Shapes.LEFTCHAMFER
Return LuaShapes.CHAMFER_SIDE
Case Shapes.DOUBLECHAMFER
Return LuaShapes.CHAMFER
Case Shapes.ARC
Return LuaShapes.SEGMENTAL_ARC
Case Shapes.ARC_FULL
Return LuaShapes.ROUND_ARC
'Case Shapes.FILLET
' Return LuaShapes.
Case Shapes.DOUBLEARC
Return LuaShapes.POINTED_ARC
Case Shapes.TRIANGLE
Return LuaShapes.TRIANGLE
' Case Shapes.CUSTOM
' Return LuaShapes.RECT
Case Else
Return LuaShapes.RECT
End Select
End Function
Friend Overrides Function DrawArea(Area As Area, nAreaId As Integer) As Boolean
If IsNothing(Area) Then Return False
' verifico che esista area frame con forma e dimensioni corrette
If IsNothing(m_Shape) OrElse IsNothing(m_DimensionList) OrElse
((m_Shape = Shapes.RECTANGLE OrElse
m_Shape = Shapes.ARC_FULL) AndAlso m_DimensionList.Count <> 2) OrElse
((m_Shape = Shapes.RIGHTCHAMFER OrElse
m_Shape = Shapes.LEFTCHAMFER OrElse
m_Shape = Shapes.DOUBLECHAMFER OrElse
m_Shape = Shapes.ARC OrElse
m_Shape = Shapes.FILLET OrElse
m_Shape = Shapes.DOUBLEARC) AndAlso m_DimensionList.Count <> 3) OrElse
IsNothing(m_JointList) OrElse m_JointList.Count < 3 Then
Return False
End If
Dim tf = EgtLuaSetGlobNumVar("WDG.FRAMETYPE", ConvertShape(m_Shape))
Dim tu = EgtLuaSetGlobNumVar("WDG.WIDTH", m_DimensionList(0).dValue)
Dim tt = EgtLuaSetGlobNumVar("WDG.HEIGHT", m_DimensionList(1).dValue)
If m_DimensionList.Count > 2 Then
Dim tr = EgtLuaSetGlobNumVar("WDG.HEIGHT2", m_DimensionList(2).dValue)
End If
For nJointIndex = 0 To m_JointList.Count - 1
Dim tg = EgtLuaSetGlobIntVar("WDG.JOINT" & nJointIndex + 1, m_JointList(nJointIndex).SelJointType)
Next
Dim tlt = EgtLuaCallFunction("WinCreate_CreateFrame")
EgtLuaGetGlobIntVar("WDG.AREAID", m_nAreaId)
nAreaId = m_nAreaId
If m_nAreaId = GDB_ID.NULL Then Return False
' aggiungo BottomRail se necessario
If m_bBottomRail Then
EgtLuaSetGlobIntVar("WDG.NBR", m_nBottomRailQty)
Dim tdlt = EgtLuaCallFunction("WinCreate_AddBottomRail")
End If
' lancio disegno delle sotto aree
For Each Area In AreaList
If Not Area.DrawArea(Area, nAreaId) Then Return False
Next
Return True
End Function
Friend Overrides Function GetSelectionArea() As Boolean
Dim nSelLayerId As Integer = EgtGetFirstNameInGroup(m_nAreaId, WIN_SELECTION)
If nSelLayerId <> GDB_ID.NULL Then
SetSelectionGeomId(nSelLayerId)
End If
' lancio recupero area di selezione delle sotto aree
For Each Area In AreaList
If Not Area.GetSelectionArea() Then Return False
Next
Return True
End Function
Friend Overrides Function Serialize() As JsonArea
Dim JsonFrame As JsonFrame = New JsonFrame(m_Shape, m_bBottomRail, m_nBottomRailQty)
For Each Dimension In DimensionList
JsonFrame.DimensionList.Add(Dimension.Serialize())
Next
For Each Joint In JointList
JsonFrame.JointList.Add(Joint.Serialize())
Next
For Each Area In AreaList
JsonFrame.AreaList.Add(Area.Serialize())
Next
Return JsonFrame
End Function
End Class
Public Class Sash
Inherits Area
'Private m_nSashQty As Integer
Public Property nSashQty As Integer
Get
Return If(m_SashList.Count > 0, m_SashList.Count, 1)
'Return m_nSashQty
End Get
Set(value As Integer)
If value > m_SashList.Count Then
' recupero larghezza ultimo
Dim dLastDimension As Double = 100
Dim dNewDimension As Double = 100
If m_SashList.Count > 0 Then
dLastDimension = m_SashList(m_SashList.Count - 1).dDimension
dNewDimension = dLastDimension / (value + 1 - nSashQty)
m_SashList(m_SashList.Count - 1).SetDimension(dNewDimension)
Else
dNewDimension = dLastDimension / (value + 1 - nSashQty)
End If
' aggiungo area Sash di default
For SplitIndex = m_SashList.Count To value - 1
SashList.Add(New SashDimension(dNewDimension, True, Me))
Next
ElseIf value < m_SashList.Count Then
Dim dLastDimension As Double = 0
For SplitIndex = m_SashList.Count - 1 To value Step -1
dLastDimension += m_SashList(SplitIndex).dDimension
SashList.RemoveAt(SplitIndex)
Next
dLastDimension += m_SashList(SashList.Count - 1).dDimension
SashList(SashList.Count - 1).SetDimension(dLastDimension)
End If
RefreshHardwareList()
RefreshHardwareOptionList()
SetFirstHardware()
End Set
End Property
Friend Sub SetSashQty(Qty As Integer, Optional NotifyProperty As Boolean = False)
If Qty > m_SashList.Count Then
' recupero larghezza ultimo
Dim dLastDimension As Double = 100
Dim dNewDimension As Double = 100
If m_SashList.Count > 0 Then
dLastDimension = m_SashList(m_SashList.Count - 1).dDimension
dNewDimension = dLastDimension / (Qty + 1 - nSashQty)
m_SashList(m_SashList.Count - 1).dDimension = dNewDimension
Else
dNewDimension = dLastDimension / (Qty + 1 - nSashQty)
End If
' aggiungo area Sash di default
For SplitIndex = m_SashList.Count To Qty - 1
SashList.Add(New SashDimension(dNewDimension, True, Me))
Next
ElseIf Qty < m_SashList.Count Then
For SplitIndex = m_SashList.Count - 1 To Qty Step -1
SashList.RemoveAt(SplitIndex)
Next
End If
If NotifyProperty Then
NotifyPropertyChanged(NameOf(nSashQty))
End If
End Sub
Private m_bIsSashVertical As Boolean
Public Property bIsSashVertical As Boolean
Get
Return m_bIsSashVertical
End Get
Set(value As Boolean)
m_bIsSashVertical = value
End Set
End Property
Friend Sub SetIsSashVertical(IsSashVertical As Boolean, Optional NotifyProperty As Boolean = False)
m_bIsSashVertical = IsSashVertical
If NotifyProperty Then
NotifyPropertyChanged(NameOf(bIsSashVertical))
End If
End Sub
Private m_bIsMeasureGlass As Boolean
Public Property bIsMeasureGlass As Boolean
Get
Return m_bIsMeasureGlass
End Get
Set(value As Boolean)
m_bIsMeasureGlass = value
End Set
End Property
Friend Sub SetIsMeasureGlass(IsMeasureGlass As Boolean, Optional NotifyProperty As Boolean = False)
m_bIsMeasureGlass = IsMeasureGlass
If NotifyProperty Then
NotifyPropertyChanged(NameOf(bIsMeasureGlass))
End If
End Sub
Private m_SashList As New ObservableCollection(Of SashDimension)
Public Property SashList As ObservableCollection(Of SashDimension)
Get
Return m_SashList
End Get
Set(value As ObservableCollection(Of SashDimension))
m_SashList = value
End Set
End Property
Private m_SashType As SashTypes
Public Property SashType As SashTypes
Get
Return m_SashType
End Get
Set(value As SashTypes)
m_SashType = value
End Set
End Property
Friend Sub SetSashType(SashType As SashTypes)
m_SashType = SashType
End Sub
Private m_JointList As New ObservableCollection(Of Joint)
Public Property JointList As ObservableCollection(Of Joint)
Get
Return m_JointList
End Get
Set(value As ObservableCollection(Of Joint))
m_JointList = value
End Set
End Property
Private m_bBottomRail As Boolean
Public Property BottomRail As Boolean
Get
Return m_bBottomRail
End Get
Set(value As Boolean)
m_bBottomRail = value
End Set
End Property
Friend Sub SetBottomRail(bBottomRail As Boolean)
m_bBottomRail = bBottomRail
End Sub
Private m_nBottomRailQty As Integer = 0
Public Property BottomRailQty As Integer
Get
Return m_nBottomRailQty
End Get
Set(value As Integer)
m_nBottomRailQty = value
End Set
End Property
Friend Sub SetBottomRailQty(nBottomRailQty As Integer)
m_nBottomRailQty = nBottomRailQty
End Sub
Private m_bIsPercentage As Boolean = True
Public ReadOnly Property bIsPercentage As Boolean
Get
Return m_bIsPercentage
End Get
End Property
Private m_HardwareList As New ObservableCollection(Of Hardware)
Public ReadOnly Property HardwareList As ObservableCollection(Of Hardware)
Get
Return m_HardwareList
End Get
End Property
Private m_SelHardware As Hardware
Public Property SelHardware As Hardware
Get
Return m_SelHardware
End Get
Set(value As Hardware)
m_SelHardware = value
If Not IsNothing(m_SelHardware) AndAlso m_SelHardware.sId <> "000000" Then
Dim sHwdOptPath As String = ""
Dim gf = EgtLuaCreateGlobTable("WDG")
Dim tft = EgtLuaSetGlobIntVar("WDG.AREAID", m_nAreaId)
Dim tfy = EgtLuaSetGlobStringVar("WDG.HDWFAVOURITE", value.sId)
Dim HandleSash As SashDimension = m_SashList.FirstOrDefault(Function(x) x.bHasHandle)
Dim sHandle As String = "Dx"
Select Case GetOpeningSide(HandleSash.OpeningType)
Case OpeningSides.LEFT
sHandle = "Sx"
Case OpeningSides.RIGHT
sHandle = "Dx"
End Select
Dim tfd = EgtLuaSetGlobStringVar("WDG.HDWHANDLE", sHandle)
Dim tlt = EgtLuaCallFunction("WinCreate_GetHardwareOptionPath")
Dim tltf = EgtLuaGetGlobStringVar("WDG.HWDOPTPATH", sHwdOptPath)
If Not String.IsNullOrWhiteSpace(sHwdOptPath) Then
Dim serializer As New XmlSerializer(GetType(ParametriOpzioni))
Dim HwdOptions As ParametriOpzioni = Nothing
Dim sHdwOptPath As String = Path.ChangeExtension(sHwdOptPath, ".opt")
Dim bHdwOptFound As Boolean = False
For WaitIndex = 0 To 100
If File.Exists(sHdwOptPath) Then
bHdwOptFound = True
Exit For
End If
Threading.Thread.Sleep(100)
Next
If bHdwOptFound Then
Dim sHwdOptText As String = ""
Try
sHwdOptText = File.ReadAllText(sHdwOptPath)
Catch ex As Exception
EgtOutLog("Hardware file opt not found or read!")
End Try
If Not String.IsNullOrWhiteSpace(sHwdOptText) Then
Using reader As TextReader = New StringReader(sHwdOptText)
HwdOptions = serializer.Deserialize(reader)
End Using
If Not IsNothing(HwdOptions) Then
m_HwdOptionList.Clear()
For Each HdwOption In HwdOptions.Items
Select Case HdwOption.Tipo
Case "Text"
m_HwdOptionList.Add(New AGBOptionText(HdwOption))
Case "List"
m_HwdOptionList.Add(New AGBOptionCombo(HdwOption))
End Select
Next
NotifyPropertyChanged(NameOf(HwdOptionList))
End If
End If
End If
Dim ud = EgtLuaResetGlobVar("WDG")
End If
End If
End Set
End Property
Friend Sub SetSelHardware(value As Hardware)
m_SelHardware = value
NotifyPropertyChanged(NameOf(SelHardware))
End Sub
Friend Sub SetSelHardwareFromId(sId As String)
m_SelHardware = m_HardwareList.FirstOrDefault(Function(x) x.sId = sId)
If IsNothing(m_SelHardware) Then
m_SelHardware = m_HardwareList(0)
End If
NotifyPropertyChanged(NameOf(SelHardware))
End Sub
Friend Sub SetFirstHardware()
If m_HardwareList.Count > 0 Then
m_SelHardware = m_HardwareList(0)
NotifyPropertyChanged(NameOf(SelHardware))
End If
End Sub
Private m_HwdOptionList As New ObservableCollection(Of AGBOption)
Public ReadOnly Property HwdOptionList As ObservableCollection(Of AGBOption)
Get
Return m_HwdOptionList
End Get
End Property
Sub New(ParentArea As Area)
MyBase.New(ParentArea)
End Sub
Friend Shared Function CreateSash(Area As Area) As Sash
Dim NewSash As Sash = New Sash(Area)
NewSash.SetAreaType(AreaTypes.SASH)
NewSash.SetSashQty(1)
NewSash.SetIsSashVertical(True)
' recupero numero di lati dell'area contenitore
Dim nOutlineLayerId As Integer = EgtGetFirstNameInGroup(Area.nAreaId, WIN_OUTLINE)
Dim nJointQty As Integer = EgtGetGroupObjs(nOutlineLayerId)
For JointIndex = 0 To nJointQty - 1
NewSash.JointList.Add(New Joint(JointIndex + 1, Joints.FULL_H))
Next
NewSash.SetBottomRail(False)
NewSash.SetBottomRailQty(0)
NewSash.RefreshHardwareList()
NewSash.RefreshHardwareOptionList()
NewSash.SetFirstHardware()
Return NewSash
End Function
Private Function FindSashShape() As String
' Return "R"
' se non ancora creato, recupero area precedente
Dim nAreaId As Integer = m_nAreaId
If m_nAreaId = GDB_ID.NULL Then
nAreaId = ParentArea.nAreaId
End If
Dim nOutlineLayerId As Integer = EgtGetFirstNameInGroup(nAreaId, WIN_OUTLINE)
Dim OutlineIdList As New List(Of Integer)
Dim nOutlineId As Integer = EgtGetFirstInGroup(nOutlineLayerId)
While nOutlineId <> GDB_ID.NULL
OutlineIdList.Add(nOutlineId)
nOutlineId = EgtGetNext(nOutlineId)
End While
Dim nTempLayerId As Integer = EgtCreateGroup(nAreaId)
Dim nCompoOutlineId As Integer = EgtCreateCurveCompo(nTempLayerId, OutlineIdList.ToArray(), False)
Dim ptP As Point3d
Dim vtL1 As Vector3d
Dim vtL2 As Vector3d
Dim vtB1 As Vector3d
Dim vtB2 As Vector3d
Dim vtN As Vector3d
Dim dRad As Double
Dim bCCW As Boolean
If EgtCurveIsARectangle(nCompoOutlineId, 0.001, ptP, vtL1, vtL2) Then
Return "R"
ElseIf EgtCurveIsACircle(nCompoOutlineId, ptP, vtN, dRad, bCCW) Then
Return "C"
ElseIf EgtCurveIsATrapezoid(nCompoOutlineId, ptP, vtB1, vtL1, vtB2) Then
Return "T"
Else
For nOutlineIndex = 0 To OutlineIdList.Count - 1
If EgtGetType(OutlineIdList(nOutlineIndex)) = GDB_TY.CRV_ARC Then
Dim vtStart As Vector3d
EgtStartVector(OutlineIdList(nOutlineIndex), GDB_ID.ROOT, vtStart)
Dim vtEnd As Vector3d
EgtEndVector(OutlineIdList(nOutlineIndex), GDB_ID.ROOT, vtEnd)
Dim nPrevOutlineId As Integer = If(nOutlineId > 0, OutlineIdList(nOutlineIndex - 1), OutlineIdList(OutlineIdList.Count - 1))
Dim dPrevLen As Integer
EgtCurveLength(nPrevOutlineId, dPrevLen)
Dim vtPrev As Vector3d
EgtStartVector(nPrevOutlineId, vtPrev)
Dim nNextOutlineId As Integer = If(nOutlineId < OutlineIdList.Count - 1, OutlineIdList(nOutlineIndex + 1), OutlineIdList(0))
Dim dNextLen As Integer
EgtCurveLength(nNextOutlineId, dNextLen)
Dim vtNext As Vector3d
EgtEndVector(nNextOutlineId, vtNext)
If Math.Abs(dPrevLen - dNextLen) < 10 * EPS_SMALL Then
If AreSameVectorApprox(vtEnd, vtNext) Then
Return "AS"
Else
Return "AR"
End If
Else
If AreSameVectorApprox(vtEnd, vtNext) Then
Return "SS"
Else
Return "SR"
End If
End If
End If
Next
End If
Return "R"
End Function
Friend Function GetOpeningType(OpeningType As Openings) As OpeningTypes
Select Case OpeningType
Case Openings.TURNONLY_LEFT,
Openings.TURNONLY_RIGHT
Return OpeningTypes.TURNONLY
Case Openings.TILTTURN_LEFT,
Openings.TILTTURN_RIGHT
Return OpeningTypes.TILTTURN
Case Openings.TILTONLY_TOP,
Openings.TILTONLY_BOTTOM
Return OpeningTypes.TILTONLY
Case Openings.PIVOT
Return OpeningTypes.PIVOT
Case Openings.FIXED
Return OpeningTypes.FIXED
Case Openings.COMPLANARSLIDE_LEFT,
Openings.COMPLANARSLIDE_RIGHT
Return OpeningTypes.COMPLANARSLIDE
Case Openings.LIFTSLIDE_LEFT,
Openings.LIFTSLIDE_RIGHT
Return OpeningTypes.LIFTSLIDE
Case Else
Return OpeningTypes.NULL
End Select
End Function
Private Function ConvertOpeningType()
If m_SashList.Any(Function(x) GetOpeningType(x.OpeningType) = OpeningTypes.TILTTURN) Then
Return "AR"
Else
Select Case GetOpeningType(m_SashList(0).OpeningType)
Case OpeningTypes.TURNONLY
Return "AB"
Case OpeningTypes.TILTONLY
Return "VA"
Case OpeningTypes.PIVOT
Return "BI"
Case OpeningTypes.COMPLANARSLIDE
Return "CO"
Case OpeningTypes.LIFTSLIDE
Return "AS"
Case Else
Return ""
End Select
End If
End Function
Friend Sub RefreshHardwareList()
m_HardwareList.Clear()
Dim sSashShape As String = FindSashShape()
Dim sOpeningType As String = ConvertOpeningType()
m_HardwareList = New ObservableCollection(Of Hardware)(From Hardware In Map.refManageWindowVM.HardwareList
Where Hardware.sId = "000000" OrElse (Hardware.nSashQty = nSashQty AndAlso Hardware.sShape = sSashShape AndAlso Hardware.sOpeningType = sOpeningType))
NotifyPropertyChanged(NameOf(HardwareList))
End Sub
Friend Sub RefreshHardwareOptionList()
m_HwdOptionList.Clear()
NotifyPropertyChanged(NameOf(HwdOptionList))
End Sub
Friend Function GetOpeningSide(OpeningType As Openings) As OpeningSides
Select Case OpeningType
Case Openings.TURNONLY_LEFT,
Openings.TILTTURN_LEFT,
Openings.TILTONLY_TOP,
Openings.COMPLANARSLIDE_LEFT,
Openings.LIFTSLIDE_LEFT
Return OpeningSides.LEFT
Case Openings.TURNONLY_RIGHT,
Openings.TILTTURN_RIGHT,
Openings.TILTONLY_BOTTOM,
Openings.COMPLANARSLIDE_RIGHT,
Openings.LIFTSLIDE_RIGHT
Return OpeningSides.RIGHT
Case Else
Return OpeningSides.NULL
End Select
End Function
Friend Overrides Function DrawArea(Area As Area, nAreaId As Integer) As Boolean
' verifico se applicata
If Not bApplied Then Return True
' verifico che esista area sash con info corrette
If IsNothing(m_JointList) OrElse m_JointList.Count < 3 OrElse
IsNothing(m_SashType) Then
Return False
End If
' se un'anta
If nSashQty = 1 Then
' creo anta
Dim tf = EgtLuaSetGlobIntVar("WDG.AREAID", nAreaId)
For nJointIndex = 0 To m_JointList.Count - 1
Dim tg = EgtLuaSetGlobIntVar("WDG.JOINT" & nJointIndex + 1, m_JointList(nJointIndex).SelJointType)
Next
'Dim tg = EgtLuaSetGlobIntVar("WDG.JOINTBL", m_JointList(0).SelJointType)
'Dim th = EgtLuaSetGlobIntVar("WDG.JOINTBR", m_JointList(1).SelJointType)
'Dim tj = EgtLuaSetGlobIntVar("WDG.JOINTTR", m_JointList(2).SelJointType)
'Dim tkt = EgtLuaSetGlobIntVar("WDG.JOINTTL", m_JointList(3).SelJointType)
Dim tft = EgtLuaSetGlobIntVar("WDG.SASHTYPE", m_SashType)
Dim tfr = EgtLuaSetGlobIntVar("WDG.OPENINGTYPE", m_SashList(0).SelOpeningType.Id)
Dim tlt = EgtLuaCallFunction("WinCreate_AddSash")
Dim tltf = EgtLuaGetGlobIntVar("WDG.AREAID", m_nAreaId)
nAreaId = m_nAreaId
If m_nAreaId = GDB_ID.NULL Then Return False
' aggiungo BottomRail se necessario
If m_bBottomRail Then
EgtLuaSetGlobIntVar("WDG.NBR", m_nBottomRailQty)
Dim tdlt = EgtLuaCallFunction("WinCreate_AddBottomRail")
End If
Else
' se piu' di un'anta
' creo split
EgtLuaSetGlobIntVar("WDG.AREAID", nAreaId)
EgtLuaSetGlobIntVar("WDG.SPLITORIENTATION", If(m_bIsSashVertical, SplitShapes.VERTICAL, SplitShapes.HORIZONTAL))
EgtLuaSetGlobIntVar("WDG.SPLITTYPE", LuaSplitTypes.FRENCH)
EgtLuaSetGlobIntVar("WDG.MEASURETYPE", 3)
For PositionIndex = 0 To SashList.Count - 2
EgtLuaSetGlobNumVar("WDG.POSITION" & PositionIndex + 1, If(m_SashList(PositionIndex).bIsRelative, SashList(PositionIndex).dDimension / 100, SashList(PositionIndex).dDimension))
Next
EgtLuaSetGlobNumVar("WDG.PROPORTION", SashList.Sum(Function(x) x.dDimension / 100))
EgtLuaCallFunction("WinCreate_AddSplits")
Dim AreaIndex As Integer = 1
Dim NewAreaId As Integer = GDB_ID.NULL
While EgtLuaGetGlobIntVar("WDG.AREAID" & AreaIndex, NewAreaId)
If NewAreaId <> GDB_ID.NULL Then
Area.AreaList(AreaIndex - 1).nAreaId = NewAreaId
AreaIndex += 1
Else Exit While
End If
End While
EgtLuaGetGlobIntVar("WDG.AREAID", Area.nAreaId)
' calcolo OpeningSide e OpeningType
Dim nHandleIndex As Integer = SashList.IndexOf(SashList.FirstOrDefault(Function(x) x.bHasHandle))
Dim SashTypeList(m_SashList.Count - 1) As SashTypes
Dim FinalSashTypeList(m_SashList.Count - 1) As SashTypes
For nSashIndex = 0 To m_SashList.Count - 1
' se active
If GetOpeningSide(m_SashList(nSashIndex).OpeningType) = GetOpeningSide(m_SashList(nHandleIndex).OpeningType) Then
SashTypeList(nSashIndex) = SashTypes.ACTIVE
Else
' altrimenti inactive
SashTypeList(nSashIndex) = SashTypes.INACTIVE
End If
Next
For nSashIndex = 0 To m_SashList.Count - 1
If nSashIndex = 0 Then
If SashTypeList(nSashIndex) = SashTypeList(nSashIndex + 1) Then
If SashTypeList(nSashIndex) = SashTypes.ACTIVE Then
FinalSashTypeList(nSashIndex) = SashTypes.ACTIVE_OUT
Else
FinalSashTypeList(nSashIndex) = SashTypes.INACTIVE_OUT
End If
Else
' rimane come e'
FinalSashTypeList(nSashIndex) = SashTypeList(nSashIndex)
End If
ElseIf nSashIndex = m_SashList.Count - 1 Then
If SashTypeList(nSashIndex) = SashTypeList(nSashIndex - 1) Then
If SashTypeList(nSashIndex) = SashTypes.ACTIVE Then
FinalSashTypeList(nSashIndex) = SashTypes.ACTIVE_OUT
Else
FinalSashTypeList(nSashIndex) = SashTypes.INACTIVE_OUT
End If
Else
' rimane come e'
FinalSashTypeList(nSashIndex) = SashTypeList(nSashIndex)
End If
Else
If SashTypeList(nSashIndex) = SashTypeList(nSashIndex + 1) OrElse SashTypeList(nSashIndex) = SashTypeList(nSashIndex - 1) Then
If SashTypeList(nSashIndex) = SashTypes.ACTIVE Then
FinalSashTypeList(nSashIndex) = SashTypes.ACTIVE_IN
Else
FinalSashTypeList(nSashIndex) = SashTypes.INACTIVE_IN
End If
Else
' rimane come e'
FinalSashTypeList(nSashIndex) = SashTypeList(nSashIndex)
End If
End If
Next
' creo ante
For nSashIndex = 0 To m_SashList.Count - 1
Dim tf = EgtLuaSetGlobIntVar("WDG.AREAID", Area.AreaList(nSashIndex).nAreaId)
For nJointIndex = 0 To m_JointList.Count - 1
Dim tg = EgtLuaSetGlobIntVar("WDG.JOINT" & nJointIndex + 1, m_JointList(nJointIndex).SelJointType)
Next
'Dim tg = EgtLuaSetGlobIntVar("WDG.JOINTBL", m_JointList(0).SelJointType)
'Dim th = EgtLuaSetGlobIntVar("WDG.JOINTBR", m_JointList(1).SelJointType)
'Dim tj = EgtLuaSetGlobIntVar("WDG.JOINTTR", m_JointList(2).SelJointType)
'Dim tkt = EgtLuaSetGlobIntVar("WDG.JOINTTL", m_JointList(3).SelJointType)
Dim tft = EgtLuaSetGlobIntVar("WDG.SASHTYPE", FinalSashTypeList(nSashIndex))
Dim tfr = EgtLuaSetGlobIntVar("WDG.OPENINGTYPE", m_SashList(nSashIndex).SelOpeningType.Id)
Dim tlt = EgtLuaCallFunction("WinCreate_AddSash")
Dim nNewAreaId As Integer = GDB_ID.NULL
Dim tltf = EgtLuaGetGlobIntVar("WDG.AREAID", nNewAreaId)
Area.AreaList(nSashIndex).nAreaId = nNewAreaId
If nNewAreaId = GDB_ID.NULL Then Return False
' aggiungo BottomRail se necessario
If m_bBottomRail Then
EgtLuaSetGlobIntVar("WDG.NBR", m_nBottomRailQty)
Dim tdlt = EgtLuaCallFunction("WinCreate_AddBottomRail")
End If
Next
End If
' aggiungo ferramenta
If Not IsNothing(m_SelHardware) Then
EgtSetInfo(m_nAreaId, LUA_WIN_HDW_FAVOURITE, m_SelHardware.sId)
Dim HandleSash As SashDimension = m_SashList.FirstOrDefault(Function(x) x.bHasHandle)
Dim sHandle As String = "Dx"
Select Case GetOpeningSide(HandleSash.OpeningType)
Case OpeningSides.LEFT
sHandle = "Sx"
Case OpeningSides.RIGHT
sHandle = "Dx"
End Select
EgtSetInfo(m_nAreaId, LUA_WIN_HDW_HANDLE, sHandle)
Dim sOptions As String = ""
For OptionIndex = 0 To m_HwdOptionList.Count - 1
Dim HdwOption = m_HwdOptionList(OptionIndex)
Select Case HdwOption.Type
Case AGBOption.HDWOPTIONTYPES.TEXT
Dim HdwOptionText As AGBOptionText = HdwOption
sOptions &= HdwOption.sName & "=" & HdwOptionText.sValue
Case AGBOption.HDWOPTIONTYPES.COMBO
Dim HdwOptionCombo As AGBOptionCombo = HdwOption
sOptions &= HdwOption.sName & "=" & HdwOptionCombo.sValue.sValue
End Select
sOptions &= If(OptionIndex < m_HwdOptionList.Count - 1, ",", "")
Next
EgtSetInfo(m_nAreaId, LUA_WIN_HDW_OPTIONS, sOptions)
End If
' lancio disegno delle sotto aree
For Each Area In AreaList
If Not Area.DrawArea(Area, nAreaId) Then Return False
Next
Return True
End Function
Friend Overrides Function GetSelectionArea() As Boolean
If nSashQty = 1 Then
Dim nSelLayerId As Integer = EgtGetFirstNameInGroup(m_nAreaId, WIN_SELECTION)
If nSelLayerId <> GDB_ID.NULL Then
SetSelectionGeomId(nSelLayerId)
End If
Else
If nSashQty > 1 Then
Dim nSplitIndex = 0
Dim nArea1Id As Integer = GDB_ID.NULL
Dim nArea2Id As Integer = GDB_ID.NULL
Dim nSplitAreaId As Integer = m_nAreaId
While nSplitIndex < nSashQty - 1
nArea1Id = EgtGetFirstNameInGroup(nSplitAreaId, WIN_AREA & 1)
nArea2Id = EgtGetFirstNameInGroup(nSplitAreaId, WIN_AREA & 2)
Dim nSashId As Integer = EgtGetFirstNameInGroup(nArea1Id, WIN_AREA & "*")
Dim nSashSelId As Integer = EgtGetFirstNameInGroup(nSashId, WIN_SELECTION)
SelectionGeomIds(nSplitIndex) = nSashSelId
nSplitAreaId = nArea2Id
nSplitIndex += 1
End While
nArea2Id = EgtGetFirstNameInGroup(EgtGetParent(nArea1Id), WIN_AREA & 2)
Dim nSash2Id As Integer = EgtGetFirstNameInGroup(nArea2Id, WIN_AREA & "*")
Dim nSash2SelId As Integer = EgtGetFirstNameInGroup(nSash2Id, WIN_SELECTION)
SelectionGeomIds(nSplitIndex) = nSash2SelId
End If
End If
' lancio recupero area di selezione delle sotto aree
For Each Area In AreaList
If Not Area.GetSelectionArea() Then Return False
Next
Return True
End Function
Friend Overrides Function Serialize() As JsonArea
Dim JsonSash As JsonSash = New JsonSash(m_bIsSashVertical, m_SashType, m_bBottomRail, m_nBottomRailQty, m_SelHardware.sId)
For Each SashDimension In SashList
JsonSash.SashList.Add(SashDimension.Serialize())
Next
For Each Joint In JointList
JsonSash.JointList.Add(Joint.Serialize())
Next
For Each Area In AreaList
JsonSash.AreaList.Add(Area.Serialize())
Next
Return JsonSash
End Function
End Class
Public Class AGBOption
Inherits VMBase
Enum HDWOPTIONTYPES As Integer
TEXT = 1
LENGHT = 2
COMBO = 3
End Enum
Protected m_Type As HDWOPTIONTYPES
Public ReadOnly Property Type As HDWOPTIONTYPES
Get
Return m_Type
End Get
End Property
Private m_sName As String
Public ReadOnly Property sName As String
Get
Return m_sName
End Get
End Property
Private m_sDescription As String
Public ReadOnly Property sDescription As String
Get
Return m_sDescription
End Get
End Property
Private m_OptVisibility As Visibility
Public ReadOnly Property OptVisibility As Visibility
Get
Return m_OptVisibility
End Get
End Property
Sub New(HdwOptionParam As ParametriOpzioniParametri)
m_sName = HdwOptionParam.NomeParametro
m_sDescription = HdwOptionParam.DescrizioneParametro
m_OptVisibility = Visibility.Visible 'If(HdwOptionParam.Visible.ToLower = "true", Visibility.Visible, Visibility.Collapsed)
End Sub
End Class
Public Class AGBOptionCombo
Inherits AGBOption
Private m_ValueList As New List(Of AGBOptionParameter)
Public ReadOnly Property ValueList As List(Of AGBOptionParameter)
Get
Return m_ValueList
End Get
End Property
Private m_sValue As AGBOptionParameter
Public Property sValue As AGBOptionParameter
Get
Return m_sValue
End Get
Set(value As AGBOptionParameter)
m_sValue = value
End Set
End Property
Sub New(HdwOptionParam As ParametriOpzioniParametri)
MyBase.New(HdwOptionParam)
m_Type = HDWOPTIONTYPES.COMBO
For Each Value In HdwOptionParam.Opzioni
m_ValueList.Add(New AGBOptionParameter(Value.Valore, Value.DescrizioneOpzione))
Next
m_sValue = m_ValueList.FirstOrDefault(Function(x) x.sValue = HdwOptionParam.ValoreCorrente)
End Sub
End Class
Public Class AGBOptionParameter
Inherits VMBase
Private m_sValue As String
Public ReadOnly Property sValue As String
Get
Return m_sValue
End Get
End Property
Private m_sDescription As String
Public ReadOnly Property sDescription As String
Get
Return m_sDescription
End Get
End Property
Sub New(sValue As String, sDescription As String)
m_sValue = sValue
m_sDescription = sDescription
End Sub
End Class
Public Class AGBOptionText
Inherits AGBOption
Private m_sValue As String
Public Property sValue As String
Get
Return m_sValue
End Get
Set(value As String)
m_sValue = value
End Set
End Property
Sub New(HdwOptionParam As ParametriOpzioniParametri)
MyBase.New(HdwOptionParam)
m_Type = HDWOPTIONTYPES.TEXT
m_sValue = HdwOptionParam.ValoreCorrente
End Sub
End Class
Public Class Split
Inherits Area
Public Property nSplitQty As Integer
Get
Return If(m_SplitPositionList.Count > 0, m_SplitPositionList.Count - 1, 0)
End Get
Set(value As Integer)
If value > m_SplitPositionList.Count - 1 Then
' recupero larghezza ultimo
Dim dLastDimension As Double = 100
Dim dNewDimension As Double = 100
If m_SplitPositionList.Count > 0 Then
dLastDimension = m_SplitPositionList(m_SplitPositionList.Count - 1).dDimension
dNewDimension = dLastDimension / (value + 1 - nSplitQty)
m_SplitPositionList(m_SplitPositionList.Count - 1).SetDimension(dNewDimension)
Else
dNewDimension = dLastDimension / (value + 1 - nSplitQty)
End If
' aggiungo area Split di default
For SplitIndex = m_SplitPositionList.Count To value
SplitPositionList.Add(New SplitDimension(dNewDimension, True, Me))
' AreaList.Add(Area.CreateArea)
Next
ElseIf value < m_SplitPositionList.Count - 1 Then
Dim dLastDimension As Double = 0
For SplitIndex = m_SplitPositionList.Count - 1 To value + 1 Step -1
dLastDimension += m_SplitPositionList(SplitIndex).dDimension
SplitPositionList.RemoveAt(SplitIndex)
' AreaList.RemoveAt(SplitIndex)
Next
dLastDimension += m_SplitPositionList(SplitPositionList.Count - 1).dDimension
SplitPositionList(SplitPositionList.Count - 1).SetDimension(dLastDimension)
End If
End Set
End Property
Friend Sub SetSplitQty(Qty As Integer, Optional NotifyProperty As Boolean = False)
If Qty > m_SplitPositionList.Count Then
' recupero larghezza ultimo
Dim dLastDimension As Double = 100
Dim dNewDimension As Double = 100
If m_SplitPositionList.Count > 0 Then
dLastDimension = m_SplitPositionList(m_SplitPositionList.Count - 1).dDimension
dNewDimension = dLastDimension / (Qty + 1 - nSplitQty)
m_SplitPositionList(m_SplitPositionList.Count - 1).dDimension = dNewDimension
Else
dNewDimension = dLastDimension / (Qty + 1 - nSplitQty)
End If
' aggiungo area Split di default
For SplitIndex = m_SplitPositionList.Count To Qty
SplitPositionList.Add(New SplitDimension(dNewDimension, True, Me))
' AreaList.Add(Area.CreateArea)
Next
ElseIf Qty < m_SplitPositionList.Count Then
For SplitIndex = m_SplitPositionList.Count - 1 To Qty Step -1
SplitPositionList.RemoveAt(SplitIndex)
Next
End If
If NotifyProperty Then
NotifyPropertyChanged(NameOf(nSplitQty))
End If
End Sub
Private m_SplitShapeList As New ObservableCollection(Of IdNameStruct)({New IdNameStruct(SplitShapes.VERTICAL, "Vertical"),
New IdNameStruct(SplitShapes.HORIZONTAL, "Horizontal"),
New IdNameStruct(SplitShapes.GRID, "Grid"),
New IdNameStruct(SplitShapes.CUSTOM, "Custom")})
Public ReadOnly Property SplitShapeList As ObservableCollection(Of IdNameStruct)
Get
Return m_SplitShapeList
End Get
End Property
Private m_SelSplitShape As SplitShapes
Public Property SelSplitShapeIndex As Integer
Get
Return IdNameStruct.IndFromId(m_SelSplitShape, m_SplitShapeList)
End Get
Set(value As Integer)
m_SelSplitShape = IdNameStruct.IdFromInd(value, m_SplitShapeList)
End Set
End Property
Friend Sub SetSplitShape(Value As SplitShapes, Optional NotifyProperty As Boolean = False)
m_SelSplitShape = Value
If NotifyProperty Then
NotifyPropertyChanged(NameOf(SelSplitShapeIndex))
End If
End Sub
Friend ReadOnly Property SelSplitShape As SplitShapes
Get
Return m_SelSplitShape
End Get
End Property
Private m_bIsPercentage As Boolean = True
Public ReadOnly Property bIsPercentage As Boolean
Get
Return m_bIsPercentage
End Get
End Property
Private m_SplitPositionList As New ObservableCollection(Of SplitDimension)
Public Property SplitPositionList As ObservableCollection(Of SplitDimension)
Get
Return m_SplitPositionList
End Get
Set(value As ObservableCollection(Of SplitDimension))
m_SplitPositionList = value
End Set
End Property
Private m_Split As Curve
Public Property Split As Curve
Get
Return m_Split
End Get
Set(value As Curve)
m_Split = value
m_delDrawWindow()
End Set
End Property
Sub New(ParentArea As Area)
MyBase.New(ParentArea)
End Sub
Friend Shared Function CreateSplit(Area As Area, SplitShape As SplitShapes) As Split
Dim Split As New Split(Area)
Split.SetAreaType(AreaTypes.SPLIT)
Split.SetSplitShape(SplitShape, True)
Return Split
End Function
Friend Overrides Function DrawArea(Area As Area, nAreaId As Integer) As Boolean
If IsNothing(Area) Then Return False
' verifico se applicata
If Not bApplied Then Return True
' verifico che esista area frame con forma e dimensioni corrette
If IsNothing(m_SplitPositionList) OrElse
IsNothing(m_SelSplitShape) OrElse
m_SplitPositionList.Count = 0 Then
Return False
End If
' creo split
Dim tf = EgtLuaSetGlobIntVar("WDG.AREAID", nAreaId)
Dim tg = EgtLuaSetGlobIntVar("WDG.SPLITORIENTATION", SelSplitShape)
EgtLuaSetGlobIntVar("WDG.SPLITTYPE", LuaSplitTypes.NULL)
Dim th = EgtLuaSetGlobIntVar("WDG.MEASURETYPE", 3)
For PositionIndex = 0 To SplitPositionList.Count - 2
Dim tj = EgtLuaSetGlobNumVar("WDG.POSITION" & PositionIndex + 1, If(m_SplitPositionList(PositionIndex).bIsRelative, SplitPositionList(PositionIndex).dDimension / 100, SplitPositionList(PositionIndex).dDimension))
Next
Dim tkt = EgtLuaSetGlobNumVar("WDG.PROPORTION", SplitPositionList.Sum(Function(x) x.dDimension / 100))
Dim tlt = EgtLuaCallFunction("WinCreate_AddSplits")
Dim AreaIndex As Integer = 1
Dim NewAreaId As Integer = GDB_ID.NULL
While EgtLuaGetGlobIntVar("WDG.AREAID" & AreaIndex, NewAreaId)
If NewAreaId <> GDB_ID.NULL Then
Area.AreaList(AreaIndex - 1).nAreaId = NewAreaId
AreaIndex += 1
Else Exit While
End If
End While
Dim tltf = EgtLuaGetGlobIntVar("WDG.AREAID", Area.nAreaId)
' lancio disegno delle sotto aree
For Each Area In AreaList
If Not Area.DrawArea(Area, nAreaId) Then Return False
Next
Return True
End Function
Friend Overrides Function GetSelectionArea() As Boolean
Dim nAreaType As Integer = -1
EgtGetInfo(m_nAreaId, WIN_AREATYPE, nAreaType)
If nAreaType = AreaTypes.FRAME Or nAreaType = AreaTypes.SASH Or nAreaType = AreaTypes.FILL Or nAreaType = AreaTypes.SPLIT Then
Dim nSelLayerId As Integer = EgtGetFirstNameInGroup(m_nAreaId, LUA_WIN_SPLITSELECTION)
If nSelLayerId <> GDB_ID.NULL Then
SetSelectionGeomId(nSelLayerId)
End If
End If
If nSplitQty > 1 Then
Dim nSplitIndex = 1
Dim nArea2Id As Integer = m_nAreaId
While nSplitIndex < nSplitQty
nArea2Id = EgtGetFirstNameInGroup(nArea2Id, WIN_AREA & 2)
Dim nArea2SplitSelId As Integer = EgtGetFirstNameInGroup(nArea2Id, LUA_WIN_SPLITSELECTION)
SelectionGeomIds(nSplitIndex) = nArea2SplitSelId
nSplitIndex += 1
End While
End If
'Dim nArea1Id As Integer = EgtGetFirstNameInGroup(nAreaId, WIN_AREA & 1)
'If nArea1Id <> GDB_ID.NULL Then
' GetSelectionSplitArea(nArea1Id, SelectionGeomIds)
'End If
'Dim nArea2Id As Integer = EgtGetFirstNameInGroup(nAreaId, WIN_AREA & 2)
'If nArea2Id <> GDB_ID.NULL Then
' GetSelectionSplitArea(nArea2Id, SelectionGeomIds)
'End If
' lancio recupero area di selezione delle sotto aree
For Each Area In AreaList
If Not Area.GetSelectionArea() Then Return False
Next
Return True
End Function
Friend Sub GetSelectionSplitArea(nAreaId As Integer, SelectionGeomIds As List(Of Integer))
Dim nAreaType As Integer = -1
EgtGetInfo(nAreaId, WIN_AREATYPE, nAreaType)
If nAreaType = AreaTypes.SPLIT Or nAreaType = AreaTypes.SPLITTED Then
Dim nSelLayerId As Integer = EgtGetFirstNameInGroup(m_nAreaId, WIN_SELECTION)
If nSelLayerId <> GDB_ID.NULL Then
SelectionGeomIds.Add(nSelLayerId)
End If
Dim nArea1Id As Integer = EgtGetFirstNameInGroup(nAreaId, WIN_AREA & 1)
If nArea1Id <> GDB_ID.NULL Then
GetSelectionSplitArea(nArea1Id, SelectionGeomIds)
End If
Dim nArea2Id As Integer = EgtGetFirstNameInGroup(nAreaId, WIN_AREA & 2)
If nArea2Id <> GDB_ID.NULL Then
GetSelectionSplitArea(nArea2Id, SelectionGeomIds)
End If
End If
End Sub
Friend Overrides Function Serialize() As JsonArea
Dim JsonSplit As JsonSplit = New JsonSplit(m_SelSplitShape)
For Each SplitPosition In m_SplitPositionList
JsonSplit.SplitPositionList.Add(SplitPosition.Serialize())
Next
For Each Area In AreaList
JsonSplit.AreaList.Add(Area.Serialize())
Next
Return JsonSplit
End Function
End Class
Public Class Splitted
Inherits Area
Sub New(ParentArea As Area)
MyBase.New(ParentArea)
End Sub
Friend Shared Function CreateSplitted(Area As Area) As Splitted
Dim Splitted As Splitted = New Splitted(Area)
Splitted.SetAreaType(AreaTypes.SPLITTED)
Return Splitted
End Function
Friend Overrides Function DrawArea(Area As Area, nAreaId As Integer) As Boolean
' lancio disegno delle sotto aree
For Each Area In AreaList
If Not Area.DrawArea(Area, m_nAreaId) Then Return False
Next
Return True
End Function
Friend Overrides Function GetSelectionArea() As Boolean
Dim nSelLayerId As Integer = EgtGetFirstNameInGroup(m_nAreaId, WIN_SELECTION)
If nSelLayerId <> GDB_ID.NULL Then
SetSelectionGeomId(nSelLayerId)
End If
' lancio recupero area di selezione delle sotto aree
For Each Area In AreaList
If Not Area.GetSelectionArea() Then Return False
Next
Return True
End Function
Friend Overrides Function Serialize() As JsonArea
Dim JsonSplitted As JsonSplitted = New JsonSplitted()
For Each Area In AreaList
JsonSplitted.AreaList.Add(Area.Serialize())
Next
Return JsonSplitted
End Function
End Class
Public Class Fill
Inherits Area
Public ReadOnly Property FillType As FillTypes
Get
If m_Fill_IsChecked(0) Then
Return FillTypes.GLASS
Else
Return FillTypes.WOOD
End If
End Get
End Property
Friend Sub SetFillType(FillType As FillTypes)
Select Case FillType
Case FillTypes.GLASS
bGlass_IsChecked = True
Case FillTypes.WOOD
bWood_IsChecked = True
End Select
End Sub
Private m_Fill_IsChecked As Boolean() = {False, False}
Public Property bGlass_IsChecked As Boolean
Get
Return m_Fill_IsChecked(0)
End Get
Set(value As Boolean)
m_Fill_IsChecked(0) = value
End Set
End Property
Public Property bWood_IsChecked As Boolean
Get
Return m_Fill_IsChecked(1)
End Get
Set(value As Boolean)
m_Fill_IsChecked(1) = value
End Set
End Property
Sub New(ParentArea As Area)
MyBase.New(ParentArea)
End Sub
Friend Shared Function CreateFill(Area As Area, FillType As FillTypes) As Fill
Dim Fill As Fill = New Fill(Area)
Fill.SetAreaType(AreaTypes.FILL)
Fill.SetFillType(FillType)
Return Fill
End Function
Friend Overrides Function DrawArea(Area As Area, nAreaId As Integer) As Boolean
' verifico se applicata
If Not bApplied Then Return True
' creo anta
Dim tf = EgtLuaSetGlobIntVar("WDG.AREAID", nAreaId)
Dim tft = EgtLuaSetGlobIntVar("WDG.FILLTYPE", FillType)
Dim tlt = EgtLuaCallFunction("WinCreate_AddFill")
Dim tltf = EgtLuaGetGlobIntVar("WDG.AREAID", m_nAreaId)
nAreaId = m_nAreaId
If m_nAreaId = GDB_ID.NULL Then Return False
' lancio disegno delle sotto aree
For Each Area In AreaList
If Not Area.DrawArea(Area, nAreaId) Then Return False
Next
Return True
End Function
Friend Overrides Function GetSelectionArea() As Boolean
Dim nSelLayerId As Integer = EgtGetFirstNameInGroup(m_nAreaId, WIN_SELECTION)
If nSelLayerId <> GDB_ID.NULL Then
SetSelectionGeomId(nSelLayerId)
End If
' lancio recupero area di selezione delle sotto aree
For Each Area In AreaList
If Not Area.GetSelectionArea() Then Return False
Next
Return True
End Function
Friend Overrides Function Serialize() As JsonArea
Dim JsonFill As JsonFill = New JsonFill(FillType)
For Each Area In AreaList
JsonFill.AreaList.Add(Area.Serialize())
Next
Return JsonFill
End Function
End Class
Public Class Joint
Inherits VMBase
' Actions
Friend Shared m_delDrawWindow As Action
Private m_nIndex As Integer
Public ReadOnly Property nIndex As Integer
Get
Return m_nIndex
End Get
End Property
Private m_JointTypeList As New List(Of IdNameStruct)({New IdNameStruct(Joints.ANGLED, "Angled"), New IdNameStruct(Joints.FULL_H, "Full H"), New IdNameStruct(Joints.FULL_V, "Full V")})
Public ReadOnly Property JointTypeList As List(Of IdNameStruct)
Get
Return m_JointTypeList
End Get
End Property
Private m_SelJointType As Joints
Public Property SelJointTypeIndex As Integer
Get
Return IdNameStruct.IndFromId(m_SelJointType, m_JointTypeList)
End Get
Set(value As Integer)
m_SelJointType = IdNameStruct.IdFromInd(value, m_JointTypeList)
'm_delDrawWindow()
End Set
End Property
Public Property SelJointType As Joints
Get
Return m_SelJointType
End Get
Set(value As Joints)
m_SelJointType = value
End Set
End Property
Friend Sub SetSelJointType(value As Joints)
m_SelJointType = value
NotifyPropertyChanged(NameOf(SelJointTypeIndex))
End Sub
Sub New(nIndex As Integer, SelJointType As Joints)
m_nIndex = nIndex
m_SelJointType = SelJointType
End Sub
Friend Function Serialize() As JsonJoint
Dim JsonJoint As JsonJoint = New JsonJoint(m_nIndex, m_SelJointType)
Return JsonJoint
End Function
End Class
Public Class Curve
Inherits VMBase
Private m_CurveType As GDB_TY
Public Property CurveType As GDB_TY
Get
Return m_CurveType
End Get
Set(value As GDB_TY)
m_CurveType = value
End Set
End Property
Private m_ptStart As Point3d
Public Property ptStart As Point3d
Get
Return m_ptStart
End Get
Set(value As Point3d)
m_ptStart = value
End Set
End Property
Private m_ptEnd As Point3d
Public Property ptEnd As Point3d
Get
Return m_ptEnd
End Get
Set(value As Point3d)
m_ptEnd = value
End Set
End Property
End Class
Public Class Hardware
Private m_sId As String
Public ReadOnly Property sId As String
Get
Return m_sId
End Get
End Property
Private m_sName As String
Public ReadOnly Property sName As String
Get
Return m_sName
End Get
End Property
Private m_sOpeningType As String
Public ReadOnly Property sOpeningType As String
Get
Return m_sOpeningType
End Get
End Property
Private m_sShape As String
Public ReadOnly Property sShape As String
Get
Return m_sShape
End Get
End Property
Private m_nSashQty As Integer
Public ReadOnly Property nSashQty As Integer
Get
Return m_nSashQty
End Get
End Property
Private m_nSashPosition As Integer
Public ReadOnly Property nSashPosition As Integer
Get
Return m_nSashPosition
End Get
End Property
Sub New(sId As String, sName As String, sOpeningType As String, sShape As String, nSashQty As Integer, nSashPosition As Integer)
m_sId = sId
m_sName = sName
m_sOpeningType = sOpeningType
m_sShape = sShape
m_nSashQty = nSashQty
m_nSashPosition = nSashPosition
End Sub
End Class
Public Class AreaToSplitPageConverter
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert
If TypeOf value Is Area Then
Return 1
Else
Return 0
End If
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack
Throw New NotImplementedException()
End Function
End Class
Public Class OptionTypeToVisibilityConverter
Implements IValueConverter
Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert
Return If(parameter = value, Visibility.Visible, Visibility.Collapsed)
End Function
Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack
Throw New NotImplementedException()
End Function
End Class