Files

3886 lines
179 KiB
VB.net

Imports System.Collections.ObjectModel
Imports System.ComponentModel
Imports System.IO
Imports EgtUILib
Imports System.Text.RegularExpressions
Public Class Assembly
Implements INotifyPropertyChanged
' questa variabile se settata a vero da la possibilità di costruire un riferimento sui Jamb
Friend Shared BuiltReffCompo As Boolean = False
Public bIsNewAssembly As Boolean = False
Public Shared FirstReadingWeight As Boolean = False
Public Shared Refreshing As Boolean = True
Public bOldVersion As Boolean = False
' è usata per abilitare la TextBox associata all'OverlapLock
Private m_OneDoorProperty As Boolean = True
Public Property OneDoorProperty As Boolean
Get
Return m_OneDoorProperty
End Get
Set(value As Boolean)
m_OneDoorProperty = value
NotifyPropertyChanged("OneDoorProperty")
End Set
End Property
' tutte queste proprietà interagiscono direttamente con le dimensioni del TELAIO
' per questo motivo la funzione set può ospitare la chiamata ad una funzione che modifica le dimensioni della porta
Private m_AssemblyUnit As String = ConstGen.VAL_INCHES
Public ReadOnly Property AssemblyUnit As String
Get
Return m_AssemblyUnit
End Get
End Property
#Region "GENERAL"
#Region "Light Up/Bottom"
Private m_LightUp As String
Public Property LightUp As String
Get
Return m_LightUp
End Get
Set(value As String)
m_LightUp = value
NotifyPropertyChanged("LightUp")
' viene ricalcolata la dimensione dell'anta
HeightDoor()
' viene ricalcolata l'altezza della porta e dei jamb laterali a partire dalla dimensione della porta
HeightJamb()
' esegue il riposizionamento delle componeti sul telaio
UpDateAllCompo()
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
End Set
End Property
' questo metodo è utilizzato per caricare e aggiornare il valore m_lightUp senza eseguire le operazioni del Set
Public Sub SetLightUp(sLightUp As String)
m_LightUp = sLightUp
NotifyPropertyChanged("LightUp")
End Sub
Private m_LightBottom As String
Public Property LightBottom As String
Get
Return m_LightBottom
End Get
Set(value As String)
m_LightBottom = value
' viene ricalcolata la dimensione dell'anta
HeightDoor()
' viene ricalcolata l'altezza dei jamb laterali a partire dalla dimensione della porta
HeightJamb()
' esegue il riposizionamento delle componeti sul telaio
UpDateAllCompo()
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
End Set
End Property
Public Sub SetLightBottom(sLightBottom As String)
m_LightBottom = sLightBottom
NotifyPropertyChanged("LightBottom")
End Sub
#End Region ' Light Up/Bottom
#Region "Light Hinge/Lock"
Private m_LightHinge As String
Public Property LightHinge As String
Get
Return m_LightHinge
End Get
Set(value As String)
m_LightHinge = value
' viene ricalcolata la larghezza dei jamb orizzonati (le dimensioni della porta devono esistere)
TopBottomWidth()
' esegue il riposizionamento delle componeti sul telaio
UpDateAllCompo()
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
End Set
End Property
Public Sub SetLightHinge(sSetLightHinge As String)
m_LightHinge = sSetLightHinge
NotifyPropertyChanged("LightHinge")
End Sub
Private m_LightLock As String
Public Property LightLock As String
Get
Return m_LightLock
End Get
Set(value As String)
m_LightLock = value
' viene ricalcolata la larghezza dei jamb orizzonati (le dimensioni della porta devono esistere)
TopBottomWidth()
' esegue il riposizionamento delle componeti sul telaio
UpDateAllCompo()
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
End Set
End Property
Public Sub SetLightLock(sLightLock As String)
m_LightLock = sLightLock
NotifyPropertyChanged("LightLock")
End Sub
#End Region ' Light Hinge/Lock
#Region "ThicknessHead"
Private m_ThicknessHead As String
Public Property ThicknessHead As String
Get
Return m_ThicknessHead
End Get
Set(value As String)
m_ThicknessHead = value
NotifyPropertyChanged("ThicknessHead")
' viene ricalcolata l'altezza del JambTop
HeightJambTop()
' viene ricalcolata l'altezza della porta e dei jamb laterali a partire dalla dimensione della porta
' per il fatto che anche i jamb lateriali devono allungarsi
HeightJamb()
' viene ricalcolata la dimsione dei rabbet sui jamb laterali (per ospitare la nuova dimansione del JambTop)
TopRabbetJamb()
' esegue il riposizionamento delle componeti sul telaio
UpDateAllCompo()
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
End Set
End Property
Public Sub SetThicknessHead(sThicknessHead As String)
m_ThicknessHead = sThicknessHead
NotifyPropertyChanged("ThicknessHead")
End Sub
#End Region ' ThicknessHead
#Region "Thickness/Depth Bottom"
Private m_ThicknessBottom As String
Public Property ThicknessBottom As String
Get
Return m_ThicknessBottom
End Get
Set(value As String)
m_ThicknessBottom = value
NotifyPropertyChanged("ThicknessBottom")
' viene ricalcolata l'altezza del JambTop
HeightJambBottom()
' viene ricalcolata l'altezza della porta e dei jamb laterali a partire dalla dimensione della porta
' per il fatto che anche i jamb lateriali devono allungarsi
HeightJamb()
' viene ricalcolata la dimsione dei rabbet sui jamb laterali (per ospitare la nuova dimansione del JambTop)
BottomRabbetJamb()
' esegue il riposizionamento delle componeti sul telaio
UpDateAllCompo()
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
End Set
End Property
Public Sub SetThicknessBottom(sThicknessBottom As String)
m_ThicknessBottom = sThicknessBottom
NotifyPropertyChanged("ThicknessBottom")
End Sub
Private m_DepthBottom As String
Public Property DepthBottom As String
Get
Return m_DepthBottom
End Get
Set(value As String)
m_DepthBottom = value
NotifyPropertyChanged("DepthBottom")
' viene ricalcolata la profondità del JambBottom
SetThicKnessJamb()
UpDateAllCompo()
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
End Set
End Property
Public Sub SetDepthBottom(sDepthBottom As String)
m_DepthBottom = sDepthBottom
NotifyPropertyChanged("DepthBottom")
End Sub
#End Region ' Thickness Depth Bottom
#Region "Overlap Hinge/Lock/Top/DeltaT"
Private m_OverlapHinge As String
Public Property OverlapHinge As String
Get
Return m_OverlapHinge
End Get
Set(value As String)
m_OverlapHinge = value
' modifico le dimensioni dei Jambs
'DoorVisibilityNew()
' deve essere ricalcolata la dimensione del Top e del Bottom del telaio
TopBottomWidth()
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
'SetWidthJamb()
' viene ricalcolato il valore dei rabbet (sui Jamb laterali)
TopRabbetJamb()
HingeRabbetJamb()
BottomRabbetJamb()
UpDateAllCompo()
End Set
End Property
Public Sub SetOverlapHinge(sOverlapHinge As String)
m_OverlapHinge = sOverlapHinge
NotifyPropertyChanged("OverlapHinge")
End Sub
Private m_OverlapLock As String
Public Property OverlapLock As String
Get
Return m_OverlapLock
End Get
Set(value As String)
m_OverlapLock = value
' modifico le dimensioni dei Jambs
'DoorVisibilityNew()
TopBottomWidth()
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
'SetWidthJamb()
TopRabbetJamb()
HingeRabbetJamb()
BottomRabbetJamb()
UpDateAllCompo()
End Set
End Property
Public Sub SetOverlapLock(sOverlapLock As String)
m_OverlapLock = sOverlapLock
NotifyPropertyChanged("OverlapLock")
End Sub
Private m_OverlapTop As String
Public Property OverlapTop As String
Get
Return m_OverlapTop
End Get
Set(value As String)
m_OverlapTop = value
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
HeightJamb()
SetWidthJamb()
HingeRabbetJamb()
'BottomRabbetJamb()
UpDateAllCompo()
End Set
End Property
Public Sub SetOverlapTop(sOverlapTop As String)
m_OverlapTop = sOverlapTop
NotifyPropertyChanged("OverlapTop")
End Sub
Private m_OverlapBottom As String
Public Property OverlapBottom As String
Get
Return m_OverlapBottom
End Get
Set(value As String)
m_OverlapBottom = value
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
HeightJamb()
SetWidthJamb()
UpDateAllCompo()
End Set
End Property
Public Sub SetOverlapBottom(sOverlapBottom As String)
m_OverlapBottom = sOverlapBottom
NotifyPropertyChanged("OverlapBottom")
End Sub
Private m_DeltaThickness As String
Public Property DeltaThickness As String
Get
Return m_DeltaThickness
End Get
Set(value As String)
m_DeltaThickness = value
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
HingeRabbetJamb()
BottomRabbetJamb()
UpDateAllCompo()
End Set
End Property
Public Sub SetDeltaThickness(sDeltaThickness As String)
m_DeltaThickness = sDeltaThickness
NotifyPropertyChanged("DeltaThickness")
End Sub
#End Region ' Overlap Hinge/Lock/Top/DeltaT
#Region "Jamb Thckness/Width"
Private m_Thickness As String
Public Property Thickness As String
Get
Return m_Thickness
End Get
Set(value As String)
m_Thickness = value
SetThicKnessJamb()
UpDateAllCompo()
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
End Set
End Property
Public Sub SetThickness(sThickness As String)
m_Thickness = sThickness
NotifyPropertyChanged("Thickness")
End Sub
Private m_Width As String
Public Property Width As String
Get
Return m_Width
End Get
Set(value As String)
m_Width = value
HeightJamb()
SetWidthJamb()
UpDateAllCompo()
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
End Set
End Property
Public Sub SetWidth(sWidth As String)
m_Width = sWidth
NotifyPropertyChanged("Width")
End Sub
#End Region ' Jamb Thickness/Width
#Region "EdgeType/Machining"
Friend Shared m_FrameEdgeTypeList As New ObservableCollection(Of EdgeType)
Public ReadOnly Property EdgeTypeList As ObservableCollection(Of EdgeType)
Get
Return m_FrameEdgeTypeList
End Get
End Property
Public ReadOnly Property DispositionList As ObservableCollection(Of EdgeType)
Get
Return Part.m_DispositionList
End Get
End Property
' elemento selezionato dalla lista delle disposizinioni
Private m_DispositionItem As EdgeType
Public Property DispositionItem As EdgeType
Get
Return m_DispositionItem
End Get
Set(value As EdgeType)
Dim CurrAssembly As Assembly = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.SelAssembly
For Each ItemPartDoor In CurrAssembly.ListPartDoor
If ItemPartDoor.Type.Contains("F") Then ItemPartDoor.Door.DispositionItem = value
Next
m_DispositionItem = value
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
NotifyPropertyChanged("DispositionItem")
End Set
End Property
Public Sub SetDispositionItem(ObjDisposition As EdgeType)
If IsNothing(m_DispositionItem) Then
m_DispositionItem = ObjDisposition
End If
NotifyPropertyChanged("DispositionItem")
End Sub
Private m_LockEdgeType As New EdgeType("", Visibility.Visible)
Public Property LockEdgeType As EdgeType
Get
If m_LockEdgeType.IsActive = Visibility.Collapsed Then
m_LockEdgeType = EdgeTypeList(0)
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
End If
Return m_LockEdgeType
End Get
Set(value As EdgeType)
Dim CurrAssembly As Assembly = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.SelAssembly
For Each ItemPartDoor In CurrAssembly.ListPartDoor
If ItemPartDoor.Type.Contains("F") Then ItemPartDoor.Door.LockEdgeType = value
Next
m_LockEdgeType = value
NotifyPropertyChanged("LockEdgeType")
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
'm_LeftJamb.SetLockEdgeType(value)
'm_RightJamb.SetLockEdgeType(value)
'm_TopJamb.SetLockEdgeType(value)
'm_BottomJamb.SetLockEdgeType(value)
End Set
End Property
Public Sub SetLockEdgeType(sLockEdgeType As EdgeType)
m_LockEdgeType = sLockEdgeType
NotifyPropertyChanged("LockEdgeType")
End Sub
Private m_HingeEdgeType As New EdgeType("", Visibility.Visible)
Public Property HingeEdgeType As EdgeType
Get
If m_HingeEdgeType.IsActive = Visibility.Collapsed Then
m_HingeEdgeType = EdgeTypeList(0)
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
End If
Return m_HingeEdgeType
End Get
Set(value As EdgeType)
Dim CurrAssembly As Assembly = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.SelAssembly
For Each ItemPartDoor In CurrAssembly.ListPartDoor
If ItemPartDoor.Type.Contains("F") Then ItemPartDoor.Door.HingeEdgeType = value
Next
m_HingeEdgeType = value
NotifyPropertyChanged("HingeEdgeType")
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
'm_LeftJamb.SetHingeEdgeType(value)
'm_RightJamb.SetHingeEdgeType(value)
'm_TopJamb.SetHingeEdgeType(value)
'm_BottomJamb.SetHingeEdgeType(value)
End Set
End Property
Public Sub SetHingeEdgeType(sHingeEdgeType As EdgeType)
m_HingeEdgeType = sHingeEdgeType
NotifyPropertyChanged("HingeEdgeType")
End Sub
Private m_TopType As New EdgeType("", Visibility.Visible)
Public Property TopType As EdgeType
Get
If m_TopType.IsActive = Visibility.Collapsed Then
m_TopType = EdgeTypeList(0)
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
End If
Return m_TopType
End Get
Set(value As EdgeType)
Dim CurrAssembly As Assembly = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.SelAssembly
For Each ItemPartDoor In CurrAssembly.ListPartDoor
If ItemPartDoor.Type.Contains("F") Then ItemPartDoor.Door.TopType = value
Next
m_TopType = value
NotifyPropertyChanged("TopType")
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
'm_LeftJamb.SetTopType(value)
'm_RightJamb.SetTopType(value)
'm_TopJamb.SetTopType(value)
'm_BottomJamb.SetTopType(value)
End Set
End Property
Public Sub SetTopType(sTopType As EdgeType)
m_TopType = sTopType
NotifyPropertyChanged("TopType")
End Sub
Private m_BottomType As New EdgeType("", Visibility.Visible)
Public Property BottomType As EdgeType
Get
If m_BottomType.IsActive = Visibility.Collapsed Then
m_BottomType = EdgeTypeList(0)
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
End If
Return m_BottomType
End Get
Set(value As EdgeType)
Dim CurrAssembly As Assembly = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.SelAssembly
For Each ItemPartDoor In CurrAssembly.ListPartDoor
If ItemPartDoor.Type.Contains("F") Then ItemPartDoor.Door.BottomType = value
Next
m_BottomType = value
NotifyPropertyChanged("BottomType")
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
'm_LeftJamb.SetBottomType(value)
'm_RightJamb.SetBottomType(value)
'm_TopJamb.SetBottomType(value)
'm_BottomJamb.SetBottomType(value)
End Set
End Property
Public Sub SetBottomType(sBottomType As EdgeType)
m_BottomType = sBottomType
NotifyPropertyChanged("BottomType")
End Sub
Private m_TopMachining As Boolean
Public Property TopMachining As Boolean
Get
Return m_TopMachining
End Get
Set(value As Boolean)
Dim CurrAssembly As Assembly = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.SelAssembly
For Each ItemPartDoor In CurrAssembly.ListPartDoor
If ItemPartDoor.Type.Contains("F") Then ItemPartDoor.Door.TopMachining = value
Next
m_TopMachining = value
NotifyPropertyChanged("TopMachining")
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
'm_LeftJamb.TopMachining = m_TopMachining
'm_RightJamb.TopMachining = m_TopMachining
'm_TopJamb.TopMachining = m_TopMachining
'm_BottomJamb.TopMachining = m_TopMachining
End Set
End Property
Public Sub SetTopMachining(sTopMachining As Boolean)
m_TopMachining = sTopMachining
NotifyPropertyChanged("TopMachining")
End Sub
Private m_LockEdgeMachining As Boolean
Public Property LockEdgeMachining As Boolean
Get
Return m_LockEdgeMachining
End Get
Set(value As Boolean)
Dim CurrAssembly As Assembly = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.SelAssembly
For Each ItemPartDoor In CurrAssembly.ListPartDoor
If ItemPartDoor.Type.Contains("F") Then ItemPartDoor.Door.LockEdgeMachining = value
Next
m_LockEdgeMachining = value
NotifyPropertyChanged("LockEdgeMachining")
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
'Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
'm_LeftJamb.LockEdgeMachining = m_LockEdgeMachining
'm_RightJamb.LockEdgeMachining = m_LockEdgeMachining
'm_TopJamb.LockEdgeMachining = m_LockEdgeMachining
'm_BottomJamb.LockEdgeMachining = m_LockEdgeMachining
End Set
End Property
Public Sub SetLockEdgeMachining(sLockEdgeMachining As Boolean)
m_LockEdgeMachining = sLockEdgeMachining
NotifyPropertyChanged("LockEdgeMachining")
End Sub
Private m_HingeEdgeMachining As Boolean
Public Property HingeEdgeMachining As Boolean
Get
Return m_HingeEdgeMachining
End Get
Set(value As Boolean)
Dim CurrAssembly As Assembly = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.SelAssembly
For Each ItemPartDoor In CurrAssembly.ListPartDoor
If ItemPartDoor.Type.Contains("F") Then ItemPartDoor.Door.HingeEdgeMachining = value
Next
m_HingeEdgeMachining = value
NotifyPropertyChanged("HingeEdgeMachining")
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
'm_LeftJamb.HingeEdgeMachining = value
'm_RightJamb.HingeEdgeMachining = value
'm_TopJamb.HingeEdgeMachining = value
'm_BottomJamb.HingeEdgeMachining = value
End Set
End Property
Public Sub SetHingeEdgeMachining(sHingeEdgeMachining As Boolean)
m_HingeEdgeMachining = sHingeEdgeMachining
NotifyPropertyChanged("HingeEdgeMachining")
End Sub
Private m_BottomMachining As Boolean
Public Property BottomMachining As Boolean
Get
Return m_BottomMachining
End Get
Set(value As Boolean)
Dim CurrAssembly As Assembly = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.SelAssembly
For Each ItemPartDoor In CurrAssembly.ListPartDoor
If ItemPartDoor.Type.Contains("F") Then ItemPartDoor.Door.BottomMachining = value
Next
m_BottomMachining = value
NotifyPropertyChanged("BottomMachining")
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
'm_LeftJamb.BottomMachining = value
'm_RightJamb.BottomMachining = value
'm_TopJamb.BottomMachining = value
'm_BottomJamb.BottomMachining = value
End Set
End Property
Public Sub SetBottomMachining(sBottomMachining As Boolean)
m_BottomMachining = sBottomMachining
NotifyPropertyChanged("BottomMachining")
End Sub
#End Region ' EdgeType
#Region "EXTERIOR"
Private m_Exterior As Boolean
Public Property Exterior As Boolean
Get
Return m_Exterior
End Get
Set(value As Boolean)
m_Exterior = value
NotifyPropertyChanged("Exterior")
SetDimension("JambIsCheked")
'JambBIsChecked = value
SetJambBTIsChecked(value)
NotifyPropertyChanged("JambBIsChecked")
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
SetThicKnessJamb()
'HingeRabbetJamb()
'BottomRabbetJamb()
End Set
End Property
Public Sub SetExterior(bExterior As Boolean)
m_Exterior = bExterior
NotifyPropertyChanged("Exterior")
End Sub
Private m_DeltaBottom As String
Public Property DeltaBottom As String
Get
Return m_DeltaBottom
End Get
Set(value As String)
m_DeltaBottom = value
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
BottomRabbetJamb()
UpDateAllCompo()
End Set
End Property
Public Sub SetDeltaBottom(sDeltaBottom As String)
m_DeltaBottom = sDeltaBottom
NotifyPropertyChanged("DeltaBottom")
End Sub
#End Region ' Exterior
#Region "ASSEMBLY DIMENSION"
Private m_Dimension As Boolean = OptionModule.m_TotalDimension
Public Property Dimension As Boolean
Get
Return m_Dimension
End Get
Set(value As Boolean)
m_Dimension = value
NotifyPropertyChanged("Dimension")
End Set
End Property
Public Sub SetDimension(bDimension As Boolean)
m_Dimension = bDimension
NotifyPropertyChanged("Dimension")
End Sub
Private m_AssemblyHeight As String
Public Property AssemblyHeight As String
Get
' calcolo la dimensione dell'assemblato
If Not IsNothing(m_Door1) AndAlso Not m_Dimension Then
Dim nLU As Double = 0
Dim nLB As Double = 0
Dim nTH As Double = 0
Dim nBH As Double = 0
Dim nOLB As Double = 0
Dim nDO_1H As Double = 0
Dim nOLT As Double = 0
StringToDouble(LightUp, nLU)
StringToDouble(LightBottom, nLB)
StringToDouble(ThicknessHead, nTH)
StringToDouble(ThicknessBottom, nBH)
StringToDouble(OverlapBottom, nOLB)
StringToDouble(m_Door1.Height, nDO_1H)
StringToDouble(OverlapTop, nOLT)
m_AssemblyHeight = DoubleToString(nLU + nLB + nTH + nDO_1H - nOLT, 4)
If Exterior Then
m_AssemblyHeight = DoubleToString(nLU + nLB + nTH + nBH + nDO_1H - nOLT - nOLB, 4)
End If
End If
Return m_AssemblyHeight
End Get
Set(value As String)
m_AssemblyHeight = value
NotifyPropertyChanged("AssemblyHeight")
SetDimension("Height")
End Set
End Property
Public Sub SetAssemblyHeight(sAssemblyHeight As String)
m_AssemblyHeight = sAssemblyHeight
NotifyPropertyChanged("AssemblyHeight")
End Sub
Private m_AssemblyWidth As String
Public Property AssemblyWidth As String
Get
If Not Dimension AndAlso Not IsNothing(Map.refAssemblyManagerVM.ReserchPartDoor("FT_")) AndAlso
Not IsNothing(Map.refAssemblyManagerVM.ReserchPartDoor("FT_").Door.Width) Then
Dim nFTW As Double = 0
Dim nJW As Double = 0
Dim nOLL As Double
Dim nOLH As Double
StringToDouble(Map.refAssemblyManagerVM.ReserchPartDoor("FT_").Door.Width, nFTW)
StringToDouble(Width, nJW)
StringToDouble(OverlapLock, nOLL)
StringToDouble(OverlapHinge, nOLH)
If DoorNumber = "1" Then
m_AssemblyWidth = DoubleToString(nFTW + 2 * nJW - nOLL - nOLH, 4)
Else
m_AssemblyWidth = DoubleToString(nFTW + 2 * nJW - 2 * nOLH, 4)
End If
End If
Return m_AssemblyWidth
End Get
Set(value As String)
m_AssemblyWidth = value
SetWidthJamb()
SetDimension("Width")
NotifyPropertyChanged("AssemblyWidth")
End Set
End Property
Public Sub SetAssemblyWidth(sAssemblyWidth As String)
m_AssemblyWidth = sAssemblyWidth
NotifyPropertyChanged("AssemblyWidth")
End Sub
' questa proprietà è utilizzata per stampare l'altezza della porta nella sezione dei jamb
Public ReadOnly Property OrigHeightDoor As String
Get
If Not IsNothing(m_Door1) Then
Return m_Door1.Height
ElseIf Not IsNothing(m_Door2) Then
Return m_Door2.Height
End If
Return "0"
End Get
End Property
#End Region ' Assembly Dimension
#Region "OverMaterial"
Private m_LockEdgeOverMaterial As String = String.Empty
Public Property LockEdgeOverMaterial As String
Get
Return m_LockEdgeOverMaterial
End Get
Set(value As String)
If String.IsNullOrEmpty(value) Then value = "0"
Dim dVal As Double
If StringToDouble(value, dVal) Then
m_LockEdgeOverMaterial = value
Else
MessageBox.Show(EgtMsg(50148), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Asterisk)
End If
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
Dim CurrAssembly As Assembly = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.SelAssembly
For Each ItemPartDoor In CurrAssembly.ListPartDoor
If ItemPartDoor.Type.Contains("F") Then ItemPartDoor.Door.LockEdgeOverMaterial = value
Next
'm_LeftJamb.LockEdgeOverMaterial = value
'm_RightJamb.LockEdgeOverMaterial = value
'm_TopJamb.LockEdgeOverMaterial = value
'm_BottomJamb.LockEdgeOverMaterial = value
End Set
End Property
Public Sub SetLockEdgeOverMaterial(sLockEdgeOverMaterial As String)
m_LockEdgeOverMaterial = sLockEdgeOverMaterial
NotifyPropertyChanged("LockEdgeOverMaterial")
End Sub
Private m_HingeEdgeOverMaterial As String = String.Empty
Public Property HingeEdgeOverMaterial As String
Get
Return m_HingeEdgeOverMaterial
End Get
Set(value As String)
If String.IsNullOrEmpty(value) Then value = "0"
Dim dVal As Double
If StringToDouble(value, dVal) Then
m_HingeEdgeOverMaterial = value
Else
MessageBox.Show(EgtMsg(50148), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Asterisk)
End If
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
Dim CurrAssembly As Assembly = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.SelAssembly
For Each ItemPartDoor In CurrAssembly.ListPartDoor
If ItemPartDoor.Type.Contains("F") Then ItemPartDoor.Door.HingeEdgeOverMaterial = value
Next
'm_LeftJamb.HingeEdgeOverMaterial = value
'm_RightJamb.HingeEdgeOverMaterial = value
'm_TopJamb.HingeEdgeOverMaterial = value
'm_BottomJamb.HingeEdgeOverMaterial = value
End Set
End Property
Public Sub SetHingeEdgeOverMaterial(sHingeEdgeOverMaterial As String)
m_HingeEdgeOverMaterial = sHingeEdgeOverMaterial
NotifyPropertyChanged("HingeEdgeOverMaterial")
End Sub
Private m_TopOverMaterial As String = String.Empty
Public Property TopOverMaterial As String
Get
Return m_TopOverMaterial
End Get
Set(value As String)
If String.IsNullOrEmpty(value) Then value = "0"
Dim dVal As Double
If StringToDouble(value, dVal) Then
m_TopOverMaterial = value
Else
MessageBox.Show(EgtMsg(50148), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Asterisk)
End If
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
Dim CurrAssembly As Assembly = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.SelAssembly
For Each ItemPartDoor In CurrAssembly.ListPartDoor
If ItemPartDoor.Type.Contains("F") Then ItemPartDoor.Door.TopOverMaterial = value
Next
'm_LeftJamb.TopOverMaterial = value
'm_RightJamb.TopOverMaterial = value
'm_TopJamb.TopOverMaterial = value
'm_BottomJamb.TopOverMaterial = value
End Set
End Property
Public Sub SetTopOverMaterial(sTopOverMaterial As String)
m_TopOverMaterial = sTopOverMaterial
NotifyPropertyChanged("TopOverMaterial")
End Sub
Private m_BottomOverMaterial As String = String.Empty
Public Property BottomOverMaterial As String
Get
Return m_BottomOverMaterial
End Get
Set(value As String)
If String.IsNullOrEmpty(value) Then value = "0"
Dim dVal As Double
If StringToDouble(value, dVal) Then
m_BottomOverMaterial = value
Else
MessageBox.Show(EgtMsg(50148), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Asterisk)
End If
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
Dim CurrAssembly As Assembly = Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.SelAssembly
For Each ItemPartDoor In CurrAssembly.ListPartDoor
If ItemPartDoor.Type.Contains("F") Then ItemPartDoor.Door.BottomOverMaterial = value
Next
'm_LeftJamb.BottomOverMaterial = value
'm_RightJamb.BottomOverMaterial = value
'm_TopJamb.BottomOverMaterial = value
'm_BottomJamb.BottomOverMaterial = value
End Set
End Property
Public Sub SetBottomOverMaterial(sBottomOverMaterial As String)
m_BottomOverMaterial = sBottomOverMaterial
NotifyPropertyChanged("BottomOverMaterial")
End Sub
#End Region ' OverMaterial
#End Region ' General
Private m_JambT As Part = Nothing
Private m_JambB As Part = Nothing
Private m_JambL As Part = Nothing
Private m_JambR As Part = Nothing
Private m_Door1 As Part = Nothing
Private m_Door2 As Part = Nothing
Public Property JambTIsChecked As Boolean
Get
If IsNothing(m_JambT) Then Return False
Return m_JambT.IsActive
End Get
Set(value As Boolean)
' se il pezzo non esiste deve essere creato
OptionModule.m_TopJambChk = value
' setto la sua variabile
If Not IsNothing(m_JambT) Then
m_JambT.IsActive = value
NotifyPropertyChanged("JambTIsChecked")
End If
' se non esiste l'oggeto prima lo creo
SetDimension("JambIsCheked")
End Set
End Property
Public Property JambBIsChecked As Boolean
Get
If IsNothing(m_JambB) Then Return False
Return m_JambB.IsActive
End Get
Set(value As Boolean)
OptionModule.m_BottomJambChk = value
' setto la sua variabile
If Not IsNothing(m_JambB) Then
m_JambB.IsActive = value
NotifyPropertyChanged("JambBIsChecked")
End If
' se non esiste l'oggeto prima lo creo
SetDimension("JambIsCheked")
End Set
End Property
Public Sub SetJambBTIsChecked(value As Boolean)
OptionModule.m_BottomJambChk = value
If Not IsNothing(m_JambB) Then
m_JambB.IsActive = value
NotifyPropertyChanged("JambBIsChecked")
Map.refSceneManagerVM.RefreshBtn()
End If
End Sub
Public Property JambLIsChecked As Boolean
Get
If IsNothing(m_JambL) Then Return False
Return m_JambL.IsActive
End Get
Set(value As Boolean)
OptionModule.m_LeftJambChk = value
' setto la sua variabile
If Not IsNothing(m_JambL) Then
m_JambL.IsActive = value
NotifyPropertyChanged("JambLIsChecked")
End If
' se non esiste l'oggeto prima lo creo
SetDimension("JambIsCheked")
End Set
End Property
Public Property JambRIsChecked As Boolean
Get
If IsNothing(m_JambR) Then Return False
Return m_JambR.IsActive
End Get
Set(value As Boolean)
OptionModule.m_RightJambChk = value
' setto la sua variabile
If Not IsNothing(m_JambR) Then
m_JambR.IsActive = value
NotifyPropertyChanged("JambRIsChecked")
End If
' se non esiste l'oggeto prima lo creo
SetDimension("JambIsCheked")
End Set
End Property
#Region "DOOR NUMBER"
' carica il numero di porte da mostrare nella combobox
Private m_DoorListNumber As New List(Of String)
Public Property DoorListNumber As List(Of String)
Get
Return m_DoorListNumber
End Get
Set(value As List(Of String))
m_DoorListNumber = value
End Set
End Property
' converto il numero di porte letto nella combobox in una lista di stringhe (sDoorList)
Private m_DoorNumber As String
Public Property DoorNumber As String
Get
Return m_DoorNumber
End Get
Set(value As String)
m_DoorNumber = value
If Trim(m_DoorNumber) = "1" Then
OneDoorProperty = True
Else
OneDoorProperty = False
End If
NotifyPropertyChanged("DoorNumber")
SetDimension("DoorNumber")
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True
Map.refSceneManagerVM.RefreshBtn()
End Set
End Property
Public Sub SetDoorNumber(sDoorNumber As String)
DoorListNumber = OptionModule.m_DoorsListNumber
For Each sNumber In DoorListNumber
If sNumber = sDoorNumber Then
m_DoorNumber = sNumber
End If
Next
If Trim(m_DoorNumber) = "1" Then
OneDoorProperty = True
Else
OneDoorProperty = False
End If
NotifyPropertyChanged("DoorNumber")
End Sub
#End Region ' Door Number
#Region "LIST PART"
' al momento della creazione di un nuovo assembalto vengono caricati di defualt:
' JambLeft, JambTop, JambRight, JambBottom, Door_1
Private m_ListPartDoor As New ObservableCollection(Of PartDoor)
Public Property ListPartDoor As ObservableCollection(Of PartDoor)
Get
Return m_ListPartDoor
End Get
Set(value As ObservableCollection(Of PartDoor))
m_ListPartDoor = value
' ogni volta che si aggiunge una compoenente riallinea la lista sotto
NotifyPropertyChanged("ListPartDoorOfDoor")
End Set
End Property
' questo elenco estrae dall'elenco sopra tutte le ante, cosi da poter essre passata come lista di solo ante nella grafica
Private m_ListPartDoorOfDoor As New ObservableCollection(Of PartDoor)
Public ReadOnly Property ListPartDoorOfDoor As ObservableCollection(Of PartDoor)
Get
m_ListPartDoorOfDoor.Clear()
For Each ItemPartDoor In m_ListPartDoor
If ItemPartDoor.Type.Contains("DO_") Then
m_ListPartDoorOfDoor.Add(ItemPartDoor)
End If
Next
Return m_ListPartDoorOfDoor
End Get
End Property
#End Region ' List Part
#Region "Lettura Assemblato"
' messaggi che possono essere restituiti in fase di lettura dell'assemblato
Public Enum ResultReadingAssembInfo
MissingAssembInfo
ErrorInAssembInfo
CorrectAssembInfo
End Enum
' carico il valore finale restituito dalla lettura dell'assembalto (di default errore)
Public bOk As ResultReadingAssembInfo = ResultReadingAssembInfo.ErrorInAssembInfo
' vettore di righe del file ddf in lettura
Private FileContent() As String
Shared Sub ReadDDFAssembly(sPathDDF As String, ByRef ReadAssembly As Assembly)
' durante la lettura del ddf disabilito la costruzione degli hardware sui jamb
BuiltReffCompo = False
Dim sErrorInfo As String = String.Empty
' controllo se esiste il file DDF
If Not File.Exists(sPathDDF) Then
Return
End If
ReadAssembly.FileContent = File.ReadAllLines(sPathDDF)
' se il file esiste ma è vuoto
If ReadAssembly.FileContent.Count = 0 Then
' 50107: Emplyu file, 50101: Error
MessageBox.Show(EgtMsg(50107), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
End If
'---------------------------------------------------------------------------------------------------------------------------------
Dim IndexLine As Integer = 0
' carico i valori di default dell'assemblato (dalla pagina delle opzioni)
Map.refAssemblyManagerVM.LoadAssemblyInformation(ReadAssembly)
ReadAssembly.bOk = ReadAssembly.GetGeneralAssembly(IndexLine, sErrorInfo)
Part.bFirstConfigRead = False
'---------------------------------------------------------------------------------------------------------------------------------
If ReadAssembly.bOk <> ResultReadingAssembInfo.ErrorInAssembInfo Then
If IndexLine = -1 Then
' 50163= Error in reading General Assembly in DDF
sErrorInfo += String.Format(EgtMsg(50102), EgtMsg(50163) + vbCrLf)
ReadAssembly = Nothing
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = False
Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected
Else
Map.refSceneManagerVM.EnableRefresh = False
If ReadAssembly.GetDDFDoor(IndexLine, sErrorInfo) = -1 Then
' errore nella lettura di un part: blocco tutto
ReadAssembly = Nothing
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = False
Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected
End If
End If
Map.refSceneManagerVM.EnableRefresh = True
If Not IsNothing(ReadAssembly) AndAlso ReadAssembly.bOldVersion Then
ReadAssembly.CalcOverlapTop()
ReadAssembly.CalcOverlapBottom()
ReadAssembly.GetSizeBottom()
End If
Else
' 50163= Error in reading General Assembly in DDF
sErrorInfo += String.Format(EgtMsg(50102), EgtMsg(50163) + vbCrLf)
ReadAssembly = Nothing
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = False
Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected
End If
If Not String.IsNullOrWhiteSpace(sErrorInfo) Then
' 50164=In General Assembly:
sErrorInfo = EgtMsg(50164) & vbCrLf & sErrorInfo
MessageBox.Show(sErrorInfo, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
End If
End Sub
' lettura dei parametri generali dell'assemblato
Private Function GetGeneralAssembly(ByRef IndexLine As Integer, sErrorInfo As String) As ResultReadingAssembInfo
' salta le righe vuote e quelle che non contengono "##",
' restituisce la prima riga successiva valida,
' termina quando incontra la riga "measure" oppure "produce" restituiendo il valore 0
IndexLine = SkipWhiteSpace(IndexLine)
' se non carico nessuna informazione allora non è un assemblato, esco
If IndexLine = 0 Then Return ResultReadingAssembInfo.MissingAssembInfo
' Measure
If IndexLine < FileContent.Count - 1 Then
If SearchKey(FileContent(IndexLine), "Unit") Then
' leggo le dimemensioni dei Jamb e restituisco la riga successiva
IndexLine = GetUnit(IndexLine + 1)
If IndexLine = -1 Then
' 50102: Failed reading DDF file. Missing needed parameter {0}.
sErrorInfo += String.Format(EgtMsg(50102), "measures" + vbCrLf)
Return ResultReadingAssembInfo.ErrorInAssembInfo
End If
Else
IndexLine = GetUnitFromDoor(IndexLine)
If IndexLine = -1 Then
' 50102: Failed reading DDF file. Missing needed parameter {0}.
sErrorInfo += String.Format(EgtMsg(50102), "measures" + vbCrLf)
Return ResultReadingAssembInfo.ErrorInAssembInfo
End If
End If
End If
IndexLine = SkipWhiteSpace(IndexLine)
If IndexLine = 0 Then Return ResultReadingAssembInfo.MissingAssembInfo
' Size
If IndexLine < FileContent.Count - 1 Then
If SearchKey(FileContent(IndexLine), ConstIni.S_SIZE_INI) Then
' leggo le dimemensioni dei Jamb e restituisco la riga successiva
IndexLine = GetSize(IndexLine + 1)
If IndexLine = -1 Then
' 50102: Failed reading DDF file. Missing needed parameter {0}.
sErrorInfo += String.Format(EgtMsg(50102), ConstIni.S_SIZE_INI + vbCrLf)
Return ResultReadingAssembInfo.ErrorInAssembInfo
End If
End If
End If
IndexLine = SkipWhiteSpace(IndexLine)
If IndexLine = 0 Then Return ResultReadingAssembInfo.MissingAssembInfo
' Light
If IndexLine < FileContent.Count - 1 Then
If SearchKey(FileContent(IndexLine), ConstIni.S_LIGHT) Then
IndexLine = GetLight(IndexLine + 1)
If IndexLine = -1 Then
' 50102: Failed reading DDF file. Missing needed parameter {0}.
sErrorInfo += String.Format(EgtMsg(50102), ConstIni.S_LIGHT + vbCrLf)
Return ResultReadingAssembInfo.ErrorInAssembInfo
End If
End If
End If
IndexLine = SkipWhiteSpace(IndexLine)
If IndexLine = 0 Then Return ResultReadingAssembInfo.MissingAssembInfo
' Overlap
If IndexLine < FileContent.Count - 1 Then
If SearchKey(FileContent(IndexLine), ConstIni.S_OVERLAP) Then
IndexLine = GetOverlap(IndexLine + 1)
If IndexLine = -1 Then
' 50102: Failed reading DDF file. Missing needed parameter {0}.
sErrorInfo += String.Format(EgtMsg(50102), ConstIni.S_OVERLAP + vbCrLf)
Return ResultReadingAssembInfo.ErrorInAssembInfo
End If
End If
End If
IndexLine = SkipWhiteSpace(IndexLine)
If IndexLine = 0 Then Return ResultReadingAssembInfo.MissingAssembInfo
' Exterior
If IndexLine < FileContent.Count - 1 Then
If SearchKey(FileContent(IndexLine), ConstIni.K_EXTERIOR) Then
IndexLine = GetExterior(IndexLine + 1)
If IndexLine = -1 Then
' 50102: Failed reading DDF file. Missing needed parameter {0}.
sErrorInfo += String.Format(EgtMsg(50102), ConstIni.K_EXTERIOR + vbCrLf)
Return ResultReadingAssembInfo.ErrorInAssembInfo
End If
End If
End If
IndexLine = SkipWhiteSpace(IndexLine)
If IndexLine = 0 Then Return ResultReadingAssembInfo.MissingAssembInfo
' Profiles
If IndexLine < FileContent.Count - 1 Then
If SearchKey(FileContent(IndexLine), ConstIni.S_PROFILES) Then
IndexLine = GetProfiles(IndexLine + 1)
If IndexLine = -1 Then
' 50102: Failed reading DDF file. Missing needed parameter {0}.
sErrorInfo += String.Format(EgtMsg(50102), ConstIni.S_PROFILES + vbCrLf)
Return ResultReadingAssembInfo.ErrorInAssembInfo
End If
End If
End If
IndexLine = SkipWhiteSpace(IndexLine)
If IndexLine = 0 Then Return ResultReadingAssembInfo.MissingAssembInfo
' Doors
If IndexLine < FileContent.Count Then
If SearchKey(FileContent(IndexLine), ConstIni.S_DOORS_ASSEMBY) Then
' assegno ad una variabile il valore in lettura
IndexLine = GetValue(IndexLine, ConstIni.S_DOORS_ASSEMBY, m_DoorNumber, False)
' assegno il numero di ante
SetDoorNumber(m_DoorNumber)
If IndexLine = -1 Then
' 50102: Failed reading DDF file. Missing needed parameter {0}.
sErrorInfo += String.Format(EgtMsg(50102), ConstIni.S_DOORS_ASSEMBY + vbCrLf)
Return ResultReadingAssembInfo.ErrorInAssembInfo
End If
' se sono arrivato fino a qui significa che ormai è terminata la pagina
If IsNothing(m_Exterior) OrElse Not m_Exterior Then
m_Exterior = False
m_OverlapBottom = m_OverlapTop
m_DepthBottom = m_Thickness
m_ThicknessBottom = m_Width
' il delta è sempre definito nullo di default, quindi è inutile scriverlo qui
End If
End If
End If
Return ResultReadingAssembInfo.CorrectAssembInfo
End Function
' salta le righe che non contengono un metadata
Private Function SkipWhiteSpace(Index As Integer) As Integer
Dim ExitLoop As Boolean = False
While Not ExitLoop And Index < FileContent.Count - 1
' se la riga contiene un commeto allora faccio questo controllo
If FileContent(Index).Contains(ConstCompo.DDF_METADATA) Then
If Not String.IsNullOrWhiteSpace(Regex.Match(FileContent(Index), "\s*" & DDF_METADATA & "\s*(.*?\b)\s*:\s*$").Groups(1).Value) Then
ExitLoop = True
ElseIf Not String.IsNullOrWhiteSpace(Regex.Match(FileContent(Index), "\s*" & DDF_METADATA & "\s*(.*?\b)\s*:\s*(.*?\.*)$").Groups(1).Value) Then
ExitLoop = True
ElseIf Not String.IsNullOrWhiteSpace(Regex.Match(FileContent(Index), "\s*(" & ConstCompo.S_MEASURES & ")\s*:\s*(.*?\.*)$").Groups(1).Value) Then
ExitLoop = True
Else
Index += 1
End If
' utilizzando una funzione regex
ElseIf Not String.IsNullOrWhiteSpace(Regex.Match(FileContent(Index), "\s*(" & ConstCompo.S_MEASURES & ")\s*:\s*(.*?\.*)$").Groups(1).Value) Or
Not String.IsNullOrWhiteSpace(Regex.Match(FileContent(Index), "\s*(" & ConstCompo.S_PRODUCE & ")\s*:\s*(.*?\.*)$").Groups(1).Value) Then
'' utilizzando il semplice controllo se la stringa contiene le parole
'ElseIf Not FileContent(Index).Contains(ConstCompo.S_MEASURES) Or
' Not FileContent(Index).Contains(ConstCompo.S_PRODUCE) Then
Index = 0
ExitLoop = True
Else
Index += 1
End If
End While
Return Index
End Function
' funzione per la ricerca dei valori, restituice la riga successiva
Private Function GetValue(Index As Integer, Name As String, ByRef Var As String, Optional bConvertUnit As Boolean = True) As Integer
If Index = -1 Then Return -1
Dim Local_Var As String = GetValueWithKey(FileContent(Index), Name)
If String.IsNullOrWhiteSpace(Local_Var) Then
' se non c'è la parola chiave allora esci
If Not SearchKey(FileContent(Index), Name) Then Return -1
' altrimenti lascia il valore vuoto
Else
If bConvertUnit Then ConvertDDFValueIntoCurrentUnit(m_AssemblyUnit, Local_Var)
Var = Local_Var
End If
Return Index + 1
End Function
' funzione per la ricerca dei profili, restituisce la riga successiva
Private Function GetValueProfiles(Index As Integer, Name As String, ByRef Var As EdgeType, ByRef VarMachining As Boolean, ByRef VarOverMaterial As String) As Integer
' Creo una stringa per scrivere gli errori
Dim bError As Boolean = False
If Index = -1 Then
Return Index
Else
' Lock
Dim Bevel As String
Bevel = GetValueWithKey(FileContent(Index), Name)
' se il valore restituito è nullo o vuoto
If String.IsNullOrWhiteSpace(Bevel) Then
' se non c'è la parola chiave allora esci
If Not SearchKey(FileContent(Index), Bevel) Then
' restituisco il valore -1
Return -1
Else
Var = EdgeTypeList(0)
End If
Index += 1
Else
'Dim IndexEdge As Integer = EdgeTypeList.IndexOf(Var)
Dim IndexEdge As Integer = 0
For I As Integer = 0 To EdgeTypeList.Count - 1
If Bevel = EdgeTypeList(I).Name And EdgeTypeList(I).IsActive = Visibility.Visible Then
Var = EdgeTypeList(I)
IndexEdge = I
Exit For
Else
IndexEdge = -1
End If
Next
If IndexEdge = -1 And Bevel = ConstGen.BEVEL_UP Then
Var = EdgeTypeList(0)
bError = True
MsgBevel(bError, Bevel)
Index += 1
Else
Var.Name = EdgeTypeList(IndexEdge).Name
' restituisco la riga successiva all'ultimo valore letto
Index += 1
End If
End If
End If
If Index = -1 Then
Return Index
Else
Dim Machining = GetValueWithKey(FileContent(Index), K_MACHINING)
If String.IsNullOrWhiteSpace(Machining) Then
If Not SearchKey(FileContent(Index), K_MACHINING) Then Return -1
Index += 1
Else
VarMachining = Utility.ConvertOnOffToBoolean(Machining)
Index += 1
End If
End If
If Index = -1 Then
Return Index
Else
VarOverMaterial = GetValueWithKey(FileContent(Index), K_OVERMATERIAL)
If String.IsNullOrWhiteSpace(VarOverMaterial) Then
If Not SearchKey(FileContent(Index), K_OVERMATERIAL) Then Return -1
Index += 1
Else
Index += 1
End If
End If
Return Index
End Function
Private Sub MsgBevel(bFound As Boolean, Edge As String)
If bFound And Not Part.FirstReadingEdge Then
' Bevel {0} can not be acceptable in Jamb
Dim CautionBevel As String = String.Format(EgtMsg(50158), Edge)
MessageBox.Show(CautionBevel, EgtMsg(50115), MessageBoxButton.OK, MessageBoxImage.Asterisk)
Part.FirstReadingEdge = True
End If
End Sub
' Unit (Metadati Assembly)
Private Function GetUnit(Index As Integer) As Integer
If Index = -1 Then Return -1
Dim PreviuosIndex As Integer = Index
Index = GetValue(Index, "measures", m_AssemblyUnit, False)
Return Index
End Function
' Measures (Parametri Door)
Private Function GetUnitFromDoor(Index As Integer) As Integer
' inizio la ricerca all'interno del file
Dim PreviuosIndex As Integer = Index
Dim bUnitFound As Boolean = False
' cerco la prima porta e recupero la sua unità di misura
While Not SearchKey(FileContent(Index), "measures") And Index < FileContent.Count - 1
Index += 1
End While
If SearchKey(FileContent(Index), "measures") Then
m_AssemblyUnit = GetValueWithKey(FileContent(Index), "measures")
bUnitFound = True
End If
If bUnitFound Then
Index = PreviuosIndex
Else
Index = -1
End If
Return Index
End Function
' Size
Private Function GetSize(Index As Integer) As Integer
If Index = -1 Then Return -1
Index = GetValue(Index, "thickness", m_Thickness)
If Index = -1 Then Return -1
Index = GetValue(Index, "width", m_Width)
Return Index
End Function
' light
Private Function GetLight(Index As Integer) As Integer
If Index = -1 Then Return -1
Index = GetValue(Index, SIDE_UP, m_LightUp)
If Index = -1 Then Return -1
Index = GetValue(Index, SIDE_LOCK, m_LightLock)
If Index = -1 Then Return -1
Index = GetValue(Index, SIDE_HINGE, m_LightHinge)
If Index = -1 Then Return -1
Index = GetValue(Index, K_BOTTOM, m_LightBottom)
Return Index
End Function
' Overlap
Private Function GetOverlap(Index As Integer) As Integer
If Index = -1 Then Return -1
Index = GetValue(Index, "thickness", m_ThicknessHead)
If Index = -1 Then Return -1
Index = GetValue(Index, SIDE_HINGE, m_OverlapHinge)
If Index = -1 Then Return -1
Index = GetValue(Index, SIDE_LOCK, m_OverlapLock)
If Index = -1 Then Return -1
' per retrocompatibilità: se questo parametro manca dall'elenco devo comunque continuare
Dim TempIndex = GetValue(Index, K_TOP, m_OverlapTop)
If TempIndex > -1 Then
Index = TempIndex
Else
bOldVersion = True
End If
If Index = -1 Then Return -1
Index = GetValue(Index, "deltaT", m_DeltaThickness)
Return Index
End Function
' Profiles
Private Function GetProfiles(Index As Integer) As Integer
If Index = -1 Then Return -1
Index = GetValueProfiles(Index, K_LOCKEDGE, m_LockEdgeType, m_LockEdgeMachining, m_LockEdgeOverMaterial)
If Index = -1 Then Return -1
Index = GetValueProfiles(Index, K_HINGEEDGE, m_HingeEdgeType, m_HingeEdgeMachining, m_HingeEdgeOverMaterial)
If Index = -1 Then Return -1
Index = GetValueProfiles(Index, K_TOP, m_TopType, m_TopMachining, m_TopOverMaterial)
If Index = -1 Then Return -1
Index = GetValueProfiles(Index, K_BOTTOM, m_BottomType, m_BottomMachining, m_BottomOverMaterial)
Return Index
End Function
' exterior
Private Function GetExterior(Index As Integer) As Integer
' devo distingiure la lettura in funzione della versione del file DDF
m_Exterior = True
If Not bOldVersion Then
If Index = -1 Then Return -1
Index = GetValue(Index, K_OVERLAP_BOTTOM, m_OverlapBottom)
If Index = -1 Then Return -1
Index = GetValue(Index, K_THICKNESS_BOTTOM, m_ThicknessBottom)
If Index = -1 Then Return -1
Index = GetValue(Index, K_DEPTH_BOTTOM, m_DepthBottom)
If Index = -1 Then Return -1
Index = GetValue(Index, K_DELTA_BOTTOM, m_DeltaBottom)
Else
If Index = -1 Then Return -1
Index = GetValue(Index, K_TOP, m_OverlapTop)
End If
'If Index = -1 Then Return -1
'Index = GetValue(Index, "deltaT", m_DeltaThickness)
Return Index
End Function
' dopo la lettura delle informazioni dell'assemblato
Private Function GetDDFDoor(IndexLine As Integer, ByRef sErrorInfo As String) As Integer
Dim Line As Integer = IndexLine
While Line < FileContent.Count - 1 AndAlso Not Search3Dots(FileContent(Line))
Dim Local_PartDoor As New PartDoor
Dim Local_Door As New Part(Local_PartDoor)
' carcio la liste delle propiretà
'CreateNewPropertiesList(Local_Door.PropertiesList, Local_Door.SelectedMaterial)
CreateNewPropertiesList(Local_Door)
If Line > 0 Then
' per saltare la riga che è stata appena restituita che contiene "---"
Line += 1
End If
' se la lettura di un oggetto fallisce allora restituisce nothing
Part.ReadDDFPartDoor(FileContent, Line, Local_Door)
' se l'oggetto appena restituito non esiste allora esco
If IsNothing(Local_Door) Then Return -1
' se l'getto appena caricato non specifica il tipo di pezzo allora di default è la prima anta
If String.IsNullOrEmpty(Local_Door.TypePart) Then Local_Door.TypePart = ConstGen.PART_DO_ & "1"
Dim sDoorPiece As String = Local_Door.TypePart
' ricavo il tipo di pezzo eliminando la descrizione dello swing da "TypePart"
If OptionModule.m_ConfigurationSoftware = ConfigType.Assembly Then
If sDoorPiece.Count > 3 AndAlso sDoorPiece.Contains(ConstGen.PART_FRAME) Then
sDoorPiece = sDoorPiece.Remove(sDoorPiece.LastIndexOf("_"c) + 1)
End If
Map.refCompoPanelVM.GoBackVisibility = Visibility.Visible
Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nAssemblyPage
Else
' significa che stiamo per leggere una porta singola, cerco una porta
If Not Local_Door.TypePart.Contains("DO_") Then
' 50518=The current ddf is an Assembly. Any modify will be saved as single door.
sErrorInfo = EgtMsg(50518)
Continue While
End If
Local_Door.IsActive = True
Local_PartDoor.Door = Local_Door
Local_PartDoor.Door.SwingTypeList = OptionModule.m_SwingTypeList
Local_PartDoor.Door.MaterialsList = OptionModule.m_MaterialList
Local_PartDoor.SetIsChecked(Local_Door.IsActive)
ListPartDoor.Add(Local_PartDoor)
Map.refPartPageVM.CurrPart = Local_Door
Map.refCompoPanelVM.GoBackVisibility = Visibility.Collapsed
Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nDDFPage
Exit While
End If
' impedisco di costruire i riferminti
BuiltReffCompo = False
Select Case sDoorPiece
Case ConstGen.PART_DO_ & "1"
Local_PartDoor.Door = Local_Door
Local_PartDoor.Door.SwingTypeList = m_SwingTypeListSinlgeDoor
'CreateNewPropertiesList(Local_Door.PropertiesList, Local_Door.SelectedMaterial)
CreateNewPropertiesList(Local_Door)
Local_PartDoor.SetIsChecked(Local_Door.IsActive)
ListPartDoor.Add(Local_PartDoor)
Case ConstGen.PART_DO_ & "2"
Local_PartDoor.Door = Local_Door
If Not IsNothing(Map.refAssemblyManagerVM.ReserchPartDoor("DO_1")) Then
Local_PartDoor.Door.SwingTypeList = m_SwingTypeListRightDoor
Map.refAssemblyManagerVM.ReserchPartDoor("DO_1").Door.SwingTypeList = m_SwingTypeListLeftDoor
Else
Local_PartDoor.Door.SwingTypeList = m_SwingTypeListSinlgeDoor
End If
'CreateNewPropertiesList(Local_Door.PropertiesList, Local_Door.SelectedMaterial)
CreateNewPropertiesList(Local_Door)
Local_PartDoor.SetIsChecked(Local_Door.IsActive)
ListPartDoor.Add(Local_PartDoor)
Case ConstGen.PART_DO_ & "3"
Local_PartDoor.Door = Local_Door
Local_PartDoor.SetIsChecked(Local_Door.IsActive)
ListPartDoor.Add(Local_PartDoor)
'SetArrayPartDoor(Local_PartDoor, 2)
Case ConstGen.PART_DO_ & "4"
Local_PartDoor.Door = Local_Door
Local_PartDoor.SetIsChecked(Local_Door.IsActive)
ListPartDoor.Add(Local_PartDoor)
'SetArrayPartDoor(Local_PartDoor, 3)
Case ConstGen.PART_DO_ & "5"
Local_PartDoor.Door = Local_Door
Local_PartDoor.SetIsChecked(Local_Door.IsActive)
'SetArrayPartDoor(Local_PartDoor, 4)
Case ConstGen.PART_DO_ & "6"
Local_PartDoor.Door = Local_Door
Local_PartDoor.SetIsChecked(Local_Door.IsActive)
ListPartDoor.Add(Local_PartDoor)
'SetArrayPartDoor(Local_PartDoor, 5)
Case ConstGen.PART_FRAME_LEFT
Local_PartDoor.Door = Local_Door
Local_Door.SwingTypeList = m_SwingTypeList
'CreateNewPropertiesList(Local_Door.PropertiesList, Local_Door.SelectedMaterial)
CreateNewPropertiesList(Local_Door)
ListPartDoor.Add(Local_PartDoor)
'm_LeftJamb = Local_Door
Case ConstGen.PART_FRAME_RIGHT
Local_PartDoor.Door = Local_Door
Local_Door.SwingTypeList = m_SwingTypeList
'CreateNewPropertiesList(Local_Door.PropertiesList, Local_Door.SelectedMaterial)
CreateNewPropertiesList(Local_Door)
ListPartDoor.Add(Local_PartDoor)
'm_RightJamb = Local_Door
Case ConstGen.PART_FRAME_TOP
Local_PartDoor.Door = Local_Door
Local_Door.SwingTypeList = m_SwingTypeList
'CreateNewPropertiesList(Local_Door.PropertiesList, Local_Door.SelectedMaterial)
CreateNewPropertiesList(Local_Door)
ListPartDoor.Add(Local_PartDoor)
'm_TopJamb = Local_Door
Case ConstGen.PART_FRAME_BOTTOM
Local_PartDoor.Door = Local_Door
Local_Door.SwingTypeList = m_SwingTypeList
'CreateNewPropertiesList(Local_Door.PropertiesList, Local_Door.SelectedMaterial)
CreateNewPropertiesList(Local_Door)
ListPartDoor.Add(Local_PartDoor)
'm_BottomJamb = Local_Door
If Not m_Exterior Then Local_PartDoor.Door.IsActive = False
End Select
End While
' controllo che gli oggetti che sono stati caricati
If Not ControlAssemblyInformation() Then
Return -1
Else
Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = False
End If
' scrivo in locale un a copia dei riferiemti ai part
SetPartDoorCurrAssembly()
If Not OptionModule.m_ConfigurationSoftware = ConfigType.Door Then
If Not ControlListDoor() Then
Return -1
End If
If Not ControlSwing() Then
Return -1
End If
End If
BuiltReffCompo = True
Map.refAssemblyManagerVM.CreateAssociation(Me)
MatchCompo()
'Map.refProjectManagerVM.NotifyPropertyChanged("VisibilityCreateAssembly")
Return 1
End Function
' verifico che la dicitaura delle porte sia coerente
Private Function ControlListDoor() As Boolean
Dim WritingError As String = String.Empty
Select Case ListPartDoorOfDoor.Count
Case 1
' se ho una porta soltanto deve essere la prima
If IsNothing(m_Door1) Then
WritingError = EgtMsg(50506)
MessageBox.Show(WritingError, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
Return False
Else
Return True
End If
Case 2
If ListPartDoorOfDoor.Count < 2 Then Return False
If IsNothing(m_Door1) OrElse IsNothing(m_Door2) Then
' 50513=Impossible to find the first door (DO_1) or the second door (DO_2)!
WritingError = EgtMsg(50513)
MessageBox.Show(WritingError, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
Return False
End If
If Not ListPartDoorOfDoor(0).Door.TypePart = "DO_1" Then
' 50515=The first door is not realy the first, check the ddf.
WritingError = EgtMsg(50515)
MessageBox.Show(WritingError, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
Return False
End If
Return True
End Select
Return False
End Function
' controllo che gli swing siano coerenti:
Private Function ControlSwing() As Boolean
Dim ErrorSwingMessages As String = String.Empty
Select Case ListPartDoorOfDoor.Count
Case 1
Dim Local_Door1 As Part = ListPartDoorOfDoor(0).Door
Dim Local_Swing As String = Local_Door1.Swing
Local_Door1.SwingTypeList = OptionModule.m_SwingTypeListSinlgeDoor
If String.IsNullOrEmpty(Local_Swing) Then Return False
Dim Index As Integer = Local_Door1.SwingTypeList.FindIndex(Function(sValue) Trim(sValue) = Trim(Local_Swing))
' se Index = -1 significa che non è stata trovata nessuna corrispondenza
If Index < 0 Then
' 50507=The swing is not a member of the swing list of single door.
ErrorSwingMessages = EgtMsg(50507)
MessageBox.Show(ErrorSwingMessages, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
Return False
End If
Local_Door1.Swing = Local_Door1.SwingTypeList(Index)
Return True
Case 2
Dim Index_1 As Integer = -1
Dim Index_2 As Integer = -1
If Not IsNothing(m_Door1) Then
Index_1 = OptionModule.m_SwingTypeListLeftDoor.FindIndex(Function(sValue) Trim(sValue) = Trim(m_Door1.Swing))
End If
If Not IsNothing(m_Door2) Then
Index_2 = OptionModule.m_SwingTypeListRightDoor.FindIndex(Function(sValue) Trim(sValue) = Trim(m_Door2.Swing))
End If
' Se uno swing è corretto e l'altro è sbagliato
If (Index_1 < 0 AndAlso Index_2 > -1) Then
' 50508=The swing of left door is not a member of the swing list of left door.
ErrorSwingMessages = EgtMsg(50508)
MessageBox.Show(ErrorSwingMessages, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
Return False
ElseIf (Index_1 > -1 AndAlso Index_2 < 0) Then
' 50509=The swing of right door is not a member of the swing list of right door.
ErrorSwingMessages = EgtMsg(50509)
MessageBox.Show(ErrorSwingMessages, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
Return False
End If
' se sono entrambi sbagliati provo a verificare che non siano invertite le ante
If Index_1 < 0 OrElse Index_2 < 0 Then
If Not IsNothing(m_Door2) Then
Index_1 = OptionModule.m_SwingTypeListLeftDoor.FindIndex(Function(sValue) Trim(sValue) = Trim(m_Door2.Swing))
End If
If Not IsNothing(m_Door1) Then
Index_2 = OptionModule.m_SwingTypeListRightDoor.FindIndex(Function(sValue) Trim(sValue) = Trim(m_Door1.Swing))
End If
' verifico i risultati ottenuti
If (Index_1 > -1 AndAlso Index_2 > -1) Then
' 50510=The swing of left door is on the right door and viceverse.
ErrorSwingMessages = EgtMsg(50510)
MessageBox.Show(ErrorSwingMessages, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
Return False
ElseIf (Index_1 < 0 AndAlso Index_2 > -1) Then
' 50511=The swing of left door is not a member of the swing list of left door.
ErrorSwingMessages = EgtMsg(50511)
MessageBox.Show(ErrorSwingMessages, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
Return False
ElseIf (Index_1 > -1 AndAlso Index_2 < 0) Then
' 50512=The swing of right door is not a member of the swing list of right door.
ErrorSwingMessages = EgtMsg(50512)
MessageBox.Show(ErrorSwingMessages, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
Return False
Else
' 50514=The swing are absolutly wrong!
ErrorSwingMessages = EgtMsg(50514)
MessageBox.Show(ErrorSwingMessages, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
Return False
End If
End If
Return True
End Select
Return False
End Function
' controllo degli oggetti caricati nell'assemblato
Private Function ControlAssemblyInformation() As Boolean
Dim ErrorMessages As String = String.Empty
Select Case bOk
Case ResultReadingAssembInfo.CorrectAssembInfo
If OptionModule.m_ConfigurationSoftware = ConfigType.Door Then
' 50520=The current ddf is an assembly
ErrorMessages = EgtMsg(50520)
MessageBox.Show(ErrorMessages, EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning)
Return True
End If
' verifico se è un assemblato
If ListPartDoor.Count < 4 And ListPartDoorOfDoor.Count > 0 Then
' 50516=The current ddf contains {0} jambs.
ErrorMessages = EgtMsg(50516)
Dim sVal As String = Utility.DoubleToString(ListPartDoor.Count - ListPartDoorOfDoor.Count, 0)
' 50144=Warning
MessageBox.Show(String.Format(ErrorMessages, sVal), EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning)
Return True
End If
If ListPartDoor.Count < 4 And ListPartDoorOfDoor.Count = 0 Then
' 50517=The current ddf does not contains doors!
ErrorMessages = EgtMsg(50517)
MessageBox.Show(ErrorMessages, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
Return False
End If
Case ResultReadingAssembInfo.MissingAssembInfo
' verifico se è un assemblato
If ListPartDoor.Count < 4 And ListPartDoorOfDoor.Count > 0 Then
If OptionModule.m_ConfigurationSoftware = ConfigType.Door Then Return True
' 50518=The current ddf is not an assembly.
ErrorMessages = EgtMsg(50518)
MessageBox.Show(ErrorMessages, EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning)
Return True
End If
' verifico che se è una porta singola oppure un assemblato vecchio
If ListPartDoor.Count < 4 And ListPartDoorOfDoor.Count = 0 Then
' 50519=Impossible to open a ddf with no doors.
ErrorMessages = EgtMsg(50519)
MessageBox.Show(ErrorMessages, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
Return False
End If
If OptionModule.m_ConfigurationSoftware = ConfigType.Door AndAlso ListPartDoor.Count > 4 Then
' 50520=The current ddf is an assembly
ErrorMessages = EgtMsg(50520)
MessageBox.Show(ErrorMessages, EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning)
Return True
End If
Case Else
Return False
End Select
Return True
End Function
Public Function ControlAssembly(Optional ByVal bSaving As Boolean = False) As String
' se è una porta singola oppure le info generali non sono state caricate correttamente non controllo l'assemblato
If bSaving Then
If bOk <> ResultReadingAssembInfo.MissingAssembInfo Then Return String.Empty
Else
If bOk = ResultReadingAssembInfo.ErrorInAssembInfo OrElse bOk = ResultReadingAssembInfo.MissingAssembInfo Then Return String.Empty
End If
Dim WritingError As String = String.Empty
Dim DoorTypeList As String = String.Empty
If ListPartDoor.Count < 3 Then
For Each ItemPart In ListPartDoor
DoorTypeList &= " ," & ItemPart.Door.TypePart
Next
DoorTypeList = DoorTypeList.Remove(1, 1)
WritingError = String.Format(EgtMsg(50505), DoorTypeList)
End If
Return WritingError
End Function
' ricavo dal JambT il valore di OverlabTop
Public Sub CalcOverlapTop()
Dim Jamb As Part = m_JambT
Dim IndexSide As Integer = 2
Dim Indexparam As Integer = 2
If Not IsNothing(Jamb) Then
Dim IndexCompo As Integer = GetRabbetCompo(Jamb, IndexSide)
SetOverlapTop(GetValueParam(Jamb, IndexSide, Indexparam))
End If
End Sub
' ricavo dal JambB il valore di OverlabBottom
Public Sub CalcOverlapBottom()
Dim Jamb As Part = m_JambB
Dim IndexSide As Integer = 2
Dim Indexparam As Integer = 2
If Not IsNothing(Jamb) Then
Dim IndexCompo As Integer = GetRabbetCompo(Jamb, IndexSide)
SetOverlapBottom(GetValueParam(Jamb, IndexSide, Indexparam))
End If
End Sub
' restituisce l'indice della componente nella lista delle componeti del jamb
Public Function GetRabbetCompo(ByVal Jamb As Part, ByVal IndexSide As Integer) As Integer
' IndexSide: 0->Top, 1->bottom , 2->hinge , 3->lock
' se ritorna "-2" significa che non esiste la componente rabbet nell'elenco dei direttori
' se ritorna "-1" significa che non esiste la componente rabbet nell'elenco delle componenti del Jamb
Dim IndexCompo As Integer
Dim IndexCompoPanel As Integer = -1
' ricerco la posizione del rabbet nella lista dei componenti
IndexCompoPanel = nCompoRabbet()
' se la ricerca ha dato un esito positivo allora procedo
If IndexCompoPanel = -1 Then Return -2
If Jamb.CompoList.Count > 0 Then
' inizio la ricerca della componente di tipo rabbet
For IndexCompo = 0 To Jamb.CompoList.Count - 1
If Jamb.CompoList(IndexCompo).CompoType.DDFName = OptionModule.m_CompoPaneOrder(IndexCompoPanel) Then
If DirectCast(Jamb.CompoList(IndexCompo).CompoParamList(0), ComboBoxParam).SelItem = DirectCast(Jamb.CompoList(IndexCompo).CompoParamList(0), ComboBoxParam).ItemList(IndexSide) Then
Return IndexCompo
End If
End If
Next
End If
Return -1
End Function
' utlizzata per recuperare il valore di un parametro del rabbet
Public Function GetValueParam(Jamb As Part, IndexSide As Integer, IndexParam As Integer) As String
If Not IsNothing(Jamb) Then
' verifico che il rabbet indicato sia costruito su uno specifico lato
Dim IndexCompo As Integer = GetRabbetCompo(Jamb, IndexSide)
If IndexCompo < 0 Then
Return "0"
End If
' ricerco il parametro "depth"
If Jamb.CompoList(IndexCompo).CompoParamList.Count - 1 >= IndexParam Then
Dim sValue As String = DirectCast(Jamb.CompoList(IndexCompo).CompoParamList(IndexParam), TextBoxParam).Value
If Not String.IsNullOrEmpty(sValue) Then Return sValue
End If
End If
Return "0"
End Function
' carico le dimensioni del bottom direttamente del frame
Public Sub GetSizeBottom()
If IsNothing(m_JambB) Then Return
SetThicknessBottom(m_JambB.Height)
SetDepthBottom(m_JambB.Thickness)
' calcolo il delta del bottom
If Not IsNothing(m_Door1) Then
Dim dPositionZ As Double
Dim dThicknessBottom As Double
Dim dThicknessDoor As Double
Dim dDeltaThickness As Double
StringToDouble(m_JambB.Height, dThicknessBottom)
StringToDouble(m_Door1.Thickness, dThicknessDoor)
StringToDouble(m_DeltaThickness, dDeltaThickness)
StringToDouble(m_JambB.Position(2), dPositionZ)
Dim dDeltaBottom As Double = dThicknessBottom - dThicknessDoor - dDeltaThickness - dPositionZ
SetDeltaBottom(DoubleToString(dDeltaBottom, 4))
End If
End Sub
#Region "Associazione delle compo lette da ddf"
Public Sub MatchCompo()
If IsNothing(m_Door1) Then Return
For Each ItemDoor In ListPartDoorOfDoor
If Not IsNothing(m_JambL) Then ResearchMatchJamb(ItemDoor.Door, m_JambL)
If Not IsNothing(m_JambR) Then ResearchMatchJamb(ItemDoor.Door, m_JambR)
If Not IsNothing(m_JambT) Then ResearchMatchJamb(ItemDoor.Door, m_JambT)
If Not IsNothing(m_JambB) Then ResearchMatchJamb(ItemDoor.Door, m_JambB)
Next
If Not IsNothing(m_Door2) Then
ResearchMatchDoor(m_Door1, m_Door2)
ResearchMatchDoor(m_Door2, m_Door1)
SetDoorNumber("2")
Else
SetDoorNumber("1")
End If
End Sub
' setta per ogni componente sul telaio la proprietà "IsReadOnly" letta dal file Matching
Private Sub ResearchMatchJamb(Door As Part, Jamb As Part)
For IndexCompo As Integer = 0 To Door.CompoList.Count - 1
ReSearchFrameFile(Door.CompoList(IndexCompo))
If Not String.IsNullOrEmpty(Door.CompoList(IndexCompo).IdCode) Then
' cerco l'associazione delle compo sulla porta con le componenti sul telaio
For IndexCompoJamb As Integer = 0 To Jamb.CompoList.Count - 1
If Trim(Jamb.CompoList(IndexCompoJamb).IdCode) = Trim(Door.CompoList(IndexCompo).IdCode) Then
Door.CompoList(IndexCompo).refJambCompo = Jamb.CompoList(IndexCompoJamb)
Jamb.CompoList(IndexCompoJamb).refCompoDoor = Door.CompoList(IndexCompo)
Door.CompoList(IndexCompo).refJambCompo.VisibilitiReloadBtn = Visibility.Visible
Door.CompoList(IndexCompo).refJambCompo.IsReadOnly = True
Door.CompoList(IndexCompo).IsReadOnly = False
' definisco la proprietà ReadOnly per i parametri inseriti
If Not LoadCompoParam(Door.CompoList(IndexCompo), Door.TypePart) Then Return
For IndexParam As Integer = 0 To Door.CompoList(IndexCompo).refJambCompo.CompoParamList.Count - 1
Dim CmpRefPar As CompoParam = Door.CompoList(IndexCompo).refJambCompo.CompoParamList(IndexParam)
If TypeOf CmpRefPar Is TextBoxOnOffParam Then
Dim TBoxRefPar As TextBoxOnOffParam = DirectCast(CmpRefPar, TextBoxOnOffParam)
CalcCompoParamVisibility(TBoxRefPar.DDFName, TBoxRefPar.IsReadOnly)
ElseIf TypeOf CmpRefPar Is TextBoxParam Then
Dim TBoxRefPar As TextBoxParam = DirectCast(CmpRefPar, TextBoxParam)
CalcCompoParamVisibility(TBoxRefPar.DDFName, TBoxRefPar.IsReadOnly)
ElseIf TypeOf CmpRefPar Is ComboBoxOnOffParam Then
Dim TBoxRefPar As ComboBoxOnOffParam = DirectCast(CmpRefPar, ComboBoxOnOffParam)
CalcCompoParamVisibility(TBoxRefPar.DDFName, TBoxRefPar.IsReadOnly)
ElseIf TypeOf CmpRefPar Is ComboBoxParam Then
Dim TBoxRefPar As ComboBoxParam = DirectCast(CmpRefPar, ComboBoxParam)
CalcCompoParamVisibility(TBoxRefPar.DDFName, TBoxRefPar.IsReadOnly)
End If
Next
ResetCompoParam()
Exit For
End If
Next
Else
Door.CompoList(IndexCompo).IsReadOnly = False
End If
Next
End Sub
' setta per ogni componente (associata) sulla porta inattiva la proprietà "IsReadOnly" letta dal file Matching
Private Sub ResearchMatchDoor(DoorActive As Part, DoorInactive As Part)
If Not DoorActive.SwingAlias.Name.Contains(ConstGen.INACTIVE) Then
For IndexCompo As Integer = 0 To DoorActive.CompoList.Count - 1
If Not String.IsNullOrEmpty(DoorActive.CompoList(IndexCompo).IdCode) Then
For IndexCompoInactiveDoor As Integer = 0 To DoorInactive.CompoList.Count - 1
' cerco l'associazione delle compo sulla porta attiva con le componenti sulla porta inattiva
Dim Local_Copo As Compo
If Trim(DoorInactive.CompoList(IndexCompoInactiveDoor).IdCode) = Trim(DoorActive.CompoList(IndexCompo).IdCode) Then
If DoorActive.CompoList(IndexCompo).MatchedDoor Then
DoorInactive.CompoList(IndexCompoInactiveDoor).refJambCompo = DoorActive.CompoList(IndexCompo)
DoorInactive.CompoList(IndexCompoInactiveDoor).refJambCompo.VisibilitiReloadBtn = Visibility.Visible
DoorActive.CompoList(IndexCompo).refCompoDoor = DoorInactive.CompoList(IndexCompoInactiveDoor)
DoorInactive.CompoList(IndexCompoInactiveDoor).refJambCompo.IsReadOnly = False
DoorInactive.CompoList(IndexCompoInactiveDoor).refJambCompo.VisibilitiReloadBtn = Visibility.Visible
DoorInactive.CompoList(IndexCompoInactiveDoor).IsReadOnly = True
If Not LoadCompoParam(DoorInactive.CompoList(IndexCompoInactiveDoor), DoorActive.TypePart) Then Return
' assegno la componente
Local_Copo = DoorInactive.CompoList(IndexCompoInactiveDoor).refJambCompo
Else
DoorActive.CompoList(IndexCompo).refJambCompo = DoorInactive.CompoList(IndexCompoInactiveDoor)
DoorActive.CompoList(IndexCompo).refJambCompo.VisibilitiReloadBtn = Visibility.Visible
DoorInactive.CompoList(IndexCompoInactiveDoor).refCompoDoor = DoorActive.CompoList(IndexCompo)
DoorActive.CompoList(IndexCompo).VisibilitiReloadBtn = Visibility.Visible
DoorActive.CompoList(IndexCompo).refJambCompo.IsReadOnly = False
DoorActive.CompoList(IndexCompo).IsReadOnly = True
' assegno la componente
If Not LoadCompoParam(DoorActive.CompoList(IndexCompo), DoorActive.TypePart) Then Return
Local_Copo = DoorActive.CompoList(IndexCompo).refJambCompo
End If
'DoorActive.CompoList(IndexCompo).refJambCompo = DoorInactive.CompoList(IndexCompoInactiveDoor)
'DoorInactive.CompoList(IndexCompoInactiveDoor).refCompoDoor = DoorActive.CompoList(IndexCompo)
'DoorActive.CompoList(IndexCompo).VisibilitiReloadBtn = Visibility.Visible
'DoorActive.CompoList(IndexCompo).refJambCompo.IsReadOnly = False
'DoorActive.CompoList(IndexCompo).IsReadOnly = True
'If Not LoadCompoParam(DoorActive.CompoList(IndexCompo), DoorActive.TypePart) Then Return
For IndexParam As Integer = 0 To Local_Copo.CompoParamList.Count - 1
'Dim CmpPar As CompoParam = DoorActive.CompoList(IndexCompo).CompoParamList(IndexParam)
Dim CmpRefPar As CompoParam = Local_Copo.CompoParamList(IndexParam)
If TypeOf CmpRefPar Is TextBoxOnOffParam Then
'Dim TBoxPar As TextBoxOnOffParam = DirectCast(CmpPar, TextBoxOnOffParam)
Dim TBoxRefPar As TextBoxOnOffParam = DirectCast(CmpRefPar, TextBoxOnOffParam)
'CalcCompoParamVisibility(TBoxPar.DDFName, TBoxRefPar.IsReadOnly)
'TBoxPar.IsReadOnly = True
CalcCompoParamVisibility(TBoxRefPar.DDFName, TBoxRefPar.IsReadOnly)
ElseIf TypeOf CmpRefPar Is TextBoxParam Then
'Dim TBoxPar As TextBoxParam = DirectCast(CmpPar, TextBoxParam)
Dim TBoxRefPar As TextBoxParam = DirectCast(CmpRefPar, TextBoxParam)
'CalcCompoParamVisibility(TBoxPar.DDFName, TBoxRefPar.IsReadOnly)
'TBoxPar.IsReadOnly = True
CalcCompoParamVisibility(TBoxRefPar.DDFName, TBoxRefPar.IsReadOnly)
ElseIf TypeOf CmpRefPar Is ComboBoxOnOffParam Then
'Dim TBoxPar As ComboBoxOnOffParam = DirectCast(CmpPar, ComboBoxOnOffParam)
Dim TBoxRefPar As ComboBoxOnOffParam = DirectCast(CmpRefPar, ComboBoxOnOffParam)
'CalcCompoParamVisibility(TBoxPar.DDFName, TBoxRefPar.IsReadOnly)
'TBoxPar.IsReadOnly = True
CalcCompoParamVisibility(TBoxRefPar.DDFName, TBoxRefPar.IsReadOnly)
ElseIf TypeOf CmpRefPar Is ComboBoxParam Then
'Dim TBoxPar As ComboBoxParam = DirectCast(CmpPar, ComboBoxParam)
Dim TBoxRefPar As ComboBoxParam = DirectCast(CmpRefPar, ComboBoxParam)
'CalcCompoParamVisibility(TBoxPar.DDFName, TBoxRefPar.IsReadOnly)
'TBoxPar.IsReadOnly = True
CalcCompoParamVisibility(TBoxRefPar.DDFName, TBoxRefPar.IsReadOnly)
End If
Next
ResetCompoParam()
Exit For
End If
Next
Else
DoorActive.CompoList(IndexCompo).IsReadOnly = True
End If
Next
End If
End Sub
' in fase di cricamento della porta verifico se posso esistere delle componenti da associare
' infatti potrebbe esistere una componente sull'anta ma non sul telaio
' il caso contrario è vietato dal programma (a meno che non sia stato modificato il ddf manualmente)
Public Function ReSearchFrameFile(ByVal CurrCompo As Compo) As Boolean
' se è la configurazione è di songola porta allora interrompi la costruzione
If OptionModule.m_ConfigurationSoftware = ConfigType.Door Then Return False
' nome del file Matchting.ini
Dim FrameFile As String = String.Empty
' percorso del file di Config.ini del file frame
Dim FrameFileConfig As String = String.Empty
' numero di ante presenti nel progetto corrente
Dim nDoorNbr As Integer = 1
' cerco il nome della componente da associare FrameFile
Dim CurrDoorHArdwareFile As String = CurrCompo.CompoType.Path & "\" & CurrCompo.TemplateSelItem
If Path.GetExtension(CurrDoorHArdwareFile) <> NGE_EXTENSION Then
CurrDoorHArdwareFile &= LUA_EXTENSION
End If
' cerco il campo [Match file] nel file lua della componente
If File.Exists(CurrDoorHArdwareFile) Then
Dim ReadCurrCompo() As String = File.ReadAllLines(CurrDoorHArdwareFile)
For LineIndex = 0 To ReadCurrCompo.Count - 1
If RegexFunction.IsMatchingParameterTitle(ReadCurrCompo(LineIndex)) Then
' mi preparo per leggere la prima riga dopo il titolo
Dim ParamIndex As Integer = 1
FrameFile = Trim(RegexFunction.ParamLine(ReadCurrCompo(LineIndex + ParamIndex), K_MATCHING_FILE))
While String.IsNullOrEmpty(FrameFile) And LineIndex + ParamIndex < ReadCurrCompo(LineIndex + ParamIndex).Count
ParamIndex += 1
FrameFile = Trim(RegexFunction.ParamLine(ReadCurrCompo(LineIndex + ParamIndex), K_MATCHING_FILE))
End While
Exit For
End If
Next
End If
' se non esiste nessun accoppiamento allora esco ed elimino la componente
If FrameFile.Contains("None") Then
CurrCompo.VisibilitiReloadBtn = Visibility.Collapsed
Return False
End If
' converto il numero di porte da string a int
Int32.TryParse(Map.refAssemblyPageVM.CurrAssembly.DoorNumber, nDoorNbr)
' cerco il nome nella tabella: se lo script lua da errori, e la variabile FrameFile è vuota esco
If String.IsNullOrEmpty(FrameFile) AndAlso
Not CalcCompoMatching(CurrCompo.CompoType.Path, nDoorNbr, CurrCompo.TemplateSelItem, FrameFile) Then
CurrCompo.VisibilitiReloadBtn = Visibility.Collapsed
Return False
End If
CurrCompo.VisibilitiReloadBtn = Visibility.Visible
Return True
End Function
#End Region ' Associazione delle compo lette da ddf
#End Region ' Lettura Assemblato
#Region "RULES ASSEMBLY"
#Region "CreateRefCompo"
' questo metodo è chiamato dalla proprietà CompoBtn nella classe CompoPanelVM
' dopo aver aggiunto una componente da pulsantiera viene chiamato questo metodo che costruisce il riferimento
' o anche solo esegue la modifica dell'associzaione
Public Function CreateCompoOnJamb(ByRef CurrCompo As Compo, ByVal sSide As String, Optional ByVal sTypeDoor As String = "") As Boolean
Dim Local_CurrDoor As Part = Nothing
' eventualmente carico la porta indicata nella funzione
If Not String.IsNullOrEmpty(sTypeDoor) Then
Dim Local_CurrPartDoor As PartDoor = Map.refAssemblyPageVM.ReserchPartDoor(sTypeDoor)
If Not IsNothing(Local_CurrPartDoor) Then
Local_CurrDoor = Local_CurrPartDoor.Door
Else
Local_CurrDoor = Map.refPartPageVM.CurrPart
End If
Else
Local_CurrDoor = Map.refPartPageVM.CurrPart
End If
' se è la configurazione è di songola porta allora interrompi la costruzione
If OptionModule.m_ConfigurationSoftware = ConfigType.Door Then Return False
' nome del file Matchting.ini
Dim FrameFile As String = String.Empty
' percorso del file di Config.ini del file frame
Dim FrameFileConfig As String = String.Empty
' numero di ante presenti nel progetto corrente
Dim nDoorNbr As Integer = 1
' cerco nella configurazione della componente sulla porta il parametro Side
Dim Side As String = String.Empty
If Not String.IsNullOrEmpty(sSide) Then Side = sSide
' cerco nel file Config.ini il campo [PositionSide]
If String.IsNullOrEmpty(Side) Then
GetPrivateProfileJambSide(S_POSITIONSIDE, K_SIDE, Side, CurrCompo.CompoType.Path & "\" & CONFIGINI_FILE_NAME)
End If
' controllo sempre nell'elenco dei parametri se esiste un parametro di tipo Side
For IndexParam As Integer = 0 To CurrCompo.CompoParamList.Count - 1
If CurrCompo.CompoParamList(IndexParam).DDFName.ToLower = K_SIDE.ToLower Then
Side = DirectCast(CurrCompo.CompoParamList(IndexParam), ComboBoxParam).SelItem
Dim IndexDDF As Integer = DirectCast(CurrCompo.CompoParamList(IndexParam), ComboBoxParam).ItemList.IndexOf(Side)
If IndexDDF > -1 Then
Side = DirectCast(CurrCompo.CompoParamList(IndexParam), ComboBoxParam).ItemListDDF(IndexDDF)
End If
Exit For
End If
Next
' converto tutti i nomi che ho caricato in carattere minuscolo
If Not String.IsNullOrEmpty(Side) Then
Side = Side.ToLower
Dim ItemSplit As String() = Side.Split("_"c)
If ItemSplit.Count > 1 Then
Side = Trim(ItemSplit(0))
End If
End If
' a questo punto ricerco nella lista delle associazioni se esite il frame sul quale costruire il riferimento
' converto la posizione letta in valore numerico
' queste associazioni funzionano sulle ante, per i Jamb non ho studiato una conversione
If IsNothing(Local_CurrDoor) Then Return False
Dim nSide As Integer = 0
Select Case Side
Case "lock"
' se è LeftHand
If Local_CurrDoor.SwingAlias.Name.Contains("L") Then
nSide = 100
Else
nSide = 300
End If
Case "hinge"
If Local_CurrDoor.SwingAlias.Name.Contains("L") Then
nSide = 300
Else
nSide = 100
End If
Case "top"
nSide = 200
Case "bottom"
nSide = 400
End Select
' ricerco il PartDoor associato al side
Dim refPartDoor As PartDoor = Nothing
If Local_CurrDoor.TypePart.Contains("DO_") Then
For Each ItemPartDoor In ListPartDoor
If ItemPartDoor.Type = Local_CurrDoor.TypePart Then
For Each ItemAssociation In ItemPartDoor.ListAssociation
' verifico che esiesta un Part sul lato indicato dal side
If ItemAssociation.Side > nSide AndAlso ItemAssociation.Side < nSide + 100 Then
refPartDoor = ItemAssociation.refPartDoor
Exit For
End If
Next
Exit For
End If
Next
Else
refPartDoor = Map.refAssemblyPageVM.ReserchPartDoor(Local_CurrDoor.TypePart)
End If
' se non è stata trovata nessuna associazione esco
If IsNothing(refPartDoor) Then
CurrCompo.VisibilitiReloadBtn = Visibility.Collapsed
Return False
End If
' se l'associazione è un'anta allora verifico se la componente non sia un riferiememto
If refPartDoor.Door.TypePart.Contains("DO_") AndAlso Not IsNothing(CurrCompo.refCompoDoor) Then
Return False
End If
' cerco il nome della componente da associare FrameFile
Dim CurrDoorHArdwareFile As String = CurrCompo.CompoType.Path & "\" & CurrCompo.TemplateSelItem
If Path.GetExtension(CurrDoorHArdwareFile) <> NGE_EXTENSION Then
CurrDoorHArdwareFile &= LUA_EXTENSION
End If
' cerco il campo [Match file] nel file lua della componente
Dim sKey As String = K_MATCHING_FILE
' se il riferiemento è un'anta allora devo caricare il file "MatchingFileDoor"
If refPartDoor.Door.TypePart.Contains("DO_") Then
sKey = K_MATCHING_FILE_DOOR
End If
If File.Exists(CurrDoorHArdwareFile) Then
Dim ReadCurrCompo() As String = File.ReadAllLines(CurrDoorHArdwareFile)
For LineIndex = 0 To ReadCurrCompo.Count - 1
If RegexFunction.IsMatchingParameterTitle(ReadCurrCompo(LineIndex)) Then
' mi preparo per leggere la prima riga dopo il titolo
Dim ParamIndex As Integer = 1
FrameFile = Trim(RegexFunction.ParamLine(ReadCurrCompo(LineIndex + ParamIndex), sKey))
While String.IsNullOrEmpty(FrameFile) And LineIndex + ParamIndex < ReadCurrCompo(LineIndex + ParamIndex).Count
ParamIndex += 1
FrameFile = Trim(RegexFunction.ParamLine(ReadCurrCompo(LineIndex + ParamIndex), sKey))
End While
Exit For
End If
Next
End If
' se non esiste nessun accoppiamento allora esco ed elimino la componente
If FrameFile.Contains("None") Then
If Not IsNothing(CurrCompo.refJambCompo) Then
Local_CurrDoor.RemoveCompo(CurrCompo, True)
CurrCompo.refJambCompo = Nothing
End If
' 50144 =Warning, 50166 =Jamb compo does not exist
'MessageBox.Show(EgtMsg(50166), EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning)
CurrCompo.VisibilitiReloadBtn = Visibility.Collapsed
Return False
End If
' converto il numero di porte da string a int
Int32.TryParse(Map.refAssemblyPageVM.CurrAssembly.DoorNumber, nDoorNbr)
' cerco il nome nella tabella: se lo script lua da errori, e la variabile FrameFile è vuota esco
If String.IsNullOrEmpty(FrameFile) AndAlso
Not CalcCompoMatching(CurrCompo.CompoType.Path, nDoorNbr, CurrCompo.TemplateSelItem, FrameFile) Then
' elimino la componente di riferimento
If Not IsNothing(CurrCompo.refJambCompo) Then
Local_CurrDoor.RemoveCompo(CurrCompo, True)
CurrCompo.refJambCompo = Nothing
End If
CurrCompo.VisibilitiReloadBtn = Visibility.Collapsed
Return False
End If
' costruisco il percosrso del file Config.ini associato al FrameFile
If Not SearchFileConfig(FrameFile, FrameFileConfig) Then
' 50144 =Warning, 50166 =Jamb compo does not exist
' MessageBox.Show(EgtMsg(50166), EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning)
' se il file FrameFileConfig.ini non esiste allora elimino il riferimento
If Not IsNothing(CurrCompo.refJambCompo) Then
Local_CurrDoor.RemoveCompo(CurrCompo, True)
CurrCompo.refJambCompo = Nothing
End If
' restituisco false perchè la componente non è stata creata
CurrCompo.VisibilitiReloadBtn = Visibility.Collapsed
Return False
Else
' inizio la lettura di FrameFileConfig
Dim FrameNameDDF As String = String.Empty
Dim FrameName As String = String.Empty
Dim FrameSide As String = String.Empty
Dim FrameFolderName As String = String.Empty
GetPrivateProfileCompoName(ConstCompo.S_COMPO, ConstCompo.K_NAME, FrameNameDDF, FrameName, FrameFileConfig)
GetPrivateProfileJambSide(S_POSITIONSIDE, K_SIDE, FrameSide, FrameFileConfig)
GetPrivateProfileFolderName(S_TEMPLATE, K_FOLDER_NAME, FrameFolderName, FrameFileConfig)
'Ogni volta che creo una componente elimino i precedenti riferimenti
If Not IsNothing(CurrCompo.refJambCompo) Then Local_CurrDoor.RemoveCompo(CurrCompo, True)
If IsNothing(CurrCompo.refJambCompo) Then
' costruisco sul riferiento la nuova componente inserita
Dim refCompoType As New CompoType(FrameName, FrameNameDDF, Path.GetDirectoryName(FrameFileConfig), FrameSide, FrameFolderName)
' aggiungo la componete sul riferiento passato (caricando la lista dei file di tipo Frame)
Dim refPartDoor_IsFrame As Boolean = True
If refPartDoor.Door.TypePart.Contains("DO_") Then refPartDoor_IsFrame = False
CurrCompo.refJambCompo = refPartDoor.Door.AddNewCompo(refCompoType, refPartDoor_IsFrame)
CurrCompo.refJambCompo.refCompoDoor = CurrCompo
' se non è un frame allora sto costruendo su una anta
CurrCompo.refJambCompo.MatchedDoor = Not refPartDoor_IsFrame
' definsco se la componente deve essre ribalata (Top-Door2; Bottom-Door1 e una sola anta)
If Side = "top" And Local_CurrDoor.TypePart.Contains("DO_2") Then
CurrCompo.refJambCompo.OtherDoor = True
ElseIf Side = "bottom" And Local_CurrDoor.TypePart.Contains("DO_1") And m_DoorNumber <> "1" Then
CurrCompo.refJambCompo.OtherDoor = True
End If
End If
' setto il nome della componente da caricare
If Not IsNothing(CurrCompo.refJambCompo) Then
CurrCompo.refJambCompo.SplitBrandFile(FrameFile)
CurrCompo.refJambCompo.refCompoDoor = CurrCompo
Else
MessageBox.Show("File '" & FrameFile & "' exist, but it is not in the correct Directory!", EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning)
CurrCompo.VisibilitiReloadBtn = Visibility.Collapsed
Return False
End If
End If
' assegno i parametri letti dallo script per il corretto posizionamento del pezzo ( solo se il pezzo corrente è un DO_)
If LoadCompoParam(CurrCompo, Local_CurrDoor.TypePart) Then
UpDateCurrCompoJamb(CurrCompo, Local_CurrDoor.TypePart)
ResetSTU()
ResetCompoParam()
Else
Dim Msg As String = String.Format(EgtMsg(50157), CurrCompo.CompoType.Path, MATCHING_FILE_NAME)
MessageBox.Show(Msg, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
End If
' se sono arrivato in fondo significa che il riferiemnto è stato costruito
CurrCompo.VisibilitiReloadBtn = Visibility.Visible
CurrCompo.refJambCompo.VisibilitiReloadBtn = Visibility.Visible
Return True
End Function
' questa funzione è utilizzata per ricostruire (da Matching.lua) una componente del telaio a partire da essa stessa
Public Function CreateCompoOnJambFromJamb(ByRef CurrCompo As Compo, ByVal sSide As String) As Boolean
Dim IndexRefCompo As Integer = -1
' se è la configurazione è di songola porta allora interrompi la costruzione
If OptionModule.m_ConfigurationSoftware = ConfigType.Door Then Return False
' nome del file Matchting.ini
Dim FrameFile As String = String.Empty
' percorso del file di Config.ini del file frame
Dim FrameFileConfig As String = String.Empty
' numero di ante presenti nel progetto corrente
Dim nDoorNbr As Integer = 1
' ricerco il PartDoor associato al side (anche da anta ad anta)
Dim refPartDoor As PartDoor = Map.refAssemblyPageVM.ReserchPartDoor(Map.refPartPageVM.CurrPart.TypePart)
'If Map.refPartPageVM.CurrPart.TypePart.Contains("DO_") Then
' Return False
'Else
' refPartDoor = Map.refAssemblyPageVM.ReserchPartDoor(Map.refPartPageVM.CurrPart.TypePart)
'End If
' se non è stata trovata nessuna associazione esco
If IsNothing(refPartDoor) Then
CurrCompo.VisibilitiReloadBtn = Visibility.Collapsed
Return False
End If
' ricerco l'indice della componente che sto modificando
For Index As Integer = 0 To refPartDoor.Door.CompoList.Count - 1
If Trim(refPartDoor.Door.CompoList(Index).IdCode) = Trim(CurrCompo.IdCode) Then
IndexRefCompo = Index
End If
Next
' ricerco l'anta a cui devo fare riferimento (dalle informazioni della Compo e del tipo di Frame)
Dim LocalDoor As Part = Map.refAssemblyPageVM.ReserchPartDoor("DO_1").Door
If IsNothing(LocalDoor) Then
Return False
End If
If m_DoorNumber <> "1" Then
If refPartDoor.Door.TypePart.Contains("FT_") AndAlso CurrCompo.refJambCompo.OtherDoor Then
LocalDoor = Map.refAssemblyPageVM.ReserchPartDoor("DO_2").Door
ElseIf refPartDoor.Door.TypePart.Contains("FB_") AndAlso Not CurrCompo.refJambCompo.OtherDoor Then
LocalDoor = Map.refAssemblyPageVM.ReserchPartDoor("DO_2").Door
ElseIf refPartDoor.Door.TypePart.Contains("FR_") Then
LocalDoor = Map.refAssemblyPageVM.ReserchPartDoor("DO_2").Door
ElseIf refPartDoor.Door.TypePart.Contains("DO_1") Then
LocalDoor = Map.refAssemblyPageVM.ReserchPartDoor("DO_2").Door
End If
End If
' costruisco il nome del FrameFile
Dim DirectoryCompo As String = Path.GetFileName(CurrCompo.refJambCompo.CompoType.Path)
FrameFile = DirectoryCompo & "\" & CurrCompo.refJambCompo.TemplateSelItem
' costruisco il percosrso del file Config.ini associato al FrameFile
If Not SearchFileConfig(FrameFile, FrameFileConfig) Then
' 50144 =Warning, 50166 =Jamb compo does not exist
' MessageBox.Show(EgtMsg(50166), EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning)
' se il file FrameFileConfig.ini non esiste allora elimino il riferimento
If Not IsNothing(CurrCompo.refJambCompo) Then
LocalDoor.RemoveCompo(CurrCompo, True)
CurrCompo.refJambCompo = Nothing
End If
' restituisco false perchè la componente non è stata creata
Return False
Else
' inizio la lettura di FrameFileConfig
Dim FrameNameDDF As String = String.Empty
Dim FrameName As String = String.Empty
Dim FrameSide As String = String.Empty
Dim FrameFolderName As String = String.Empty
GetPrivateProfileCompoName(ConstCompo.S_COMPO, ConstCompo.K_NAME, FrameNameDDF, FrameName, FrameFileConfig)
GetPrivateProfileJambSide(S_POSITIONSIDE, K_SIDE, FrameSide, FrameFileConfig)
GetPrivateProfileFolderName(S_TEMPLATE, K_FOLDER_NAME, FrameFolderName, FrameFileConfig)
'Ogni volta che creo una componente elimino i precedenti riferimenti
If Not IsNothing(CurrCompo.refJambCompo) Then LocalDoor.RemoveCompo(CurrCompo, True)
If IsNothing(CurrCompo.refJambCompo) Then
' costruisco sul riferiento la nuova componente inserita
Dim refCompoType As New CompoType(FrameName, FrameNameDDF, Path.GetDirectoryName(FrameFileConfig), FrameSide, FrameFolderName)
' aggiungo la componete sul riferiento passato (caricando la lista dei file di tipo Frame solo per il telaio)
Dim refPartDoor_IsFrame As Boolean = True
If refPartDoor.Door.TypePart.Contains("DO_") Then refPartDoor_IsFrame = False
CurrCompo.refJambCompo = refPartDoor.Door.AddNewCompo(refCompoType, refPartDoor_IsFrame, IndexRefCompo)
CurrCompo.refJambCompo.refCompoDoor = CurrCompo
' definsco se la componente deve essre ribalata (Top-Door2; Bottom-Door1 e una sola anta)
If sSide = "top" And LocalDoor.TypePart.Contains("DO_2") Then
CurrCompo.refJambCompo.OtherDoor = True
ElseIf sSide = "bottom" And LocalDoor.TypePart.Contains("DO_1") And m_DoorNumber <> "1" Then
CurrCompo.refJambCompo.OtherDoor = True
End If
End If
' setto il nome della componente da caricare
If Not IsNothing(CurrCompo.refJambCompo) Then
CurrCompo.refJambCompo.SplitBrandFile(FrameFile)
CurrCompo.refJambCompo.refCompoDoor = CurrCompo
Else
' 50549=File {0} exist, but it is not in the correct Directory!
Dim sMessageError As String = String.Format(EgtMsg(50549), FrameFile)
MessageBox.Show(sMessageError, EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Warning)
CurrCompo.VisibilitiReloadBtn = Visibility.Collapsed
Return False
End If
End If
' assegno i parametri letti dallo script per il corretto posizionamento del pezzo ( solo se il pezzo corrente è un DO_)
If LoadCompoParam(CurrCompo, LocalDoor.TypePart) Then
UpDateCurrCompoJamb(CurrCompo, LocalDoor.TypePart)
ResetSTU()
ResetCompoParam()
Else
Dim Msg As String = String.Format(EgtMsg(50157), CurrCompo.CompoType.Path, MATCHING_FILE_NAME)
MessageBox.Show(Msg, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
End If
' se sono arrivato in fondo significa che il riferiemnto è stato costruito
CurrCompo.VisibilitiReloadBtn = Visibility.Visible
CurrCompo.refJambCompo.VisibilitiReloadBtn = Visibility.Visible
Return True
End Function
#End Region ' CreateRefCompo
' ha lo scopo di creare una copia dei riferimenti dei PartDoor
' per permettere di scrivere in modo più semplice i metodi
Private Sub SetPartDoorCurrAssembly()
m_JambT = Nothing
m_JambB = Nothing
m_JambL = Nothing
m_JambR = Nothing
m_Door1 = Nothing
m_Door2 = Nothing
For IndexPartDoor As Integer = 0 To ListPartDoor.Count - 1
If ListPartDoor(IndexPartDoor).Type.Contains("FT_") Then
m_JambT = ListPartDoor(IndexPartDoor).Door
ElseIf ListPartDoor(IndexPartDoor).Type.Contains("FB_") Then
m_JambB = ListPartDoor(IndexPartDoor).Door
ElseIf ListPartDoor(IndexPartDoor).Type.Contains("FL_") Then
m_JambL = ListPartDoor(IndexPartDoor).Door
ElseIf ListPartDoor(IndexPartDoor).Type.Contains("FR_") Then
m_JambR = ListPartDoor(IndexPartDoor).Door
ElseIf ListPartDoor(IndexPartDoor).Type.Contains("DO_1") Then
m_Door1 = ListPartDoor(IndexPartDoor).Door
ElseIf ListPartDoor(IndexPartDoor).Type.Contains("DO_2") Then
m_Door2 = ListPartDoor(IndexPartDoor).Door
End If
Next
NotifyPropertyChanged("JambExists")
End Sub
Public ReadOnly Property JambExists As Boolean
Get
If Not IsNothing(m_JambL) AndAlso Not IsNothing(m_JambR) AndAlso Not IsNothing(m_JambT) Then
Return True
End If
Return False
End Get
End Property
' gestisce la chimata delle funzioni a seconda della modifica eseguita
#Region "DIMENSIONING"
' Durante la costruzione di un nuovo assemblato, oppure quando viene aggiunta/rimossa un'anta
' una volta creata la prima porta questa funzione calcola le dimensioni del telaio
Public Sub SetNewDimensionAssembly(ByVal Optional IsNewAssembly As Boolean = False)
' permette di creare una copia degli oggetti di tipo PartDoor presenti nell'assemblato
SetPartDoorCurrAssembly()
' se non esiste la prima porta allora non calcolo le dimensioni del telaio
If IsNothing(m_Door1) Then Return
' i parametri che devono ancora essere definiti affinchè funzioni tutto sono
' Size, Swing, Rabbet
If OptionModule.m_ConfigurationSoftware = ConfigType.Door Then Return
SwingJamb()
HeightJamb(IsNewAssembly)
TopBottomWidth()
HeightDoor(IsNewAssembly)
TopRabbetJamb()
HingeRabbetJamb()
BottomRabbetJamb()
MaterialJamb()
End Sub
' riceve il nome del parametro modificato ed associa la funzione per il ridimensionamento
Public Sub SetDimension(sParameter As String, Optional CurrCompo As Compo = Nothing)
If OptionModule.m_ConfigurationSoftware = ConfigType.Door Then Return
' riceve il nome della modifica, e indirizza la funzione preposta alla modifica
Select Case sParameter
Case "CreateRefCompo"
If BuiltReffCompo Then CreateCompoOnJamb(CurrCompo, "")
Case "JambIsCheked"
Map.refAssemblyManagerVM.CreateJamb(Me, False)
Map.refAssemblyManagerVM.LoadOM_M_ET(Me)
Map.refAssemblyManagerVM.CreateAssociation(Me)
SetNewDimensionAssembly()
' UpDateAllCompo()
Map.refSceneManagerVM.RefreshBtn()
Case "Height"
HeightJamb()
HeightDoor()
TopRabbetJamb()
BottomRabbetJamb()
HingeRabbetJamb()
SetVarAssembly()
UpDateAllCompo()
Case "Width"
TopBottomWidth()
TopRabbetJamb()
BottomRabbetJamb()
HingeRabbetJamb()
SetVarAssembly()
UpDateAllCompo()
Case "Thickness"
TopRabbetJamb()
UpDateAllCompo()
Case "Swing"
UpDateCompolistOnJamb()
SwingJamb()
SetPartDoorCurrAssembly()
CreateAssembly(True)
'UpDateAllCompo()
Case "DoorNumber"
ClearRefOnAssembly()
SetPartDoorCurrAssembly()
ReverseDoor()
Map.refAssemblyManagerVM.CreateDoor(Me)
Map.refAssemblyManagerVM.CreateAssociation(Me)
SetPartDoorCurrAssembly()
SetVarAssembly()
ReloadAllCompoDoor1()
ReverseDoor()
UpDateAllCompo()
TopBottomWidth()
SwingJamb()
HeightDoor()
TopRabbetJamb()
End Select
End Sub
#End Region ' Dimensioning
#Region "UpDateRefCompo"
' ricostruisce tutte le componenti del telaio
Public Sub CreateAssembly(Optional bAllDoors As Boolean = False)
If ListPartDoorOfDoor.Count < 1 Then Return
'If Not JambExists Then SetDimension("JambIsCheked")
Dim nIndexDoor As Integer = 0
If Not IsNothing(Map.refPartPageVM.CurrPart) AndAlso Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nDDFPage AndAlso Not bAllDoors Then
If Map.refPartPageVM.CurrPart.TypePart.Contains("DO_") Then
If IsThereModifyCompoParamRef(Map.refPartPageVM.CurrPart.CompoList) Then
' 50550=Every componente on jambs will be relocated, do you want to continue , 50144=Warning
If MessageBox.Show(EgtMsg(50550), EgtMsg(50144), MessageBoxButton.YesNo, MessageBoxImage.Asterisk) = MessageBoxResult.No Then
Return
End If
End If
For IndexCompo = 0 To Map.refPartPageVM.CurrPart.CompoList.Count - 1
CreateCompoOnJamb(Map.refPartPageVM.CurrPart.CompoList(IndexCompo), "")
Next
End If
ElseIf Not IsNothing(Map.refPartPageVM.CurrPart) AndAlso Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nDDFPage AndAlso bAllDoors Then
' verifico per entrmabe le ante se posso procedere
For Each ItemPart In ListPartDoorOfDoor
For IndexCompo = 0 To ItemPart.Door.CompoList.Count - 1
If IsThereModifyCompoParamRef(ItemPart.Door.CompoList) Then
If MessageBox.Show(EgtMsg(50550), EgtMsg(50144), MessageBoxButton.YesNo, MessageBoxImage.Asterisk) = MessageBoxResult.No Then
Return
Else
Exit For
End If
End If
Next
Next
For Each ItemPart In ListPartDoorOfDoor
For IndexCompo = 0 To ItemPart.Door.CompoList.Count - 1
CreateCompoOnJamb(ItemPart.Door.CompoList(IndexCompo), "", ItemPart.Door.TypePart)
' potrebbe capitare che vengano eliminate delle componenti, quindi è meglio controllare
If IndexCompo = ItemPart.Door.CompoList.Count - 1 Then Exit For
Next
Next
End If
Map.refSceneManagerVM.RefreshBtn()
End Sub
' appena verifico che esiste anche solo una componente modificata esco
Private Function IsThereModifyCompoParamRef(ByVal CompoList As ObservableCollection(Of Compo)) As Boolean
For Each ItemCompo In CompoList
If Not IsNothing(ItemCompo.refJambCompo) Then
For Each ItemParam In ItemCompo.refJambCompo.CompoParamList
If ItemParam.IsModifingRefCompoParam Then Return True
Next
End If
Next
Return False
End Function
' è chiamata ogni volta che viene modificato un parametro del general dell'assemblato
Public Sub UpDateAllCompo()
Dim IdexDoorNumber As Integer = 0
IdexDoorNumber = CInt(m_DoorNumber)
If ListPartDoorOfDoor.Count < 1 Then Return
For IndexDoor As Integer = 0 To IdexDoorNumber - 1
For IndexCompo As Integer = 0 To ListPartDoorOfDoor(IndexDoor).Door.CompoList.Count - 1
' per ogni componente di ogni porta, se esiste una componente di riferimento
Dim CurrCompo As Compo = ListPartDoorOfDoor(IndexDoor).Door.CompoList(IndexCompo)
If Not IsNothing(CurrCompo.refJambCompo) Then
' ricerco il file lua che gestisce le associazioni delle componenti
If LoadCompoParam(CurrCompo, ListPartDoorOfDoor(IndexDoor).Door.TypePart) Then
UpDateCurrCompoJamb(CurrCompo, ListPartDoorOfDoor(IndexDoor).Door.TypePart)
ResetCompoParam()
Else
Dim Msg As String = String.Format(EgtMsg(50157), CurrCompo.CompoType.Path, MATCHING_FILE_NAME)
MessageBox.Show(Msg, EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error)
End If
End If
Next
Next
End Sub
' quando carico un assemblato devo ricalcolare tutti i parametri OrigValue
Public Sub UpDateAllOrigValue()
Dim IdexDoorNumber As Integer = 0
IdexDoorNumber = CInt(m_DoorNumber)
If ListPartDoorOfDoor.Count < 1 Then Return
For IndexDoor As Integer = 0 To IdexDoorNumber - 1
For IndexCompo As Integer = 0 To ListPartDoorOfDoor(IndexDoor).Door.CompoList.Count - 1
' per ogni componente di ogni porta, se esiste una componente di riferimento
Dim CurrCompo As Compo = ListPartDoorOfDoor(IndexDoor).Door.CompoList(IndexCompo)
If Not IsNothing(CurrCompo.refJambCompo) Then
' ricerco il file lua che gestisce le associazioni delle componenti
If LoadCompoParam(CurrCompo, ListPartDoorOfDoor(IndexDoor).Door.TypePart) Then
UpdateOrigValue(CurrCompo, ListPartDoorOfDoor(IndexDoor).Door.TypePart)
ResetCompoParam()
End If
End If
Next
Next
End Sub
' Ricevuta la componente Compo aggiorna la refCompo - Usata fino alla versione 2.2e1 del 7/5/2020
Public Sub UpDateCurrCompoJamb_OldVersion(ByRef CurrCompo As Compo, ByRef sCurrTypeDoor As String)
CurrCompo.refJambCompo.IsReadOnly = False
' devo distinguere il caso della componente sulla porta o sul jamb
' se il numero di elementi presenti nella lista riferita al jamb sono diversi da quelli riferiti all'anta
If CurrCompo.refJambCompo.CompoParamList.Count <> CurrCompo.CompoParamList.Count Then Return
' se il primo controllo è andato a buon fine passo al caricamento dei dati
For IndexParam As Integer = 0 To CurrCompo.refJambCompo.CompoParamList.Count - 1
If TypeOf CurrCompo.refJambCompo.CompoParamList(IndexParam) Is TextBoxOnOffParam AndAlso
CurrCompo.CompoParamList(IndexParam).DDFName = CurrCompo.refJambCompo.CompoParamList(IndexParam).DDFName Then
' ho controllato che i nome ddf del parametro sul jamb è lo stesso che sta sull'anta
Dim TBoxPar As TextBoxOnOffParam = DirectCast(CurrCompo.CompoParamList(IndexParam), TextBoxOnOffParam)
Dim TBoxRefPar As TextBoxOnOffParam = DirectCast(CurrCompo.refJambCompo.CompoParamList(IndexParam), TextBoxOnOffParam)
' assegno i valori della componente dell'anta, e ricevo i valori da asseganre alla compente sul jamb
CalcCompoParamValue(TBoxPar.DDFName, TBoxPar.m_Value, TBoxRefPar.m_Value, TBoxRefPar.IsReadOnly, sCurrTypeDoor, CurrCompo.refJambCompo.ConfigurationParameters)
TBoxRefPar.SetIsActive(TBoxPar.IsActive)
ElseIf TypeOf CurrCompo.refJambCompo.CompoParamList(IndexParam) Is ComboBoxOnOffParam AndAlso
CurrCompo.CompoParamList(IndexParam).DDFName = CurrCompo.refJambCompo.CompoParamList(IndexParam).DDFName Then
' ho controllato che i nome ddf del parametro sul jamb è lo stesso che sta sull'anta
' l'unica operazione che eseguo è di abilitare la combobox
Dim CBoxRefPar As ComboBoxOnOffParam = DirectCast(CurrCompo.refJambCompo.CompoParamList(IndexParam), ComboBoxOnOffParam)
CBoxRefPar.IsReadOnly = False
Dim CBoxPar As ComboBoxOnOffParam = DirectCast(CurrCompo.CompoParamList(IndexParam), ComboBoxOnOffParam)
For Each ItemCombo In CBoxRefPar.ItemList
If ItemCombo = CBoxPar.SelItem Then
CBoxRefPar.SetSelItem(ItemCombo)
Exit For
End If
Next
CBoxRefPar.SetIsActive(CBoxPar.IsActive)
ElseIf TypeOf CurrCompo.refJambCompo.CompoParamList(IndexParam) Is TextBoxParam AndAlso
CurrCompo.CompoParamList(IndexParam).DDFName = CurrCompo.refJambCompo.CompoParamList(IndexParam).DDFName Then
' ho controllato che i nome ddf del parametro sul jamb è lo stesso che sta sull'anta
Dim TBoxPar As TextBoxParam = DirectCast(CurrCompo.CompoParamList(IndexParam), TextBoxParam)
Dim TBoxRefPar As TextBoxParam = DirectCast(CurrCompo.refJambCompo.CompoParamList(IndexParam), TextBoxParam)
' assegno i valori della componente dell'anta, e ricevo i valori da asseganre alla compente sul jamb
CalcCompoParamValue(TBoxPar.DDFName, TBoxPar.m_Value, TBoxRefPar.m_Value, TBoxRefPar.IsReadOnly, sCurrTypeDoor, CurrCompo.refJambCompo.ConfigurationParameters)
ElseIf TypeOf CurrCompo.refJambCompo.CompoParamList(IndexParam) Is ComboBoxParam AndAlso
CurrCompo.CompoParamList(IndexParam).DDFName = CurrCompo.refJambCompo.CompoParamList(IndexParam).DDFName Then
' ho controllato che i nome ddf del parametro sul jamb è lo stesso che sta sull'anta
' l'unica operazione che eseguo è di abilitare la combobox
Dim CBoxRefPar As ComboBoxParam = DirectCast(CurrCompo.refJambCompo.CompoParamList(IndexParam), ComboBoxParam)
CBoxRefPar.IsReadOnly = False
Dim CBoxPar As ComboBoxParam = DirectCast(CurrCompo.CompoParamList(IndexParam), ComboBoxParam)
For Each ItemCombo In CBoxRefPar.ItemList
If ItemCombo = CBoxPar.SelItem Then
CBoxRefPar.SetSelItem(ItemCombo)
Exit For
End If
Next
End If
Next
End Sub
' Ricevuta la componente Compo aggiorna la refCompo - In uso dalla versione 2.2e1 del 8/5/2020
Public Sub UpDateCurrCompoJamb(ByRef CurrCompo As Compo, ByRef sCurrTypeDoor As String, Optional bOverWrite As Boolean = True)
CurrCompo.refJambCompo.IsReadOnly = False
' ad ogni parametro (sul compo frame) associo il parametro con lo stesso nome (sul compo door)
For Each ItemCompoRef In CurrCompo.refJambCompo.CompoParamList
' cerco il parametro con lo stesso nome nella componente della porta
For Each ItemCompo In CurrCompo.CompoParamList
' se trovo lo stesso nome
If ItemCompoRef.DDFName = ItemCompo.DDFName Then
' verifico che siano anche dello stesso tipo
If TypeOf ItemCompoRef Is TextBoxOnOffParam AndAlso TypeOf ItemCompo Is TextBoxOnOffParam Then
Dim TBoxPar As TextBoxOnOffParam = DirectCast(ItemCompo, TextBoxOnOffParam)
Dim TBoxRefPar As TextBoxOnOffParam = DirectCast(ItemCompoRef, TextBoxOnOffParam)
' non ricalcolo il parametro
If TBoxRefPar.IsModifingRefCompoParam AndAlso Not bOverWrite Then
CalcCompoParamValue(TBoxPar.DDFName, TBoxPar.m_Value, TBoxRefPar.OrigValue, TBoxRefPar.IsReadOnly, sCurrTypeDoor, CurrCompo.ConfigurationParameters, CurrCompo.refJambCompo.ConfigurationParameters)
Continue For
End If
' assegno i valori della componente dell'anta, e ricevo i valori da asseganre alla compente sul jamb
CalcCompoParamValue(TBoxPar.DDFName, TBoxPar.m_Value, TBoxRefPar.m_Value, TBoxRefPar.IsReadOnly, sCurrTypeDoor, CurrCompo.ConfigurationParameters, CurrCompo.refJambCompo.ConfigurationParameters)
TBoxRefPar.OrigValue = TBoxRefPar.m_Value
TBoxRefPar.SetIsActive(TBoxPar.IsActive)
ElseIf TypeOf ItemCompoRef Is ComboBoxOnOffParam AndAlso TypeOf ItemCompo Is ComboBoxOnOffParam Then
' ho controllato che i nome ddf del parametro sul jamb è lo stesso che sta sull'anta
' l'unica operazione che eseguo è di abilitare la combobox
Dim CBoxRefPar As ComboBoxOnOffParam = DirectCast(ItemCompoRef, ComboBoxOnOffParam)
CBoxRefPar.IsReadOnly = False
Dim CBoxPar As ComboBoxOnOffParam = DirectCast(ItemCompo, ComboBoxOnOffParam)
For Each ItemCombo In CBoxRefPar.ItemList
If ItemCombo = CBoxPar.SelItem Then
CBoxRefPar.SetSelItem(ItemCombo)
CBoxRefPar.OrigItem = CBoxPar.SelItem
Exit For
End If
Next
CBoxRefPar.SetIsActive(CBoxPar.IsActive)
ElseIf TypeOf ItemCompoRef Is TextBoxParam AndAlso TypeOf ItemCompo Is TextBoxParam Then
' ho controllato che i nome ddf del parametro sul jamb è lo stesso che sta sull'anta
Dim TBoxRefPar As TextBoxParam = DirectCast(ItemCompoRef, TextBoxParam)
Dim TBoxPar As TextBoxParam = DirectCast(ItemCompo, TextBoxParam)
If TBoxRefPar.IsModifingRefCompoParam AndAlso Not bOverWrite Then
CalcCompoParamValue(TBoxPar.DDFName, TBoxPar.m_Value, TBoxRefPar.OrigValue, TBoxRefPar.IsReadOnly, sCurrTypeDoor, CurrCompo.ConfigurationParameters, CurrCompo.refJambCompo.ConfigurationParameters)
Continue For
End If
' assegno i valori della componente dell'anta, e ricevo i valori da asseganre alla compente sul jamb
CalcCompoParamValue(TBoxPar.DDFName, TBoxPar.m_Value, TBoxRefPar.m_Value, TBoxRefPar.IsReadOnly, sCurrTypeDoor, CurrCompo.ConfigurationParameters, CurrCompo.refJambCompo.ConfigurationParameters)
TBoxRefPar.OrigValue = TBoxRefPar.m_Value
ElseIf TypeOf ItemCompoRef Is ComboBoxParam AndAlso TypeOf ItemCompo Is ComboBoxParam Then
' ho controllato che i nome ddf del parametro sul jamb è lo stesso che sta sull'anta
' l'unica operazione che eseguo è di abilitare la combobox
Dim CBoxRefPar As ComboBoxParam = DirectCast(ItemCompoRef, ComboBoxParam)
CBoxRefPar.IsReadOnly = False
Dim CBoxPar As ComboBoxParam = DirectCast(ItemCompo, ComboBoxParam)
For Each ItemCombo In CBoxRefPar.ItemList
If ItemCombo = CBoxPar.SelItem Then
CBoxRefPar.SetSelItem(ItemCombo)
CBoxRefPar.OrigItem = CBoxPar.SelItem
Exit For
End If
Next
End If
' passo al parametro successivo della lista del CompoRef
Exit For
End If
Next
Next
End Sub
' carico i valori OrigValue in fase di lettura di un assemblato nuovo
Public Sub UpdateOrigValue(ByRef CurrCompo As Compo, ByRef sCurrTypeDoor As String)
CurrCompo.refJambCompo.IsReadOnly = False
' ad ogni parametro (sul compo frame) associo il parametro con lo stesso nome (sul compo door)
For Each ItemCompoRef In CurrCompo.refJambCompo.CompoParamList
' cerco il parametro con lo stesso nome nella componente della porta
For Each ItemCompo In CurrCompo.CompoParamList
' se trovo lo stesso nome
If ItemCompoRef.DDFName = ItemCompo.DDFName Then
' verifico che siano anche dello stesso tipo
If TypeOf ItemCompoRef Is TextBoxOnOffParam AndAlso TypeOf ItemCompo Is TextBoxOnOffParam Then
Dim TBoxPar As TextBoxOnOffParam = DirectCast(ItemCompo, TextBoxOnOffParam)
Dim TBoxRefPar As TextBoxOnOffParam = DirectCast(ItemCompoRef, TextBoxOnOffParam)
' assegno i valori della componente dell'anta, e ricevo i valori da asseganre alla compente sul jamb
CalcCompoParamValue(TBoxPar.DDFName, TBoxPar.m_Value, TBoxRefPar.OrigValue, TBoxRefPar.IsReadOnly, sCurrTypeDoor, CurrCompo.ConfigurationParameters, CurrCompo.refJambCompo.ConfigurationParameters)
' confronto il valore calcolato con il parametro caricato da DDF
If Trim(TBoxRefPar.m_Value) <> Trim(TBoxRefPar.OrigValue) Then
Dim dValue As Double
Dim dOrigValue As Double
If Not IsNothing(TBoxRefPar.m_Value) AndAlso Not IsNothing(TBoxRefPar.OrigValue) Then
StringToDouble(TBoxRefPar.m_Value, dValue)
StringToDouble(TBoxRefPar.OrigValue, dOrigValue)
If dValue <> dOrigValue Then
TBoxRefPar.IsModifingRefCompoParam = True
Else
TBoxRefPar.IsModifingRefCompoParam = False
End If
End If
'TBoxRefPar.IsModifingRefCompoParam = True
End If
ElseIf TypeOf ItemCompoRef Is TextBoxParam AndAlso TypeOf ItemCompo Is TextBoxParam Then
' ho controllato che i nome ddf del parametro sul jamb è lo stesso che sta sull'anta
Dim TBoxRefPar As TextBoxParam = DirectCast(ItemCompoRef, TextBoxParam)
Dim TBoxPar As TextBoxParam = DirectCast(ItemCompo, TextBoxParam)
' assegno i valori della componente dell'anta, e ricevo i valori da asseganre alla compente sul jamb
CalcCompoParamValue(TBoxPar.DDFName, TBoxPar.m_Value, TBoxRefPar.OrigValue, TBoxRefPar.IsReadOnly, sCurrTypeDoor, CurrCompo.ConfigurationParameters, CurrCompo.refJambCompo.ConfigurationParameters)
' confronto il valore calcolato con il parametro caricato da DDF
If Trim(TBoxRefPar.m_Value) <> Trim(TBoxRefPar.OrigValue) Then
Dim dValue As Double
Dim dOrigValue As Double
If Not IsNothing(TBoxRefPar.m_Value) AndAlso Not IsNothing(TBoxRefPar.OrigValue) Then
StringToDouble(TBoxRefPar.m_Value, dValue)
StringToDouble(TBoxRefPar.OrigValue, dOrigValue)
If dValue <> dOrigValue Then
TBoxRefPar.IsModifingRefCompoParam = True
Else
TBoxRefPar.IsModifingRefCompoParam = False
End If
End If
'TBoxRefPar.IsModifingRefCompoParam = True
End If
End If
' passo al parametro successivo della lista del CompoRef
Exit For
End If
Next
Next
End Sub
' copia i parametri di una componente (PrecCompo) su un'altra componente (NewCompo, solo se hanno lo stesso nome)
Public Sub CopyParam(ByRef PrecCompo As Compo, ByRef NewCompo As Compo)
If PrecCompo.TemplateSelItem <> NewCompo.TemplateSelItem Then Return
For IndexParam As Integer = 0 To PrecCompo.CompoParamList.Count - 1
If TypeOf PrecCompo.CompoParamList(IndexParam) Is TextBoxOnOffParam AndAlso
PrecCompo.CompoParamList(IndexParam).DDFName = NewCompo.CompoParamList(IndexParam).DDFName Then
Dim TBoxPar As TextBoxOnOffParam = DirectCast(PrecCompo.CompoParamList(IndexParam), TextBoxOnOffParam)
Dim TBoxNewPar As TextBoxOnOffParam = DirectCast(NewCompo.CompoParamList(IndexParam), TextBoxOnOffParam)
If TBoxPar.EnableCopy Then
TBoxNewPar.SetValue(TBoxPar.Value)
TBoxNewPar.SetIsActive(TBoxPar.IsActive)
End If
ElseIf TypeOf PrecCompo.CompoParamList(IndexParam) Is TextBoxParam AndAlso
PrecCompo.CompoParamList(IndexParam).DDFName = NewCompo.CompoParamList(IndexParam).DDFName Then
Dim TBoxPar As TextBoxParam = DirectCast(PrecCompo.CompoParamList(IndexParam), TextBoxParam)
Dim TBoxNewPar As TextBoxParam = DirectCast(NewCompo.CompoParamList(IndexParam), TextBoxParam)
If TBoxPar.EnableCopy Then
TBoxNewPar.SetValue(TBoxPar.Value)
End If
ElseIf TypeOf PrecCompo.CompoParamList(IndexParam) Is ComboBoxOnOffParam AndAlso
PrecCompo.CompoParamList(IndexParam).DDFName = NewCompo.CompoParamList(IndexParam).DDFName Then
Dim CBoxPar As ComboBoxOnOffParam = DirectCast(PrecCompo.CompoParamList(IndexParam), ComboBoxOnOffParam)
Dim CBoxNewPar As ComboBoxOnOffParam = DirectCast(NewCompo.CompoParamList(IndexParam), ComboBoxOnOffParam)
If CBoxNewPar.EnableCopy Then
CBoxNewPar.SetSelItem(CBoxNewPar.ItemList(CBoxPar.ItemList.IndexOf(CBoxPar.SelItem)))
CBoxNewPar.SetIsActive(CBoxPar.IsActive)
End If
ElseIf TypeOf PrecCompo.CompoParamList(IndexParam) Is ComboBoxParam AndAlso
PrecCompo.CompoParamList(IndexParam).DDFName = NewCompo.CompoParamList(IndexParam).DDFName Then
Dim CBoxPar As ComboBoxParam = DirectCast(PrecCompo.CompoParamList(IndexParam), ComboBoxParam)
Dim CBoxNewPar As ComboBoxParam = DirectCast(NewCompo.CompoParamList(IndexParam), ComboBoxParam)
If CBoxNewPar.EnableCopy Then
CBoxNewPar.SetSelItem(CBoxNewPar.ItemList(CBoxNewPar.ItemList.IndexOf(CBoxPar.SelItem)))
End If
End If
Next
End Sub
#End Region ' UpDateRefCompo
#Region "HEIGHT"
' calcola l'altezza dei JambLeft e JambRight
Public Sub HeightJamb(ByVal Optional IsNewAssembly As Boolean = False)
' se ho impostanto l'area di lavoro non modifico l'altezza dei jamb
If Dimension Then
If Not IsNothing(m_JambL) Then m_JambL.SetHeight(m_AssemblyHeight)
If Not IsNothing(m_JambR) Then m_JambR.SetHeight(m_AssemblyHeight)
Return
End If
' vericfico che almeno uno su due esista
If (IsNothing(m_JambL) OrElse IsNothing(m_JambR)) AndAlso IsNothing(m_Door1) Then Return
' se almeno un jamb esiste continuo
Dim dLightUp As Double
Dim dLightBottom As Double
Dim dThicknessHead As Double
Dim dHeight As Double
Dim dOverlapTop As Double
Dim dThicknessJamb As Double
Dim dThicknessBottm As Double
Dim dOverlapBottom As Double
StringToDouble(LightUp, dLightUp)
StringToDouble(LightBottom, dLightBottom)
StringToDouble(ThicknessHead, dThicknessHead)
StringToDouble(m_Door1.Height, dHeight)
StringToDouble(ThicknessBottom, dThicknessBottm)
StringToDouble(OverlapBottom, dOverlapBottom)
'If IsNothing(Map.refPartPageVM.CurrPart) OrElse Not Map.refPartPageVM.CurrPart.TypePart.Contains("DO_") Then
' StringToDouble(m_Door1.Height, dHeight)
'Else
' StringToDouble(Map.refPartPageVM.CurrPart.Height, dHeight)
'End If
If Not IsNothing(Map.refPartPageVM.CurrPart) AndAlso Map.refPartPageVM.CurrPart.TypePart.Contains("DO_") AndAlso
Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nDDFPage AndAlso
Not IsNewAssembly Then
StringToDouble(Map.refPartPageVM.CurrPart.Height, dHeight)
Else
StringToDouble(m_Door1.Height, dHeight)
End If
StringToDouble(OverlapTop, dOverlapTop)
StringToDouble(Width, dThicknessJamb)
Dim HJamb As Double = dLightBottom + dHeight + dLightUp + dThicknessHead - dOverlapTop
Dim HJambExterior As Double = HJamb + dThicknessBottm - dOverlapBottom
' se è exterior
If Map.refAssemblyPageVM.CurrAssembly.Exterior Then
If Not IsNothing(m_JambL) Then m_JambL.SetHeight(DoubleToString(HJambExterior, 4))
If Not IsNothing(m_JambR) Then m_JambR.SetHeight(DoubleToString(HJambExterior, 4))
Else
If Not IsNothing(m_JambL) Then m_JambL.SetHeight(DoubleToString(HJamb, 4))
If Not IsNothing(m_JambR) Then m_JambR.SetHeight(DoubleToString(HJamb, 4))
End If
NotifyPropertyChanged("AssemblyHeight")
End Sub
' Ricalcola la dimensione di tutte le porte ricevendo come valore esterno la dimensione della porta modificata
Public Sub HeightDoor(ByVal Optional IsNewAssembly As Boolean = False)
Dim HeightDoor As String = String.Empty
Dim nTH As Double = 0
Dim nTB As Double = 0
Dim nLU As Double = 0
Dim nLB As Double = 0
Dim nOLT As Double = 0
Dim nOLB As Double = 0
StringToDouble(m_LightUp, nLU)
StringToDouble(m_LightBottom, nLB)
StringToDouble(m_ThicknessHead, nTH)
StringToDouble(m_OverlapTop, nOLT)
StringToDouble(m_ThicknessBottom, nTB)
StringToDouble(m_OverlapBottom, nOLB)
' carico il valore che è stato modificato
If Not IsNewAssembly AndAlso Not IsNothing(Map.refPartPageVM.CurrPart) AndAlso Map.refPartPageVM.CurrPart.TypePart.Contains("DO_") Then
HeightDoor = Map.refPartPageVM.CurrPart.Height
Else
' altrienti prendo quello della prima porta
If Not IsNothing(m_Door1) Then
HeightDoor = m_Door1.Height
Else
Return
End If
End If
' devo verificare che l'altezza che è stata imposta non sia maggiore di quella consentita
If Dimension Then
Dim nHeightDoor As Double
' se riesco ad eseguire la conversione numerica
If StringToDouble(HeightDoor, nHeightDoor) Then
Dim nTotalHeight As Double = 0
StringToDouble(m_AssemblyHeight, nTotalHeight)
' dimensiono la porta sempre in funzione delle dimensioni dell'assemblato
nHeightDoor = nTotalHeight - (nLU + nLB) - nTH
If Exterior Then
nHeightDoor = nHeightDoor + nOLT + nOLB - nTB
End If
m_Door1.SetHeight(DoubleToString(nHeightDoor, 4))
HeightDoor = m_Door1.Height
End If
End If
Dim nDN As Integer = 1
Int32.TryParse(m_DoorNumber, nDN)
If nDN < 2 Then Return
For Each PDOfDoor In ListPartDoorOfDoor
PDOfDoor.Door.SetHeight(HeightDoor)
Next
End Sub
' riassegna il TicnkessHead
Public Sub HeightJambTop()
Dim nTH As Double = 0
Dim nTB As Double = 0
Dim nLU As Double = 0
Dim nLB As Double = 0
Dim nOLT As Double = 0
Dim nOLB As Double = 0
Dim nHD As Double = 0
StringToDouble(m_LightUp, nLU)
StringToDouble(m_LightBottom, nLB)
StringToDouble(m_ThicknessHead, nTH)
StringToDouble(m_OverlapTop, nOLT)
StringToDouble(m_OverlapBottom, nOLB)
StringToDouble(m_ThicknessBottom, nTB)
If Not IsNothing(m_JambT) Then
m_JambT.SetHeight(ThicknessHead)
End If
If IsNothing(m_Door1) Then Return
StringToDouble(m_Door1.Height, nHD)
' se non sono definite le quote esterne del telaio esco
If Not Dimension Then Return
Dim nTotalHeight As Double = 0
StringToDouble(AssemblyHeight, nTotalHeight)
If nTotalHeight < nTH Then
' se le quote sono totalmente sbagliate
nTH = nTotalHeight - (nLU + nLB) - nHD
If Exterior Then
nTH = nTH + nOLT - nTB
End If
ThicknessHead = DoubleToString(nTH, 4)
Else
' ridimensiono la porta
nHD = nTotalHeight - (nLU + nLB) - (nTH - nOLT)
If Exterior Then
nHD = nHD + nOLT - nTB
End If
For Each ItemListPDOD In ListPartDoorOfDoor
ItemListPDOD.Door.SetHeight(DoubleToString(nHD, 4))
Next
End If
End Sub
' riassegna il TicnkessBottom
Public Sub HeightJambBottom()
Dim nTB As Double = 0
Dim nTH As Double = 0
Dim nLU As Double = 0
Dim nLB As Double = 0
Dim nOLB As Double = 0
Dim nOLT As Double = 0
Dim nHD As Double = 0
StringToDouble(m_LightUp, nLU)
StringToDouble(m_LightBottom, nLB)
StringToDouble(m_ThicknessBottom, nTB)
StringToDouble(m_OverlapBottom, nOLB)
StringToDouble(m_OverlapTop, nOLT)
StringToDouble(m_ThicknessHead, nTH)
If Not IsNothing(m_JambB) Then
m_JambB.SetHeight(ThicknessBottom)
End If
If IsNothing(m_Door1) Then Return
StringToDouble(m_Door1.Height, nHD)
' se non sono definite le quote esterne del telaio esco
If Not Dimension Then Return
Dim nTotalHeight As Double = 0
StringToDouble(AssemblyHeight, nTotalHeight)
If nTotalHeight < nTB Then
' se lo spessore è esageratamente grande è un erore
nTB = nTotalHeight - (nLU + nLB) - nHD - nTH + nOLT
ThicknessBottom = DoubleToString(nTB, 4)
Else
nHD = nTotalHeight - (nLU + nLB) - (nTH - nOLT) - (nTB - nOLB)
For Each ItemListPDOD In ListPartDoorOfDoor
ItemListPDOD.Door.SetHeight(DoubleToString(nHD, 4))
Next
End If
End Sub
#End Region ' Height
#Region "WIDTH"
' calcola la larghezza dei jamb orizzonatli
Private Sub TopBottomWidth()
' vericfico che almeno uno su tre esista
If (IsNothing(m_JambT) OrElse IsNothing(m_JambB)) AndAlso IsNothing(m_Door1) Then Return
' se almeno uno esiste
Dim dLightHinge As Double
Dim dLightLock As Double
Dim dOverlapLock As Double
Dim dOverlapHinge As Double
Dim dWidth1 As Double
Dim dWidth2 As Double
Dim dActualWidth As Double
Dim dThicknessJamb As Double
StringToDouble(Map.refAssemblyPageVM.CurrAssembly.LightHinge, dLightHinge)
StringToDouble(Map.refAssemblyPageVM.CurrAssembly.LightLock, dLightLock)
StringToDouble(Map.refAssemblyPageVM.CurrAssembly.OverlapLock, dOverlapLock)
StringToDouble(Map.refAssemblyPageVM.CurrAssembly.OverlapHinge, dOverlapHinge)
StringToDouble(Map.refAssemblyPageVM.CurrAssembly.Thickness, dThicknessJamb)
StringToDouble(m_Door1.Width, dWidth1)
Select Case m_DoorNumber
Case "1"
dActualWidth = dLightHinge + dLightLock
If Not IsNothing(m_JambB) Then m_JambB.SetWidth(DoubleToString(dWidth1 + dActualWidth, 4))
If Not IsNothing(m_JambT) Then m_JambT.SetWidth(DoubleToString(dWidth1 + dActualWidth, 4))
Case "2"
If Not IsNothing(m_Door2) Then
StringToDouble(m_Door2.Width, dWidth2)
Else
' se la seconda anta non esiste allora devo ridimensionare il progetto ad una sola anta
For Each sNumber In m_DoorListNumber
If Trim(sNumber) = "1" Then
m_DoorNumber = sNumber
Return
End If
Next
Return
End If
' se la seconda anta esiste allora procedo nel calcolo
dActualWidth = dLightHinge + dLightHinge + dLightLock + dWidth1
If Not IsNothing(m_JambB) Then m_JambB.SetWidth(DoubleToString(dWidth2 + dActualWidth, 4))
If Not IsNothing(m_JambT) Then m_JambT.SetWidth(DoubleToString(dWidth2 + dActualWidth, 4))
End Select
NotifyPropertyChanged("AssemblyWidth")
End Sub
' calcola la larghezza dei Jamb laterali
Public Sub SetWidthJamb()
If Not IsNothing(m_JambR) Then m_JambR.SetWidth(m_Width)
If Not IsNothing(m_JambL) Then m_JambL.SetWidth(m_Width)
'If Not IsNothing(m_JambB) Then m_JambB.Height = m_Width
' ricalcolo la dimensione dell'anta
If Not Dimension Then Return
'Dim DO_1 As PartDoor = Map.refAssemblyManagerVM.ReserchPartDoor("DO_1")
'Dim DO_2 As PartDoor = Map.refAssemblyManagerVM.ReserchPartDoor("DO_2")
Dim LL As String = LightLock
Dim LH As String = LightHinge
Dim JW As String = Width
Dim TotW As String = m_AssemblyWidth
If Not IsNothing(m_Door1) Then
Dim nDO_1Width As Double = 0
Dim nDO_2Width As Double = 0
StringToDouble(m_Door1.Width, nDO_1Width)
Dim nJW As Double = 0
StringToDouble(JW, nJW)
Dim nLL As Double = 0
StringToDouble(LL, nLL)
Dim nLH As Double = 0
StringToDouble(LH, nLH)
Dim nTotW As Double = 0
StringToDouble(TotW, nTotW)
' due ante
If Not IsNothing(m_Door2) Then
' la seconda anta viene ricalcolata mantenedo fissa la dimensione della prima
StringToDouble(m_Door2.Width, nDO_2Width)
nDO_2Width = nTotW - (nLL + nLH * 2 + 2 * nJW + nDO_1Width)
If Exterior Then
Dim nOLL As Double = 0
StringToDouble(OverlapLock, nOLL)
Dim nOLH As Double = 0
StringToDouble(OverlapHinge, nOLH)
nDO_2Width = nDO_2Width + 2 * nOLH
End If
m_Door2.SetWidth(DoubleToString(nDO_2Width, 4))
Else
' singol anta
nDO_1Width = nTotW - (nLL + nLH + 2 * nJW)
If Exterior Then
Dim nOLL As Double = 0
StringToDouble(OverlapLock, nOLL)
Dim nOLH As Double = 0
StringToDouble(OverlapHinge, nOLH)
nDO_1Width = nDO_1Width + nOLH + nOLL
End If
m_Door1.SetWidth(DoubleToString(nDO_1Width, 4))
End If
End If
TopBottomWidth()
'm_BottomJamb.SetHeight(m_Width)
'm_TopJamb.SetHeight(m_ThicknessHead)
'm_LeftJamb.SetWidth(m_Width)
'm_RightJamb.SetWidth(m_Width)
End Sub
#End Region ' Width
#Region "THICKNESS"
' calcola la dimensione spessore dei Jamb (per tutti lo stesso)
Public Sub SetThicKnessJamb()
If Not IsNothing(m_JambB) Then
If m_Exterior Then
m_JambB.Thickness = m_DepthBottom
Else
m_JambB.Thickness = m_Thickness
End If
End If
If Not IsNothing(m_JambT) Then m_JambT.Thickness = m_Thickness
If Not IsNothing(m_JambR) Then m_JambR.Thickness = m_Thickness
If Not IsNothing(m_JambR) Then m_JambL.Thickness = m_Thickness
End Sub
#End Region ' Thickness
#Region "SWING"
' se sulla porta singola avviene cambio swing (da LeftHand a RightHand) allora devo invertire i Jamb laterali
' se eistono entrambi i Jamb laterali inverto allora li inverto
Public Sub UpDateCompolistOnJamb()
Dim sSwing1 As SwingItemTypeList = Nothing
' in AssemblyManager ho assegnato ai Jamb la lista completa degli swing
For Each Item In OptionModule.m_SwingTypeList
If Trim(m_Door1.SwingAlias.AliasName) = Trim(Item) Then
OptionModule.SetCurrSwing(sSwing1, Item)
Exit For
End If
Next
If IsNothing(sSwing1) Then Return
Select Case DoorNumber
Case "1"
' passo da un'anta LeftHand ad una RightHand
If Not IsNothing(m_JambL) Then
If (m_JambL.SwingAlias.Name.Contains("LH") And sSwing1.Name.Contains("RH")) OrElse
(m_JambL.SwingAlias.Name.Contains("RH") And sSwing1.Name.Contains("LH")) Then
If Not IsNothing(m_JambR) Then
Dim TempJambL As Part = Map.refAssemblyManagerVM.ReserchPartDoor("FL_").Door.ShallowCopy()
Dim TempJambR As Part = Map.refAssemblyManagerVM.ReserchPartDoor("FR_").Door.ShallowCopy()
TempJambR.IsActive = TempJambL.IsActive
TempJambL.IsActive = Map.refAssemblyManagerVM.ReserchPartDoor("FR_").Door.IsActive
TempJambR.TypePart = ConstGen.PART_FRAME_LEFT
Map.refAssemblyManagerVM.ReserchPartDoor("FL_").Door = TempJambR
TempJambL.TypePart = ConstGen.PART_FRAME_RIGHT
Map.refAssemblyManagerVM.ReserchPartDoor("FR_").Door = TempJambL
' aggiorno le copie presenti nell'assemblato
SetPartDoorCurrAssembly()
End If
End If
End If
Case "2"
' passo da un'anta Active ad una Inactive
If IsNothing(m_Door2) Then Return
' sicuramente la porta corrente è quella modificata
If Map.refPartPageVM.CurrPart.TypePart.Contains("DO_1") Then
SwingDoor(m_Door2, m_Door1)
Else
SwingDoor(m_Door1, m_Door2)
End If
' in AssemblyManager ho assegnato ai Jamb la lista completa degli swing
For Each Item In OptionModule.m_SwingTypeList
If Trim(m_Door1.SwingAlias.AliasName) = Trim(Item) Then
OptionModule.SetCurrSwing(sSwing1, Item)
Exit For
End If
Next
If Not IsNothing(m_JambL) Then
If (m_JambL.SwingAlias.Name.Contains("I") And Not sSwing1.Name.Contains("I")) OrElse
(Not m_JambL.SwingAlias.Name.Contains("I") And sSwing1.Name.Contains("I")) Then
Dim TempDoor1 As Part = Map.refAssemblyManagerVM.ReserchPartDoor("DO_1").Door.ShallowCopy()
Dim TempDoor2 As Part = Map.refAssemblyManagerVM.ReserchPartDoor("DO_2").Door.ShallowCopy()
TempDoor2.IsActive = TempDoor1.IsActive
TempDoor1.IsActive = Map.refAssemblyManagerVM.ReserchPartDoor("DO_2").Door.IsActive
TempDoor2.TypePart = "DO_1"
Map.refAssemblyManagerVM.ReserchPartDoor("DO_1").Door = TempDoor2
Map.refAssemblyManagerVM.ReserchPartDoor("DO_1").Door.refPartDoor = Map.refAssemblyManagerVM.ReserchPartDoor("DO_1")
Map.refAssemblyManagerVM.ReserchPartDoor("DO_1").Door.SwingTypeList = OptionModule.m_SwingTypeListLeftDoor
Map.refAssemblyManagerVM.ReserchPartDoor("DO_1").Door.SetSwing(TempDoor1.Swing)
TempDoor1.TypePart = "DO_2"
Map.refAssemblyManagerVM.ReserchPartDoor("DO_2").Door = TempDoor1
Map.refAssemblyManagerVM.ReserchPartDoor("DO_2").Door.refPartDoor = Map.refAssemblyManagerVM.ReserchPartDoor("DO_2")
Map.refAssemblyManagerVM.ReserchPartDoor("DO_2").Door.SwingTypeList = OptionModule.m_SwingTypeListRightDoor
SwingDoor(Map.refAssemblyManagerVM.ReserchPartDoor("DO_2").Door, Map.refAssemblyManagerVM.ReserchPartDoor("DO_1").Door)
If Not IsNothing(m_JambR) Then
Dim TempJambL As Part = Map.refAssemblyManagerVM.ReserchPartDoor("FL_").Door.ShallowCopy()
Dim TempJambR As Part = Map.refAssemblyManagerVM.ReserchPartDoor("FR_").Door.ShallowCopy()
TempJambR.IsActive = TempJambL.IsActive
TempJambL.IsActive = Map.refAssemblyManagerVM.ReserchPartDoor("FR_").Door.IsActive
TempJambR.TypePart = ConstGen.PART_FRAME_LEFT
Map.refAssemblyManagerVM.ReserchPartDoor("FL_").Door = TempJambR
TempJambL.TypePart = ConstGen.PART_FRAME_RIGHT
Map.refAssemblyManagerVM.ReserchPartDoor("FR_").Door = TempJambL
End If
' aggiorno le copie presenti nell'assemblato
SetPartDoorCurrAssembly()
End If
If Map.refPartPageVM.CurrPart.TypePart.Contains("DO_1") Then
Map.refPartPageVM.CurrPart = m_Door1
Else
Map.refPartPageVM.CurrPart = m_Door2
End If
End If
End Select
End Sub
Public Sub MaterialJamb()
If Not IsNothing(m_JambB) Then
m_JambB.SetMaterial(OptionModule.m_CurrMaterial)
'CreateNewPropertiesListJamb(m_JambB.PropertiesList, m_JambB.SelectedMaterial)
CreateNewPropertiesList(m_JambB)
End If
If Not IsNothing(m_JambT) Then
m_JambT.SetMaterial(OptionModule.m_CurrMaterial)
'CreateNewPropertiesListJamb(m_JambT.PropertiesList, m_JambT.SelectedMaterial)
CreateNewPropertiesList(m_JambT)
End If
If Not IsNothing(m_JambR) Then
m_JambR.SetMaterial(OptionModule.m_CurrMaterial)
'CreateNewPropertiesListJamb(m_JambR.PropertiesList, m_JambR.SelectedMaterial)
CreateNewPropertiesList(m_JambR)
End If
If Not IsNothing(m_JambR) Then
m_JambL.SetMaterial(OptionModule.m_CurrMaterial)
'CreateNewPropertiesListJamb(m_JambL.PropertiesList, m_JambL.SelectedMaterial)
CreateNewPropertiesList(m_JambL)
End If
End Sub
' assegna gli swing ai jamb
Public Sub SwingJamb()
' se la prima anta non esiste allora interrompo
If IsNothing(m_Door1) Then Return
Dim sSwing1 As String = String.Empty
' in AssemblyManager assegno ai Jamb la lista completa degli swing
For Each Item In OptionModule.m_SwingTypeList
If Trim(m_Door1.SwingAlias.AliasName) = Trim(Item) Then
sSwing1 = Item
Exit For
End If
Next
Select Case DoorNumber
Case "1"
If Not IsNothing(m_JambB) Then m_JambB.SetSwing(sSwing1)
If Not IsNothing(m_JambT) Then m_JambT.SetSwing(sSwing1)
If Not IsNothing(m_JambL) Then m_JambL.SetSwing(sSwing1)
If Not IsNothing(m_JambR) Then m_JambR.SetSwing(sSwing1)
If Exterior Then
' se di tipo LeftHand
If Not IsNothing(m_JambL) AndAlso Not IsNothing(m_JambR) AndAlso m_JambL.SwingAlias.Name.Contains("LH") Then
m_JambL.TypePart = ConstGen.PART_FRAME_LEFT & ConstGen.HINGE & ConstGen.EXTERIOR
m_JambR.TypePart = ConstGen.PART_FRAME_RIGHT & ConstGen.LOCK & ConstGen.EXTERIOR
Else
If Not IsNothing(m_JambL) Then m_JambL.TypePart = ConstGen.PART_FRAME_LEFT & ConstGen.LOCK & ConstGen.EXTERIOR
If Not IsNothing(m_JambR) Then m_JambR.TypePart = ConstGen.PART_FRAME_RIGHT & ConstGen.HINGE & ConstGen.EXTERIOR
End If
If Not IsNothing(m_JambB) Then m_JambB.TypePart = ConstGen.PART_FRAME_BOTTOM & ConstGen.BOTTOM & ConstGen.EXTERIOR
If Not IsNothing(m_JambT) Then m_JambT.TypePart = ConstGen.PART_FRAME_TOP & ConstGen.TOP & ConstGen.EXTERIOR
Else
If Not IsNothing(m_JambL) AndAlso Not IsNothing(m_JambR) AndAlso m_JambL.SwingAlias.Name.Contains("LH") Then
m_JambL.TypePart = ConstGen.PART_FRAME_LEFT & ConstGen.HINGE
m_JambR.TypePart = ConstGen.PART_FRAME_RIGHT & ConstGen.LOCK
Else
If Not IsNothing(m_JambL) Then m_JambL.TypePart = ConstGen.PART_FRAME_LEFT & ConstGen.LOCK
If Not IsNothing(m_JambR) Then m_JambR.TypePart = ConstGen.PART_FRAME_RIGHT & ConstGen.HINGE
End If
If Not IsNothing(m_JambB) Then m_JambB.TypePart = ConstGen.PART_FRAME_BOTTOM & ConstGen.BOTTOM
If Not IsNothing(m_JambT) Then m_JambT.TypePart = ConstGen.PART_FRAME_TOP & ConstGen.TOP
End If
Case "2"
If IsNothing(m_Door2) Then
' se la seconda anta non esiste allora devo ridimensionare il progetto ad una sola anta
For Each sNumber In m_DoorListNumber
If Trim(sNumber) = "1" Then
m_DoorNumber = sNumber
Return
End If
Next
Return
End If
' sicuramente la porta corrente è quella modificata
If Not IsNothing(Map.refPartPageVM.CurrPart) AndAlso Map.refPartPageVM.CurrPart.TypePart.Contains("DO_1") Then
SwingDoor(m_Door2, m_Door1)
Else
SwingDoor(m_Door1, m_Door2)
End If
' ricerco nell'elenco degli swing
Dim sSwing2 As String = String.Empty
' in AssemblyManager assegno ai Jamb la lista completa degli swing
For Each Item In OptionModule.m_SwingTypeList
If Trim(m_Door2.SwingAlias.Name) = Trim(Item) Then
sSwing2 = Item
Exit For
End If
Next
' assegno gli swing
If Not IsNothing(m_JambB) Then m_JambB.SetSwing(sSwing2)
If Not IsNothing(m_JambT) Then m_JambT.SetSwing(sSwing1)
If Not IsNothing(m_JambL) Then m_JambL.SetSwing(sSwing1)
If Not IsNothing(m_JambR) Then m_JambR.SetSwing(sSwing2)
' assegno il nome del tipo completo
If Exterior Then
If Not IsNothing(m_JambL) Then m_JambL.TypePart = ConstGen.PART_FRAME_LEFT & ConstGen.HINGE & ConstGen.EXTERIOR
If Not IsNothing(m_JambR) Then m_JambR.TypePart = ConstGen.PART_FRAME_RIGHT & ConstGen.HINGE & ConstGen.EXTERIOR
If Not IsNothing(m_JambB) Then m_JambB.TypePart = ConstGen.PART_FRAME_BOTTOM & ConstGen.BOTTOM & ConstGen.EXTERIOR
If Not IsNothing(m_JambT) Then m_JambT.TypePart = ConstGen.PART_FRAME_TOP & ConstGen.TOP & ConstGen.EXTERIOR
Else
If Not IsNothing(m_JambL) Then m_JambL.TypePart = ConstGen.PART_FRAME_LEFT & ConstGen.HINGE
If Not IsNothing(m_JambR) Then m_JambR.TypePart = ConstGen.PART_FRAME_RIGHT & ConstGen.HINGE
If Not IsNothing(m_JambB) Then m_JambB.TypePart = ConstGen.PART_FRAME_BOTTOM & ConstGen.BOTTOM
If Not IsNothing(m_JambT) Then m_JambT.TypePart = ConstGen.PART_FRAME_TOP & ConstGen.TOP
End If
End Select
End Sub
' elimina tutti i riferimenti esistenti
Public Sub ClearRefOnAssembly()
' elimino tutti i riferimenti esistenti
If Not IsNothing(m_Door1) Then
For Each ItemCompo In m_Door1.CompoList
If Not IsNothing(ItemCompo.refJambCompo) Then
m_Door1.RemoveCompo(ItemCompo, True)
End If
Next
End If
' elimino tutti i riferimenti esistenti
If Not IsNothing(m_Door2) Then
For Each ItemCompo In m_Door2.CompoList
If Not IsNothing(ItemCompo.refJambCompo) Then
m_Door2.RemoveCompo(ItemCompo, True)
End If
Next
End If
End Sub
' costruisce i riferminti della prima anta
Public Sub ReloadAllCompoDoor1()
If IsNothing(m_Door1) Then Return
' ricalcolo tutti i riferimenti
Map.refPartPageVM.CurrPart = m_Door1
For Each ItemCompo In m_Door1.CompoList
CreateCompoOnJamb(ItemCompo, "")
Next
End Sub
' inverte la prima anta con la seconda anta
Public Sub ReverseDoor()
If IsNothing(m_Door1) OrElse IsNothing(m_Door2) Then Return
If Not m_Door1.SwingAlias.Name.Contains("I") Then Return
' copio l'anta uno al posto dell'anta due e viceversa
Dim TempDoor1 As Part = Map.refAssemblyManagerVM.ReserchPartDoor("DO_1").Door.ShallowCopy()
Dim TempDoor2 As Part = Map.refAssemblyManagerVM.ReserchPartDoor("DO_2").Door.ShallowCopy()
TempDoor2.IsActive = TempDoor1.IsActive
TempDoor1.IsActive = Map.refAssemblyManagerVM.ReserchPartDoor("DO_2").Door.IsActive
TempDoor2.TypePart = "DO_1"
Map.refAssemblyManagerVM.ReserchPartDoor("DO_1").Door = TempDoor2
Map.refAssemblyManagerVM.ReserchPartDoor("DO_1").Door.refPartDoor = Map.refAssemblyManagerVM.ReserchPartDoor("DO_1")
Map.refAssemblyManagerVM.ReserchPartDoor("DO_1").Door.SwingTypeList = OptionModule.m_SwingTypeListLeftDoor
Map.refAssemblyManagerVM.ReserchPartDoor("DO_1").Door.SetSwing(TempDoor1.Swing)
TempDoor1.TypePart = "DO_2"
Map.refAssemblyManagerVM.ReserchPartDoor("DO_2").Door = TempDoor1
Map.refAssemblyManagerVM.ReserchPartDoor("DO_2").Door.refPartDoor = Map.refAssemblyManagerVM.ReserchPartDoor("DO_2")
Map.refAssemblyManagerVM.ReserchPartDoor("DO_2").Door.SwingTypeList = OptionModule.m_SwingTypeListRightDoor
SwingDoor(Map.refAssemblyManagerVM.ReserchPartDoor("DO_2").Door, Map.refAssemblyManagerVM.ReserchPartDoor("DO_1").Door)
If IsNothing(m_JambR) OrElse IsNothing(m_JambL) Then Return
Dim TempJambL As Part = Map.refAssemblyManagerVM.ReserchPartDoor("FL_").Door.ShallowCopy()
Dim TempJambR As Part = Map.refAssemblyManagerVM.ReserchPartDoor("FR_").Door.ShallowCopy()
TempJambR.IsActive = TempJambL.IsActive
TempJambL.IsActive = Map.refAssemblyManagerVM.ReserchPartDoor("FR_").Door.IsActive
TempJambR.TypePart = ConstGen.PART_FRAME_LEFT
Map.refAssemblyManagerVM.ReserchPartDoor("FL_").Door = TempJambR
TempJambL.TypePart = ConstGen.PART_FRAME_RIGHT
Map.refAssemblyManagerVM.ReserchPartDoor("FR_").Door = TempJambL
' aggiorno le copie presenti nell'assemblato
SetPartDoorCurrAssembly()
End Sub
' permette di settare lo swing della seconda anta in funzione della selezione dello swing sulla prima anta.
' riceve l'anta da modificare (ModifySwingDoor) e l'anta che comanda la modifica (ModifiedSwingDoor)
Public Sub SwingDoor(ModifySwingDoor As Part, ModifiedSwingDoor As Part)
If Not IsNothing(ModifiedSwingDoor) AndAlso Not IsNothing(ModifiedSwingDoor) Then
For IndexSwing As Integer = 0 To ModifiedSwingDoor.SwingTypeList.Count - 1
If ModifiedSwingDoor.Swing = ModifiedSwingDoor.SwingTypeList(IndexSwing) Then
ModifySwingDoor.SetSwing(ModifySwingDoor.SwingTypeList(IndexSwing))
Exit For
End If
Next
End If
End Sub
#End Region ' Swing
Public Sub RefreshJambCheck()
For Each Item In ListPartDoor
If Item.Door.TypePart.Contains("FL_") Then
JambLIsChecked = Item.Door.IsActive
ElseIf Item.Door.TypePart.Contains("FT_") Then
JambTIsChecked = Item.Door.IsActive
ElseIf Item.Door.TypePart.Contains("FB_") Then
JambBIsChecked = Item.Door.IsActive
ElseIf Item.Door.TypePart.Contains("FT_") Then
JambTIsChecked = Item.Door.IsActive
End If
Next
End Sub
' definisc le costanti dell'assemblato
Public Sub SetVarAssembly()
Dim dHeight As Double
Dim dWidth As Double
Dim dThickness As Double
If Not IsNothing(m_Door1) Then
If Not IsNothing(m_Door1.Height) AndAlso StringToDouble(m_Door1.Height, dHeight) Then
EgtLuaSetGlobNumVar("H", dHeight)
EgtLuaSetGlobNumVar("H1", dHeight)
End If
If Not IsNothing(m_Door1.Width) AndAlso StringToDouble(m_Door1.Width, dWidth) Then
EgtLuaSetGlobNumVar("W", dWidth)
EgtLuaSetGlobNumVar("W1", dWidth)
End If
If Not IsNothing(m_Door1.Thickness) AndAlso StringToDouble(m_Door1.Thickness, dThickness) Then
EgtLuaSetGlobNumVar("T", dThickness)
EgtLuaSetGlobNumVar("T1", dThickness)
End If
End If
If Not IsNothing(m_Door2) Then
If Not IsNothing(m_Door2.Height) AndAlso StringToDouble(m_Door2.Height, dHeight) Then
EgtLuaSetGlobNumVar("H2", dHeight)
End If
If Not IsNothing(m_Door2.Width) AndAlso StringToDouble(m_Door2.Width, dWidth) Then
EgtLuaSetGlobNumVar("W2", dWidth)
End If
If Not IsNothing(m_Door2.Thickness) AndAlso StringToDouble(m_Door2.Thickness, dThickness) Then
EgtLuaSetGlobNumVar("T2", dThickness)
End If
End If
End Sub
#Region "RABBET"
' restituisce l'indice della componente "rabbet"
Private Function nCompoRabbet() As Integer
Dim RabbetIndex As Integer = -1
For Index As Integer = 0 To Map.refCompoPanelVM.CompoTypeList.Count - 1
If Trim(Map.refCompoPanelVM.CompoTypeList(Index).DDFName) = "rabbet" Then
RabbetIndex = Index
Exit For
End If
Next
Return RabbetIndex
End Function
' clacola il rabbet sul profilo top dei Jamb (quindi solo su quelli laterali)
Public Sub TopRabbetJamb()
Dim sThicknessHead As String = Map.refAssemblyPageVM.CurrAssembly.ThicknessHead
Dim sOverlapHinge As String = Map.refAssemblyPageVM.CurrAssembly.OverlapHinge
Dim sOverLapLock As String = Map.refAssemblyPageVM.CurrAssembly.OverlapLock
Dim sLightUp As String = Map.refAssemblyPageVM.CurrAssembly.LightUp
Select Case DoorNumber
Case "1"
If Not m_JambL.SwingAlias.Name.Contains("L") Then
If Not IsNothing(m_JambL) Then SetTopRabbetJamb(m_JambL, sThicknessHead, sOverLapLock, sLightUp)
If Not IsNothing(m_JambR) Then SetTopRabbetJamb(m_JambR, sThicknessHead, sOverlapHinge, sLightUp)
Else
If Not IsNothing(m_JambL) Then SetTopRabbetJamb(m_JambL, sThicknessHead, sOverlapHinge, sLightUp)
If Not IsNothing(m_JambR) Then SetTopRabbetJamb(m_JambR, sThicknessHead, sOverLapLock, sLightUp)
End If
Case "2"
SetTopRabbetJamb(m_JambL, sThicknessHead, sOverlapHinge, sLightUp)
SetTopRabbetJamb(m_JambR, sThicknessHead, sOverlapHinge, sLightUp)
End Select
End Sub
' ricerca la componente Rabbet, se non esiete la aggiunge e poi la modifica, altrimenti la modifica
Private Sub SetTopRabbetJamb(ByRef Jamb As Part, sThicknessHead As String, sOverlap As String, sLightUp As String)
If IsNothing(Jamb) Then Return
Dim CurrCompo As Compo = Nothing
Dim IndexCompoPanel As Integer = -1
' ricerco la posizione del rabbet nella lista dei componenti
IndexCompoPanel = nCompoRabbet()
' se la ricerca ha dato un esito positivo allora procedo
If IndexCompoPanel = -1 Then Return
Dim bRabbet As Boolean = False
Dim IndexCompo As Integer
' se esisteno delle componenti allora cerco la componente rabbet
If Jamb.CompoList.Count > 0 Then
' inizio la ricerca della componente di tipo rabbet
For IndexCompo = 0 To Jamb.CompoList.Count - 1
If Jamb.CompoList(IndexCompo).CompoType.DDFName = OptionModule.m_CompoPaneOrder(IndexCompoPanel) Then
' controllo che il primo elemento selezionato nella ComboBox sia uguale al primo elemento della lista (questa cosa non mi convince)
If DirectCast(Jamb.CompoList(IndexCompo).CompoParamList(0), ComboBoxParam).SelItem = DirectCast(Jamb.CompoList(IndexCompo).CompoParamList(0), ComboBoxParam).ItemList(0) Then
bRabbet = True
Exit For
End If
End If
Next
End If
' se non eiste il rabbet lo aggiungo
If Not bRabbet Then
'Map.refPartPageVM.CurrPart = Jamb
CurrCompo = Jamb.AddNewCompo(Map.refCompoPanelVM.CompoTypeList(IndexCompoPanel), True)
DirectCast(CurrCompo.CompoParamList(0), ComboBoxParam).SelItem = DirectCast(CurrCompo.CompoParamList(0), ComboBoxParam).ItemList(0)
Else
CurrCompo = Jamb.CompoList(IndexCompo)
End If
' mofico la componete rabbet
If Not IsNothing(CurrCompo) Then
Dim dVal3 As Double = 0
StringToDouble(sOverlap, dVal3)
If dVal3 <= 0 Then
Jamb.CompoList.RemoveAt(IndexCompo)
Else
SetTopRabbetParam(sThicknessHead, sOverlap, CurrCompo, sLightUp)
End If
End If
End Sub
' setta i parametri della componente Rabbet sul top
Private Sub SetTopRabbetParam(sThicknessHead As String, sOverlapTop As String, CurrCompo As Compo, sLightUp As String)
Dim CurrCompoParam As CompoParam = CurrCompo.CompoParamList(1)
If TypeOf CurrCompoParam Is TextBoxParam Then
Dim TextParam As TextBoxParam = DirectCast(CurrCompoParam, TextBoxParam)
TextParam.m_Value = sThicknessHead
TextParam.NotifyPropertyChanged("Value")
End If
CurrCompoParam = CurrCompo.CompoParamList(2)
If TypeOf CurrCompoParam Is TextBoxParam Then
Dim TextParam As TextBoxParam = DirectCast(CurrCompoParam, TextBoxParam)
Dim sRabbetDepth As String = sOverlapTop
TextParam.m_Value = sRabbetDepth
TextParam.NotifyPropertyChanged("Value")
End If
CurrCompoParam = CurrCompo.CompoParamList(3)
If TypeOf CurrCompoParam Is TextBoxOnOffParam Then
Dim TextParam As TextBoxOnOffParam = DirectCast(CurrCompoParam, TextBoxOnOffParam)
TextParam.SetIsActive(False)
TextParam.NotifyPropertyChanged("Value")
End If
End Sub
' calcola il rabbet sul lato Bottom solo se è stata selezionata la proprietà exterior
Public Sub BottomRabbetJamb()
Dim sThicknessDoor As String
If Not IsNothing(m_Door1) Then
sThicknessDoor = m_Door1.Thickness
Else
sThicknessDoor = "0"
End If
Dim sOverLapHinge As String = Map.refAssemblyPageVM.CurrAssembly.OverlapHinge
Dim sOverLapLock As String = Map.refAssemblyPageVM.CurrAssembly.OverlapLock
Dim sOverLapTop As String = Map.refAssemblyPageVM.CurrAssembly.OverlapTop
'Dim sWidthJamb As String = Map.refAssemblyPageVM.CurrAssembly.Width
Dim sOverlapBottom As String = Map.refAssemblyPageVM.CurrAssembly.OverlapBottom
Dim sDeltaT As String = Map.refAssemblyPageVM.CurrAssembly.DeltaThickness
Dim sThicknessBottm As String = Map.refAssemblyPageVM.CurrAssembly.ThicknessBottom
Dim sDeltaBottom As String = Map.refAssemblyPageVM.CurrAssembly.DeltaBottom
Dim IndexBottom As Integer = 1
Dim IndexHinge As Integer = 2
Dim dValBottom As Double = 0
StringToDouble(sDeltaBottom, dValBottom)
Dim dValDoor As Double = 0
StringToDouble(sDeltaT, dValDoor)
Dim DeltaTotal As String = DoubleToString(dValDoor - dValBottom, 4)
Select Case DoorNumber
Case "1"
If Not m_JambL.SwingAlias.Name.Contains(ConstGen.LOCK) Then
RabbetExterior(m_JambL, sThicknessDoor, sThicknessBottm, sOverLapLock, IndexBottom)
RabbetExterior(m_JambR, sThicknessDoor, sThicknessBottm, sOverLapHinge, IndexBottom)
SetHingeRabbetJamb(m_JambB, sThicknessDoor, DeltaTotal, sOverlapBottom, IndexHinge)
Else
RabbetExterior(m_JambL, sThicknessDoor, sThicknessBottm, sOverLapHinge, IndexBottom)
RabbetExterior(m_JambR, sThicknessDoor, sThicknessBottm, sOverLapLock, IndexBottom)
SetHingeRabbetJamb(m_JambB, sThicknessDoor, DeltaTotal, sOverlapBottom, IndexHinge)
End If
Case "2"
RabbetExterior(m_JambL, sThicknessDoor, sThicknessBottm, sOverLapHinge, IndexBottom)
RabbetExterior(m_JambR, sThicknessDoor, sThicknessBottm, sOverLapHinge, IndexBottom)
SetHingeRabbetJamb(m_JambB, sThicknessDoor, DeltaTotal, sOverlapBottom, IndexHinge)
End Select
End Sub
' calcola il rabbet sul lato Hinge solo se è stata selezionata la proprietà exterior
Public Sub HingeRabbetJamb()
Dim sThicknessDoor As String
If Not IsNothing(m_Door1) Then
sThicknessDoor = m_Door1.Thickness
Else
sThicknessDoor = "0"
End If
Dim sDeltaT As String = Map.refAssemblyPageVM.CurrAssembly.DeltaThickness
Dim sOverLapHinge As String = Map.refAssemblyPageVM.CurrAssembly.OverlapHinge
Dim sOverLapLock As String = Map.refAssemblyPageVM.CurrAssembly.OverlapLock
Dim sOverLapTop As String = Map.refAssemblyPageVM.CurrAssembly.OverlapTop
Dim sOverlapBottom As String = Map.refAssemblyPageVM.CurrAssembly.OverlapBottom
' questo flag, che è poi passato alla funzione RabbetExterior, ha lo scopo di identificare chi sta esegunedo la chiamata
Dim IndexHinge As Integer = 2
Dim IndexLock As Integer = 3
Select Case DoorNumber
Case "1"
If Not m_JambL.SwingAlias.Name.Contains(ConstGen.LOCK) Then
SetHingeRabbetJamb(m_JambL, sThicknessDoor, sDeltaT, sOverLapLock, IndexLock)
SetHingeRabbetJamb(m_JambR, sThicknessDoor, sDeltaT, sOverLapHinge, IndexHinge)
SetHingeRabbetJamb(m_JambT, sThicknessDoor, sDeltaT, sOverLapTop, IndexHinge)
Else
SetHingeRabbetJamb(m_JambL, sThicknessDoor, sDeltaT, sOverLapHinge, IndexHinge)
SetHingeRabbetJamb(m_JambR, sThicknessDoor, sDeltaT, sOverLapLock, IndexLock)
SetHingeRabbetJamb(m_JambT, sThicknessDoor, sDeltaT, sOverLapTop, IndexHinge)
End If
Case "2"
SetHingeRabbetJamb(m_JambL, sThicknessDoor, sDeltaT, sOverLapHinge, IndexHinge)
SetHingeRabbetJamb(m_JambR, sThicknessDoor, sDeltaT, sOverLapHinge, IndexHinge)
SetHingeRabbetJamb(m_JambT, sThicknessDoor, sDeltaT, sOverLapTop, IndexHinge)
End Select
End Sub
Public Sub SetHingeRabbetJamb(ByRef Jamb As Part, sThicknessDoor As String, sDeltaT As String, sOverLap As String, nIndexSide As Integer)
If IsNothing(Jamb) Then Return
'Dim IndexHinge As Integer = 2
'Dim IndexBottom As Integer = 1
Dim CompoListIndex As Integer = nCompoRabbet()
If CompoListIndex = -1 Then Return
Dim Local_Compo As Compo
Dim bRabbet As Boolean = False
Dim IndexCompo As Integer
' cerco la componente
If Jamb.CompoList.Count > 0 Then
For IndexCompo = 0 To Jamb.CompoList.Count - 1
If Jamb.CompoList(IndexCompo).CompoType.DDFName = Map.refCompoPanelVM.CompoTypeList(CompoListIndex).DDFName Then
If DirectCast(Jamb.CompoList(IndexCompo).CompoParamList(0), ComboBoxParam).SelItem = DirectCast(Jamb.CompoList(IndexCompo).CompoParamList(0), ComboBoxParam).ItemList(nIndexSide) Then
bRabbet = True
Exit For
End If
End If
Next
End If
' se il rabbet non esiste
If Not bRabbet Then
' lo aggiungo
Local_Compo = Jamb.AddNewCompo(Map.refCompoPanelVM.CompoTypeList(CompoListIndex), True)
DirectCast(Local_Compo.CompoParamList(0), ComboBoxParam).SetSelItem(DirectCast(Local_Compo.CompoParamList(0), ComboBoxParam).ItemList(nIndexSide))
Else
Local_Compo = Jamb.CompoList(IndexCompo)
End If
If Not IsNothing(Local_Compo) Then
Dim dVal1 As Double = 0
Dim dVal2 As Double = 0
Dim dVal3 As Double = 0
StringToDouble(sThicknessDoor, dVal1)
StringToDouble(sDeltaT, dVal2)
StringToDouble(sOverLap, dVal3)
If nIndexSide = 3 Then nIndexSide = 2
If dVal1 + dVal2 <= 0 OrElse dVal3 <= 0 Then
Jamb.CompoList.RemoveAt(IndexCompo)
Else
SetHingeRabbetParam(sThicknessDoor, sDeltaT, sOverLap, Local_Compo, nIndexSide)
End If
End If
End Sub
' cerca la compo Rabbet sul lato indicato (Top o Bottom)
Public Sub RabbetExterior(ByRef Jamb As Part, sThicknessDoor As String, sDeltaT As String, sOverLap As String, nIndexSide As Integer)
If IsNothing(Jamb) Then Return
'Dim IndexHinge As Integer = 2
'Dim IndexBottom As Integer = 1
Dim CompoListIndex As Integer = nCompoRabbet()
If CompoListIndex = -1 Then Return
Dim Local_Compo As Compo
Dim bRabbet As Boolean = False
Dim IndexCompo As Integer
' cerco la componente
If Jamb.CompoList.Count > 0 Then
For IndexCompo = 0 To Jamb.CompoList.Count - 1
If Jamb.CompoList(IndexCompo).CompoType.DDFName = Map.refCompoPanelVM.CompoTypeList(CompoListIndex).DDFName Then
If DirectCast(Jamb.CompoList(IndexCompo).CompoParamList(0), ComboBoxParam).SelItem = DirectCast(Jamb.CompoList(IndexCompo).CompoParamList(0), ComboBoxParam).ItemList(nIndexSide) Then
bRabbet = True
Exit For
End If
End If
Next
End If
If m_Exterior Then
' se il rabbet non esiste
If Not bRabbet Then
' lo aggiungo
Local_Compo = Jamb.AddNewCompo(Map.refCompoPanelVM.CompoTypeList(CompoListIndex), True)
DirectCast(Local_Compo.CompoParamList(0), ComboBoxParam).SetSelItem(DirectCast(Local_Compo.CompoParamList(0), ComboBoxParam).ItemList(nIndexSide))
Else
Local_Compo = Jamb.CompoList(IndexCompo)
End If
If Not IsNothing(Local_Compo) Then
Dim dVal1 As Double = 0
Dim dVal2 As Double = 0
Dim dVal3 As Double = 0
StringToDouble(sThicknessDoor, dVal1)
StringToDouble(sDeltaT, dVal2)
StringToDouble(sOverLap, dVal3)
If dVal1 + dVal2 <= 0 OrElse dVal3 <= 0 Then
Jamb.CompoList.RemoveAt(IndexCompo)
Else
SetHingeRabbetParam(sThicknessDoor, sDeltaT, sOverLap, Local_Compo, nIndexSide)
End If
End If
Else
' rimuovo dalla lista
If bRabbet Then Jamb.CompoList.RemoveAt(IndexCompo)
End If
End Sub
' assegna i valori ai parametri del rabbet
Private Sub SetHingeRabbetParam(sThicknessDoor As String, sDeltaT As String, sOverlap As String, CurrCompo As Compo, IndexSide As Integer)
Dim dThicknessDoor As Double
Dim dDeltaT As Double
StringToDouble(sThicknessDoor, dThicknessDoor)
StringToDouble(sDeltaT, dDeltaT)
Select Case IndexSide
' se è stata passata sul lato cerniera/serrattura
Case 2
Dim CurrCompoParam As CompoParam = CurrCompo.CompoParamList(0)
Dim Index As Integer = 0
' width
CurrCompoParam = CurrCompo.CompoParamList(1)
If TypeOf DirectCast(CurrCompoParam, CompoParam) Is TextBoxParam Then
Dim TextParam As TextBoxParam = DirectCast(CurrCompoParam, TextBoxParam)
' definisce l'affondamento della porta nel telaio
If dDeltaT + dThicknessDoor < 0 Then
TextParam.m_Value = "0"
Else
TextParam.m_Value = DoubleToString(dDeltaT + dThicknessDoor, 4)
End If
TextParam.NotifyPropertyChanged("Value")
End If
' depth
CurrCompoParam = CurrCompo.CompoParamList(2)
If TypeOf DirectCast(CurrCompoParam, CompoParam) Is TextBoxParam Then
Dim TextParam As TextBoxParam = DirectCast(CurrCompoParam, TextBoxParam)
Dim sRabbetDepth As String = sOverlap
' la profondità deve essere la stessa che è stata definita sul rabbet top
TextParam.m_Value = sRabbetDepth
TextParam.NotifyPropertyChanged("Value")
End If
' angle
CurrCompoParam = CurrCompo.CompoParamList(3)
If TypeOf DirectCast(CurrCompoParam, CompoParam) Is TextBoxOnOffParam Then
Dim TextOnOffParam As TextBoxOnOffParam = DirectCast(CurrCompoParam, TextBoxOnOffParam)
' disaativo il paramtro Angle
TextOnOffParam.SetIsActive(False)
TextOnOffParam.NotifyPropertyChanged("Value")
End If
Case 1
' inseriamo i parametri per la creazione del rabbet sul fondo
Dim CurrCompoParam As CompoParam = CurrCompo.CompoParamList(0)
Dim Index As Integer = 0
' width
CurrCompoParam = CurrCompo.CompoParamList(1)
If TypeOf DirectCast(CurrCompoParam, CompoParam) Is TextBoxParam Then
Dim TextParam As TextBoxParam = DirectCast(CurrCompoParam, TextBoxParam)
TextParam.m_Value = DoubleToString(dDeltaT, 4)
TextParam.NotifyPropertyChanged("Value")
End If
' Depth
CurrCompoParam = CurrCompo.CompoParamList(2)
If TypeOf DirectCast(CurrCompoParam, CompoParam) Is TextBoxParam Then
Dim TextParam As TextBoxParam = DirectCast(CurrCompoParam, TextBoxParam)
Dim sRabbetDepth As String = sOverlap
TextParam.m_Value = sRabbetDepth
TextParam.NotifyPropertyChanged("Value")
End If
' Angle
CurrCompoParam = CurrCompo.CompoParamList(3)
If TypeOf DirectCast(CurrCompoParam, CompoParam) Is TextBoxOnOffParam Then
Dim TextOnOffParam As TextBoxOnOffParam = DirectCast(CurrCompoParam, TextBoxOnOffParam)
Dim sAngle As String = "2"
TextOnOffParam.m_Value = sAngle
TextOnOffParam.SetIsActive(True)
TextOnOffParam.NotifyPropertyChanged("Value")
End If
End Select
End Sub
#End Region ' Rabbet
#End Region ' Rules Assembly
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Public Sub NotifyPropertyChanged(propName As String)
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
End Sub
End Class