Imports System.Collections.ObjectModel Imports System.ComponentModel Imports System.IO Imports EgtUILib Imports System.Text.RegularExpressions Public Class Part Implements INotifyPropertyChanged ' queste variabili servono per getsire le ripezioni dei messaggi durante il caricamento degli assemblati ' in fase di lettura diventa vero dopo aver caricato il primo dei part del ddf Friend Shared bFirstConfigRead As Boolean = False ' questa variabile è stata definita condovisa per permettere di essere inizializzata alla prima lettura del DDF Public Shared FirstReadingEdge As Boolean = False ' per disabilitare la richiesta di confermare la configurazione Public Shared LastPartName As String = String.Empty ' costruisco il riferimento con l'oggetto PartDoor che ospita il Part Private m_refPartDoor As PartDoor ' blocco il processo di avanzamente di lettura delle righe Private m_StopNextIndexLine As Boolean = False Public Property refPartDoor As PartDoor Get Return m_refPartDoor End Get Set(value As PartDoor) m_refPartDoor = value End Set End Property #Region "GENERAL" #Region "Nuove proprietà delle parti" ' serve ad attribuire il nome all'oggetto che stiamo per creare (Il vecchio frame ora indicato nel DDF come piece) Private m_TypePart As String Public Property TypePart As String Get Return m_TypePart End Get Set(value As String) m_TypePart = value NotifyPropertyChanged("TypePart") End Set End Property ' per sapere quale tipo versione è il file Private m_Version As String = "1" Public Property Version As String Get Return m_Version End Get Set(value As String) m_Version = value RegexFunction.sCurrVersionDoor = m_Version End Set End Property ' per sapere se il check è attivo (nella modalità assembalto) Private m_IsActive As Boolean Public Property IsActive As Boolean Get Return m_IsActive End Get Set(value As Boolean) m_IsActive = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End Set End Property Public Sub SetIsActive(bIsActive As Boolean) m_IsActive = bIsActive NotifyPropertyChanged("IsActive") End Sub ' lista delle disposizioni da mostrare a video (bevel) Friend Shared m_DispositionList As New ObservableCollection(Of EdgeType) Public ReadOnly Property DispositionList As ObservableCollection(Of EdgeType) Get Return m_DispositionList End Get End Property ' elemento selezionato dalla lista delle disposizinioni (bevel) Private m_DispositionItem As EdgeType Public Property DispositionItem As EdgeType Get Return m_DispositionItem End Get Set(value As EdgeType) m_DispositionItem = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True OptionModule.m_Disposition = m_DispositionItem 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 #End Region ' Nuove proprietà delle parti #Region "Info Generali del ddf" Private m_Measure As String Public Property Measure As String Get Return m_Measure End Get Set(value As String) m_Measure = value End Set End Property Private m_Code As String Public Property Code As String Get Return m_Code End Get Set(value As String) m_Code = value End Set End Property Private m_Customer As String Public Property Customer As String Get Return m_Customer End Get Set(value As String) m_Customer = value End Set End Property Private m_Elevation As String Public Property Elevation As String Get Return m_Elevation End Get Set(value As String) m_Elevation = value End Set End Property Private m_Project As String Public Property Project As String Get Return m_Project End Get Set(value As String) m_Project = value End Set End Property Private m_PO As String Public Property PO As String Get Return m_PO End Get Set(value As String) m_PO = value End Set End Property Private m_Line As String Public Property Line As String Get Return m_Line End Get Set(value As String) m_Line = value End Set End Property Private m_Date As String Public Property DatePar As String Get Return m_Date End Get Set(value As String) m_Date = value End Set End Property Private m_Secure As String Public Property Secure As String Get Return m_Secure End Get Set(value As String) m_Secure = value End Set End Property #End Region ' Info generali del ddf #Region "PROPERTIES and MATERIAL" ' la lista dei materiali è caricta nell'init dell'OptionPage Friend Shared m_MaterilaList As ObservableCollection(Of MaterialType) Public Property MaterialsList As ObservableCollection(Of MaterialType) Get Return m_MaterilaList End Get Set(value As ObservableCollection(Of MaterialType)) m_MaterilaList = value End Set End Property Private m_SelectedMaterial As MaterialType Public Property SelectedMaterial As MaterialType Get Return m_SelectedMaterial End Get Set(value As MaterialType) m_SelectedMaterial = value If Not IsNothing(value) Then ' ogni volta che cambio la selezione del materiale azzero tutte le selezioni delle proprietà If Not IsNothing(m_SelectedMaterial.PropertiesList) Then For Each ItemProperty In m_SelectedMaterial.PropertiesList ItemProperty.IsChecked = False Next PropertiesList = m_SelectedMaterial.PropertiesList 'm_SelectedProperty = m_PropertiesList(0) PropertiesIsVisible = Visibility.Visible Else PropertiesIsVisible = Visibility.Collapsed End If NotifyPropertyChanged("SelectedMaterial") OptionModule.m_CurrMaterial = m_SelectedMaterial Map.refSceneManagerVM.RefreshBtn() Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End If End Set End Property Public Sub SetMaterial(ItemMaterial As MaterialType) For Each Item In m_MaterilaList If ItemMaterial.NameDDF = Item.NameDDF Then m_SelectedMaterial = Item OptionModule.m_CurrMaterial = m_SelectedMaterial ' ogni volta che cambio la selezione del materiale azzero tutte le selezioni delle proprietà If Not IsNothing(m_SelectedMaterial.PropertiesList) Then If m_SelectedMaterial.PropertiesList.Count > 0 Then For Each ItemProperty In m_SelectedMaterial.PropertiesList 'ItemProperty.IsChecked = False Next m_PropertiesList = m_SelectedMaterial.PropertiesList m_SelectedProperty = m_PropertiesList(0) PropertiesIsVisible = Visibility.Visible Else PropertiesIsVisible = Visibility.Collapsed End If Else PropertiesIsVisible = Visibility.Collapsed End If Exit For End If Next End Sub Public ReadOnly Property MaterialIsVisible As Visibility Get Return OptionModule.m_MaterialIsVisible End Get End Property Public ReadOnly Property ShowPropeperty As Visibility Get If OptionModule.m_MaterialIsVisible <> Visibility.Visible And m_PropertiesIsVisible = Visibility.Visible Then Return Visibility.Visible Else Return Visibility.Collapsed End If End Get End Property Private m_PropertiesList As New ObservableCollection(Of PropertyItem) Public Property PropertiesList As ObservableCollection(Of PropertyItem) Get Return m_PropertiesList End Get Set(value As ObservableCollection(Of PropertyItem)) m_PropertiesList = value If Not IsNothing(m_PropertiesList) AndAlso m_PropertiesList.Count > 0 Then Try m_SelectedProperty = m_PropertiesList.First(Function(x) x.Name = NONE_DDF) Catch ex As Exception m_SelectedProperty = m_PropertiesList(0) End Try NotifyPropertyChanged("SelectedProperty") End If NotifyPropertyChanged("PropertiesList") Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True Map.refSceneManagerVM.RefreshBtn() End Set End Property ' seleziona la lista delle proprietà senza aggiornare il disegno della porta Public Sub SetPropertiesList(ByVal List As ObservableCollection(Of PropertyItem)) If Not IsNothing(m_PropertiesList) AndAlso m_PropertiesList.Count > 0 Then Try m_SelectedProperty = m_PropertiesList.First(Function(x) x.Name = NONE_DDF) Catch ex As Exception m_SelectedProperty = m_PropertiesList(0) End Try NotifyPropertyChanged("SelectedProperty") End If NotifyPropertyChanged("PropertiesList") End Sub Private m_SelectedProperty As PropertyItem Public Property SelectedProperty As PropertyItem Get Return m_SelectedProperty End Get Set(value As PropertyItem) m_SelectedProperty = value Map.refSceneManagerVM.RefreshBtn() Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True NotifyPropertyChanged("SelectedProperty") End Set End Property Public Sub SetProperty(ByVal SelProperty As PropertyItem) m_SelectedProperty = SelProperty NotifyPropertyChanged("SelectedProperty") End Sub Private m_PropertiesIsVisible As Visibility = OptionModule.m_DisableProperties Public Property PropertiesIsVisible As Visibility Get Return m_PropertiesIsVisible End Get Set(value As Visibility) If m_PropertiesIsVisible <> Visibility.Visible Then Return m_PropertiesIsVisible = value NotifyPropertyChanged("PropertiesIsVisible") End Set End Property #End Region ' Properties and Material #Region "SIZE" Private m_Height As String Public Property Height As String Get Return m_Height End Get Set(value As String) m_Height = value Dim dHeight As Double If StringToDouble(value, dHeight) Then EgtLuaSetGlobNumVar("H", dHeight) End If NotifyPropertyChanged("ToolTipEvaluatedThickness") NotifyPropertyChanged("ToolTipEvaluatedWidth") NotifyPropertyChanged("ToolTipEvaluatedHeight") 'SetVarSize() UpdateToolTip() NotifyPropertyChanged("Height") If Not Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nHardwarePage Then Map.refAssemblyPageVM.CurrAssembly.SetDimension("Height") Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End If End Set End Property Public Sub SetHeight(sHeight As String) m_Height = sHeight Dim dHeight As Double If StringToDouble(sHeight, dHeight) Then EgtLuaSetGlobNumVar("H", dHeight) End If NotifyPropertyChanged("Height") NotifyPropertyChanged("ToolTipEvaluatedHeight") If Not Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nHardwarePage Then Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End If End Sub Public ReadOnly Property ToolTipEvaluatedHeight As String Get Dim dVal As Double If StringToDouble(m_Height, dVal) Then Return DoubleToString(dVal, 4) Else Return EgtMsg(50143) End If End Get End Property Private m_Width As String = String.Empty Public Property Width As String Get Return m_Width End Get Set(value As String) m_Width = value Dim dWidth As Double If StringToDouble(value, dWidth) Then EgtLuaSetGlobNumVar("W", dWidth) End If NotifyPropertyChanged("ToolTipEvaluatedThickness") NotifyPropertyChanged("ToolTipEvaluatedWidth") NotifyPropertyChanged("ToolTipEvaluatedHeight") 'SetVarSize() UpdateToolTip() Map.refAssemblyPageVM.CurrAssembly.SetDimension("Width") Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End Set End Property Public Sub SetWidth(sWidth As String) m_Width = sWidth Dim dWidth As Double If StringToDouble(sWidth, dWidth) Then EgtLuaSetGlobNumVar("W", dWidth) End If NotifyPropertyChanged("Width") NotifyPropertyChanged("ToolTipEvaluatedWidth") If Not Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nHardwarePage Then Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End If End Sub Public ReadOnly Property ToolTipEvaluatedWidth As String Get Dim dVal As Double If StringToDouble(m_Width, dVal) Then Return DoubleToString(dVal, 4) Else Return EgtMsg(50143) End If End Get End Property Private m_Thickness As String Public Property Thickness As String Get Return m_Thickness End Get Set(value As String) m_Thickness = value Dim dThickness As Double If StringToDouble(value, dThickness) Then EgtLuaSetGlobNumVar("T", dThickness) End If NotifyPropertyChanged("ToolTipEvaluatedThickness") NotifyPropertyChanged("ToolTipEvaluatedWidth") NotifyPropertyChanged("ToolTipEvaluatedHeight") 'SetVarSize() UpdateToolTip() Map.refAssemblyPageVM.CurrAssembly.SetDimension("Thickness") Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End Set End Property Public Sub SetThickness(sThickness As String) m_Thickness = sThickness Dim dThickness As Double If StringToDouble(sThickness, dThickness) Then EgtLuaSetGlobNumVar("T", dThickness) End If NotifyPropertyChanged("Thickness") NotifyPropertyChanged("ToolTipEvaluatedThickness") If Not Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nHardwarePage Then Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End If End Sub Public ReadOnly Property ToolTipEvaluatedThickness As String Get Dim dVal As Double If StringToDouble(m_Thickness, dVal) Then Return DoubleToString(dVal, 4) Else Return EgtMsg(50143) End If End Get End Property #End Region ' Size #Region "WEIGHT" Private m_Weight As String Public Property Weight As String Get If String.IsNullOrEmpty(m_Weight) Then m_Weight = OptionModule.m_Weight End If Return m_Weight End Get Set(value As String) m_Weight = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True NotifyPropertyChanged("ToolTipEvaluatedWeight") End Set End Property Public ReadOnly Property ToolTipEvaluatedWeight As String Get Dim dVal As Double If StringToDouble(m_Weight, dVal) Then Return DoubleToString(dVal, 4) Else Return EgtMsg(50143) End If End Get End Property Private Shared m_IsCheckedWeight As Visibility Public Shared Property IsCheckedWeight As Visibility Get Return m_IsCheckedWeight End Get Set(value As Visibility) m_IsCheckedWeight = value End Set End Property Public Property VisibilityWeight As Visibility Get Return m_IsCheckedWeight End Get Set(value As Visibility) If m_IsCheckedWeight <> value Then m_IsCheckedWeight = value End If NotifyPropertyChanged("VisibilityWeight") End Set End Property #End Region ' Weight #Region "SWING" Public ReadOnly Property VisibilityInvertBevel As Visibility Get Return OptionModule.m_DisableInvertBevel End Get End Property ' lista degli Swing Private m_SwingTypeList As New List(Of String) Public Property SwingTypeList As List(Of String) Get Return m_SwingTypeList End Get Set(value As List(Of String)) m_SwingTypeList = value 'NotifyPropertyChanged("SwingTypeList") End Set End Property Private m_SwingAlias As SwingItemTypeList = Nothing Public Property SwingAlias As SwingItemTypeList Get Return m_SwingAlias End Get Set(value As SwingItemTypeList) m_SwingAlias = value End Set End Property Private m_Swing As String = Nothing Public Property Swing As String Get ' abilita il pulsante per invertire il bevel sulla lock If m_Swing.Contains("I") Then Map.refPartPageVM.IsInactive = True Else Map.refPartPageVM.IsInactive = False End If Return m_Swing End Get Set(value As String) m_Swing = value OptionModule.SetCurrSwing(m_SwingAlias, value) m_Swing = m_SwingAlias.AliasName NotifyPropertyChanged("Swing") Map.refAssemblyPageVM.CurrAssembly.SetDimension("Swing") Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True ' aggiorno la grafica Map.refSceneManagerVM.RefreshBtn() End Set End Property Public Sub SetSwing(sSwing As String) OptionModule.SetCurrSwing(m_SwingAlias, sSwing) m_Swing = m_SwingAlias.AliasName NotifyPropertyChanged("Swing") End Sub #End Region ' Swing #Region "EDGE" Friend Shared m_LockEdgeTypeList As New ObservableCollection(Of EdgeType) Friend Shared m_HingeEdgeTypeList As New ObservableCollection(Of EdgeType) Friend Shared m_BottomEdgeTypeList As New ObservableCollection(Of EdgeType) Friend Shared m_TopEdgeTypeList As New ObservableCollection(Of EdgeType) Public ReadOnly Property LockEdgeTypeList As ObservableCollection(Of EdgeType) Get ' restituisco il valore della lista che è stato creato all'avvio If m_TypePart.Contains(ConstGen.PART_DO_) Then Return m_LockEdgeTypeList Else ' se stiamo leggendo un frame carico la lista dei bevel dei frame Return Assembly.m_FrameEdgeTypeList End If End Get End Property Public ReadOnly Property HingeEdgeTypeList As ObservableCollection(Of EdgeType) Get ' restituisco il valore della lista che è stato creato all'avvio If m_TypePart.Contains(ConstGen.PART_DO_) Then Return m_HingeEdgeTypeList Else ' se stiamo leggendo un frame carico la lista dei bevel dei frame Return Assembly.m_FrameEdgeTypeList End If End Get End Property Public ReadOnly Property BottomEdgeTypeList As ObservableCollection(Of EdgeType) Get ' restituisco il valore della lista che è stato creato all'avvio If m_TypePart.Contains(ConstGen.PART_DO_) Then Return m_BottomEdgeTypeList Else ' se stiamo leggendo un frame carico la lista dei bevel dei frame Return Assembly.m_FrameEdgeTypeList End If End Get End Property Public ReadOnly Property TopEdgeTypeList As ObservableCollection(Of EdgeType) Get ' restituisco il valore della lista che è stato creato all'avvio If m_TypePart.Contains(ConstGen.PART_DO_) Then Return m_TopEdgeTypeList Else ' se stiamo leggendo un frame carico la lista dei bevel dei frame Return Assembly.m_FrameEdgeTypeList End If End Get End Property Private m_LockEdgeType As New EdgeType("", Visibility.Visible) Public Property LockEdgeType As EdgeType Get Return m_LockEdgeType End Get Set(value As EdgeType) m_LockEdgeType = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True Map.refSceneManagerVM.RefreshBtn() End Set End Property Public Sub SetLockEdgeType(LockEdgeType As EdgeType) m_LockEdgeType = LockEdgeType NotifyPropertyChanged("LockEdgeType") End Sub Private m_HingeEdgeType As New EdgeType("", Visibility.Visible) Public Property HingeEdgeType As EdgeType Get NotifyPropertyChanged("EdgeTypeList") Return m_HingeEdgeType End Get Set(value As EdgeType) m_HingeEdgeType = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True Map.refSceneManagerVM.RefreshBtn() End Set End Property Public Sub SetHingeEdgeType(HingeEdgeType As EdgeType) m_HingeEdgeType = HingeEdgeType NotifyPropertyChanged("HingeEdgeType") End Sub Private m_TopType As New EdgeType("", Visibility.Visible) Public Property TopType As EdgeType Get Return m_TopType End Get Set(value As EdgeType) m_TopType = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True Map.refSceneManagerVM.RefreshBtn() End Set End Property Public Sub SetTopType(TopType As EdgeType) m_TopType = TopType NotifyPropertyChanged("TopType") End Sub Private m_BottomType As New EdgeType("", Visibility.Visible) Public Property BottomType As EdgeType Get Return m_BottomType End Get Set(value As EdgeType) m_BottomType = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True Map.refSceneManagerVM.RefreshBtn() End Set End Property Public Sub SetBottomType(BottomType As EdgeType) m_BottomType = BottomType NotifyPropertyChanged("BottomType") End Sub Private m_InvertBevel As Boolean = False Public Property InvertBevel As Boolean Get Return m_InvertBevel End Get Set(value As Boolean) m_InvertBevel = value NotifyPropertyChanged("InvertBevel") Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True Map.refSceneManagerVM.RefreshBtn() End Set End Property Public Sub SetInvertBevel(bInvertBevel As Boolean) m_InvertBevel = bInvertBevel NotifyPropertyChanged("InvertBevel") End Sub #End Region ' Edge #Region "RESIZE" Private m_ResizeLockHinge As Boolean Public Property ResizeLockHinge As Boolean Get Return m_ResizeLockHinge End Get Set(value As Boolean) m_ResizeLockHinge = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End Set End Property Private m_ResizeTopBottom As Boolean Public Property ResizeTopBottom As Boolean Get Return m_ResizeTopBottom End Get Set(value As Boolean) m_ResizeTopBottom = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End Set End Property #End Region ' Resize #Region "MACHINING" Private m_TopMachining As Boolean Public Property TopMachining As Boolean Get Return m_TopMachining End Get Set(value As Boolean) m_TopMachining = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End Set End Property Private m_LockEdgeMachining As Boolean Public Property LockEdgeMachining As Boolean Get Return m_LockEdgeMachining End Get Set(value As Boolean) m_LockEdgeMachining = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End Set End Property Private m_HingeEdgeMachining As Boolean Public Property HingeEdgeMachining As Boolean Get Return m_HingeEdgeMachining End Get Set(value As Boolean) m_HingeEdgeMachining = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End Set End Property Private m_BottomMachining As Boolean Public Property BottomMachining As Boolean Get Return m_BottomMachining End Get Set(value As Boolean) m_BottomMachining = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End Set End Property #End Region ' Machining #Region "OVERMATERIAL" Public ReadOnly Property ToolTipEvaluatedLockOverMaterial As String Get Dim dVal As Double If StringToDouble(m_LockEdgeOverMaterial, dVal) Then Return DoubleToString(dVal, 4) Else Return EgtMsg(50143) End If End Get End Property Public ReadOnly Property ToolTipEvaluatedHingeOverMaterial As String Get Dim dVal As Double If StringToDouble(m_HingeEdgeOverMaterial, dVal) Then Return DoubleToString(dVal, 4) Else Return EgtMsg(50143) End If End Get End Property Public ReadOnly Property ToolTipEvaluatedTopOverMaterial As String Get Dim dVal As Double If StringToDouble(m_TopOverMaterial, dVal) Then Return DoubleToString(dVal, 4) Else Return EgtMsg(50143) End If End Get End Property Public ReadOnly Property ToolTipEvaluatedBottomOverMaterial As String Get Dim dVal As Double If StringToDouble(m_BottomOverMaterial, dVal) Then Return DoubleToString(dVal, 4) Else Return EgtMsg(50143) End If End Get End Property Private m_LockEdgeOverMaterial As String = String.Empty Public Property LockEdgeOverMaterial As String Get Return m_LockEdgeOverMaterial End Get Set(value As String) m_LockEdgeOverMaterial = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True NotifyPropertyChanged("ToolTipEvaluatedLockOverMaterial") End Set End Property Private m_HingeEdgeOverMaterial As String = String.Empty Public Property HingeEdgeOverMaterial As String Get Return m_HingeEdgeOverMaterial End Get Set(value As String) m_HingeEdgeOverMaterial = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True NotifyPropertyChanged("ToolTipEvaluatedHingeOverMaterial") End Set End Property Private m_TopOverMaterial As String = String.Empty Public Property TopOverMaterial As String Get Return m_TopOverMaterial End Get Set(value As String) m_TopOverMaterial = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True NotifyPropertyChanged("ToolTipEvaluatedTopOverMaterial") End Set End Property Private m_BottomOverMaterial As String = String.Empty Public Property BottomOverMaterial As String Get Return m_BottomOverMaterial End Get Set(value As String) m_BottomOverMaterial = value Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True NotifyPropertyChanged("ToolTipEvaluatedBottomOverMaterial") End Set End Property #End Region ' OverMaterial #Region "CUT" Private m_CutIsChecked As Boolean = False Public Property CutIsChecked As Boolean Get Return m_CutIsChecked End Get Set(value As Boolean) m_CutIsChecked = value ' Gestione dell'aggiunta della componente Map.refSceneManagerVM.RefreshBtn() End Set End Property Private m_PosCut As String = "0" Public Property PosCut As String Get Return m_PosCut End Get Set(value As String) m_PosCut = value NotifyPropertyChanged("PosCut") NotifyPropertyChanged("ToolTipEvaluatedPosCut") Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End Set End Property Public ReadOnly Property ToolTipEvaluatedPosCut As String Get Dim dVal As Double If StringToDouble(m_PosCut, dVal) Then Return DoubleToString(dVal, 4) Else Return EgtMsg(50143) End If End Get End Property Private m_CutDirectionList As New List(Of String) From {"Horizontal", "Vertical"} Public ReadOnly Property CutDirectionList As List(Of String) Get Return m_CutDirectionList End Get End Property Private m_SelectedDirection As String = m_CutDirectionList(0) Public Property SelectedDirection As String Get Return m_SelectedDirection End Get Set(value As String) m_SelectedDirection = value End Set End Property #End Region ' Cut #Region "Position" Private m_Position As New List(Of String) From {"0", "0", "0"} Public Property Position As List(Of String) Get Return m_Position End Get Set(value As List(Of String)) m_Position = value End Set End Property #End Region ' Position Private m_TopShapeIsChecked As Boolean = False Public Property TopShapeIsChecked As Boolean Get Return m_TopShapeIsChecked End Get Set(value As Boolean) m_TopShapeIsChecked = value Map.refSceneManagerVM.RefreshBtn() End Set End Property Private Property m_TopShapeList As New List(Of TopShape) From {New TopShape(EgtMsg(50707)), New TopShape(EgtMsg(50708))} Public ReadOnly Property TopShapeList As List(Of TopShape) Get Return m_TopShapeList End Get End Property Private m_SelectedShape As TopShape = m_TopShapeList(0) Public Property SelectedShape As TopShape Get Return m_SelectedShape End Get Set(value As TopShape) m_SelectedShape = value If value.Name.Trim() = m_TopShapeList(0).Name.Trim Then TopArcIsChecked = True TopAngleIsChecked = False ElseIf value.Name.Trim() = m_TopShapeList(1).Name.Trim Then TopAngleIsChecked = True TopArcIsChecked = False End If NotifyPropertyChanged("VisibilityTopArch") NotifyPropertyChanged("VisibilityTopAngle") End Set End Property #Region "TOP ARC" Private m_Radius As String = "W" Public Property Radius As String Get Return m_Radius End Get Set(value As String) m_Radius = value NotifyPropertyChanged("Radius") NotifyPropertyChanged("ToolTipEvaluatedRadius") Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End Set End Property Public ReadOnly Property ToolTipEvaluatedRadius As String Get Dim dVal As Double If StringToDouble(m_Radius, dVal) Then Return DoubleToString(dVal, 4) Else Return EgtMsg(50143) End If End Get End Property Private m_Posx As String = "0" Public Property Posx As String Get Return m_Posx End Get Set(value As String) m_Posx = value NotifyPropertyChanged("Posx") NotifyPropertyChanged("ToolTipEvaluatedPosx") Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End Set End Property Public ReadOnly Property ToolTipEvaluatedPosx As String Get Dim dVal As Double If StringToDouble(m_Posx, dVal) Then Return DoubleToString(dVal, 4) Else Return EgtMsg(50143) End If End Get End Property Private m_TopArcIsChecked As Boolean = True Public Property TopArcIsChecked As Boolean Get Return m_TopArcIsChecked End Get Set(value As Boolean) m_TopArcIsChecked = value If m_TopAngleIsChecked And m_TopArcIsChecked Then m_TopAngleIsChecked = Not value NotifyPropertyChanged("TopAngleIsChecked") End If NotifyPropertyChanged("TopArcIsChecked") Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True Map.refSceneManagerVM.RefreshBtn() End Set End Property Private m_VisibilityTopArch As Visibility = Visibility.Visible Public ReadOnly Property VisibilityTopArch As Visibility Get If m_TopArcIsChecked Then m_VisibilityTopArch = Visibility.Visible Else m_VisibilityTopArch = Visibility.Hidden End If Return m_VisibilityTopArch End Get End Property #End Region ' Top Arc #Region "TOP ANGLE" Private m_Angle As String = "0" Public Property Angle As String Get Return m_Angle End Get Set(value As String) m_Angle = value NotifyPropertyChanged("Angle") NotifyPropertyChanged("ToolTipEvaluatedAngle") Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End Set End Property Public ReadOnly Property ToolTipEvaluatedAngle As String Get Dim dVal As Double If StringToDouble(m_Angle, dVal) Then Return DoubleToString(dVal, 4) Else Return EgtMsg(50143) End If End Get End Property Private m_PosxAngle As String = "W/2" Public Property PosxAngle As String Get Return m_PosxAngle End Get Set(value As String) m_PosxAngle = value NotifyPropertyChanged("PosxAngle") NotifyPropertyChanged("ToolTipEvaluatedPosxAngle") Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True End Set End Property Public ReadOnly Property ToolTipEvaluatedPosxAngle As String Get Dim dVal As Double If StringToDouble(m_PosxAngle, dVal) Then Return DoubleToString(dVal, 4) Else Return EgtMsg(50143) End If End Get End Property Private m_TopAngleIsChecked As Boolean Public Property TopAngleIsChecked As Boolean Get Return m_TopAngleIsChecked End Get Set(value As Boolean) m_TopAngleIsChecked = value If m_TopArcIsChecked And m_TopAngleIsChecked Then m_TopArcIsChecked = Not value NotifyPropertyChanged("TopArcIsChecked") End If NotifyPropertyChanged("TopAngleIsChecked") Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True Map.refSceneManagerVM.RefreshBtn() End Set End Property Private m_VisibilityTopAngle As Visibility = Visibility.Hidden Public ReadOnly Property VisibilityTopAngle As Visibility Get If m_TopAngleIsChecked Then m_VisibilityTopAngle = Visibility.Visible Else m_VisibilityTopAngle = Visibility.Hidden End If Return m_VisibilityTopAngle End Get End Property #End Region ' Top Angle #Region "OPTIONS" Private m_sOptions As String = String.Empty Public Property sOptions As String Get Return m_sOptions End Get Set(value As String) m_sOptions = value End Set End Property #End Region ' Options #End Region ' General ' lista delle componenti Friend m_CompoList As New ObservableCollection(Of Compo) Public Property CompoList As ObservableCollection(Of Compo) Get Return m_CompoList End Get Set(value As ObservableCollection(Of Compo)) m_CompoList = value End Set End Property Private m_SelCompo As Compo Public Property SelCompo As Compo Get Return m_SelCompo End Get Set(value As Compo) m_SelCompo = value End Set End Property #Region "AddCompo" ' utilizzata nell'Hardware Friend Function AddNewHardware(HardwareGeneral As CompoType, TempHardwFile As String) As Boolean ' disabilito la costruzione del riferimento Assembly.BuiltReffCompo = False ' creo la stringa che contiene la lista degli errori Dim ErrorList As String = String.Empty ' creo il nuovo compo Dim NewCompo As New Compo(HardwareGeneral, True) ' Leggo il file ini del componente per vedere se c'è il template: se c'è If EgtUILib.GetPrivateProfileInt(S_TEMPLATE, K_ISACTIVE, 1, HardwareGeneral.Path & "\" & CONFIGINI_FILE_NAME) <> 0 Then ' leggo nomi Dim Name As String = String.Empty Dim DDFName As String = String.Empty IniFile.GetPrivateProfileCompoName(S_TEMPLATE, K_NAME, DDFName, Name, HardwareGeneral.Path & "\" & CONFIGINI_FILE_NAME) ' aggiungo il template come parametro NewCompo.TemplateDDFName = DDFName NewCompo.TemplateName = Name NewCompo.LoadDefaultFromLua = True NewCompo.SetTemplateSelItem(TempHardwFile) ' se non c'è il template Else ' nascondo il template NewCompo.TemplateVisibility = Visibility.Collapsed ' leggo il nome del compo dal file config.ini Dim sTemplateName As String = String.Empty EgtUILib.GetPrivateProfileString(S_TEMPLATE, K_COMPO, "", sTemplateName, HardwareGeneral.Path & "\" & CONFIGINI_FILE_NAME) If String.IsNullOrWhiteSpace(sTemplateName) Then ErrorList &= String.Format(EgtMsg(50122), K_COMPO, NewCompo.TemplateName) NewCompo = Nothing ElseIf Not File.Exists(HardwareGeneral.Path & "\" & sTemplateName & LUA_EXTENSION) Then ErrorList &= String.Format(EgtMsg(50122), K_COMPO, NewCompo.TemplateName) NewCompo = Nothing Else NewCompo.LoadDefaultFromLua = True NewCompo.TemplateSelItem = sTemplateName End If End If If Not IsNothing(NewCompo) Then CompoList.Add(NewCompo) Return True End If Return False End Function 'Gestione ComboBox e TextBox di ogni compo della pulsantiera letta da Compo.ini (Door) Friend Function AddNewCompo(CurrCompoType As CompoType, Optional IsFrame As Boolean = False, Optional IndecRefCompo As Integer = -1) As Compo Dim FileNameComplete As String = String.Empty ' riconosco il part su cui sto aggiungendo la componente Dim CurrPartDoor As PartDoor = Map.refAssemblyManagerVM.ReserchPartDoor(Me.TypePart) If Not IsNothing(CurrPartDoor) Then For Each Compo In CurrPartDoor.Door.CompoList Compo.BorderColor = DirectCast(New BrushConverter().ConvertFrom("#DCDCDC"), SolidColorBrush) Compo.BackGroundColor = DirectCast(New BrushConverter().ConvertFrom("#FFFFFF"), SolidColorBrush) Compo.Foreground = DirectCast(New BrushConverter().ConvertFrom("#000000"), SolidColorBrush) Compo.BorderThickness = 1 Compo.FontBold = FontWeights.Normal Next End If ' creo la stringa che contiene la lista degli errori Dim ErrorList As String = String.Empty ' creo il nuovo oggetto compo Dim NewCompo As New Compo(CurrCompoType, True) ' Leggo il file ini del componente per vedere se c'è il template: se c'è If EgtUILib.GetPrivateProfileInt(S_TEMPLATE, K_ISACTIVE, 1, CurrCompoType.Path & "\" & CONFIGINI_FILE_NAME) <> 0 Then ' leggo nomi della componente scritti nel file di configurazione Dim Name As String = String.Empty Dim DDFName As String = String.Empty IniFile.GetPrivateProfileCompoName(S_TEMPLATE, K_NAME, DDFName, Name, CurrCompoType.Path & "\" & CONFIGINI_FILE_NAME) NewCompo.TemplateDDFName = DDFName NewCompo.TemplateName = Name LoadBrandFileList(NewCompo, IsFrame) ' se il caricamneto fallisse allora NewCompo = Nothing Else ' nascondo il template NewCompo.TemplateVisibility = Visibility.Collapsed ' leggo il nome del compo dal file config.ini ( il nome del file lua che deve essere caricato) Dim sTemplateName As String = String.Empty EgtUILib.GetPrivateProfileString(S_TEMPLATE, K_COMPO, "", sTemplateName, CurrCompoType.Path & "\" & CONFIGINI_FILE_NAME) ' se il nome non esiste oppure non è associato alcun file elimina l'oggetto If String.IsNullOrWhiteSpace(sTemplateName) Then ' Errore nella lettura {0} nel parametro {1} della componente. ErrorList &= String.Format(EgtMsg(50122), K_COMPO, NewCompo.TemplateName) NewCompo = Nothing ElseIf Not File.Exists(CurrCompoType.Path & "\" & sTemplateName & LUA_EXTENSION) Then ' Errore nella lettura {0} nel parametro {1} della componente. ErrorList &= String.Format(EgtMsg(50122), K_COMPO, NewCompo.TemplateName) NewCompo = Nothing Else ' alrimenti seleziono il nome NewCompo.TemplateSelItem = sTemplateName End If End If ' se è stata generata la componente If Not IsNothing(NewCompo) Then ' raggruppo tutte le componenti che hanno lo stesso nome vicine ' se trova già una componente allora l'inserimento avviene nel ciclo for Dim bInsert = False Dim CompoIndex = 0 For CompoIndex = 0 To m_CompoList.Count - 1 ' inserisco la nuova componente If NewCompo.CompoType.DDFName = m_CompoList(CompoIndex).CompoType.DDFName Then ' cerco l'ultima componente con lo stesso nome Dim Lastindex As Integer = 0 Dim PrecCompo As Compo = Nothing While CompoIndex + Lastindex < m_CompoList.Count AndAlso NewCompo.CompoType.DDFName = m_CompoList(CompoIndex + Lastindex).CompoType.DDFName If Not m_CompoList(CompoIndex + Lastindex).LoadByDefault Then PrecCompo = m_CompoList(CompoIndex + Lastindex) End If Lastindex += 1 End While If IndecRefCompo > -1 Then CompoList.Insert(IndecRefCompo, NewCompo) Else CompoList.Insert(CompoIndex + Lastindex, NewCompo) End If bInsert = True If Not IsNothing(PrecCompo) AndAlso Not (IsFrame And NewCompo.CompoType.DDFName = "rabbet") Then Map.refAssemblyPageVM.CurrAssembly.CopyParam(PrecCompo, NewCompo) Else AdviceHinge(NewCompo) End If Exit For End If Next If Not bInsert Then ' se la componenteaggiunta è un a Hinge allora il nome del template da visualizzare è di una Mortise AdviceHinge(NewCompo) If IndecRefCompo > -1 Then CompoList.Insert(IndecRefCompo, NewCompo) Else CompoList.Add(NewCompo) End If NewCompo.LoadDefaultFromLua = True FileNameComplete = CurrCompoType.Path & "\" & NewCompo.TemplateSelItem & LUA_EXTENSION If Not File.Exists(FileNameComplete) Then FileNameComplete = FileNameComplete & LUA_EXTENSION End If NewCompo.ReadDefaultParamLua(FileNameComplete, NewCompo) ' se frame ed esite il parametro Side allora assegno la posizione coerente If IsFrame Then Dim sSideFrame As String = "" If CurrPartDoor.Door.TypePart.Contains(ConstGen.PART_FRAME_TOP) Then sSideFrame = ConstCompo.SIDE_TOP ElseIf CurrPartDoor.Door.TypePart.Contains(ConstGen.PART_FRAME_BOTTOM) Then sSideFrame = ConstCompo.SIDE_BOTTOM ElseIf CurrPartDoor.Door.TypePart.Contains(ConstGen.HINGE) Then sSideFrame = ConstCompo.SIDE_HINGE ElseIf CurrPartDoor.Door.TypePart.Contains(ConstGen.LOCK) Then sSideFrame = ConstCompo.SIDE_LOCK End If ' ricerco nell'elenco la posizione da assegnare For Each ItemParam In NewCompo.CompoParamList If TypeOf ItemParam Is ComboBoxParam AndAlso Trim(ItemParam.DDFName.ToLower) = K_SIDE.ToLower Then Dim ComboBox As ComboBoxParam = DirectCast(ItemParam, ComboBoxParam) For IndexItem = 0 To ComboBox.ItemListDDF.Count - 1 If Trim(ComboBox.ItemListDDF(IndexItem).ToLower) = sSideFrame Then ComboBox.SetSelItem(ComboBox.ItemList(IndexItem)) Exit For End If Next End If Next End If End If ' evidenzio il nome della componente appena aggiunto '#FF4D84C4 EgaltechBlu1 '#FF7096CE EgaltechBlu2 '#FF90ABD9 EgaltechBlu3 '#FFB2C3E4 EgaltechBlu4 NewCompo.BorderColor = DirectCast(New BrushConverter().ConvertFrom("#FF4D84C4"), SolidColorBrush) NewCompo.BackGroundColor = DirectCast(New BrushConverter().ConvertFrom("#FFFFFFFF"), SolidColorBrush) NewCompo.Foreground = DirectCast(New BrushConverter().ConvertFrom("#FF4D84C4"), SolidColorBrush) NewCompo.BorderThickness = 2 NewCompo.FontBold = FontWeights.Bold m_SelCompo = NewCompo NotifyPropertyChanged("SelCompo") End If Map.refAssemblyManagerVM.CurrProject.SelAssemblyName.IsModified = True Return NewCompo End Function ' carica la lista di Hardware da mostrare nella grafica ( distinguendo i l'elenco destinato ai Frame) Public Function LoadBrandFileList(ByRef NewCompo As Compo, Optional IsFrame As Boolean = False) As Boolean Dim CurrCompoType As CompoType = NewCompo.CompoType Dim CurrFolderList As ObservableCollection(Of CompoBrandDir) ' carico l'elenco dei direttori If IsFrame Then CurrFolderList = CurrCompoType.FrameFolderList Else CurrFolderList = CurrCompoType.FolderList End If NewCompo.BrandListPart = New ObservableCollection(Of String) NewCompo.FileList = New ObservableCollection(Of String) If CurrFolderList.Count > 0 Then ' carico nella componente l'elenco dei nome da mostrare a video For IndexModel As Integer = 0 To CurrFolderList.Count - 1 NewCompo.BrandListPart.Add(CurrFolderList(IndexModel).ModelDirGraphic) Next ' partendo dal fondo della lista delle componenti cerco se esiste la stessa componente, in quel caso For CompoIndex = m_CompoList.Count - 1 To 0 Step -1 If m_CompoList(CompoIndex).CompoType.Name = CurrCompoType.Name AndAlso Not m_CompoList(CompoIndex).LoadByDefault Then NewCompo.SetSelBrand(m_CompoList(CompoIndex).SelBrandPart) NewCompo.SetSelFile(m_CompoList(CompoIndex).SelFile) ' esco Return True End If Next ' Prendo il primo direttorio For IndexFile As Integer = 0 To CurrFolderList(0).ModelFileList.Count - 1 NewCompo.FileList.Add(CurrFolderList(0).ModelFileList(IndexFile)) Next NewCompo.SetSelBrand(NewCompo.BrandListPart(0)) ' Carico il primo modello della lista Dim SelItemIndex As Integer = 0 While SelItemIndex < NewCompo.FileList.Count - 1 AndAlso Path.HasExtension(NewCompo.FileList(SelItemIndex)) AndAlso Path.GetExtension(NewCompo.FileList(SelItemIndex)) = NGE_EXTENSION SelItemIndex += 1 End While If SelItemIndex < NewCompo.FileList.Count Then NewCompo.SetSelFile(NewCompo.FileList(SelItemIndex)) Else NewCompo.SetSelFile(String.Empty) End If Else NewCompo = Nothing Return False End If Return True End Function ' ricerca seleziona la prima hinge di tipo Mortise ( solo se l'elenco dei brand non è di tipo Frame) Public Sub AdviceHinge(NewCompo As Compo) ' se l'elenco dei brand è di tipo Frame allora esci If NewCompo.SelBrandPart.ToLower.Contains(FRAME_FOLDER) Then Return Dim SelBrand As String = String.Empty Dim SelFile As String = String.Empty DefaultGetPrivateProfileString("AdviceHinge", BRAND_INI, "", SelBrand) DefaultGetPrivateProfileString("AdviceHinge", BRAND_FILE_INI, "", SelFile) If Not String.IsNullOrEmpty(SelBrand) And Not String.IsNullOrEmpty(SelFile) Then For IndexFolder As Integer = 0 To NewCompo.CompoType.FolderList.Count - 1 If Trim(SelBrand) = NewCompo.CompoType.FolderList(IndexFolder).ModelDirGraphic Then For IndexFile As Integer = 0 To NewCompo.CompoType.FolderList(IndexFolder).ModelFileList.Count - 1 If Trim(SelFile) = NewCompo.CompoType.FolderList(IndexFolder).ModelFileList(IndexFile) Then NewCompo.SetSelBrand(NewCompo.CompoType.FolderList(IndexFolder).ModelDirGraphic) NewCompo.SetSelFile(NewCompo.CompoType.FolderList(IndexFolder).ModelFileList(IndexFile)) Return End If Next End If Next End If Dim ChangeHardware As Boolean = False If NewCompo.CompoType.DDFName = "hinges" Then ' entro nel primo brand (direttorio) For IndexFolder As Integer = 0 To NewCompo.CompoType.FolderList.Count - 1 ' carico il primo file For IndexFile As Integer = 0 To NewCompo.CompoType.FolderList(IndexFolder).ModelFileList.Count - 1 ' ogni volta che inizio la lettura di un nuovo file resetto la variabile ChangeHardware = False Dim LocalFile As String = NewCompo.CompoType.FolderList(IndexFolder).ModelDir & "\" & NewCompo.CompoType.FolderList(IndexFolder).ModelFileList(IndexFile) & LUA_EXTENSION If Not File.Exists(LocalFile) Then Return Dim FileContent() As String = File.ReadAllLines(LocalFile) For IndexLine As Integer = 0 To FileContent.Count - 1 ' se il file lua contiene il numero di parametro 2 If FileContent(IndexLine).Contains("--") And FileContent(IndexLine).Contains("[Graphic parameters]") Then For SubIndex As Integer = IndexLine + 1 To FileContent.Count - 1 If FileContent(SubIndex).Contains("--") And FileContent(SubIndex).Contains("Default") Then Dim Items() As String = FileContent(SubIndex).Split("="c) If Not IsNothing(Items(1)) And Trim(Items(1)) = "2" Then ChangeHardware = True Exit For End If End If Next End If ' termino la lettura del file corrente Next ' prima di passare al file successivo ' se ho trovato il parametro Deafult= 2 If ChangeHardware Then ' termino la lettura del file Exit For Else NewCompo.SetSelBrand(NewCompo.CompoType.FolderList(IndexFolder).ModelDirGraphic) NewCompo.SetSelFile(NewCompo.CompoType.FolderList(IndexFolder).ModelFileList(IndexFile)) DefaultWritePrivateProfileString("AdviceHinge", BRAND_INI, NewCompo.SelBrandPart) DefaultWritePrivateProfileString("AdviceHinge", BRAND_FILE_INI, NewCompo.SelFile) Return End If ' passo al Direttorio succesivo Next Next End If End Sub #End Region 'AddCompo #Region "RemoveCompo" Friend Sub RemoveCompo(CompoToRemove As Compo, Optional OnlyOnJamb As Boolean = False) If IsNothing(CompoToRemove) Then Return If Not IsNothing(CompoToRemove.refJambCompo) Then ' elimino prima il riferimento For IndexAssociation As Integer = 0 To m_refPartDoor.ListAssociation.Count - 1 If m_refPartDoor.ListAssociation(IndexAssociation).refPartDoor.Door.CompoList.IndexOf(CompoToRemove.refJambCompo) > -1 Then m_refPartDoor.ListAssociation(IndexAssociation).refPartDoor.Door.RemoveCompo(CompoToRemove.refJambCompo) If Not IsNothing(CompoToRemove.refJambCompo) Then CompoToRemove.refJambCompo.refCompoDoor = Nothing End If CompoToRemove.refJambCompo = Nothing If OnlyOnJamb Then Return Exit For End If Next End If ' elimino la componente If Not IsNothing(CompoToRemove.refCompoDoor) Then ' elimino prima il riferimento che riporta alla porta For IndexAssociation As Integer = 0 To m_refPartDoor.ListAssociation.Count - 1 If m_refPartDoor.ListAssociation(IndexAssociation).refPartDoor.Door.CompoList.IndexOf(CompoToRemove.refCompoDoor) > -1 Then If Not IsNothing(CompoToRemove.refCompoDoor) Then CompoToRemove.refCompoDoor.refJambCompo = Nothing End If Exit For End If Next End If CompoList.Remove(CompoToRemove) End Sub #End Region ' RemoveCompo ' aggiorna il ToolTip delle TextBox di Height, Width, Thickness Private Sub UpdateToolTip() For CompoIndex = 0 To m_CompoList.Count - 1 For ParamIndex = 0 To m_CompoList(CompoIndex).CompoParamList.Count - 1 If TypeOf m_CompoList(CompoIndex).CompoParamList(ParamIndex) Is TextBoxParam Then Dim TextBoxParam As TextBoxParam = DirectCast(m_CompoList(CompoIndex).CompoParamList(ParamIndex), TextBoxParam) TextBoxParam.NotifyPropertyChanged("ToolTipValue") End If Next Next End Sub #Region "LETTURA DDF" Private bModifyProperties As Boolean = False Private sNameDDFMaterial As String = "" Private sNameDDFProperty As String = "" Private bModifyBevel As Boolean = False Private bDeleteTopShape As Boolean = False Private FileContent As String() ' Genero una nuova porta da usare nella lettura di un DDF Shared Sub ReadDDFPartDoor(ArrayFile() As String, ByRef LineIndex As Integer, ByRef ReadDoor As Part) ' Inizializzazioni Dim bPressure As Boolean = False Dim bProperties As Boolean = False ' tutti i parametri fino a profiles devono essere caricati Dim ReadDoorCompleted As Boolean = False 'Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nNothingSelected ReadDoor.FileContent = ArrayFile ReadDoor.m_TypePart = ConstGen.PART_DO_ & "1" ' Imposto di default la porta in lettura è versione 1 ReadDoor.Version = "1" ' Se il file DDF è vuoto If ReadDoor.FileContent.Count = 0 Then ' 50107 = Empty file. MessageBox.Show(EgtMsg(50107), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error) End If ' Leggo riga per riga Dim sErrorInfo As String = String.Empty While LineIndex < ReadDoor.FileContent.Count Dim sLine As String = RemoveComment(ReadDoor.FileContent(LineIndex)) ' Se linea vuota o solo commento, vado oltre If String.IsNullOrWhiteSpace(sLine) Then LineIndex += 1 Continue While End If ' Controllo fine pezzo "---" o fine file "..." If (Search3Hyphens(sLine) OrElse Search3Dots(sLine)) Then Exit While ' Modifica su vecchi file con "pressure:" indentato, per continuare a leggerli If sLine.IndexOf(S_WEIGHT & ":") > 0 Then sLine = sLine.TrimStart() ' Processo la sezione Dim sSection As String = GetName(sLine) Select Case sSection Case S_VERSION LineIndex = ReadDoor.GetVersion(LineIndex) Case S_PRODUCE LineIndex = ReadDoor.GetProduce(LineIndex) Case S_MEASURES LineIndex = ReadDoor.GetMeasure(LineIndex) Case S_CODE LineIndex = ReadDoor.GetCode(LineIndex) ' Se manca il codice, errore If LineIndex = -1 Then ' 50102=Failed reading DDF file. Missing needed parameter {0}. sErrorInfo &= String.Format(EgtMsg(50102), S_CODE) & vbCrLf ' assegno una porta vuota ed esco dal ciclo ReadDoor = Nothing ' interrompo la lettura del file Exit While End If Case S_ORDER LineIndex = ReadDoor.GetOrder(ReadDoor.NextIndex(LineIndex)) ' Se mancano i dati dell'ordine, errore If LineIndex = -1 Then ' 50102=Failed reading DDF file. Missing needed parameter {0}. sErrorInfo &= String.Format(EgtMsg(50102), S_ORDER) & vbCrLf ' assegno una porta vuota ed esco dal ciclo ReadDoor = Nothing ' interrompo la lettura del file Exit While End If Case S_DATE LineIndex = ReadDoor.GetDate(LineIndex) Case S_PIECE LineIndex = ReadDoor.GetPiece(LineIndex) Case S_POSITION LineIndex = ReadDoor.GetPosition(ReadDoor.NextIndex(LineIndex)) ' Se mancano i dati di posizione, errore If LineIndex = -1 Then ' 50102=Failed reading DDF file. Missing needed parameter {0}. sErrorInfo &= String.Format(EgtMsg(50102), S_POSITION) & vbCrLf ' assegno una porta vuota ed esco dal ciclo ReadDoor = Nothing ' interrompo la lettura del file Exit While End If Case S_SIZE LineIndex = ReadDoor.GetSize(ReadDoor.NextIndex(LineIndex)) ' Se mancano i dati di size, errore If LineIndex = -1 Then ' 50102=Failed reading DDF file. Missing needed parameter {0}. sErrorInfo &= String.Format(EgtMsg(50102), S_SIZE) & vbCrLf ' assegno una porta vuota ed esco dal ciclo ReadDoor = Nothing ' interrompo la lettura del file Exit While End If Case S_ORIGHEIGHTDOOR LineIndex = LineIndex + 1 'Case S_OVERLAP_DDF ' LineIndex = LineIndex + 1 Case S_WEIGHT LineIndex = ReadDoor.GetWeight(LineIndex) bPressure = True Case S_SWING LineIndex = ReadDoor.GetSwing(LineIndex) If LineIndex = -1 Then ' 50102=Failed reading DDF file. Missing needed parameter {0}. sErrorInfo &= String.Format(EgtMsg(50102), S_SWING) & vbCrLf ' assegno una porta vuota ed esco dal ciclo ReadDoor = Nothing Exit While End If Case S_SECURE ' creo l'oggetto OptionPage nella Mappa LineIndex = ReadDoor.GetSecure(LineIndex) Case S_MATERIAL LineIndex = ReadDoor.GetMaterial(LineIndex) If LineIndex = -1 Then '50532=Missing list of material at file "../Compo/Default.ini". sErrorInfo &= EgtMsg(50532) & vbCrLf ReadDoor = Nothing Exit While ElseIf LineIndex = -2 Then '50531=The current material {0} does not exist in list of material. Look at file "../Compo/Default.ini". sErrorInfo &= String.Format(EgtMsg(50531), ReadDoor.sNameDDFMaterial) & vbCrLf ReadDoor = Nothing Exit While End If Case ConstCompo.S_PROPERTIES bProperties = True LineIndex = ReadDoor.GetProperties(LineIndex) If LineIndex = -1 Then '50533=Impossible to load more than one property at time. sErrorInfo &= EgtMsg(50533) & vbCrLf ReadDoor = Nothing Exit While ElseIf LineIndex = -2 Then If Not IsNothing(ReadDoor.m_SelectedMaterial) Then ' 50530=Property {0} does not exist in list of {1}. Look at file "../Compo/Default.ini" sErrorInfo &= String.Format(EgtMsg(50530), ReadDoor.sNameDDFProperty, ReadDoor.m_SelectedMaterial.Name) & vbCrLf Else ' 50534=Property {0} does not exist in the list. Look at file "../Compo/Default.ini". sErrorInfo &= String.Format(EgtMsg(50534), ReadDoor.sNameDDFProperty) & vbCrLf End If ReadDoor = Nothing Exit While End If Case ConstCompo.S_PROFILES Dim LocalMsg As String = String.Empty LineIndex = ReadDoor.GetProfiles(ReadDoor.NextIndex(LineIndex), ReadDoor.TypePart, LocalMsg) If LineIndex = -1 Then ' 50102=Failed reading DDF file. Missing needed parameter {0}. sErrorInfo &= String.Format(EgtMsg(50102), ConstCompo.S_PROFILES) & vbCrLf If Not String.IsNullOrEmpty(LocalMsg) Then sErrorInfo &= LocalMsg End If ' assegno una porta vuota ed esco dal ciclo ReadDoor = Nothing Exit While End If If Not String.IsNullOrEmpty(LocalMsg) Then sErrorInfo &= LocalMsg End If ReadDoorCompleted = True Case ConstCompo.K_HARDWARE LineIndex = LineIndex + 1 Case ConstCompo.K_OPTIONS LineIndex = ReadDoor.GetOptions(ReadDoor.NextIndex(LineIndex)) Case Else 'COMPONENTS ' Se sezione senza nome o altro errore If String.IsNullOrWhiteSpace(sSection) Then ' 50130=Error in reading: line {0}. sErrorInfo &= String.Format(EgtMsg(50130), LineIndex) & vbCrLf ' assegno una porta vuota ed esco dal ciclo ReadDoor = Nothing Exit While End If ' Lettura del componente RegexFunction.IsCompo = True LineIndex = ReadDoor.GetCompo(ReadDoor.NextIndex(LineIndex), sSection, sErrorInfo) RegexFunction.IsCompo = False If LineIndex = -1 Then ' assegno una porta vuota ed esco dal ciclo ReadDoor = Nothing Exit While End If End Select End While If OptionModule.m_ConfigurationSoftware = ConfigType.Assembly Then Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nAssemblyPage Else Map.refMainWindowVM.SelectedPage = MainWindowVM.ListPageEnum.nDDFPage End If ' controllo che i parametri della porta siano stati caricati correttamente If Not ReadDoorCompleted Then ' 50156=Error in reading ddf: door is not completed or ddf has been slpitted by '---' bad. If String.IsNullOrEmpty(sErrorInfo) Then sErrorInfo = EgtMsg(50156) ReadDoor = Nothing End If ' Aggiorno If Not IsNothing(ReadDoor) And ReadDoorCompleted Then ' se la porta esiste allora mostro i suoi parametri Map.refPartPageVM.CurrPart = ReadDoor ' se non passo dalla funzione che raccoglie queste informazioni (utilizzato nella versione precedente all'inserimento della ComboBox) If Not bProperties AndAlso ReadDoor.PropertiesIsVisible = Visibility.Visible Then For Each Item In ReadDoor.PropertiesList 'Item.IsChecked = False Next End If ' se esiste un solo materiale nell'elenco dei materiali, ma non è inserito nella porta allora lo carico di default If IsNothing(ReadDoor.m_SelectedMaterial) And OptionModule.m_MaterialList.Count > 0 Then ReadDoor.SelectedMaterial = OptionModule.m_MaterialList(0) End If ' Messaggio di errore per le proprietà If ReadDoor.bModifyProperties And Not FirstReadingEdge Then ' 50194 = Properties has been deleted MessageBox.Show(EgtMsg(50194), EgtMsg(50118), MessageBoxButton.OK, MessageBoxImage.Information) FirstReadingEdge = True End If ' Messaggio di errore per il Top Arch If ReadDoor.bDeleteTopShape Then ' 50197: Impossible to create a Top Arch because of configuration! Curr door will be modify. MessageBox.Show(EgtMsg(50197), EgtMsg(50144), MessageBoxButton.OK, MessageBoxImage.Asterisk) FirstReadingEdge = True End If ' Messaggio di errore per incongruenza bevel If ReadDoor.bModifyBevel Then If Not IsNothing(ReadDoor.LockEdgeType) AndAlso (ReadDoor.m_LockEdgeType.BevelDDF = BEVEL_DOWN OrElse ReadDoor.m_LockEdgeType.BevelDDF = BEVEL_UP) AndAlso Not IsNothing(ReadDoor.m_Swing) AndAlso ReadDoor.m_Swing.Contains("I") Then ' 50198 =Bevel on lock edge would be inverted, 50115 =Caution MessageBox.Show(EgtMsg(50198), EgtMsg(50115), MessageBoxButton.OK, MessageBoxImage.Asterisk, MessageBoxResult.No) Else ' 50169 =Door dispositiopn has been modify. MessageBox.Show(EgtMsg(50169), EgtMsg(50115), MessageBoxButton.OK, MessageBoxImage.Asterisk, MessageBoxResult.No) End If End If ' Messaggio di errore per il Weight, quando non passa dalla funzione GetWeight (perchè il ddf non ha il peso) If Not bPressure Then If m_IsCheckedWeight = Visibility.Visible Then ' ACCESO e NON presenet nel ddf ' 50149=Caution: Weight is setted in OptionPage. Do you want to remove? If MessageBox.Show(EgtMsg(50149), EgtMsg(50110), MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes) = MessageBoxResult.Yes Then ' decido di spegnere OptionsVM.SetIsCheckedWeight(False) Else ' decido di accendere OptionsVM.SetIsCheckedWeight(True) ReadDoor.m_Weight = OptionModule.m_Weight ReadDoor.VisibilityWeight = Visibility.Visible Part.FirstReadingEdge = True End If End If End If End If ' Messaggi di errore generici, se la stringa dei messaggi contiene delle informazioni allora visualizzo If Not String.IsNullOrWhiteSpace(sErrorInfo) Then Dim sTitle As String = EgtMsg(50101) ' 50541 = {0} in reading {1}. If Not IsNothing(ReadDoor) Then String.Format(EgtMsg(50541), sTitle, ReadDoor.TypePart) MessageBox.Show(sErrorInfo, sTitle, MessageBoxButton.OK, MessageBoxImage.Error) End If End Sub ' Passaggio controllato alla prossima linea del file Private Function NextIndex(Index As Integer) As Integer If m_StopNextIndexLine Then m_StopNextIndexLine = False Return Index End If Return SkipWhiteSpace(FileContent, Index + 1) End Function ' Leggo versione Private Function GetVersion(Index As Integer) As Integer Dim sVersion As String = GetValueWithKey(RemoveComment(FileContent(Index)), S_VERSION) If String.IsNullOrWhiteSpace(sVersion) Then m_Version = "1" Else ' verifico che sia valido (dove leggo l'elenco delle versioni disponibili?) If sVersion.Trim <> "2" Then m_Version = "1" Else m_Version = sVersion.Trim End If End If RegexFunction.sCurrVersionDoor = m_Version ' passo alla riga successiva Return NextIndex(Index) End Function ' Leggo il frame Private Function GetProduce(Index As Integer) As Integer Dim sProduce As String = GetValueWithKey(RemoveComment(FileContent(Index)), S_PRODUCE) If String.IsNullOrWhiteSpace(sProduce) Then m_IsActive = True Else m_IsActive = (sProduce.ToLower() = "true") End If ' passo alla riga successiva Return NextIndex(Index) End Function ' Leggo l'unità di misura Private Function GetMeasure(Index As Integer) As Integer Dim sMeasure As String = GetValueWithKey(RemoveComment(FileContent(Index)), S_MEASURES) If String.IsNullOrWhiteSpace(sMeasure) Then ' assegna il valore di default caricato nell'OptionModule m_Measure = ConvertMmUnitsToString(OptionModule.m_bIsMmUnit) Else m_Measure = ConvertMmUnitsToString(ConvertStringToMmUnits(sMeasure)) End If ' passo alla riga successiva Return NextIndex(Index) End Function ' Leggo il codice Private Function GetCode(Index As Integer) As Integer Dim Code As String = GetValueWithKey(RemoveComment(FileContent(Index)), S_CODE) If String.IsNullOrWhiteSpace(Code) Then ' Errore Return -1 Else m_Code = Code End If ' passo alla riga successiva Return NextIndex(Index) End Function ' Leggo i dati della sezione order Private Function GetOrder(ByRef Index As Integer) As Integer ' Recupero dati customer If Index > FileContent.Count() - 1 Then Return -1 Dim Customer As String = GetValueWithKey(RemoveComment(FileContent(Index)), K_CUSTOMER) If Not String.IsNullOrWhiteSpace(Customer) Then m_Customer = Customer Index = NextIndex(Index) ' Recupero dati elevation If Index > FileContent.Count() - 1 Then Return -1 Dim Elevation As String = GetValueWithKey(RemoveComment(FileContent(Index)), K_ELEVATION) If Not String.IsNullOrWhiteSpace(Elevation) Then m_Elevation = Elevation Index = NextIndex(Index) ' Recupero dati project (opzionale) If Index > FileContent.Count() - 1 Then Return -1 If SearchKey(RemoveComment(FileContent(Index)), K_PROJECT) Then Dim Project As String = GetValueWithKey(RemoveComment(FileContent(Index)), K_PROJECT) If Not String.IsNullOrWhiteSpace(Project) Then m_Project = Project Index = NextIndex(Index) End If ' Recupero dati PO (purchase order)(opzionale) If Index > FileContent.Count() - 1 Then Return -1 If SearchKey(RemoveComment(FileContent(Index)), K_PO) Then Dim PO As String = GetValueWithKey(RemoveComment(FileContent(Index)), K_PO) If Not String.IsNullOrWhiteSpace(PO) Then m_PO = PO Index = NextIndex(Index) ElseIf SearchKey(RemoveComment(FileContent(Index)), K_ORDER) Then Dim Order As String = GetValueWithKey(RemoveComment(FileContent(Index)), K_ORDER) If Not String.IsNullOrWhiteSpace(Order) Then m_PO = Order Index = NextIndex(Index) End If ' Recupero dati line If Index > FileContent.Count() - 1 Then Return -1 Dim Line As String = GetValueWithKey(RemoveComment(FileContent(Index)), K_LINE) If Not String.IsNullOrWhiteSpace(Line) Then m_Line = Line Index = NextIndex(Index) ' Passo alla fine della sezione While Index < FileContent.Count() AndAlso Not SearchName(RemoveComment(FileContent(Index)), S_DATE) Index = NextIndex(Index) End While Return Index End Function ' Leggo la data Private Function GetDate(Index As Integer) As Integer Dim sDate As String = GetValueWithKey(RemoveComment(FileContent(Index)), S_DATE) If String.IsNullOrWhiteSpace(sDate) Then ' assegna il valore di default caricato nell'OptionModule m_Date = System.DateTime.Now.ToString("dd/MM/yyyy") Else m_Date = sDate End If ' passo alla riga successiva Return NextIndex(Index) End Function ' Leggo il piece Private Function GetPiece(Index As Integer) As Integer Dim sType As String = GetValueWithKey(RemoveComment(FileContent(Index)), S_PIECE) If Not String.IsNullOrWhiteSpace(sType) Then m_TypePart = sType If sType.Contains("DO_") Then 'OptionModule.CreateNewPropertiesList(m_PropertiesList, m_SelectedMaterial) OptionModule.CreateNewPropertiesList(Me) Else 'OptionModule.CreateNewPropertiesListJamb(m_PropertiesList, m_SelectedMaterial) OptionModule.CreateNewPropertiesListJamb(Me) End If End If ' passo alla riga successiva Return NextIndex(Index) End Function ' Leggo i dati di position Private Function GetPosition(Index As Integer) As Integer If Index > FileContent.Count() - 1 Then Return -1 Dim sX As String = GetValueWithKey(RemoveComment(FileContent(Index)), K_X) Index = NextIndex(Index) If Index > FileContent.Count() - 1 Then Return -1 Dim sY As String = GetValueWithKey(RemoveComment(FileContent(Index)), K_Y) Index = NextIndex(Index) If Index > FileContent.Count() - 1 Then Return -1 Dim sZ As String = GetValueWithKey(RemoveComment(FileContent(Index)), K_Z) Index = NextIndex(Index) m_Position = New List(Of String) From {sX, sY, sZ} Return Index End Function ' Leggo i dati di size Private Function GetSize(Index As Integer) As Integer ' Width If Index > FileContent.Count() - 1 Then Return -1 Dim sLine As String = RemoveComment(FileContent(Index)) Dim Width As String = GetValueWithKey(sLine, K_WIDTH) If String.IsNullOrWhiteSpace(Width) Then If Not SearchKey(sLine, K_WIDTH) Then Return -1 ' altrimenti m_Width = OptionModule.m_Width Part.FirstReadingEdge = True '50141=Invalid expression in {0}. '50159= Missing parameter in ddf! MessageBox.Show(String.Format(EgtMsg(50141), ConstIni.K_WIDTH_INI) & EgtMsg(50159), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error) Else ConvertDDFValueIntoCurrentUnit(m_Measure, Width) SetWidth(Width) End If Index = NextIndex(Index) ' Height If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) Dim Height As String = GetValueWithKey(sLine, K_HEIGHT) If String.IsNullOrWhiteSpace(Height) Then If Not SearchKey(sLine, K_HEIGHT) Then Return -1 ' altrimenti SetHeight(OptionModule.m_Height) Part.FirstReadingEdge = True ' 50141 =Invalid expression in {0}. ' 50159 = Missing parameter in ddf! MessageBox.Show(String.Format(EgtMsg(50141), ConstIni.K_HEIGHT_INI) & EgtMsg(50159), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error) Else ConvertDDFValueIntoCurrentUnit(m_Measure, Height) SetHeight(Height) End If Index = NextIndex(Index) ' Thickness If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) Dim Thickness As String = GetValueWithKey(sLine, K_THICKNESS) If String.IsNullOrWhiteSpace(Thickness) Then If Not SearchKey(sLine, K_THICKNESS) Then Return -1 ' altrimenti m_Thickness = OptionModule.m_Thickness Part.FirstReadingEdge = True ' 50141 =Invalid expression in {0}. ' 50159 = Missing parameter in ddf! MessageBox.Show(String.Format(EgtMsg(50141), ConstIni.K_THICKNESS_INI) & EgtMsg(50159), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error) Else ConvertDDFValueIntoCurrentUnit(m_Measure, Thickness) SetThickness(Thickness) End If Map.refAssemblyPageVM.CurrAssembly.SetVarAssembly() ' passo alla riga successiva Return NextIndex(Index) End Function ' Leggo il valore del peso Private Function GetWeight(Index As Integer) As Integer ' se sono arrivato fino a qui significa che è stato scritto nel ddf Dim sLine As String = RemoveComment(FileContent(Index)) Dim Weight As String = GetValueWithKey(sLine, S_WEIGHT) Dim bPressureIsInDDF As Boolean = False ' inizio eseguendo la lettura della stringa del ddf ' se la stringa contiene il MESSAGGIO Pressure If SearchKey(sLine, S_WEIGHT) Then bPressureIsInDDF = True ' allora passo alla lettura del VALORE Pressure Weight = GetValueWithKey(sLine, S_WEIGHT) If String.IsNullOrWhiteSpace(Weight) Then ' cairco di default il VALORE m_Weight = OptionModule.m_Weight ' ? inserisco un messaggio o una avvenuta modifica ? Else ' caricol il VALORE m_Weight = Weight End If End If ' eseguo il confronto con le impostanzioni della option page ' nella option page è ACCESSO ma NON è presnte nel ddf If Not Assembly.FirstReadingWeight AndAlso m_IsCheckedWeight = Visibility.Visible And Not bPressureIsInDDF Then ' Weight is setted in OptionPage. Do you want to remove? If MessageBox.Show(EgtMsg(50149), EgtMsg(50110), MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes) = MessageBoxResult.Yes Then ' SPENTO OptionsVM.SetIsCheckedWeight(False) Else OptionsVM.SetIsCheckedWeight(True) m_Weight = OptionModule.m_Weight VisibilityWeight = Visibility.Visible ' notifico una avvenuta modifica Part.FirstReadingEdge = True End If ' comunico che almeno una volta è stata notificata la modifica Assembly.FirstReadingWeight = True End If ' nella option page è SPENTO ma è presnte nel ddf If Not Assembly.FirstReadingWeight AndAlso m_IsCheckedWeight = Visibility.Collapsed And bPressureIsInDDF Then If MessageBox.Show(EgtMsg(50150), EgtMsg(50110), MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes) = MessageBoxResult.Yes Then ' ACCESO OptionsVM.SetIsCheckedWeight(True) Else OptionsVM.SetIsCheckedWeight(False) VisibilityWeight = Visibility.Collapsed ' notifico una avvenuta modifica Part.FirstReadingEdge = True End If ' comunico che almeno una volta è stata notificata la modifica Assembly.FirstReadingWeight = True End If ' passo alla riga successiva Return NextIndex(Index) End Function ' Leggo swing Private Function GetSwing(Index As Integer) As Integer Dim sLine As String = RemoveComment(FileContent(Index)) Dim Swing As String = GetValueWithKey(sLine, S_SWING) If String.IsNullOrWhiteSpace(Swing) Then ' se non c'è la parola chiave allora esci If Not SearchKey(sLine, S_SWING) Then Return -1 ' altrimenti lascia il valore vuoto 'm_Swing = OptionModule.m_Swing Part.FirstReadingEdge = True ' 50141 =Invalid expression in {0}. ' 50159 = Missing parameter in ddf! MessageBox.Show(String.Format(EgtMsg(50141), ConstIni.K_SWING_INI) & EgtMsg(50159), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error) Else ' carico il valore nella porta corrente m_Swing = Swing OptionModule.SetCurrSwing(m_SwingAlias, m_Swing) If IsNothing(m_SwingAlias) Then Return -1 m_Swing = m_SwingAlias.AliasName End If ' passo alla riga successiva Return NextIndex(Index) End Function ' Leggo il posizionamento in macchina della porta Private Function GetSecure(Index As Integer) As Integer Dim MessageBoxBevel As MessageBoxResult = MessageBoxResult.OK ' Recupero il valore di secure Dim sLine As String = RemoveComment(FileContent(Index)) Dim sSecure As String = GetValueWithKey(sLine, S_SECURE) If String.IsNullOrWhiteSpace(sSecure) Then ' se non c'è la parola chiave allora esci If Not SearchKey(sLine, S_SECURE) Then Return -1 ' altrimenti lascia il valore vuoto Else ' carico il valore nella porta corrente m_Secure = sSecure End If ' passo alla riga successiva Return NextIndex(Index) End Function ' leggo il materiale Private Function GetMaterial(Index As Integer) As Integer ' se non trovo la lista dei materiali o la lista è vuota allora errore If IsNothing(OptionModule.m_MaterialList) OrElse OptionModule.m_MaterialList.Count < 1 Then Return -1 End If Dim bMaterialExists = False Dim sLine As String = RemoveComment(FileContent(Index)) Dim sMaterial As String = GetValueWithKey(sLine, S_MATERIAL) If Not String.IsNullOrWhiteSpace(sMaterial) Then sNameDDFMaterial = sMaterial For Each MaterialItem In OptionModule.m_MaterialList ' se trovo il materiale allora carico la sua lista di proprietà ed esco If Trim(MaterialItem.NameDDF) = Trim(sMaterial) Then 'm_SelectedMaterial = MaterialItem SetMaterial(MaterialItem) OptionModule.m_CurrMaterial = m_SelectedMaterial If Not IsNothing(MaterialItem.PropertiesList) Then 'PropertiesList = MaterialItem.PropertiesList SetPropertiesList(MaterialItem.PropertiesList) 'SelectedProperty = m_PropertiesList(0) SetProperty(m_PropertiesList(0)) Else PropertiesIsVisible = Visibility.Collapsed End If bMaterialExists = True Return NextIndex(Index) End If Next End If ' se il materiale non è nell'elenco dei materiali If Not bMaterialExists Then Return -2 End If Return NextIndex(Index) End Function ' leggo le proprietà Private Function GetProperties(Index As Integer) As Integer ' se esiste l'elenco dei materiali (nuova configurazione) ma il ddf è senza: allora passo come materiale di default il primo della lista (wood) If IsNothing(m_SelectedMaterial) AndAlso OptionModule.m_MaterialList.Count > 0 Then 'SelectedMaterial = OptionModule.m_MaterialList(0) SetMaterial(OptionModule.m_MaterialList(0)) 'PropertiesList = OptionModule.m_MaterialList(0).PropertiesList SetPropertiesList(OptionModule.m_MaterialList(0).PropertiesList) End If ' devo verificare se esite la lista dei materiali Dim bPropertyExists = False Dim sLine As String = RemoveComment(FileContent(Index)) ' se esiste la proprietà, ma non è selezionata allora comunico la modifica If PropertiesIsVisible = Visibility.Collapsed Then bModifyProperties = True End If Dim sProperties As String = GetValueWithKey(sLine, ConstCompo.S_PROPERTIES) If Not String.IsNullOrWhiteSpace(sProperties) Then ' carico il valore nella porta corrente Dim sItem() As String = sProperties.Split(","c) ' se la lista contiene più di una proprietà If sItem.Count > 1 Then Return -1 End If For Each Item In m_PropertiesList Item.IsChecked = False For Each ItemRead In sItem If Trim(Item.Name) = Trim(ItemRead) Then m_SelectedProperty = Item Item.IsChecked = True bPropertyExists = True End If Next Next ' se la proprietà non appartiene alla lista allora esco e non carico la porta If Not bPropertyExists Then sNameDDFProperty = sProperties Return -2 End If Else For Each Item In m_PropertiesList If Item.Name = NONE_DDF Then SelectedProperty = Item Exit For End If Next End If Return NextIndex(Index) End Function Private Function GetOptions(Index As Integer) As Integer If Index > FileContent.Count() - 1 Then Return Index Dim sLine As String = RemoveComment(FileContent(Index)) ' se stringa vuota passo alla riga successiva If String.IsNullOrEmpty(sLine) Then Return Index End If ' procedo a leggere le options Dim nCount As Integer = 0 m_sOptions = String.Empty ' sLine.StartsWith(OptionModule.m_sSpace1Tab) While Not (Search3Hyphens(sLine) OrElse Search3Dots(sLine)) m_sOptions &= If(nCount > 0, vbCrLf, "") & sLine Index = NextIndex(Index) ' se il file è terminatpo esco If Index > FileContent.Count() - 1 Then Return Index sLine = RemoveComment(FileContent(Index)) nCount = nCount + 1 End While Return Index End Function ' calcola la congruenza del posizionamento e del secure Private Sub CalcBevelFromSecure() ' se sono nella configurazione assemblato e sto leggendo un frame If OptionModule.m_ConfigurationSoftware = ConfigType.Assembly AndAlso Not IsNothing(Map.refAssemblyPageVM.CurrAssembly) AndAlso Not m_TypePart.Contains(ConstGen.PART_DO_) Then ' assegno i profili bevel caricati nella pagina AssemblyPage Try SetLockEdgeType(Map.refAssemblyPageVM.CurrAssembly.EdgeTypeList.First(Function(x) x.Name = Map.refAssemblyPageVM.CurrAssembly.LockEdgeType.Name)) Catch ex As Exception End Try Try SetHingeEdgeType(Map.refAssemblyPageVM.CurrAssembly.EdgeTypeList.First(Function(x) x.Name = Map.refAssemblyPageVM.CurrAssembly.HingeEdgeType.Name)) Catch ex As Exception End Try Try SetTopType(Map.refAssemblyPageVM.CurrAssembly.EdgeTypeList.First(Function(x) x.Name = Map.refAssemblyPageVM.CurrAssembly.TopType.Name)) Catch ex As Exception End Try Try SetBottomType(Map.refAssemblyPageVM.CurrAssembly.EdgeTypeList.First(Function(x) x.Name = Map.refAssemblyPageVM.CurrAssembly.BottomType.Name)) Catch ex As Exception End Try ' la disposizione è sempre BD, non modificabile, quindi mostro a video BySwing Try SetDispositionItem(DispositionList.First(Function(x) x.Name = ConstGen.BEVEL_BYSWING)) Catch ex As Exception End Try Else ' se è un'anta (in qualsisi tipo di configurazione) ' controllo se almeno uno dei bevel della porta ha BV Dim Bevel As String = String.Empty Dim sBevelLock As String = String.Empty Dim sBevelHinge As String = String.Empty Dim sBevelTop As String = String.Empty Dim sBevelBottom As String = String.Empty ' se almeno un profilo è di tipo bevel ' If m_LockEdgeType.Name = ConstGen.BEVEL_GRAPHIC Then sBevelLock = m_LockEdgeType.BevelDDF If m_LockEdgeType.Name.Contains(ConstGen.BEVEL_GRAPHIC) Then sBevelLock = ClaerBevel(m_LockEdgeType.BevelDDF) If m_HingeEdgeType.Name.Contains(ConstGen.BEVEL_GRAPHIC) Then sBevelHinge = ClaerBevel(m_HingeEdgeType.BevelDDF) If m_TopType.Name.Contains(ConstGen.BEVEL_GRAPHIC) Then sBevelTop = ClaerBevel(m_TopType.BevelDDF) If m_BottomType.Name.Contains(ConstGen.BEVEL_GRAPHIC) Then sBevelBottom = ClaerBevel(m_BottomType.BevelDDF) ' controllo che i bevel siano tutti uguali nello stesso Part ( tranne che nelle inattive) Bevel = ControlBevel(sBevelLock, sBevelHinge, sBevelTop, sBevelBottom) ' nel caso di nessuna disposizione fissata da Config.ini Select Case OptionModule.m_sDisposition Case ConstGen.BEVEL_DOWN SetDispositionItem(m_DispositionList(1)) ' modifico il bevel da BU a BD Modifybevel(Bevel, ConstGen.BEVEL_UP) Case ConstGen.BEVEL_UP SetDispositionItem(m_DispositionList(0)) ' modifico il bevel da BU a BD Modifybevel(Bevel, ConstGen.BEVEL_DOWN) Case Else ' BySwing If Not String.IsNullOrEmpty(Bevel) Then Try ' seleziono il bevel letto nella lista delle disposizioni possibili (esiste un solo tipo di bevel per tutta la porta) SetDispositionItem(m_DispositionList.First(Function(x) x.Name = Bevel)) If Bevel = ConstGen.BEVEL_UP Then OptionModule.m_bBevelUp = Visibility.Visible If Bevel = ConstGen.BEVEL_DOWN Then OptionModule.m_bBevelDown = Visibility.Visible ' questo caso il secure segue le solite regole di calcolo Catch ex As Exception ' se il bevel passato è BV devo calcolare il corretto bevel SetDispositionItem(m_DispositionList.First(Function(x) x.Name = ConstGen.BEVEL_BYSWING)) bModifyBevel = True Part.FirstReadingEdge = True End Try Else ' Bevel SQ If m_SwingAlias.Name.Contains(ConstGen.HAND_REVERSE) Then If m_Secure = ConstGen.SWING_UP Then SetDispositionItem(m_DispositionList(0)) OptionModule.m_bBevelUp = Visibility.Visible ElseIf m_Secure = ConstGen.SWING_DOWN Then SetDispositionItem(m_DispositionList(1)) OptionModule.m_bBevelDown = Visibility.Visible Else m_Secure = ConstGen.SWING_DOWN SetDispositionItem(m_DispositionList(1)) OptionModule.m_bBevelDown = Visibility.Visible End If Else If m_Secure = ConstGen.SWING_UP Then SetDispositionItem(m_DispositionList(1)) OptionModule.m_bBevelDown = Visibility.Visible ElseIf m_Secure = ConstGen.SWING_DOWN Then SetDispositionItem(m_DispositionList(0)) OptionModule.m_bBevelUp = Visibility.Visible Else m_Secure = ConstGen.SWING_UP SetDispositionItem(m_DispositionList(0)) OptionModule.m_bBevelUp = Visibility.Visible End If End If End If End Select End If End Sub ' restituisce il tipo di bevel dal profilo Private Function ClaerBevel(sBevel As String) As String Dim sEdgeType As String = String.Empty Dim IndexOf As Integer = -1 If sBevel.Contains(ConstGen.BEVEL_GRAPHIC) Then IndexOf = sBevel.IndexOf(ConstGen.BEVEL_GRAPHIC) ElseIf sBevel.Contains(ConstGen.BEVEL_DOWN) Then IndexOf = sBevel.IndexOf(ConstGen.BEVEL_DOWN) ElseIf sBevel.Contains(ConstGen.BEVEL_UP) Then IndexOf = sBevel.IndexOf(ConstGen.BEVEL_UP) End If If IndexOf > -1 And sBevel.Count > 2 Then sEdgeType = sBevel.Remove(IndexOf, 2) Return sBevel.Replace(sEdgeType, "") Else Return sBevel End If End Function ' Leggo i dati dei profili Private Function GetProfiles(Index As Integer, TypePart As String, Optional ByRef sErrorMsg As String = "") As Integer ' ricalcolo la lista da mostrare a video If IsNothing(Map.refOptionsVM) Then Dim OptionsPage As OptionsVM = Map.refMainWindowVM.OptionPage refOptionsVM.RefreshEdgeTypeList() End If Dim bError As Boolean = False '------------------------------------------------------------------------------- ' Lock If Index > FileContent.Count() - 1 Then Return -1 Dim sLine As String = RemoveComment(FileContent(Index)) m_LockEdgeType = m_LockEdgeTypeList(0) ' se vrsione 2 (20/04/2023) il tipo di bevel è inserito nella riga successiva con chaive K_TYPEEDGE Dim nError As Integer = Index Dim LockEdgeType As String = ManageProfileType(sLine, Index, nError, K_LOCKEDGE) If nError = -1 Then Return -1 If String.IsNullOrWhiteSpace(LockEdgeType) Then ' se non c'è la parola chiave allora esco con errore If ManageProfileError(sLine, K_LOCKEDGE, SIDE_LOCK) = -1 Then Return -1 Else Try Dim sMetaData As String = Trim(RegexFunction.Metadata(sLine)) If Not IsNothing(sMetaData) AndAlso sMetaData = "Inverted" Then SetInvertBevel(True) LockEdgeType = LockEdgeType.Replace(DDF_METADATA, "") LockEdgeType = Trim(LockEdgeType.Replace(sMetaData, "")) End If ' cerco il valore nella lista m_LockEdgeType = LockEdgeTypeList.First(Function(x) x.Name = LockEdgeType) ' segno il bevel che è stato letto nel ddf per il calcolo del secure m_LockEdgeType.BevelDDF = LockEdgeType Catch ex As Exception ' se il valore cercato non è nella lista If Trim(LockEdgeType).Contains(ConstGen.BEVEL_UP) Then Try m_LockEdgeType = LockEdgeTypeList.First(Function(x) x.Name = LockEdgeType.Replace(ConstGen.BEVEL_UP, ConstGen.BEVEL_GRAPHIC)) ' segno il bevel che è stato letto nel ddf per il calcolo del secure m_LockEdgeType.BevelDDF = LockEdgeType Catch ex2 As Exception End Try ElseIf Trim(LockEdgeType).Contains(ConstGen.BEVEL_DOWN) Then Try m_LockEdgeType = LockEdgeTypeList.First(Function(x) x.Name = LockEdgeType.Replace(ConstGen.BEVEL_DOWN, ConstGen.BEVEL_GRAPHIC)) ' segno il bevel che è stato letto nel ddf per il calcolo del secure m_LockEdgeType.BevelDDF = LockEdgeType Catch ex2 As Exception End Try End If End Try If Not ControlProfileInList(LockEdgeTypeList, LockEdgeType) Then ' 50522=The profile {0} is not a member of the {1} list. sErrorMsg = String.Format(EgtMsg(50522), LockEdgeType, SIDE_LOCK) Return -1 End If End If Index = NextIndex(Index) If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) Dim LockEdgeMachining As String = GetValueWithKey(sLine, K_MACHINING) If String.IsNullOrWhiteSpace(LockEdgeMachining) Then If Not SearchKey(sLine, K_MACHINING) Then Return -1 Else m_LockEdgeMachining = Utility.ConvertOnOffToBoolean(LockEdgeMachining) End If Index = NextIndex(Index) If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) Dim LockEdgeOverMaterial As String = GetValueWithKey(sLine, K_OVERMATERIAL) If String.IsNullOrWhiteSpace(LockEdgeOverMaterial) Then If Not SearchKey(sLine, K_OVERMATERIAL) Then Return -1 Else ConvertDDFValueIntoCurrentUnit(m_Measure, LockEdgeOverMaterial) m_LockEdgeOverMaterial = LockEdgeOverMaterial End If Index = NextIndex(Index) '------------------------------------------------------------------------------- ' Hinge If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) m_HingeEdgeType = m_HingeEdgeTypeList(0) ' se vrsione 2 (20/04/2023) il tipo di bevel è inserito nella riga successiva con chaive K_TYPEEDGE nError = Index Dim HingeEdgeType As String = ManageProfileType(sLine, Index, nError, K_HINGEEDGE) If nError = -1 Then Return -1 If String.IsNullOrWhiteSpace(HingeEdgeType) Then ' se non c'è la parola chiave allora esco con errore If ManageProfileError(sLine, K_HINGEEDGE, SIDE_HINGE) = -1 Then Return -1 Else Try m_HingeEdgeType = HingeEdgeTypeList.First(Function(x) x.Name = HingeEdgeType) ' segno il bevel che è stato letto nel ddf per il calcolo del secure m_HingeEdgeType.BevelDDF = HingeEdgeType Catch ex As Exception ' se il valore cercato non è nella lista If Trim(HingeEdgeType).Contains(ConstGen.BEVEL_UP) Then Try m_HingeEdgeType = HingeEdgeTypeList.First(Function(x) x.Name = HingeEdgeType.Replace(ConstGen.BEVEL_UP, ConstGen.BEVEL_GRAPHIC)) ' segno il bevel che è stato letto nel ddf per il calcolo del secure m_HingeEdgeType.BevelDDF = HingeEdgeType Catch ex2 As Exception End Try ElseIf Trim(HingeEdgeType).Contains(ConstGen.BEVEL_DOWN) Then Try m_HingeEdgeType = HingeEdgeTypeList.First(Function(x) x.Name = HingeEdgeType.Replace(ConstGen.BEVEL_DOWN, ConstGen.BEVEL_GRAPHIC)) ' segno il bevel che è stato letto nel ddf per il calcolo del secure m_HingeEdgeType.BevelDDF = HingeEdgeType Catch ex2 As Exception End Try End If End Try If Not ControlProfileInList(HingeEdgeTypeList, HingeEdgeType) Then ' 50522=The profile {0} is not a member of the {1} list. sErrorMsg = String.Format(EgtMsg(50522), HingeEdgeType, SIDE_HINGE) Return -1 End If End If Index = NextIndex(Index) If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) Dim HingeEdgeMachining As String = GetValueWithKey(sLine, K_MACHINING) If String.IsNullOrWhiteSpace(HingeEdgeMachining) Then If Not SearchKey(sLine, K_MACHINING) Then Return -1 Else m_HingeEdgeMachining = ConvertOnOffToBoolean(HingeEdgeMachining) End If Index = NextIndex(Index) If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) Dim HingeEdgeOverMaterial As String = GetValueWithKey(sLine, K_OVERMATERIAL) If String.IsNullOrWhiteSpace(HingeEdgeOverMaterial) Then If Not SearchKey(sLine, K_OVERMATERIAL) Then Return -1 Else ConvertDDFValueIntoCurrentUnit(m_Measure, HingeEdgeOverMaterial) m_HingeEdgeOverMaterial = HingeEdgeOverMaterial End If Index = NextIndex(Index) '------------------------------------------------------------------------------- ' Top If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) m_TopType = m_TopEdgeTypeList(0) ' se vrsione 2 (20/04/2023) il tipo di bevel è inserito nella riga successiva con chaive K_TYPEEDGE nError = Index Dim TopType As String = ManageProfileType(sLine, Index, nError, K_TOP) If nError = -1 Then Return -1 If String.IsNullOrWhiteSpace(TopType) Then If ManageProfileError(sLine, K_TOP, SIDE_TOP) = -1 Then Return -1 Else Try m_TopType = TopEdgeTypeList.First(Function(x) x.Name = TopType) ' segno il bevel che è stato letto nel ddf per il calcolo del secure m_TopType.BevelDDF = TopType Catch ex As Exception ' se il valore cercato non è nella lista If Trim(TopType).Contains(ConstGen.BEVEL_UP) Then Try m_TopType = TopEdgeTypeList.First(Function(x) x.Name = TopType.Replace(ConstGen.BEVEL_UP, ConstGen.BEVEL_GRAPHIC)) ' segno il bevel che è stato letto nel ddf per il calcolo del secure m_TopType.BevelDDF = TopType Catch ex2 As Exception End Try ElseIf Trim(TopType).Contains(ConstGen.BEVEL_DOWN) Then Try m_TopType = TopEdgeTypeList.First(Function(x) x.Name = TopType.Replace(ConstGen.BEVEL_DOWN, ConstGen.BEVEL_GRAPHIC)) ' segno il bevel che è stato letto nel ddf per il calcolo del secure m_TopType.BevelDDF = TopType Catch ex2 As Exception End Try End If End Try If Not ControlProfileInList(TopEdgeTypeList, TopType) Then ' 50522=The profile {0} is not a member of the {1} list. sErrorMsg = String.Format(EgtMsg(50522), TopType, SIDE_TOP) Return -1 End If End If Index = NextIndex(Index) If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) Dim TopMachining As String = GetValueWithKey(sLine, K_MACHINING) If String.IsNullOrWhiteSpace(TopMachining) Then If Not SearchKey(sLine, K_MACHINING) Then Return -1 Else m_TopMachining = ConvertOnOffToBoolean(TopMachining) End If Index = NextIndex(Index) If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) Dim TopOverMaterial As String = GetValueWithKey(sLine, K_OVERMATERIAL) If String.IsNullOrWhiteSpace(TopOverMaterial) Then If Not SearchKey(sLine, K_OVERMATERIAL) Then Return -1 Else ConvertDDFValueIntoCurrentUnit(m_Measure, TopOverMaterial) m_TopOverMaterial = TopOverMaterial End If Index = NextIndex(Index) If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) '------------------------------------------------------------------------------- ' Top Arc Dim Radius As String = GetValueWithKey(sLine, ConstCompo.K_RADIUS) If Not String.IsNullOrEmpty(Radius) Then Index = NextIndex(Index) If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) Dim Posx As String = GetValueWithKey(sLine, ConstCompo.K_POSX) ' carico i valori If Not String.IsNullOrEmpty(Radius) AndAlso Not String.IsNullOrEmpty(Posx) Then If OptionModule.m_DisableArch <> Visibility.Visible Then bDeleteTopShape = True Index = NextIndex(Index) Else Index = NextIndex(Index) ConvertDDFValueIntoCurrentUnit(m_Measure, Radius) m_Radius = Radius ConvertDDFValueIntoCurrentUnit(m_Measure, Posx) m_Posx = Posx TopArcIsChecked = True TopShapeIsChecked = True End If End If End If ' If Not m_TopArcIsChecked then If Not m_TopShapeIsChecked Then Dim PosxAngle As String = GetValueWithKey(sLine, ConstCompo.K_POSX) If Not String.IsNullOrEmpty(PosxAngle) Then Index = NextIndex(Index) If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) Dim Angle As String = GetValueWithKey(sLine, ConstCompo.K_ANGLE) ' carico i valori If Not String.IsNullOrEmpty(PosxAngle) AndAlso Not String.IsNullOrEmpty(Angle) Then If OptionModule.m_DisableArch <> Visibility.Visible Then bDeleteTopShape = True Index = NextIndex(Index) Else Index = NextIndex(Index) m_Angle = Angle ConvertDDFValueIntoCurrentUnit(m_Measure, PosxAngle) m_PosxAngle = PosxAngle TopAngleIsChecked = True SelectedShape = m_TopShapeList(1) TopShapeIsChecked = True End If End If End If End If '------------------------------------------------------------------------------- ' Bottom If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) m_BottomType = m_BottomEdgeTypeList(0) ' se vrsione 2 (20/04/2023) il tipo di bevel è inserito nella riga successiva con chaive K_TYPEEDGE nError = Index Dim BottomType As String = ManageProfileType(sLine, Index, nError, K_BOTTOM) If nError = -1 Then Return -1 If String.IsNullOrWhiteSpace(BottomType) Then If ManageProfileError(sLine, K_BOTTOM, SIDE_BOTTOM) = -1 Then Return -1 Else Try m_BottomType = BottomEdgeTypeList.First(Function(x) x.Name = BottomType) ' segno il bevel che è stato letto nel ddf per il calcolo del secure m_BottomType.BevelDDF = BottomType Catch ex As Exception ' se il valore cercato non è nella lista If Trim(BottomType).Contains(ConstGen.BEVEL_UP) Then Try m_BottomType = BottomEdgeTypeList.First(Function(x) x.Name = BottomType.Replace(ConstGen.BEVEL_UP, ConstGen.BEVEL_GRAPHIC)) ' segno il bevel che è stato letto nel ddf per il calcolo del secure m_BottomType.BevelDDF = BottomType Catch ex2 As Exception End Try ElseIf Trim(BottomType).Contains(ConstGen.BEVEL_DOWN) Then Try m_BottomType = BottomEdgeTypeList.First(Function(x) x.Name = BottomType.Replace(ConstGen.BEVEL_DOWN, ConstGen.BEVEL_GRAPHIC)) ' segno il bevel che è stato letto nel ddf per il calcolo del secure m_BottomType.BevelDDF = BottomType Catch ex2 As Exception End Try End If End Try If Not ControlProfileInList(BottomEdgeTypeList, BottomType) Then ' 50522=The profile {0} is not a member of the {1} list. sErrorMsg = String.Format(EgtMsg(50522), BottomType, SIDE_BOTTOM) Return -1 End If End If Index = NextIndex(Index) If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) Dim BottomMachining As String = GetValueWithKey(sLine, K_MACHINING) If String.IsNullOrWhiteSpace(BottomMachining) Then If Not SearchKey(sLine, K_MACHINING) Then Return -1 Else m_BottomMachining = ConvertOnOffToBoolean(BottomMachining) End If Index = NextIndex(Index) If Index > FileContent.Count() - 1 Then Return -1 sLine = RemoveComment(FileContent(Index)) Dim BottomOverMaterial As String = GetValueWithKey(sLine, K_OVERMATERIAL) If String.IsNullOrWhiteSpace(BottomOverMaterial) Then If Not SearchKey(sLine, K_OVERMATERIAL) Then Return -1 Else ConvertDDFValueIntoCurrentUnit(m_Measure, BottomOverMaterial) m_BottomOverMaterial = BottomOverMaterial End If CalcBevelFromSecure() Return NextIndex(Index) End Function Private Function ManageProfileType(ByRef sLine As String, ByRef Index As Integer, ByRef nError As Integer, sEdgeName As String) As String Dim sVal As String = String.Empty If m_Version = "2" Then If SearchKey(sLine, sEdgeName) Then ' passo alla riga successiva Index = NextIndex(Index) If Index > FileContent.Count() - 1 Then nError = -1 Return "" End If sLine = RemoveComment(FileContent(Index)) sVal = GetValueWithKey(sLine, K_TYPEEDGE) Else nError = -1 Return sVal End If Else sVal = GetValueWithKey(sLine, sEdgeName) End If Return sVal End Function Private Function ManageProfileError(sLine As String, sEdgeName As String, sMsgName As String) As Integer Dim nError As Integer = 0 If m_Version = "2" Then If Not SearchKey(sLine, K_TYPEEDGE) Then Return -1 Else FirstReadingEdge = True sErrorMsg = String.Format(EgtMsg(50523), sMsgName) End If Else If Not SearchKey(sLine, sEdgeName) Then Return -1 Else FirstReadingEdge = True sErrorMsg = String.Format(EgtMsg(50523), sMsgName) End If End If Return nError End Function ' Leggo i dati del componente ( da senllire riutilizzando funzioni che già esistono) Private Function GetCompo(Index As Integer, CompoNameDDF As String, ByRef sErrorInfo As String) As Integer ' Controllo esistenza del componente Dim CompoListIndex As Integer = -1 For CmpInd = 0 To Map.refCompoPanelVM.CompoTypeList.Count() - 1 ' eseguo il confronto con il nome dei componenti che è stato caricato dal file Default.ini If Map.refCompoPanelVM.CompoTypeList(CmpInd).DDFName = CompoNameDDF Then CompoListIndex = CmpInd Exit For End If Next ' Se non esiste If CompoListIndex = -1 Then ' il componente non esiste sErrorInfo &= String.Format(EgtMsg(50136), CompoNameDDF, Index - 1) sErrorInfo &= String.Format(Environment.NewLine & EgtMsg(50133), CompoNameDDF) & vbCrLf Return -1 End If ' Passo alla lettura delle linee con eventuali - shape/- template e con i parametri While Index < FileContent.Count Dim sLine As String = RemoveComment(FileContent(Index)) ' se stringa vuota o tutto commento, vado oltre If String.IsNullOrWhiteSpace(sLine) Then Index += 1 Continue While End If ' se fine pezzo o fine file, esco dal ciclo If Search3Hyphens(sLine) OrElse Search3Dots(sLine) Then Exit While ' se nome, esco dal ciclo If Not String.IsNullOrWhiteSpace(GetName(sLine)) Then Exit While ' cerco una chiave Dim sKey As String = GetKey(sLine) If String.IsNullOrWhiteSpace(sKey) Then sErrorInfo &= String.Format(EgtMsg(50131), CompoNameDDF, Index + 1) ' 50553= has not been created. sErrorInfo &= Environment.NewLine & CompoNameDDF & EgtMsg(50553) & vbCrLf Part.FirstReadingEdge = True ' esco dalla lettura del compo Exit While End If ' Creo il componente con un riferiemento comune Dim m_CurrCompo = New Compo(Map.refCompoPanelVM.CompoTypeList(CompoListIndex)) ' Se previsto template o shape da configurazione Dim CurrCompoTypePath As String = Map.refCompoPanelVM.CompoTypeList(CompoListIndex).Path Dim nIsActive As Integer = EgtUILib.GetPrivateProfileInt(S_TEMPLATE, K_ISACTIVE, 1, CurrCompoTypePath & "\" & CONFIGINI_FILE_NAME) If nIsActive = 1 Or (nIsActive = 2 And sKey.StartsWith("- ")) Then ' leggo se template o shape Dim Name As String = String.Empty Dim DDFName As String = String.Empty IniFile.GetPrivateProfileCompoName(S_TEMPLATE, K_NAME, DDFName, Name, CurrCompoTypePath & "\" & CONFIGINI_FILE_NAME) '----------------------------------------------------------------------------------------------------------------------------------- ' inizializzazione della componente m_CurrCompo.TemplateDDFName = DDFName m_CurrCompo.TemplateName = Name If sLine.ToLower.Contains(FRAME_FOLDER) Then LoadBrandFileList(m_CurrCompo, True) Else LoadBrandFileList(m_CurrCompo) End If If IsNothing(m_CurrCompo) Then SkipParams(Index + 1) Exit While End If '----------------------------------------------------------------------------------------------------------------------------------- ' Se c'è "- " iniziale If sKey.StartsWith("- ") Then ' se la chiave non è template o shape, segno file modificato per farlo salvare If sKey.Remove(0, 2) <> DDFName Then Part.FirstReadingEdge = True m_CurrCompo.LoadByDefault = True End If ' leggo il template effettivamente utilizzato Dim sTemplate As String = GetValueWithoutKey(sLine) sTemplate = sTemplate.Replace("/", "\") Dim BrandDir As String = String.Empty Dim sFile As String = String.Empty Dim sItems() As String = sTemplate.Split("\"c) Dim bFileExists As Boolean = False Dim bBrandExists As Boolean = False ' ricerca nella radice della componente If sItems.Count < 2 Then bBrandExists = False sFile = Trim(sItems(0)) If m_CurrCompo.BrandListPart.Last = RAD_DIR Then 'm_CurrCompo.SelBrandPart = m_CurrCompo.BrandListPart.Last m_CurrCompo.SetSelBrand(m_CurrCompo.BrandListPart.Last) bBrandExists = True For IndexFile As Integer = 0 To m_CurrCompo.FileList.Count - 1 If sFile.ToLower = m_CurrCompo.FileList(IndexFile).ToLower Then 'm_CurrCompo.SelFile = m_CurrCompo.FileList(IndexFile) m_CurrCompo.SetSelFile(m_CurrCompo.FileList(IndexFile)) bFileExists = True Exit For End If Next End If End If ' ricerca nei dierttori della radice If sItems.Count >= 2 Then BrandDir = Trim(sItems(0)) sFile = Trim(sItems(1)) For IndexSplit As Integer = 2 To sItems.Count - 1 sFile &= "\" & sItems(IndexSplit) Next For IndexBrand As Integer = 0 To m_CurrCompo.BrandListPart.Count - 1 If BrandDir.ToLower = m_CurrCompo.BrandListPart(IndexBrand).ToLower Then 'm_CurrCompo.SelBrandPart = m_CurrCompo.BrandListPart(IndexBrand) m_CurrCompo.SetSelBrand(m_CurrCompo.BrandListPart(IndexBrand)) bBrandExists = True Exit For End If Next If bBrandExists Then For IndexFile As Integer = 0 To m_CurrCompo.FileList.Count - 1 If sFile.ToLower = m_CurrCompo.FileList(IndexFile).ToLower Then 'm_CurrCompo.SelFile = m_CurrCompo.FileList(IndexFile) m_CurrCompo.SetSelFile(m_CurrCompo.FileList(IndexFile)) bFileExists = True Exit For End If Next End If End If ' in caso sia fallita la ricera dei direttori o dei file If Not bBrandExists Then ' aggiungo il brand inesistente If String.IsNullOrEmpty(BrandDir) Then BrandDir = RAD_DIR m_CurrCompo.BrandListPart.Add(BrandDir) 'm_CurrCompo.SelBrandPart = m_CurrCompo.BrandListPart(m_CurrCompo.BrandListPart.Count - 1) m_CurrCompo.SetSelBrand(m_CurrCompo.BrandListPart(m_CurrCompo.BrandListPart.Count - 1)) m_CurrCompo.LoadByDefault = True m_CurrCompo.MissingDirectory = True End If If Not bFileExists Then m_CurrCompo.FileList.Add(sFile) 'm_CurrCompo.SelFile = m_CurrCompo.FileList(m_CurrCompo.FileList.Count - 1) m_CurrCompo.SetSelFile(m_CurrCompo.FileList(m_CurrCompo.FileList.Count - 1)) ' File {0} in directory {1} has not been found. sErrorInfo &= String.Format(EgtMsg(50160), sFile, BrandDir) & vbCrLf m_CurrCompo.LoadByDefault = True m_CurrCompo.MissingFile = True End If ' mi sposto alla riga successiva, anche se la componente è sbagliata carico comunque i suoi dati Index = NextIndex(Index) ' leggo i parametri del componente ReadParams(m_CurrCompo, sErrorInfo, Index) ' altrimenti non c'è il trattino nel file DDF Else ' Error in reading {0}: line {1}. Expected 'template' or 'shape'. sErrorInfo &= String.Format(EgtMsg(50132), DDFName, Index + 1) ' {0} has not been created. sErrorInfo &= String.Format("-->" & EgtMsg(50133), CompoNameDDF) & vbCrLf ' salto tutti i suoi parametri Index = NextIndex(Index) SkipParams(Index) ' continuo nel ciclo while Continue While End If ' il componente non ha template Else ' Se c'è "- " iniziale, errore If sKey.StartsWith("- ") Then ' 50139 =Errore in lettura: riga {0}. Atteso {1}. ' 50161=parameter sErrorInfo &= String.Format(EgtMsg(50139), Index + 1, EgtMsg(50161)) & vbCrLf Return -1 End If ' nascondo il template m_CurrCompo.TemplateVisibility = Visibility.Collapsed ' leggo il nome del template della compo dal file config.ini Dim sTemplateName As String = String.Empty ' controllo il tipo di estensione del file (nome letto da Config.ini) EgtUILib.GetPrivateProfileString(S_TEMPLATE, K_COMPO, "", sTemplateName, CurrCompoTypePath & "\" & CONFIGINI_FILE_NAME) If String.IsNullOrWhiteSpace(sTemplateName) Then sErrorInfo &= String.Format(EgtMsg(50134), CurrCompoTypePath, CONFIGINI_FILE_NAME) sErrorInfo &= String.Format(Environment.NewLine & EgtMsg(50133), CompoNameDDF) & vbCrLf ' salto tutti i suoi parametri Index = NextIndex(Index) SkipParams(Index) ElseIf Not File.Exists(CurrCompoTypePath & "\" & sTemplateName & LUA_EXTENSION) Then sErrorInfo &= String.Format(EgtMsg(50135), CurrCompoTypePath, CONFIGINI_FILE_NAME, sTemplateName) sErrorInfo &= String.Format(Environment.NewLine & EgtMsg(50133), CompoNameDDF) & vbCrLf ' salto tutti i suoi parametri Index = NextIndex(Index) SkipParams(Index) Else ' assegno il nome del tipo di componente m_CurrCompo.SetTemplateSelItem(sTemplateName) ReadParams(m_CurrCompo, sErrorInfo, Index) End If End If ' se esiste riferimento ad identificativo, lo leggo If Index < FileContent.Count Then ' tolgo l'indicazione di metacomando "##" sLine = RemoveComment(FileContent(Index).Replace(DDF_METADATA, "")) If GetKey(sLine) = K_OTHERDOOR Then m_CurrCompo.OtherDoor = True Index = NextIndex(Index) End If sLine = RemoveComment(FileContent(Index).Replace(DDF_METADATA, "")) If GetKey(sLine) = K_IDCODECOMPONENT Then Dim IdCode As String = String.Empty IdCode = GetValueWithKey(sLine, K_IDCODECOMPONENT) If Not String.IsNullOrEmpty(IdCode) Then Dim ItemCode As String() = IdCode.Split(","c) m_CurrCompo.IdCode = Trim(ItemCode(0)) If ItemCode.Count > 1 AndAlso Trim(ItemCode(1).ToLower) = "matched" Then m_CurrCompo.MatchedDoor = True End If End If Index = NextIndex(Index) End If End If ' Inserisco il componente in lista m_CurrCompo.FontBold = FontWeights.Normal ' forzo la non modificabilità dei parametri della compo If OptionModule.ReadOnlyDDF Then m_CurrCompo.IsReadOnly = OptionModule.ReadOnlyDDF m_CompoList.Add(m_CurrCompo) End While Return Index End Function ' Salto i parametri del componente Private Sub SkipParams(ByRef IndexLine As Integer) ' passo alla lettura delle righe While IndexLine < FileContent.Count Dim sLine As String = RemoveComment(FileContent(IndexLine)) ' se stringa vuota o tutto commento, vado oltre If String.IsNullOrWhiteSpace(sLine) Then IndexLine += 1 Continue While End If ' se fine pezzo o fine file, esco dal ciclo If Search3Hyphens(sLine) OrElse Search3Dots(sLine) Then Exit While ' se nome, esco dal ciclo If Not String.IsNullOrWhiteSpace(GetName(sLine)) Then Exit While ' se chiave con '-' iniziale, esco dal ciclo Dim sKey As String = GetKey(sLine) If sKey.StartsWith("- ") Then Exit While ' passo alla linea successiva IndexLine += 1 End While End Sub ' Leggo i parametri del componente Private Sub ReadParams(ByRef CompoTemplateItem As Compo, ByRef sErrorInfo As String, ByRef IndexLine As Integer) ' questo è l'indice dei parametri del componente Dim IndexParam As Integer = 0 Dim ErrParamList As New List(Of String) If CompoTemplateItem.LoadByDefault Then While IndexLine < FileContent.Count - 1 AndAlso Not (Search3Hyphens(RemoveComment(FileContent(IndexLine))) OrElse Search3Dots(RemoveComment(FileContent(IndexLine)))) AndAlso Not Trim(RemoveComment(FileContent(IndexLine))).StartsWith("- ") AndAlso (RemoveComment(FileContent(IndexLine)).StartsWith(ConstCompo.DDF_SPACE3) Or RemoveComment(FileContent(IndexLine)).StartsWith(ConstCompo.DDF_SPACE2)) ' salvo i commenti If String.IsNullOrWhiteSpace(FileContent(IndexLine)) Then IndexLine += 1 Continue While ElseIf GetKey(FileContent(IndexLine)) = K_OTHERDOOR Then CompoTemplateItem.OtherDoor = True IndexLine += 1 Continue While End If ErrParamList.Add(RemoveComment(FileContent(IndexLine))) IndexLine += 1 End While CompoTemplateItem.m_ParameterDDfList = ErrParamList Else While IndexParam < CompoTemplateItem.CompoParamList.Count ' il parametro seguente non appartiene a nessuna componente If IndexLine < FileContent.Count AndAlso GetKey(FileContent(IndexLine)) = K_OTHERDOOR Then CompoTemplateItem.OtherDoor = True IndexLine += 1 Continue While End If ' carico la lista dei parametri della componente parametro per parametro Dim CurrCompoParam As CompoParam = CompoTemplateItem.CompoParamList(IndexParam) ' Controllo che il file non sia terminato e non è il nome di una nuova componente If IndexLine < FileContent.Count And Not IsNameCompo(IndexLine) Then Dim sLine As String = RemoveComment(FileContent(IndexLine)) ' se stringa vuota o tutto commento, vado oltre If String.IsNullOrWhiteSpace(sLine) Then IndexLine += 1 Continue While End If ' se fine pezzo o fine file o nome o metacomando, esco dal ciclo If Search3Hyphens(sLine) OrElse Search3Dots(sLine) OrElse Not String.IsNullOrWhiteSpace(GetName(sLine)) OrElse sLine.Trim().StartsWith(DDF_METADATA) Then If Not TypeOf CurrCompoParam Is TextBoxOnOffParam AndAlso Not TypeOf CurrCompoParam Is ComboBoxOnOffParam Then ' restituisco il messaggio che manca un parametro ' Error in reading: line {0}. Expected {1}. sErrorInfo &= String.Format(EgtMsg(50139), IndexLine + 1, Trim(CompoTemplateItem.CompoParamList(IndexParam).DDFName)) ' All missing params will be initialized by default. sErrorInfo &= String.Format(Environment.NewLine & EgtMsg(50140)) & vbCrLf Part.FirstReadingEdge = True CompoTemplateItem.MissingParameter = True CurrCompoParam.MissingParameterInReading = True Else ' significa che la TextBoxOnOff è stata disattivata If TypeOf CurrCompoParam Is TextBoxOnOffParam Then CurrCompoParam.ErrorInReading = False CompoTemplateItem.ErrorValue = False DirectCast(CurrCompoParam, TextBoxOnOffParam).SetIsActive(False) IndexParam += 1 Continue While End If If TypeOf CurrCompoParam Is ComboBoxOnOffParam Then CurrCompoParam.ErrorInReading = False CompoTemplateItem.ErrorValue = False DirectCast(CurrCompoParam, ComboBoxOnOffParam).SetIsActive(False) IndexParam += 1 Continue While End If End If End If ' Se è di tipo obbligatorio (non è OnOff) If Not (TypeOf CurrCompoParam Is TextBoxOnOffParam OrElse TypeOf CurrCompoParam Is ComboBoxOnOffParam) Then Dim sKey As String = GetKey(sLine) ' se il nome del parametro è lo stesso di quello presente nel componente If String.Equals(Trim(CurrCompoParam.DDFName), sKey) Then If TypeOf CurrCompoParam Is ComboBoxParam Then ' leggo il valore DDF dal file Dim sVal As String = GetValueWithoutKey(sLine) ' carico la lista dei valori (messaggi) Dim List As ObservableCollection(Of String) = DirectCast(CurrCompoParam, ComboBoxParam).ItemList ' carico la lista dei valori DDF Dim ListDDF As ObservableCollection(Of String) = DirectCast(CurrCompoParam, ComboBoxParam).ItemListDDF ' riscrivo i valori della lista DDF senza spazi all'inizio e alla fine e in minuscolo For IndexListDDF As Integer = 0 To ListDDF.Count - 1 ListDDF(IndexListDDF) = Trim(ListDDF(IndexListDDF)).ToLower() Next ' carico il valore IndexName come indice del valore selezionato dalla lista DDF Dim IndexName As Integer = ListDDF.IndexOf(sVal.ToLower()) Dim SelItem As String = String.Empty ' se è stata trovata una corrispondenza tra il valore letto dal file e il valore presente nella lista DDF If IndexName >= 0 Then ' restituisco il valore DDF della lista associato all'indice passato SelItem = List(IndexName) Else ' 50137 = Error in reading {0}: line {1}. It is not a member of the list. sErrorInfo &= String.Format(EgtMsg(50137), sVal, IndexLine) ' 50138 = This param will be initialized by default. sErrorInfo &= String.Format(Environment.NewLine & EgtMsg(50138)) & vbCrLf List.Add(sVal) SelItem = List(List.Count - 1) CompoTemplateItem.ErrorValue = True CurrCompoParam.ErrorInReading = True ' SelItem = List(0) End If ' assegno al parametro del componente il valore "filtrato" DirectCast(CurrCompoParam, ComboBoxParam).SetSelItem(SelItem) 'DirectCast(CurrCompoParam, ComboBoxParam).SelItem = SelItem ' assegno il valore letto alla textbox ElseIf TypeOf CurrCompoParam Is TextBoxParam Then Dim sVal As String = GetValueWithoutKey(sLine) ' per ora non esegue nessun tipo di controllo sui valori letti dal file DDF ' DirectCast(CurrCompoParam, TextBoxParam).m_Value = sVal Dim Local_TextBoxParam As TextBoxParam = DirectCast(CurrCompoParam, TextBoxParam) If Local_TextBoxParam.bIsLen Then ConvertDDFValueIntoCurrentUnit(m_Measure, sVal) Local_TextBoxParam.Value = sVal Else Local_TextBoxParam.Value = sVal End If ' avviso che il file è modificato (in caso di chiusura del programma obbligo a passare dal salvataggio) Dim dVal As Double If String.IsNullOrEmpty(sVal) OrElse Not StringToDouble(sVal, dVal) Then ' Part.FirstReadingEdge = True CompoTemplateItem.MissingParameter = True CompoTemplateItem.ErrorValue = True CurrCompoParam.ErrorInReading = True End If End If ' se il nome esiste ma è sbagliato ElseIf Not String.IsNullOrWhiteSpace(sKey) Then ' se il nome non è preceduto dal trattino If Not sKey.StartsWith("- ") Then ' il nome DDF non è corretto ' Error in reading: line {0}. Expected {1}. sErrorInfo &= String.Format(EgtMsg(50139), IndexLine + 1, Trim(CompoTemplateItem.CompoParamList(IndexParam).DDFName)) ' This param will be initialized by default. sErrorInfo &= String.Format(Environment.NewLine & EgtMsg(50138)) & vbCrLf Part.FirstReadingEdge = True CompoTemplateItem.MissingParameter = True CurrCompoParam.MissingParameterInReading = True ' passo al parametro successivo senza cambiare linea del file DDF IndexParam += 1 ' passo alla riga successiva del file DDF IndexLine = NextIndex(IndexLine) Continue While Else ' istanzio tutti i valori che mancano al compo corrente di default ' Error in reading: line {0}. Expected {1}. sErrorInfo &= String.Format(EgtMsg(50139), IndexLine + 1, Trim(CompoTemplateItem.CompoParamList(IndexParam).DDFName)) ' This param will be initialized by default. sErrorInfo &= String.Format(Environment.NewLine & EgtMsg(50138)) & vbCrLf ' avviso che il file in scrittura è differente da quello in lettura Part.FirstReadingEdge = True CompoTemplateItem.MissingParameter = True CurrCompoParam.MissingParameterInReading = True ' esco dal ciclo Exit While End If End If ' Se altrimenti è una TextBoxOnOff ElseIf TypeOf CurrCompoParam Is TextBoxOnOffParam Then ' se il nome del parametro è lo stesso di quello presente nel componente If String.Equals(Trim(CompoTemplateItem.CompoParamList(IndexParam).DDFName), GetKey(sLine)) Then ' se la stringa c'è nel DDF vuol dire che è stata selezionata Dim sVal As String = GetValueWithKey(sLine, Trim(CurrCompoParam.DDFName)) Dim Local_TextBoxOnOffParam As TextBoxOnOffParam = DirectCast(CurrCompoParam, TextBoxOnOffParam) If Local_TextBoxOnOffParam.bIsLen Then ConvertDDFValueIntoCurrentUnit(m_Measure, sVal) Local_TextBoxOnOffParam.m_Value = sVal Else Local_TextBoxOnOffParam.m_Value = sVal End If 'DirectCast(CurrCompoParam, TextBoxOnOffParam).Value = sVal Dim dVal As Double If String.IsNullOrEmpty(sVal) OrElse Not StringToDouble(sVal, dVal) Then CompoTemplateItem.ErrorValue = False CurrCompoParam.ErrorInReading = False DirectCast(CurrCompoParam, TextBoxOnOffParam).SetIsActive(False) Else DirectCast(CurrCompoParam, TextBoxOnOffParam).SetIsActive(True) End If ' se il nome esiste ma è sbagliato ElseIf Not String.IsNullOrWhiteSpace(GetKey(sLine)) Then ' significa che la TextBoxOnOff è stata disattivata DirectCast(CurrCompoParam, TextBoxOnOffParam).SetIsActive(False) ' passo al parametro successivo senza cambiare linea del file DDF IndexParam += 1 Continue While End If ' Altrimenti è una ComboBoxOnOffParam Else ' se il nome del parametro è lo stesso di quello presente nel componente If String.Equals(Trim(CompoTemplateItem.CompoParamList(IndexParam).DDFName), Trim(GetKey(sLine))) Then ' leggo il valore DDF dal file Dim sVal As String = GetValueWithKey(sLine, Trim(CurrCompoParam.DDFName)) Dim IndexName As Integer = 0 ' carico la lista dei valori (messaggi) Dim List As ObservableCollection(Of String) = DirectCast(CurrCompoParam, ComboBoxOnOffParam).ItemList Dim IndexListDDF As Integer = 0 ' carico la lista dei valori DDF Dim ListDDF As ObservableCollection(Of String) = DirectCast(CurrCompoParam, ComboBoxOnOffParam).ItemListDDF ' riscrivo i valori della lista DDF senza spaziatura For IndexListDDF = 0 To ListDDF.Count - 1 ListDDF(IndexListDDF) = Trim(ListDDF(IndexListDDF)) Next ' carico il valore IndexName come indice del valore selezionato dalla lista DDF IndexName = ListDDF.IndexOf(sVal) Dim SelItem As String = String.Empty ' se è stata trovata una corrispondenza tra il valore letto dal file e il valore presente nella lista DDF If IndexName >= 0 Then ' restituisco il valore DDF della lista associato all'indice passato SelItem = Trim(List(IndexName)) Else ' il nome DDF non è corretto ' Error in reading {0}: line {1}. It is not a member of the list. sErrorInfo &= String.Format(EgtMsg(50137), sVal, IndexLine) ' This param will be initialized by default. sErrorInfo &= String.Format(Environment.NewLine & EgtMsg(50138)) & vbCrLf ' aggiungo un nuovo elemento solo nella lista da mostrare a video, quella dei ddf non deve essere toccata List.Add(sVal) SelItem = List(List.Count - 1) CompoTemplateItem.ErrorValue = True CurrCompoParam.ErrorInReading = True 'SelItem = List(0) End If ' assegno al parametro della compnente il valore "filtrato" DirectCast(CurrCompoParam, ComboBoxOnOffParam).SetSelItem(SelItem) 'DirectCast(CurrCompoParam, ComboBoxOnOffParam).SelItem = SelItem DirectCast(CurrCompoParam, ComboBoxOnOffParam).SetIsActive(True) ' se il nome esiste ma è sbagliato ElseIf Not String.IsNullOrWhiteSpace(GetKey(sLine)) Then ' significa che la TextBoxOnOff è stata disattivata DirectCast(CurrCompoParam, ComboBoxOnOffParam).SetIsActive(False) ' passo al parametro successivo senza cambiare linea del file DDF IndexParam += 1 Continue While End If End If Else If Not IsNameCompo(IndexLine) And TypeOf DirectCast(CompoTemplateItem.CompoParamList(IndexParam), CompoParam) Is TextBoxOnOffParam Then CurrCompoParam.ErrorInReading = False CompoTemplateItem.ErrorValue = False DirectCast(CurrCompoParam, TextBoxOnOffParam).SetIsActive(False) ElseIf Not IsNameCompo(IndexLine) And TypeOf DirectCast(CompoTemplateItem.CompoParamList(IndexParam), CompoParam) Is ComboBoxOnOffParam Then CurrCompoParam.ErrorInReading = False CompoTemplateItem.ErrorValue = False DirectCast(CurrCompoParam, ComboBoxOnOffParam).SetIsActive(False) ElseIf IsNameCompo(IndexLine) And TypeOf DirectCast(CompoTemplateItem.CompoParamList(IndexParam), CompoParam) Is TextBoxOnOffParam Then CurrCompoParam.ErrorInReading = False CompoTemplateItem.ErrorValue = False DirectCast(CurrCompoParam, TextBoxOnOffParam).SetIsActive(False) ' non incremento l'indice della riga, passo al parametro successivo IndexParam += 1 Continue While ElseIf IsNameCompo(IndexLine) And TypeOf DirectCast(CompoTemplateItem.CompoParamList(IndexParam), CompoParam) Is ComboBoxOnOffParam Then CurrCompoParam.ErrorInReading = False CompoTemplateItem.ErrorValue = False DirectCast(CurrCompoParam, ComboBoxOnOffParam).SetIsActive(False) ' non incremento l'indice della riga, passo al parametro successivo IndexParam += 1 Continue While Else ' Error in reading: line {0}. Expected {1}. sErrorInfo &= String.Format(EgtMsg(50139), IndexLine + 1, Trim(CompoTemplateItem.CompoParamList(IndexParam).DDFName)) ' All missing params will be initialized by default. sErrorInfo &= String.Format(Environment.NewLine & EgtMsg(50140)) & vbCrLf Part.FirstReadingEdge = True CompoTemplateItem.MissingParameter = True CurrCompoParam.MissingParameterInReading = True For Index As Integer = IndexParam To CompoTemplateItem.CompoParamList.Count - 1 CompoTemplateItem.CompoParamList(Index).MissingParameterInReading = True Next End If End If ' Avanzo nell'elenco dei parametri e nel file DDF IndexParam += 1 IndexLine = NextIndex(IndexLine) End While End If End Sub ' verifcio che la riga sia il nome di una componente (esempio: "hinges:") Private Function IsNameCompo(ByRef IndexLine As Integer) As Boolean ' verifico che il file non sia terminato If IndexLine > FileContent.Count - 1 Then Return False End If ' per riconoscere una componente: no spazi ad inizio riga, dopo i ":" riga vuota If FileContent(IndexLine).StartsWith(OptionModule.m_sSpaceTabCompo) AndAlso GetValueWithoutKey(FileContent(IndexLine)) = String.Empty Then m_StopNextIndexLine = True Return True End If Return False End Function ' controllo che tutti i bevel siano dello stesso tipo Private Function ControlBevel(BLock As String, BHinge As String, BTop As String, BBottom As String) As String Dim BBevel As String = String.Empty ' carico i Bevel non nulli in un vettore Dim ArrayProfile(3) As String If Not String.IsNullOrEmpty(BLock) Then ArrayProfile(0) = BLock BBevel = BLock Else ArrayProfile(0) = String.Empty End If If Not String.IsNullOrEmpty(BHinge) Then ArrayProfile(1) = BHinge BBevel = BHinge Else ArrayProfile(1) = String.Empty End If If Not String.IsNullOrEmpty(BTop) Then ArrayProfile(2) = BTop BBevel = BTop Else ArrayProfile(2) = String.Empty End If If Not String.IsNullOrEmpty(BBottom) Then ArrayProfile(3) = BBottom BBevel = BBottom Else ArrayProfile(3) = String.Empty End If For Index1 As Integer = 0 To 2 For Index2 As Integer = Index1 + 1 To 3 If Not String.IsNullOrEmpty(ArrayProfile(Index1)) And Not String.IsNullOrEmpty(ArrayProfile(Index2)) Then ' eseguo il confronto If ArrayProfile(Index1) <> ArrayProfile(Index2) Then If m_Swing.Contains("I") Then If (Index1 = 0 OrElse Index2 = 0) Then SetInvertBevel(True) Continue For End If End If ' 50101 =Error ' 50170 =Incongruity between the bevel, it has been resolved by default. MessageBox.Show(EgtMsg(50170), EgtMsg(50101), MessageBoxButton.OK, MessageBoxImage.Error) Part.FirstReadingEdge = True ' per mantere attivo l'asterisco di modifica BBevel = ArrayProfile(Index1) Exit For Else BBevel = ArrayProfile(Index1) End If End If Next Next Return BBevel End Function ' restituisce il messaggio di modifica del bevel Private Sub Modifybevel(Bevel As String, OppositeBevel As String) If Bevel = ConstGen.BEVEL_GRAPHIC Then bModifyBevel = True Part.FirstReadingEdge = True End If If Bevel = OppositeBevel Then ' "Door dispositiopn has been modify." If Not InvertBevel Then bModifyBevel = True Part.FirstReadingEdge = True End If End If ' Modifico il secure (diverso da zero) If String.IsNullOrEmpty(Bevel) AndAlso m_Secure <> "0" AndAlso m_Secure <> DdfFile.SetSecure(m_SwingAlias.Name, m_DispositionItem.Name, m_Secure) Then bModifyBevel = True Part.FirstReadingEdge = True ' per mantere attivo l'asterisco di modifica End If ' caso speciale If String.IsNullOrEmpty(Bevel) AndAlso m_Secure = "0" AndAlso DdfFile.SetSecure(m_SwingAlias.Name, m_DispositionItem.Name, m_Secure) = ConstGen.SWING_UP Then bModifyBevel = True Part.FirstReadingEdge = True ' per mantere attivo l'asterisco di modifica End If End Sub ' verifico che il parametro letto da ddf esista Private Function ControlProfileInList(ByRef Local_ListEdgeType As ObservableCollection(Of EdgeType), ByRef sEdgeType As String) As Boolean For IndexList As Integer = 0 To Local_ListEdgeType.Count - 1 If sEdgeType = Local_ListEdgeType(IndexList).Name OrElse sEdgeType = Local_ListEdgeType(IndexList).BevelDDF Then Return True End If Next Return False End Function #End Region ' Lettura ddf #Region "COSTRUTTORE" Sub New(ref_PartDoor As PartDoor) m_refPartDoor = ref_PartDoor 'CompoParam.m_rfSetTitle = AddressOf SetTitle End Sub ' utilizzata per generare la porta/jamb dell'Hardware Sub New(Hardware As String) If Not String.IsNullOrEmpty(Hardware) Then Me.m_Width = OptionModule.m_WidthJamb Me.m_Height = OptionModule.m_Height Me.m_Thickness = OptionModule.m_ThicknessJamb Me.SetSwing(OptionModule.m_Swing) If Not IsNothing(OptionModule.m_CurrMaterial) Then Try Me.SetMaterial(m_MaterialList.First(Function(x) x.Name = Trim(OptionModule.m_CurrMaterial.Name))) Catch ex As Exception Me.SetMaterial(OptionModule.m_MaterialList(0)) End Try Else Me.SetMaterial(OptionModule.m_MaterialList(0)) End If Me.m_IsActive = True Me.m_Measure = ConvertMmUnitsToString(OptionModule.m_bIsMmUnit) Me.m_Weight = OptionModule.m_Weight Me.SetLockEdgeType(New EdgeType(ConstGen.BEVEL_SQUARED, Visibility.Visible)) Me.SetHingeEdgeType(New EdgeType(ConstGen.BEVEL_SQUARED, Visibility.Visible)) Me.SetTopType(New EdgeType(ConstGen.BEVEL_SQUARED, Visibility.Visible)) Me.SetBottomType(New EdgeType(ConstGen.BEVEL_SQUARED, Visibility.Visible)) Me.m_LockEdgeMachining = OptionModule.m_LockEdgeMachining Me.m_HingeEdgeMachining = OptionModule.m_HingeEdgeMachining Me.m_TopMachining = OptionModule.m_TopMachining Me.m_BottomMachining = OptionModule.m_BottomMachining Me.m_LockEdgeOverMaterial = OptionModule.m_LockEdgeOverMaterial Me.m_HingeEdgeOverMaterial = OptionModule.m_HingeEdgeOverMaterial Me.m_TopOverMaterial = OptionModule.m_TopOverMaterial Me.m_BottomOverMaterial = OptionModule.m_BottomOverMaterial Me.SetDispositionItem(OptionModule.m_Disposition) Me.TypePart = ConstGen.PART_FRAME_LEFT Return End If Me.m_Width = OptionModule.m_Width Me.m_Height = OptionModule.m_Height Me.m_Thickness = OptionModule.m_Thickness Me.SetSwing(OptionModule.m_Swing) If Not IsNothing(OptionModule.m_CurrMaterial) Then Try Me.SetMaterial(m_MaterialList.First(Function(x) x.Name = Trim(OptionModule.m_CurrMaterial.Name))) Catch ex As Exception Me.SetMaterial(OptionModule.m_MaterialList(0)) End Try Else Me.SetMaterial(OptionModule.m_MaterialList(0)) End If Me.m_IsActive = True Me.m_Measure = ConvertMmUnitsToString(OptionModule.m_bIsMmUnit) Me.m_Weight = OptionModule.m_Weight Me.SetLockEdgeType(New EdgeType(ConstGen.BEVEL_SQUARED, Visibility.Visible)) Me.SetHingeEdgeType(New EdgeType(ConstGen.BEVEL_SQUARED, Visibility.Visible)) Me.SetTopType(New EdgeType(ConstGen.BEVEL_SQUARED, Visibility.Visible)) Me.SetBottomType(New EdgeType(ConstGen.BEVEL_SQUARED, Visibility.Visible)) Me.m_LockEdgeMachining = OptionModule.m_LockEdgeMachining Me.m_HingeEdgeMachining = OptionModule.m_HingeEdgeMachining Me.m_TopMachining = OptionModule.m_TopMachining Me.m_BottomMachining = OptionModule.m_BottomMachining Me.m_LockEdgeOverMaterial = OptionModule.m_LockEdgeOverMaterial Me.m_HingeEdgeOverMaterial = OptionModule.m_HingeEdgeOverMaterial Me.m_TopOverMaterial = OptionModule.m_TopOverMaterial Me.m_BottomOverMaterial = OptionModule.m_BottomOverMaterial Me.SetDispositionItem(OptionModule.m_Disposition) Me.TypePart = ConstGen.PART_DO_ & "1" End Sub #End Region ' Costruttore Public Function ShallowCopy() As Part Return DirectCast(Me.MemberwiseClone(), Part) End Function Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Public Sub NotifyPropertyChanged(propName As String) RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName)) End Sub End Class