Imports System.ComponentModel Imports System.IO Imports System.Collections.ObjectModel Imports System.Text.RegularExpressions Imports EgtUILib Public Class FamilyToolTreeViewItem Inherits InheritableTreeViewItem ' Actions Friend Shared m_delIsEnabledBtns As Action(Of Boolean, Boolean, Boolean) Public Overrides Property IsSelected As Boolean Get Return m_IsSelected End Get Set(value As Boolean) If (value <> m_IsSelected) Then m_IsSelected = value If value Then ' The function that I want to call When Parent item is selected in the tree If EgtSetCurrentContext(IniFile.m_ToolsDbSceneContext) EgtNewFile() EgtSetView(VT.TOP, False) EgtZoom(ZM.ALL) EgtSetCurrentContext(IniFile.m_ProjectSceneContext) End If If value Then m_delIsEnabledBtns(True, False, False) End If End If NotifyPropertyChanged("IsSelected") End If End Set End Property Private m_ToolType As MCH_TF ''' ''' Property that determines the tool type of the family ''' Public Property ToolType As MCH_TF Get Return m_ToolType End Get Set(value As MCH_TF) m_ToolType = value End Set End Property ' Proprietà che permette di nascondere tutti i parametri utensile grazie al binding ed al converter Public ReadOnly Property Type As Integer Get Return MCH_TY.NONE End Get End Property Sub New(Name As String, ToolFamily As MCH_TF) MyBase.New(Name) Me.PictureString = "/Resources/TreeView/Folder.png" Me.m_ToolType = ToolFamily End Sub End Class Public Class ToolTreeViewItem Inherits InheritableTreeViewItem ' Actions Friend Shared m_delRemoveTool As Action(Of ToolTreeViewItem) Friend Shared m_delErrorOnTool As Action(Of Boolean) Friend Shared m_delIsEnabledBtns As Action(Of Boolean, Boolean, Boolean) Friend Shared m_delGetSelectedTool As Func(Of ToolTreeViewItem) #Region "Tool Property" ' Variabile che indica quando non lanciare l'update del disegno utensile ' (utile per evitare di rifare il disegno più volte quando vengono caricati i parametri alla selezione di un utensile) Private m_SuspendToolDrawUpdate As Boolean = False ' Variabile che indica se l'utensile è appena stato creato Dim m_NewTool As Boolean = False Public Property NewTool As Boolean Get Return m_NewTool End Get Set(value As Boolean) m_NewTool = value End Set End Property ''' ''' Property that determines if the Tool is selected or not ''' Public Overrides Property IsSelected As Boolean Get Return m_IsSelected End Get Set(value As Boolean) If (value <> m_IsSelected) Then m_IsSelected = value If value Then EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbSetCurrTool(Me.Name) ReadToolParam() IsModifiedReset() NotifyPropertyChanged("Type") m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) Else WriteToolParam() If EgtTdbIsCurrToolModified() Or m_IsModifiedName Or Me.NewTool Then Select Case MsgBox(EgtMsg(MSG_TOOLSERRORS), MsgBoxStyle.YesNo, EgtMsg(MSG_TOOLSERRORS + 1)) Case MsgBoxResult.Yes m_NewTool = False m_Name = m_Name.Trim() WriteToolName() EgtTdbSaveCurrTool() Case MsgBoxResult.No If m_NewTool Then m_delRemoveTool(Me) ElseIf m_IsModifiedName Then Dim DbName As String = String.Empty EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.NAME, DbName) NamePar = DbName End If End Select End If End If ' ricarico utensile per avere valore Active e ricaricarlo EgtTdbSetCurrTool(Me.Name) NotifyPropertyChanged("Active") NotifyPropertyChanged("IsSelected") End If End Set End Property Private m_IsModifiedCorr As Boolean = False Private m_Corr As String ''' ''' Property that read and write to the tool's database the Corrector ''' Public Property Corr As String Get Return m_Corr End Get Set(value As String) If value <> m_Corr Then m_Corr = value Dim DbCorr As Integer = 0 Dim nValue As Integer = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.CORR, DbCorr) Int32.TryParse(value, nValue) m_IsModifiedCorr = If(nValue <> DbCorr, True, False) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) NotifyPropertyChanged("Corr") End If End Set End Property Friend m_ExitList As New ObservableCollection(Of String) Public ReadOnly Property ExitList As ObservableCollection(Of String) Get Return m_ExitList End Get End Property Private m_IsModifiedSelectedExit As Boolean = False Private m_SelectedExit As String ''' ''' Property that read and write to the tool's database the Exit ''' Public Property SelectedExit As String Get Return m_SelectedExit End Get Set(value As String) If value <> m_SelectedExit Then m_SelectedExit = value Dim DbExit As Integer = 0 Dim nValue As Integer = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.EXIT_, DbExit) Int32.TryParse(value, nValue) m_IsModifiedSelectedExit = If(nValue <> DbExit, True, False) ' se modificato disattivo l'utensile If m_IsModifiedSelectedExit Then EgtTdbSetCurrToolParam(MCH_TP.ACTIVE, False) If Not GetValidationError("SelectedExit") Then m_delErrorOnTool(True) m_delIsEnabledBtns(False, False, True) Else m_delErrorOnTool(Not IsValid) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) End If If Not m_SuspendToolDrawUpdate Then UpdateSceneToolDraw() End If NotifyPropertyChanged("SelectedExit") End If End Set End Property Private m_Type As Integer ''' ''' Property that read and write to the tool's database the Type ''' Public Property Type As Integer Get Return m_Type End Get Set(value As Integer) If value <> m_Type Then m_Type = value End If End Set End Property Private m_IsModifiedCoolant As Boolean = False Private m_Coolant As String ''' ''' Property that read and write to the tool's database the Coolant ''' Public Property Coolant As String Get Return m_Coolant End Get Set(value As String) If value <> m_Coolant Then m_Coolant = value Dim DbCoolant As Integer = 0 Dim nValue As Integer = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.COOLANT, DbCoolant) Int32.TryParse(value, nValue) m_IsModifiedCoolant = If(nValue <> DbCoolant, True, False) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) NotifyPropertyChanged("Coolant") End If End Set End Property Private m_IsModifiedCornRad As Boolean = False Private m_CornRad As String ''' ''' Property that read and write to the tool's database the Corner Radius ''' Public Property CornRad As String Get Return m_CornRad End Get Set(value As String) If value <> m_CornRad Then m_CornRad = value Dim DbCornRad As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.CORNRAD, DbCornRad) StringToLen(value, dValue) m_IsModifiedCornRad = Math.Abs(dValue - DbCornRad) > 10 * EPS_SMALL If Not GetValidationError("CornRad") Then m_delErrorOnTool(True) m_delIsEnabledBtns(False, False, True) Else m_delErrorOnTool(Not IsValid) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) End If If Not m_SuspendToolDrawUpdate Then UpdateSceneToolDraw() End If NotifyPropertyChanged("CornRad") End If End Set End Property Private m_IsModifiedDiam As Boolean = False Private m_Diam As String ''' ''' Property that read and write to the tool's database the Diameter ''' Public Property Diam As String Get Return m_Diam End Get Set(value As String) If value <> m_Diam Then m_Diam = value Dim DbDiam As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.DIAM, DbDiam) StringToLen(value, dValue) m_IsModifiedDiam = Math.Abs(dValue - DbDiam) > 10 * EPS_SMALL If Not GetValidationError("Diam") Then m_delErrorOnTool(True) m_delIsEnabledBtns(False, False, True) Else m_delErrorOnTool(Not IsValid) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) End If If Not m_SuspendToolDrawUpdate Then UpdateSceneToolDraw() End If NotifyPropertyChanged("Diam") End If End Set End Property Private m_IsModifiedTotDiam As Boolean = False Private m_TotDiam As String ''' ''' Property that read and write to the tool's database the Total Diameter ''' Public Property TotDiam As String Get Return m_TotDiam End Get Set(value As String) If value <> m_TotDiam Then m_TotDiam = value Dim DbTotDiam As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.TOTDIAM, DbTotDiam) StringToLen(value, dValue) m_IsModifiedTotDiam = Math.Abs(dValue - DbTotDiam) > 5 * EPS_SMALL If Not m_SuspendToolDrawUpdate Then UpdateSceneToolDraw() End If If Not GetValidationError("Diam") Or Not GetValidationError("TotDiam") Then m_delErrorOnTool(True) m_delIsEnabledBtns(False, False, True) Else m_delErrorOnTool(Not IsValid) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) End If NotifyPropertyChanged("TotDiam") End If End Set End Property Private m_IsModifiedFeed As Boolean = False Private m_Feed As String ''' ''' Property that read and write to the tool's database the Feed ''' Public Property Feed As String Get Return m_Feed End Get Set(value As String) If value <> m_Feed Then m_Feed = value Dim DbFeed As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.FEED, DbFeed) StringToLen(value, dValue) m_IsModifiedFeed = Math.Abs(dValue - DbFeed) > 5 * EPS_SMALL m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) NotifyPropertyChanged("Feed") End If End Set End Property Private m_IsModifiedEndFeed As Boolean = False Private m_EndFeed As String ''' ''' Property that read and write to the tool's database the End Feed ''' Public Property EndFeed As String Get Return m_EndFeed End Get Set(value As String) If value <> m_EndFeed Then m_EndFeed = value Dim DbEndFeed As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.ENDFEED, DbEndFeed) StringToLen(value, dValue) m_IsModifiedEndFeed = Math.Abs(dValue - DbEndFeed) > 5 * EPS_SMALL m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) NotifyPropertyChanged("EndFeed") End If End Set End Property Private m_IsModifiedStartFeed As Boolean = False Private m_StartFeed As String ''' ''' Property that read and write to the tool's database the Start Feed ''' Public Property StartFeed As String Get Return m_StartFeed End Get Set(value As String) If value <> m_StartFeed Then m_StartFeed = value Dim DbStartFeed As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.STARTFEED, DbStartFeed) StringToLen(value, dValue) m_IsModifiedStartFeed = Math.Abs(dValue - DbStartFeed) > 5 * EPS_SMALL m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) NotifyPropertyChanged("StartFeed") End If End Set End Property Private m_IsModifiedTipFeed As Boolean = False Private m_TipFeed As String ''' ''' Property that read and write to the tool's database the Tip Feed ''' Public Property TipFeed As String Get Return m_TipFeed End Get Set(value As String) If value <> m_TipFeed Then m_TipFeed = value Dim DbTipFeed As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.TIPFEED, DbTipFeed) StringToLen(value, dValue) m_IsModifiedTipFeed = Math.Abs(dValue - DbTipFeed) > 5 * EPS_SMALL m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) NotifyPropertyChanged("TipFeed") ' Se fresa e 0 non può lavorare di testa If (Type And MCH_TF.MILL) <> 0 Then If dValue > EPS_SMALL Then Type = MCH_TY.MILL_STD Else Type = MCH_TY.MILL_NOTIP End If End If End If End Set End Property Private m_IsModifiedLen As Boolean = False Private m_Len As String ''' ''' Property that read and write to the tool's database the Len ''' Public Property Len As String Get Return m_Len End Get Set(value As String) If value <> m_Len Then m_Len = value Dim DbLen As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.LEN, DbLen) StringToLen(value, dValue) m_IsModifiedLen = Math.Abs(dValue - DbLen) > 5 * EPS_SMALL If Not m_SuspendToolDrawUpdate Then UpdateSceneToolDraw() End If If Not GetValidationError("Len") Or Not GetValidationError("MaxMat") Then m_delErrorOnTool(True) m_delIsEnabledBtns(False, False, True) Else m_delErrorOnTool(Not IsValid) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) End If NotifyPropertyChanged("Len") ' Se lama If (Type And MCH_TF.SAWBLADE) <> 0 Then Dim CurrTotLen As Double = 0 If Not IsNothing(TotLen) Then StringToLen(TotLen, CurrTotLen) ' se len e totlen coincidono tipo piatto If (CurrTotLen - dValue) > 10 * EPS_SMALL Then Type = MCH_TY.SAW_STD Else Type = MCH_TY.SAW_FLAT End If End If End If End If End Set End Property Private m_IsModifiedTotLen As Boolean = False Private m_TotLen As String ''' ''' Property that read and write to the tool's database the Total Len ''' Public Property TotLen As String Get Return m_TotLen End Get Set(value As String) If value <> m_TotLen Then m_TotLen = value Dim DbTotLen As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.TOTLEN, DbTotLen) StringToLen(value, dValue) m_IsModifiedTotLen = Math.Abs(dValue - DbTotLen) > 5 * EPS_SMALL If Not m_SuspendToolDrawUpdate Then UpdateSceneToolDraw() End If If Not GetValidationError("TotLen") Or Not GetValidationError("Len") Then m_delErrorOnTool(True) m_delIsEnabledBtns(False, False, True) Else m_delErrorOnTool(Not IsValid) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) End If NotifyPropertyChanged("TotLen") ' Se lama e len e totlen coincidono tipo piatto If (Type And MCH_TF.SAWBLADE) <> 0 Then If Not IsNothing(Len) Then Dim CurrLen As Double = 0 StringToLen(Len, CurrLen) If (dValue - CurrLen) > 10 * EPS_SMALL Then Type = MCH_TY.SAW_STD Else Type = MCH_TY.SAW_FLAT End If End If End If End If End Set End Property Private m_IsModifiedMaxMat As Boolean = False Private m_MaxMat As String ''' ''' Property that read and write to the tool's database the Max Material ''' Public Property MaxMat As String Get Return m_MaxMat End Get Set(value As String) If value <> m_MaxMat Then m_MaxMat = value Dim DbMaxMat As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.MAXMAT, DbMaxMat) StringToLen(value, dValue) m_IsModifiedMaxMat = Math.Abs(dValue - DbMaxMat) > 5 * EPS_SMALL If Not m_SuspendToolDrawUpdate Then UpdateSceneToolDraw() End If If Not GetValidationError("MaxMat") Then m_delErrorOnTool(True) m_delIsEnabledBtns(False, False, True) Else m_delErrorOnTool(Not IsValid) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) End If NotifyPropertyChanged("MaxMat") End If End Set End Property Private m_IsModifiedLonOffset As Boolean = False Private m_LonOffset As String ''' ''' Property that read and write to the tool's database the Lon Offset ''' Public Property LonOffset As String Get Return m_LonOffset End Get Set(value As String) If value <> m_LonOffset Then m_LonOffset = value Dim DbLonOffset As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.LONOFFSET, DbLonOffset) StringToLen(value, dValue) m_IsModifiedLonOffset = Math.Abs(dValue - DbLonOffset) > 5 * EPS_SMALL m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) NotifyPropertyChanged("LonOffset") End If End Set End Property Private m_IsModifiedRadOffset As Boolean = False Private m_RadOffset As String ''' ''' Property that read and write to the tool's database the Rad Offset ''' Public Property RadOffset As String Get Return m_RadOffset End Get Set(value As String) If value <> m_RadOffset Then m_RadOffset = value Dim DbRadOffset As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.RADOFFSET, DbRadOffset) StringToLen(value, dValue) m_IsModifiedRadOffset = Math.Abs(dValue - DbRadOffset) > 5 * EPS_SMALL m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) NotifyPropertyChanged("RadOffset") End If End Set End Property Private m_IsModifiedSpeed As Boolean = False Private m_Speed As String ''' ''' Property that read and write to the tool's database the Speed ''' Public Property Speed As String Get Return m_Speed End Get Set(value As String) If value <> m_Speed Then m_Speed = value Dim DbSpeed As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.SPEED, DbSpeed) StringToDouble(value, dValue) m_IsModifiedSpeed = Math.Abs(dValue - DbSpeed) > 10 * EPS_ANG_SMALL If Not GetValidationError("Speed") Then m_delErrorOnTool(True) m_delIsEnabledBtns(False, False, True) Else m_delErrorOnTool(Not IsValid) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) End If NotifyPropertyChanged("Speed") End If End Set End Property Private m_IsModifiedSideAng As Boolean = False Private m_SideAng As String ''' ''' Property that read and write to the tool's database the Side Angle ''' Public Property SideAng As String Get Return m_SideAng End Get Set(value As String) If value <> m_SideAng Then m_SideAng = value Dim DbSideAng As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.SIDEANG, DbSideAng) StringToDouble(value, dValue) m_IsModifiedSideAng = Math.Abs(dValue - DbSideAng) > 10 * EPS_ANG_SMALL m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) If Not m_SuspendToolDrawUpdate Then UpdateSceneToolDraw() End If NotifyPropertyChanged("SideAng") End If End Set End Property Private m_IsModifiedMaxSpeed As Boolean = False Private m_MaxSpeed As String ''' ''' Property that read and write to the tool's database the Max Speed ''' Public Property MaxSpeed As String Get Return m_MaxSpeed End Get Set(value As String) If value <> m_MaxSpeed Then m_MaxSpeed = value Dim DbMaxSpeed As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.MAXSPEED, DbMaxSpeed) StringToLen(value, dValue) m_IsModifiedMaxSpeed = Math.Abs(dValue - DbMaxSpeed) > 10 * EPS_ANG_SMALL If Not GetValidationError("Speed") Then m_delErrorOnTool(True) m_delIsEnabledBtns(False, False, True) Else m_delErrorOnTool(Not IsValid) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) End If NotifyPropertyChanged("MaxSpeed") End If End Set End Property Private m_IsModifiedThick As Boolean = False Private m_Thick As String ''' ''' Property that read and write to the tool's database the Thick ''' Public Property Thick As String Get Return m_Thick End Get Set(value As String) If value <> m_Thick Then m_Thick = value Dim DbThick As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.THICK, DbThick) StringToLen(value, dValue) m_IsModifiedThick = Math.Abs(dValue - DbThick) > 5 * EPS_SMALL If Not m_SuspendToolDrawUpdate Then UpdateSceneToolDraw() End If If Not GetValidationError("Thick") Or Not GetValidationError("CornRad") Then m_delErrorOnTool(True) m_delIsEnabledBtns(False, False, True) Else m_delErrorOnTool(Not IsValid) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) End If NotifyPropertyChanged("Thick") End If End Set End Property Private m_IsModifiedMaxAbsorption As Boolean = False Private m_MaxAbsorption As String ''' ''' Property that read and write to the tool's database the Max Absorption ''' Public Property MaxAbsorption As String Get Return m_MaxAbsorption End Get Set(value As String) If value <> m_MaxAbsorption Then m_MaxAbsorption = value Dim DbMaxAbsorption As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.MAXABSORPTION, DbMaxAbsorption) StringToLen(value, dValue) m_IsModifiedMaxAbsorption = Math.Abs(dValue - DbMaxAbsorption) > 5 * EPS_SMALL m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) NotifyPropertyChanged("MaxAbsorption") End If End Set End Property Private m_IsModifiedMinFeed As Boolean = False Private m_MinFeed As String ''' ''' Property that read and write to the tool's database the Min Feed ''' Public Property MinFeed As String Get Return m_MinFeed End Get Set(value As String) If value <> m_MinFeed Then m_MinFeed = value Dim DbMinFeed As Double = 0 Dim dValue As Double = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.MINFEED, DbMinFeed) StringToLen(value, dValue) m_IsModifiedMinFeed = Math.Abs(dValue - DbMinFeed) > 5 * EPS_SMALL m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) NotifyPropertyChanged("MinFeed") End If End Set End Property Private m_IsModifiedDraw As Boolean = False Friend m_Draw As String ''' ''' Property that read and write to the tool's database the Draw ''' Public Property Draw As String Get Return m_Draw End Get Set(value As String) If value = String.Empty Or value <> m_Draw Then EgtSetCurrentContext(IniFile.m_ProjectSceneContext) m_Draw = value Dim DbDraw As String = String.Empty EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.DRAW, DbDraw) m_IsModifiedDraw = (value <> DbDraw) NotifyPropertyChanged("Draw") End If End Set End Property Friend Shared m_HeadList As New List(Of HeadItem) Public ReadOnly Property HeadList As List(Of HeadItem) Get Return m_HeadList End Get End Property Private m_IsModifiedSelectedHead As Boolean = False Private m_SelectedHead As HeadItem ''' ''' Property that read and write to the tool's database the Head ''' Public Property SelectedHead As HeadItem Get Return m_SelectedHead End Get Set(value As HeadItem) If value IsNot m_SelectedHead Then m_SelectedHead = value Dim DbHead As String = String.Empty EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.HEAD, DbHead) m_IsModifiedSelectedHead = If(value.HName <> DbHead, True, False) ' se modificato disattivo l'utensile If m_IsModifiedSelectedHead Then EgtTdbSetCurrToolParam(MCH_TP.ACTIVE, False) If Not m_SuspendToolDrawUpdate Then UpdateSceneToolDraw() End If If Not GetValidationError("SelectedHead") Then m_delErrorOnTool(True) m_delIsEnabledBtns(False, False, True) Else m_delErrorOnTool(Not IsValid) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) End If NotifyPropertyChanged("SelectedHead") ' verifico se le uscite sono cambiate EgtSetCurrentContext(IniFile.m_ProjectSceneContext) Dim nExitNum As Integer = EgtGetHeadExitCount(m_SelectedHead.HName) ' ricalcolo la lista uscite If nExitNum > m_ExitList.Count Then For ExitIndex = m_ExitList.Count To nExitNum - 1 m_ExitList.Add((ExitIndex + 1).ToString) Next ElseIf nExitNum < m_ExitList.Count Then For Index = m_ExitList.Count - 1 To nExitNum Step -1 m_ExitList.RemoveAt(Index) Next End If ' verifico se l'uscita selezionata è nella lista If Not m_ExitList.Contains(m_SelectedExit) AndAlso m_ExitList.Count > 0 Then SelectedExit = m_ExitList(0) End If ' ricalcolo la lista di posizioni valide Dim nErr As Integer = 0 Dim bIsValid As Boolean = False Dim TcPosIndex As Integer = 0 For OrigTcPosIndex = 0 To m_OrigTcPosList.Count - 1 Dim CurrTcPos As String = m_OrigTcPosList(OrigTcPosIndex) bIsValid = False EgtLuaSetGlobStringVar("STU.TCPOS", CurrTcPos) EgtLuaSetGlobStringVar("STU.HEAD", m_SelectedHead.HName) If Not EgtLuaCallFunction("STU.IsValidTcPosFromHead") Then nErr = 999 ' Leggo variabili EgtLuaGetGlobBoolVar("STU.ISVALID", bIsValid) If Not EgtLuaGetGlobIntVar("STU.ERR", nErr) Then nErr = 999 If nErr = 0 AndAlso bIsValid Then If m_TcPosList.Count - 1 >= TcPosIndex AndAlso m_TcPosList(TcPosIndex) = CurrTcPos Then TcPosIndex += 1 Else m_TcPosList.Insert(TcPosIndex, CurrTcPos) TcPosIndex += 1 End If Else If m_TcPosList.Count - 1 >= TcPosIndex AndAlso m_TcPosList(TcPosIndex) = CurrTcPos Then m_TcPosList.RemoveAt(TcPosIndex) End If End If Next NotifyPropertyChanged("ExitList") NotifyPropertyChanged("TcPosList") End If End Set End Property ' Variabile che indica se c'è un errore nel nome dell'utensile (ad esempio nome già utilizzato) Dim nErrorToolName As Integer = 0 Friend m_IsModifiedName As Boolean = False ''' ''' Property that read and write to the tool's database the Name ''' Public Property NamePar As String Get Return m_Name End Get Set(value As String) If value = String.Empty Or value <> m_Name Then nErrorToolName = 0 m_Name = value ' Verifico se il nome è diverso da quello nel database e imposto l'apposito flag Dim DbName As String = String.Empty EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.NAME, DbName) m_IsModifiedName = If(value <> DbName, True, False) ' Verifico che il nuovo nome sia valido Dim sTempName As String = value EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetToolNewName(sTempName) If m_IsModifiedName And Not value = sTempName Then nErrorToolName = 1 End If If Not GetValidationError("NamePar") Then m_delErrorOnTool(True) m_delIsEnabledBtns(False, False, True) Else m_delErrorOnTool(Not IsValid) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) End If NotifyPropertyChanged("NamePar") End If End Set End Property Private m_IsModifiedUserNotes As Boolean = False Private m_UserNotes As String ''' ''' Property that read and write to the tool's database the User Notes ''' Public Property UserNotes As String Get Return m_UserNotes End Get Set(value As String) If value = String.Empty Or value <> m_UserNotes Then m_UserNotes = value Dim DbUserNotes As String = String.Empty EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.USERNOTES, DbUserNotes) m_IsModifiedUserNotes = If(value <> DbUserNotes, True, False) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) NotifyPropertyChanged("UserNotes") End If End Set End Property Friend Shared m_OrigTcPosList As New List(Of String) Public ReadOnly Property OrigTcPosList As List(Of String) Get Return m_OrigTcPosList End Get End Property Friend m_TcPosList As New ObservableCollection(Of String) Public ReadOnly Property TcPosList As ObservableCollection(Of String) Get Return m_TcPosList End Get End Property Private m_IsModifiedSelectedTcPos As Boolean = False Private m_SelectedTcPos As String ''' ''' Property that read and write to the tool's database the Tc Pos ''' Public Property SelectedTcPos As String Get Return m_SelectedTcPos End Get Set(value As String) If value = String.Empty Or value <> m_SelectedTcPos Then m_SelectedTcPos = value Dim DbTcPos As String = String.Empty EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.TCPOS, DbTcPos) m_IsModifiedSelectedTcPos = If(value <> DbTcPos, True, False) ' se modificato disattivo l'utensile If m_IsModifiedSelectedTcPos Then Dim z = EgtTdbSetCurrToolParam(MCH_TP.ACTIVE, False) NotifyPropertyChanged("Active") End If m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) NotifyPropertyChanged("SelectedTcPos") End If End Set End Property Private m_Uuid As String ''' ''' Property that read and write to the tool's database the Uuid ''' Public ReadOnly Property Uuid As String Get Return m_Uuid End Get End Property Public Property Active As Boolean Get EgtSetCurrentContext(IniFile.m_ProjectSceneContext) ' salvo utensile corrente precedente Dim PreviousCurrentTool As String = String.Empty EgtTdbGetCurrToolParam(MCH_TP.NAME, PreviousCurrentTool) Dim bChangeTool As Boolean = PreviousCurrentTool <> Me.Name If bChangeTool Then EgtTdbSetCurrTool(Me.Name) Dim bActive As Boolean = False EgtTdbGetCurrToolParam(MCH_TP.ACTIVE, bActive) ' ripristino utensile corrente If bChangeTool Then EgtTdbSetCurrTool(PreviousCurrentTool) Return bActive End Get Set(value As Boolean) EgtSetCurrentContext(IniFile.m_ProjectSceneContext) ' verifico se l'utensile selezionato è modificato Dim SelTool As ToolTreeViewItem = m_delGetSelectedTool() If Not IsNothing(SelTool) AndAlso SelTool.IsModified Then ' chiedo di salvare If MessageBox.Show(String.Format(EgtMsg(6144), SelTool.Name), EgtMsg(6143), MessageBoxButton.YesNo, MessageBoxImage.Question) <> MessageBoxResult.Yes Then Return Else SelTool.WriteToolParam() SelTool.m_Name = SelTool.m_Name.Trim() SelTool.WriteToolName() EgtTdbSaveCurrTool() SelTool.NewTool = False SelTool.IsModifiedReset() m_delIsEnabledBtns(SelTool.IsValid And Not SelTool.IsModified, SelTool.IsValid, True) End If End If ' salvo utensile corrente precedente Dim PreviousCurrentTool As String = String.Empty EgtTdbGetCurrToolParam(MCH_TP.NAME, PreviousCurrentTool) ' se attivato, verifico che non sia in conflitto con altri utensili If value Then ' verifico se c'è un utensile con la stessa posizione If Not VerifyAllPositions() Then MessageBox.Show(EgtMsg(6145), EgtMsg(6126), MessageBoxButton.OK, MessageBoxImage.Exclamation) ' ripristino utensile corrente EgtTdbSetCurrTool(PreviousCurrentTool) Return End If End If ' lo scrivo nel Db EgtTdbSetCurrTool(Me.Name) EgtTdbSetCurrToolParam(MCH_TP.ACTIVE, value) EgtTdbSaveCurrTool() NotifyPropertyChanged("Active") ' ripristino utensile corrente EgtTdbSetCurrTool(PreviousCurrentTool) End Set End Property #End Region ' Tool Property ' Definizione comandi Private m_cmdOpenDrawFile As ICommand Private m_cmdAutoDraw As ICommand #Region "Constructors" Sub New(Name As String) MyBase.New(Name) End Sub #End Region ' Constructors #Region "METHODS" Friend Sub ReadToolParam() EgtSetCurrentContext(IniFile.m_ProjectSceneContext) ' sospendo l'aggiornamento del disegno per evitare di rifarlo al cambio di ogni parametro inerente m_SuspendToolDrawUpdate = True Dim nValue As Integer = 0 Dim dValue As Double = 0 Dim sValue As String = String.Empty EgtTdbGetCurrToolParam(MCH_TP.CORR, nValue) m_Corr = nValue.ToString() NotifyPropertyChanged("Corr") m_IsModifiedCorr = False EgtTdbGetCurrToolParam(MCH_TP.TYPE, nValue) m_Type = nValue NotifyPropertyChanged("Type") EgtTdbGetCurrToolParam(MCH_TP.COOLANT, nValue) m_Coolant = nValue.ToString() NotifyPropertyChanged("Coolant") m_IsModifiedCoolant = False EgtTdbGetCurrToolParam(MCH_TP.CORNRAD, dValue) m_CornRad = LenToString(dValue, 4) NotifyPropertyChanged("CornRad") m_IsModifiedCornRad = False EgtTdbGetCurrToolParam(MCH_TP.DIAM, dValue) m_Diam = LenToString(dValue, 4) m_IsModifiedDiam = False EgtTdbGetCurrToolParam(MCH_TP.TOTDIAM, dValue) m_TotDiam = LenToString(dValue, 4) m_IsModifiedTotDiam = False ValidateProperty("TotDiam") ValidateProperty("Diam") EgtTdbGetCurrToolParam(MCH_TP.FEED, dValue) m_Feed = LenToString(dValue, 4) NotifyPropertyChanged("Feed") m_IsModifiedFeed = False EgtTdbGetCurrToolParam(MCH_TP.ENDFEED, dValue) m_EndFeed = LenToString(dValue, 4) NotifyPropertyChanged("EndFeed") m_IsModifiedEndFeed = False EgtTdbGetCurrToolParam(MCH_TP.STARTFEED, dValue) m_StartFeed = LenToString(dValue, 4) NotifyPropertyChanged("StartFeed") m_IsModifiedStartFeed = False EgtTdbGetCurrToolParam(MCH_TP.TIPFEED, dValue) m_TipFeed = LenToString(dValue, 4) NotifyPropertyChanged("TipFeed") m_IsModifiedTipFeed = False EgtTdbGetCurrToolParam(MCH_TP.LEN, dValue) m_Len = LenToString(dValue, 4) m_IsModifiedLen = False EgtTdbGetCurrToolParam(MCH_TP.TOTLEN, dValue) m_TotLen = LenToString(dValue, 4) m_IsModifiedTotLen = False EgtTdbGetCurrToolParam(MCH_TP.MAXMAT, dValue) m_MaxMat = LenToString(dValue, 4) m_IsModifiedMaxMat = False ValidateProperty("TotLen") ValidateProperty("Len") ValidateProperty("MaxMat") EgtTdbGetCurrToolParam(MCH_TP.LONOFFSET, dValue) m_LonOffset = LenToString(dValue, 4) NotifyPropertyChanged("LonOffset") m_IsModifiedLonOffset = False EgtTdbGetCurrToolParam(MCH_TP.RADOFFSET, dValue) m_RadOffset = LenToString(dValue, 4) NotifyPropertyChanged("RadOffset") m_IsModifiedRadOffset = False EgtTdbGetCurrToolParam(MCH_TP.SPEED, dValue) m_Speed = DoubleToString(dValue, 4) m_IsModifiedSpeed = False EgtTdbGetCurrToolParam(MCH_TP.MAXSPEED, dValue) m_MaxSpeed = DoubleToString(dValue, 4) m_IsModifiedMaxSpeed = False ValidateProperty("Speed") NotifyPropertyChanged("MaxSpeed") EgtTdbGetCurrToolParam(MCH_TP.SIDEANG, dValue) m_SideAng = DoubleToString(dValue, 4) NotifyPropertyChanged("SideAng") m_IsModifiedSideAng = False EgtTdbGetCurrToolParam(MCH_TP.THICK, dValue) m_Thick = LenToString(dValue, 4) m_IsModifiedThick = False ValidateProperty("Thick") EgtTdbGetCurrToolParam(MCH_TP.MAXABSORPTION, dValue) m_MaxAbsorption = DoubleToString(dValue, 4) NotifyPropertyChanged("MaxAbsorption") m_IsModifiedMaxAbsorption = False EgtTdbGetCurrToolParam(MCH_TP.MINFEED, dValue) m_MinFeed = LenToString(dValue, 4) NotifyPropertyChanged("MinFeed") m_IsModifiedMinFeed = False EgtTdbGetCurrToolParam(MCH_TP.DRAW, sValue) m_Draw = sValue m_IsModifiedDraw = False ValidateProperty("Draw") ' leggo l'uscita prima della testa (senza validarla) EgtTdbGetCurrToolParam(MCH_TP.EXIT_, nValue) m_SelectedExit = nValue.ToString() m_IsModifiedSelectedExit = False ' leggo la testa e valido l'uscita EgtTdbGetCurrToolParam(MCH_TP.HEAD, sValue) For HeadIndex = 0 To m_HeadList.Count - 1 If sValue = m_HeadList(HeadIndex).HName Then SelectedHead = m_HeadList(HeadIndex) Exit For End If Next ValidateProperty("SelectedHead") ValidateProperty("SelectedExit") EgtTdbGetCurrToolParam(MCH_TP.USERNOTES, sValue) m_UserNotes = sValue NotifyPropertyChanged("UserNotes") m_IsModifiedUserNotes = False EgtTdbGetCurrToolParam(MCH_TP.TCPOS, sValue) If m_TcPosList.Contains(sValue) Then m_SelectedTcPos = sValue m_IsModifiedSelectedTcPos = False Else m_SelectedTcPos = Nothing EgtTdbSetCurrToolParam(MCH_TP.TCPOS, String.Empty) End If NotifyPropertyChanged("SelectedTcPos") EgtTdbGetCurrToolParam(MCH_TP.UUID, sValue) m_Uuid = sValue ' Ora che tutti i parametri sono aggiornati, aggiorno il disegno m_SuspendToolDrawUpdate = False UpdateSceneToolDraw() End Sub Friend Sub ReadToolName() EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.NAME, NamePar) End Sub Friend Sub WriteToolParam() EgtSetCurrentContext(IniFile.m_ProjectSceneContext) Dim nValue As Integer = 0 Dim dValue As Double = 0 Int32.TryParse(Corr, nValue) EgtTdbSetCurrToolParam(MCH_TP.CORR, nValue) Int32.TryParse(SelectedExit, nValue) EgtTdbSetCurrToolParam(MCH_TP.EXIT_, nValue) EgtTdbSetCurrToolParam(MCH_TP.TYPE, Type) Int32.TryParse(Coolant, nValue) EgtTdbSetCurrToolParam(MCH_TP.COOLANT, nValue) StringToLen(CornRad, dValue) EgtTdbSetCurrToolParam(MCH_TP.CORNRAD, dValue) StringToLen(Diam, dValue) EgtTdbSetCurrToolParam(MCH_TP.DIAM, dValue) StringToLen(TotDiam, dValue) EgtTdbSetCurrToolParam(MCH_TP.TOTDIAM, dValue) StringToLen(Feed, dValue) EgtTdbSetCurrToolParam(MCH_TP.FEED, dValue) StringToLen(EndFeed, dValue) EgtTdbSetCurrToolParam(MCH_TP.ENDFEED, dValue) StringToLen(StartFeed, dValue) EgtTdbSetCurrToolParam(MCH_TP.STARTFEED, dValue) StringToLen(TipFeed, dValue) EgtTdbSetCurrToolParam(MCH_TP.TIPFEED, dValue) StringToLen(Len, dValue) EgtTdbSetCurrToolParam(MCH_TP.LEN, dValue) StringToLen(TotLen, dValue) EgtTdbSetCurrToolParam(MCH_TP.TOTLEN, dValue) StringToLen(MaxMat, dValue) EgtTdbSetCurrToolParam(MCH_TP.MAXMAT, dValue) StringToLen(LonOffset, dValue) EgtTdbSetCurrToolParam(MCH_TP.LONOFFSET, dValue) StringToLen(RadOffset, dValue) EgtTdbSetCurrToolParam(MCH_TP.RADOFFSET, dValue) StringToDouble(Speed, dValue) EgtTdbSetCurrToolParam(MCH_TP.SPEED, dValue) StringToDouble(SideAng, dValue) EgtTdbSetCurrToolParam(MCH_TP.SIDEANG, dValue) StringToDouble(MaxSpeed, dValue) EgtTdbSetCurrToolParam(MCH_TP.MAXSPEED, dValue) StringToLen(Thick, dValue) EgtTdbSetCurrToolParam(MCH_TP.THICK, dValue) StringToDouble(MaxAbsorption, dValue) EgtTdbSetCurrToolParam(MCH_TP.MAXABSORPTION, dValue) StringToLen(MinFeed, dValue) EgtTdbSetCurrToolParam(MCH_TP.MINFEED, dValue) EgtTdbSetCurrToolParam(MCH_TP.DRAW, Draw) EgtTdbSetCurrToolParam(MCH_TP.HEAD, SelectedHead.HName) EgtTdbSetCurrToolParam(MCH_TP.USERNOTES, UserNotes) If String.IsNullOrEmpty(SelectedTcPos) Then m_SelectedTcPos = String.Empty EgtTdbSetCurrToolParam(MCH_TP.TCPOS, m_SelectedTcPos) End Sub Public Sub WriteToolName() EgtTdbSetCurrToolParam(MCH_TP.NAME, NamePar) End Sub ' funzione che verifica se c'è attivo un utensile sulla stessa posizione Private Function VerifyAllPositions() As Boolean EgtSetCurrentContext(IniFile.m_ProjectSceneContext) ' carico posizione, testa e uscita dell'utensile che si attiva EgtTdbSetCurrTool(Me.Name) Dim sCheckedTcPos As String = String.Empty EgtTdbGetCurrToolParam(MCH_TP.TCPOS, sCheckedTcPos) Dim sCheckedHead As String = String.Empty EgtTdbGetCurrToolParam(MCH_TP.HEAD, sCheckedHead) Dim nCheckedExit As Integer = 0 EgtTdbGetCurrToolParam(MCH_TP.EXIT_, nCheckedExit) ' verifico su tutti gli utensili disponibili Dim ActiveToolsFamilies() As ToolsFamily = MachineModel.ReadActiveToolsFamilies() For Each ToolsFamily In ActiveToolsFamilies Dim nType As Integer = 0 Dim ToolName As String = String.Empty EgtSetCurrentContext(IniFile.m_ProjectSceneContext) If EgtTdbGetFirstTool(ToolsFamily.FamilyId, ToolName, nType) Then If ToolName <> Me.Name Then EgtTdbSetCurrTool(ToolName) If Not VerifyPosition(sCheckedTcPos, sCheckedHead, nCheckedExit) Then Return False End If While EgtTdbGetNextTool(ToolsFamily.FamilyId, ToolName, nType) If ToolName <> Me.Name Then EgtTdbSetCurrTool(ToolName) If Not VerifyPosition(sCheckedTcPos, sCheckedHead, nCheckedExit) Then Return False End If End While End If Next Return True End Function Private Function VerifyPosition(sCheckedTcPos As String, sCheckedHead As String, nCheckedExit As Integer) As Boolean ' verifico se attivo Dim DbActive As Boolean = False EgtSetCurrentContext(IniFile.m_ProjectSceneContext) If Not EgtTdbGetCurrToolParam(MCH_TP.ACTIVE, DbActive) Then DbActive = False ' se non è attivo non lo considero e restituisco vero If Not DbActive Then Return True ' recupero posizione Dim DbTcPos As String = String.Empty EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.TCPOS, DbTcPos) ' se la posizione è uguale controllo la testa If sCheckedTcPos = DbTcPos Then Dim DbHead As String = String.Empty EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.HEAD, DbHead) ' se la testa è uguale, controllo l'uscita If sCheckedHead = DbHead Then Dim DbExit As Integer = 0 EgtSetCurrentContext(IniFile.m_ProjectSceneContext) EgtTdbGetCurrToolParam(MCH_TP.EXIT_, DbExit) ' se l'uscita è uguale la posizione è già occupata If nCheckedExit = DbExit Then Return False Else ' se la testa è diversa vuol dire che la posizione è già occupata Return False End If End If Return True End Function #End Region ' Methods #Region "ToolSceneUpdate" ' Variabili che segnalano errori nel disegno dell'utensile Dim m_nDrawingError As Integer = 0 Private Sub UpdateSceneToolDraw() ' Azzero errori m_nDrawingError = 0 ' Se nome disegno vuoto, assegno quello dell'automatico If String.IsNullOrEmpty(m_Draw) Then m_Draw = m_Uuid & ".nge" ' Creo il disegno dell'utensile CreateToolDraw() EgtSetCurrentContext(IniFile.m_ToolsDbSceneContext) If m_nDrawingError <> 0 Then If IsUUID(Path.GetFileNameWithoutExtension(m_Draw)) Then EgtNewFile() End If End If EgtSetView(VT.TOP, False) EgtZoom(ZM.ALL) NotifyPropertyChanged("Draw") If Not GetValidationError("Draw") Then m_delErrorOnTool(True) m_delIsEnabledBtns(False, False, True) Else m_delErrorOnTool(Not IsValid) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) End If End Sub Private Function CreateToolDraw() As Boolean ' Calcolo parametri per disegno Dim sHeadName As String = If(Not IsNothing(SelectedHead), SelectedHead.HName, "") Dim nExit As Integer = 0 : If Not IsNothing(SelectedExit) Then StringToInt(SelectedExit, nExit) Dim nType As Integer = Type Dim dTotLen As Double = 0 : StringToLen(TotLen, dTotLen) Dim dLen As Double = 0 : StringToLen(Len, dLen) Dim dTotDiam As Double = 0 : StringToLen(TotDiam, dTotDiam) Dim dDiam As Double = 0 : StringToLen(Diam, dDiam) Dim dThick As Double = 0 : StringToLen(Thick, dThick) Dim dMaxMat As Double = 0 : StringToLen(MaxMat, dMaxMat) Dim dSideAng As Double = 0 : StringToDouble(SideAng, dSideAng) Dim dCornRad As Double = 0 : StringToLen(CornRad, dCornRad) Dim sDraw As String = Draw EgtSetCurrentContext(IniFile.m_ProjectSceneContext) ' Salvo parametri originali dell'utensile corrente Dim sHeadNameOri As String = "" : EgtTdbGetCurrToolParam(MCH_TP.HEAD, sHeadNameOri) Dim nExitOri As Integer = 0 : EgtTdbGetCurrToolParam(MCH_TP.EXIT_, nExitOri) Dim nTypeOri As Integer = 0 : EgtTdbGetCurrToolParam(MCH_TP.TYPE, nTypeOri) Dim dTotLenOri As Double = 0 : EgtTdbGetCurrToolParam(MCH_TP.TOTLEN, dTotLenOri) Dim dLenOri As Double = 0 : EgtTdbGetCurrToolParam(MCH_TP.LEN, dLenOri) Dim dTotDiamOri As Double = 0 : EgtTdbGetCurrToolParam(MCH_TP.TOTDIAM, dTotDiamOri) Dim dDiamOri As Double = 0 : EgtTdbGetCurrToolParam(MCH_TP.DIAM, dDiamOri) Dim dThickOri As Double = 0 : EgtTdbGetCurrToolParam(MCH_TP.THICK, dThickOri) Dim dMaxMatOri As Double = 0 : EgtTdbGetCurrToolParam(MCH_TP.MAXMAT, dMaxMatOri) Dim dSideAngOri As Double = 0 : EgtTdbGetCurrToolParam(MCH_TP.SIDEANG, dSideAngOri) Dim dCornRadOri As Double = 0 : EgtTdbGetCurrToolParam(MCH_TP.CORNRAD, dCornRadOri) Dim sDrawOri As String = "" : EgtTdbGetCurrToolParam(MCH_TP.DRAW, sDrawOri) ' Imposto parametri correnti all'utensile corrente EgtTdbSetCurrToolParam(MCH_TP.HEAD, sHeadName) EgtTdbSetCurrToolParam(MCH_TP.EXIT_, nExit) EgtTdbSetCurrToolParam(MCH_TP.TYPE, nType) EgtTdbSetCurrToolParam(MCH_TP.TOTLEN, dTotLen) EgtTdbSetCurrToolParam(MCH_TP.LEN, dLen) EgtTdbSetCurrToolParam(MCH_TP.TOTDIAM, dTotDiam) EgtTdbSetCurrToolParam(MCH_TP.DIAM, dDiam) EgtTdbSetCurrToolParam(MCH_TP.THICK, dThick) EgtTdbSetCurrToolParam(MCH_TP.MAXMAT, dMaxMat) EgtTdbSetCurrToolParam(MCH_TP.SIDEANG, dSideAng) EgtTdbSetCurrToolParam(MCH_TP.CORNRAD, dCornRad) EgtTdbSetCurrToolParam(MCH_TP.DRAW, sDraw) ' Creo il disegno m_nDrawingError = EgtTdbCurrToolDraw(IniFile.m_ProjectSceneContext, IniFile.m_ToolsDbSceneContext) EgtSetCurrentContext(IniFile.m_ProjectSceneContext) ' Ripristino i valori originali dell'utensile corrente EgtTdbSetCurrToolParam(MCH_TP.HEAD, sHeadNameOri) EgtTdbSetCurrToolParam(MCH_TP.EXIT_, nExitOri) EgtTdbSetCurrToolParam(MCH_TP.TYPE, nTypeOri) EgtTdbSetCurrToolParam(MCH_TP.TOTLEN, dTotLenOri) EgtTdbSetCurrToolParam(MCH_TP.LEN, dLenOri) EgtTdbSetCurrToolParam(MCH_TP.TOTDIAM, dTotDiamOri) EgtTdbSetCurrToolParam(MCH_TP.DIAM, dDiamOri) EgtTdbSetCurrToolParam(MCH_TP.THICK, dThickOri) EgtTdbSetCurrToolParam(MCH_TP.MAXMAT, dMaxMatOri) EgtTdbSetCurrToolParam(MCH_TP.SIDEANG, dSideAngOri) EgtTdbSetCurrToolParam(MCH_TP.CORNRAD, dCornRadOri) EgtTdbSetCurrToolParam(MCH_TP.DRAW, sDrawOri) Return (m_nDrawingError = 0) End Function #End Region ' ToolSceneUpdate #Region "Validation" Private m_NameError As String Public ReadOnly Property NameErrorMsg As String Get Return m_NameError End Get End Property Private m_SpeedError As String Public ReadOnly Property SpeedErrorMsg As String Get Return m_SpeedError End Get End Property Private m_TotDiamError As String Public ReadOnly Property TotDiamErrorMsg As String Get Return m_TotDiamError End Get End Property Private m_DiamError As String Public ReadOnly Property DiamErrorMsg As String Get Return m_DiamError End Get End Property Private m_CornRadError As String Public ReadOnly Property CornRadErrorMsg As String Get Return m_CornRadError End Get End Property Private m_TotLenError As String Public ReadOnly Property TotLenErrorMsg As String Get Return m_TotLenError End Get End Property Private m_LenError As String Public ReadOnly Property LenErrorMsg As String Get Return m_LenError End Get End Property Private m_MaxMatError As String Public ReadOnly Property MaxMatErrorMsg As String Get Return m_MaxMatError End Get End Property Private m_ThickError As String Public ReadOnly Property ThickErrorMsg As String Get Return m_ThickError End Get End Property Private m_DrawError As String Public ReadOnly Property DrawErrorMsg As String Get Return m_DrawError End Get End Property Private m_SelectedHeadError As String Public ReadOnly Property SelectedHeadErrorMsg As String Get Return m_SelectedHeadError End Get End Property Private m_SelectedExitError As String Public ReadOnly Property SelectedExitErrorMsg As String Get Return m_SelectedExitError End Get End Property ' Funzione che verifica se una proprietà è valida e attiva/disattiva di conseguenza lista e bottoni Private Sub ValidateProperty(propertyName As String) If Not GetValidationError(propertyName) Then m_delErrorOnTool(True) m_delIsEnabledBtns(False, False, True) Else m_delErrorOnTool(Not IsValid) m_delIsEnabledBtns(IsValid And Not IsModified, IsValid, True) End If NotifyPropertyChanged(propertyName) End Sub Private Function GetValidationError(propertyName As String) As Boolean Dim bOk As Boolean = True Select Case propertyName Case "NamePar" bOk = Me.ValidateName() Case "Speed" bOk = Me.ValidateSpeed() Case "TotDiam" bOk = Me.ValidateTotDiam() Case "CornRad" bOk = Me.ValidateCornRad() Case "Diam" bOk = Me.ValidateDiam() Case "TotLen" bOk = Me.ValidateTotLen() Case "Len" bOk = Me.ValidateLen() Case "MaxMat" bOk = Me.ValidateMaxMat() Case "Thick" bOk = Me.ValidateThick() Case "Draw" bOk = Me.ValidateDraw() Case "SelectedHead" bOk = Me.ValidateSelectedHead() Case "SelectedExit" bOk = Me.ValidateSelectedExit() End Select Return bOk End Function Private Function GetErrorString(propertyName As String) As String Select Case propertyName Case "NamePar" Return m_NameError Case "Speed" Return m_SpeedError Case "TotDiam" Return m_TotDiamError Case "CornRad" Return m_CornRadError Case "Diam" Return m_DiamError Case "TotLen" Return m_TotLenError Case "Len" Return m_LenError Case "MaxMat" Return m_MaxMatError Case "Thick" Return m_ThickError Case "Draw" Return m_DrawError Case "SelectedHead" Return m_SelectedHeadError Case "SelectedExit" Return m_SelectedExitError End Select Return String.Empty End Function ''' ''' Returns true if this object has no validation errors. ''' Public ReadOnly Property IsValid() As Boolean Get For Each [property] As String In ValidatedProperties If Not String.IsNullOrEmpty(GetErrorString([property])) Then Return False End If Next [property] Return True End Get End Property Public ReadOnly Property IsModified() As Boolean Get Return m_IsModifiedCorr OrElse m_IsModifiedSelectedExit OrElse m_IsModifiedCornRad OrElse m_IsModifiedDiam OrElse m_IsModifiedTotDiam OrElse m_IsModifiedFeed OrElse m_IsModifiedEndFeed OrElse m_IsModifiedStartFeed OrElse m_IsModifiedTipFeed OrElse m_IsModifiedLen OrElse m_IsModifiedTotLen OrElse m_IsModifiedMaxMat OrElse m_IsModifiedLonOffset OrElse m_IsModifiedRadOffset OrElse m_IsModifiedSpeed OrElse m_IsModifiedSideAng OrElse m_IsModifiedMaxSpeed OrElse m_IsModifiedThick OrElse m_IsModifiedMaxAbsorption OrElse m_IsModifiedMinFeed OrElse m_IsModifiedDraw OrElse m_IsModifiedSelectedHead OrElse m_IsModifiedName OrElse m_IsModifiedUserNotes OrElse m_IsModifiedSelectedTcPos End Get End Property Public Sub IsModifiedReset() m_IsModifiedCorr = False m_IsModifiedSelectedExit = False m_IsModifiedCornRad = False m_IsModifiedDiam = False m_IsModifiedTotDiam = False m_IsModifiedFeed = False m_IsModifiedEndFeed = False m_IsModifiedStartFeed = False m_IsModifiedTipFeed = False m_IsModifiedLen = False m_IsModifiedTotLen = False m_IsModifiedMaxMat = False m_IsModifiedLonOffset = False m_IsModifiedRadOffset = False m_IsModifiedSpeed = False m_IsModifiedSideAng = False m_IsModifiedMaxSpeed = False m_IsModifiedThick = False m_IsModifiedMaxAbsorption = False m_IsModifiedMinFeed = False m_IsModifiedDraw = False m_IsModifiedSelectedHead = False m_IsModifiedName = False m_IsModifiedUserNotes = False m_IsModifiedSelectedTcPos = False End Sub Private Shared ReadOnly ValidatedProperties() As String = {"Draw", "TotDiam", "CornRad", "Diam", "TotLen", "Len", "MaxMat", "Thick", "Speed", "NamePar", "SelectedHead", "SelectedExit"} Private Function ValidateName() As Boolean m_NameError = String.Empty Select Case nErrorToolName Case 1 m_NameError = EgtMsg(MSG_MACHININGSERRORS + 2) Case 2 m_NameError = EgtMsg(MSG_MACHININGSERRORS + 3) End Select NotifyPropertyChanged("NameErrorMsg") If String.IsNullOrEmpty(m_NameError) Then Return True Else Return False End If End Function Private Function ValidateSpeed() As Boolean m_SpeedError = String.Empty If Not IsNothing(m_Speed) And Not IsNothing(m_MaxSpeed) Then Dim dSpeed As Double = 0 StringToDouble(m_Speed, dSpeed) Dim dMaxSpeed As Double = 0 StringToDouble(m_MaxSpeed, dMaxSpeed) If Math.Abs(dSpeed) > dMaxSpeed + EPS_ZERO Then m_SpeedError = EgtMsg(MSG_TOOLSERRORS + 11) End If End If NotifyPropertyChanged("SpeedErrorMsg") If String.IsNullOrEmpty(m_SpeedError) Then Return True Else Return False End If End Function Private Function ValidateTotDiam() As Boolean m_TotDiamError = String.Empty If Not IsNothing(m_TotDiam) Then Dim dTotDiam As Double = 0 StringToLen(m_TotDiam, dTotDiam) If dTotDiam < EPS_SMALL Then m_TotDiamError = EgtMsg(MSG_TOOLSERRORS + 20) End If End If NotifyPropertyChanged("TotDiamErrorMsg") If String.IsNullOrEmpty(m_TotDiamError) Then Return True Else Return False End If End Function Private Function ValidateCornRad() As Boolean m_CornRadError = String.Empty If Not IsNothing(m_CornRad) And Not IsNothing(m_Thick) Then Dim dCornRad As Double = 0 StringToLen(m_CornRad, dCornRad) Dim dThick As Double = 0 StringToLen(m_Thick, dThick) If (m_Type = MCH_TY.SAW_FLAT Or m_Type = MCH_TY.SAW_STD) And dCornRad > 0.5 * dThick Then m_CornRadError = EgtMsg(MSG_TOOLSERRORS + 42) End If End If NotifyPropertyChanged("CornRadErrorMsg") Return String.IsNullOrEmpty(m_CornRadError) End Function Private Function ValidateDiam() As Boolean m_DiamError = String.Empty If Not IsNothing(m_Diam) Then Dim dDiam As Double = 0 StringToLen(m_Diam, dDiam) If dDiam < -EPS_SMALL Then m_DiamError = EgtMsg(MSG_TOOLSERRORS + 9) End If If Not IsNothing(m_TotDiam) Then Dim dTotDiam As Double = 0 StringToLen(m_TotDiam, dTotDiam) If dDiam > dTotDiam + EPS_SMALL Then m_DiamError = EgtMsg(MSG_TOOLSERRORS + 18) End If End If End If NotifyPropertyChanged("DiamErrorMsg") If String.IsNullOrEmpty(m_DiamError) Then Return True Else Return False End If End Function Private Function ValidateTotLen() As Boolean m_TotLenError = String.Empty If Not IsNothing(m_TotLen) Then Dim dTotLen As Double = 0 StringToLen(m_TotLen, dTotLen) If dTotLen < EPS_SMALL Then m_TotLenError = EgtMsg(MSG_TOOLSERRORS + 15) End If End If NotifyPropertyChanged("TotLenErrorMsg") If String.IsNullOrEmpty(m_TotLenError) Then Return True Else Return False End If End Function Private Function ValidateLen() As Boolean m_LenError = String.Empty If Not IsNothing(m_Len) Then Dim dLen As Double = 0 StringToLen(m_Len, dLen) If dLen < EPS_SMALL Then m_LenError = EgtMsg(MSG_TOOLSERRORS + 10) End If If Not IsNothing(m_TotLen) Then Dim dTotLen As Double = 0 StringToLen(m_TotLen, dTotLen) If dLen > dTotLen + EPS_SMALL Then m_LenError = EgtMsg(MSG_TOOLSERRORS + 13) End If End If End If NotifyPropertyChanged("LenErrorMsg") If String.IsNullOrEmpty(m_LenError) Then Return True Else Return False End If End Function Private Function ValidateMaxMat() As Boolean m_MaxMatError = String.Empty If Not IsNothing( m_MaxMat) Then Dim dMaxMat As Double = 0 StringToLen(m_MaxMat, dMaxMat) ' Non ammesso valore negativo If dMaxMat < EPS_SMALL Then m_MaxMatError = EgtMsg(MSG_TOOLSERRORS + 6) End If ' Per lame If ( Type And MCH_TF.SAWBLADE) <> 0 Then If Not IsNothing(m_Diam) Then Dim dDiam As Double = 0 StringToLen(m_Diam, dDiam) If dMaxMat > ( 0.35 * dDiam) + EPS_SMALL Then m_MaxMatError = EgtMsg(MSG_TOOLSERRORS + 17) End If End If ' Per getto d'acqua ElseIf ( Type And MCH_TF.WATERJET) <> 0 Then ' Non devo fare controlli ' Per tutti gli altri Else If Not IsNothing(m_Len) Then Dim dLen As Double = 0 StringToLen(m_Len, dLen) If dMaxMat > dLen + EPS_SMALL Then m_MaxMatError = EgtMsg(MSG_TOOLSERRORS + 7) End If End If End If End If NotifyPropertyChanged( "MaxMatErrorMsg") Return String.IsNullOrEmpty( m_MaxMatError) End Function Private Function ValidateThick() As Boolean m_ThickError = String.Empty If Not IsNothing(m_Thick) Then Dim dThick As Double = 0 StringToLen(m_Thick, dThick) If (m_Type = MCH_TY.SAW_FLAT Or m_Type = MCH_TY.SAW_STD Or m_Type = MCH_TY.MORTISE_STD) And dThick < EPS_SMALL Then m_ThickError = EgtMsg(MSG_TOOLSERRORS + 8) End If End If NotifyPropertyChanged("ThickErrorMsg") If String.IsNullOrEmpty(m_ThickError) Then Return True Else Return False End If End Function Private Function ValidateDraw() As Boolean m_DrawError = String.Empty If m_nDrawingError = 12 Then m_DrawError = EgtMsg(MSG_TOOLSERRORS + 21) ' Lunghezza troppo piccola con il portautensile ElseIf m_nDrawingError = 13 Then m_DrawError = EgtMsg(MSG_TOOLSERRORS + 31) ' Lo Spessore deve essere differente da 0 ElseIf m_nDrawingError = 14 Then m_DrawError = EgtMsg(MSG_TOOLSERRORS + 32) ' L'Angolo di Lato deve essere minore di 90° ElseIf m_nDrawingError = 15 Then m_DrawError = EgtMsg(MSG_TOOLSERRORS + 33) ' L'Angolo di Lato deve essere maggiore di -90° ElseIf m_nDrawingError = 16 Then m_DrawError = EgtMsg(MSG_TOOLSERRORS + 35) ' Raggio Corner ha un valore troppo grande ElseIf m_nDrawingError = 17 Then m_DrawError = EgtMsg(MSG_TOOLSERRORS + 36) ' Lo Spessore ha un valore troppo piccolo rispetto al Raggio Corne ElseIf m_nDrawingError = 18 Then m_DrawError = EgtMsg(MSG_TOOLSERRORS + 37) ' Il diametro risultante supera il Diametro Totale ElseIf m_nDrawingError = 19 Then m_DrawError = EgtMsg(MSG_TOOLSERRORS + 38) ' Il diametro risultante è minore di 0 ElseIf m_nDrawingError = 20 Then m_DrawError = EgtMsg(MSG_TOOLSERRORS + 39) ' Il diametro stelo risultante è minore o uguale a 0 ElseIf m_nDrawingError = 21 Then m_DrawError = EgtMsg(MSG_TOOLSERRORS + 40) ' Il Massimo Materiale deve essere più grande del Raggio Corner ElseIf m_nDrawingError = 22 Then m_DrawError = EgtMsg(MSG_TOOLSERRORS + 34) ' La Lunghezza Totale deve essere maggiore di Lunghezza + Spessore ElseIf m_nDrawingError = 997 Then m_DrawError = EgtMsg(MSG_TOOLSERRORS + 3) ' Il file non esiste o non è Nge ElseIf m_nDrawingError = 998 Then m_DrawError = EgtMsg(MSG_TOOLSERRORS + 4) ' Non esiste il ToolMaker per questo tipo di utensile ElseIf m_nDrawingError <> 0 Then m_DrawError = EgtMsg(MSG_TOOLSERRORS + 5) ' Impossibile creare l'utensile con questi parametri End If NotifyPropertyChanged("DrawErrorMsg") Return String.IsNullOrEmpty(m_DrawError) End Function Private Function ValidateSelectedHead() As Boolean m_SelectedHeadError = String.Empty If IsNothing(m_SelectedHead) Then m_SelectedHeadError = EgtMsg(MSG_TOOLSERRORS + 27) Else If Not IsNothing(m_HeadList) Then If Not m_HeadList.Contains(m_SelectedHead) Then m_SelectedHeadError = EgtMsg(MSG_TOOLSERRORS + 27) End If End If End If NotifyPropertyChanged("SelectedHeadErrorMsg") If String.IsNullOrEmpty(m_SelectedHeadError) Then Return True Else Return False End If End Function Private Function ValidateSelectedExit() As Boolean m_SelectedExitError = String.Empty If IsNothing(m_SelectedExit) Then m_SelectedExitError = EgtMsg(MSG_TOOLSERRORS + 28) Else If Not IsNothing(m_ExitList) Then If Not m_ExitList.Contains(m_SelectedExit) Then m_SelectedExitError = EgtMsg(MSG_TOOLSERRORS + 28) End If End If End If NotifyPropertyChanged("SelectedExitErrorMsg") If String.IsNullOrEmpty(m_SelectedExitError) Then Return True Else Return False End If End Function #End Region ' Validation #Region "COMMANDS" #Region "OpenDrawFileCommand" ''' ''' Returns a command that create a new tool. ''' Public ReadOnly Property OpenDrawFileCommand As ICommand Get If m_cmdOpenDrawFile Is Nothing Then m_cmdOpenDrawFile = New Command(AddressOf OpenDrawFile) End If Return m_cmdOpenDrawFile End Get End Property ''' ''' Creata the new tool. This method is invoked by the NewCommand. ''' Public Sub OpenDrawFile(ByVal param As Object) Dim OpenFileDialog As New EgtWPFLib5.EgtOpenFileDialog OpenFileDialog.Title = "Open draw file" OpenFileDialog.Filter = "*.nge" OpenFileDialog.FileNameFilter = AddressOf FilterFileName OpenFileDialog.Directory = IniFile.m_sCurrMachToolsDirPath OpenFileDialog.FileName = m_Draw If OpenFileDialog.EgtShowDialog <> True Then Return End If Draw = Path.GetFileName(OpenFileDialog.FileName) UpdateSceneToolDraw() End Sub Private Function FilterFileName(sPath As String) As Boolean Dim FileName As String = Path.GetFileNameWithoutExtension(sPath) If Not IsUUID(FileName) Then Return True End If Return False End Function #End Region ' OpenDrawFileCommand #Region "AutoDrawCommand" ''' ''' Returns a command that create a new tool. ''' Public ReadOnly Property AutoDrawCommand As ICommand Get If m_cmdAutoDraw Is Nothing Then m_cmdAutoDraw = New Command(AddressOf AutoDraw) End If Return m_cmdAutoDraw End Get End Property ''' ''' Creata the new tool. This method is invoked by the NewCommand. ''' Public Sub AutoDraw(ByVal param As Object) Draw = m_Uuid & ".nge" UpdateSceneToolDraw() End Sub #End Region ' AutoDrawCommand #End Region ' Commands End Class Public Class HeadItem Private m_HName As String Public ReadOnly Property HName As String Get Return m_HName End Get End Property Private m_HText As String Public ReadOnly Property HText As String Get Return m_HText End Get End Property Sub New(sHName As String, sHText As String) m_HName = sHName m_HText = sHText End Sub End Class ''' ''' Class that represent a Converter that use tool type and param type, to set the visibility state of the param type. ''' Public Class ToolParamVisibilityConverter Implements IValueConverter Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert Select Case CInt(value) Case MCH_TY.NONE Return Visibility.Hidden Case MCH_TY.DRILL_STD Return TMDbParamVisibility.Drill_Std(CInt(parameter)) Case MCH_TY.DRILL_LONG Return TMDbParamVisibility.Drill_Long(CInt(parameter)) Case MCH_TY.SAW_STD Return TMDbParamVisibility.Saw_Std(CInt(parameter)) Case MCH_TY.SAW_FLAT Return TMDbParamVisibility.Saw_Flat(CInt(parameter)) Case MCH_TY.MILL_STD Return TMDbParamVisibility.Mill_Std(CInt(parameter)) Case MCH_TY.MILL_NOTIP Return TMDbParamVisibility.Mill_NoTip(CInt(parameter)) Case MCH_TY.MORTISE_STD Return TMDbParamVisibility.Mortise_Std(CInt(parameter)) Case MCH_TY.CHISEL_STD Return TMDbParamVisibility.Chisel_Std(CInt(parameter)) Case MCH_TY.COMPO Return TMDbParamVisibility.Compo(CInt(parameter)) Case MCH_TY.WATERJET Return TMDbParamVisibility.WaterJet(CInt(parameter)) Case Else Return Visibility.Hidden End Select End Function Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack Throw New NotImplementedException End Function End Class ''' ''' Class that represent a Converter that convert UUID to ***** in Draw param ''' Public Class ToolDrawUUIDConverter Implements IValueConverter Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert If Not IsNothing(value) Then If IsUUID(Path.GetFileNameWithoutExtension(value.ToString)) Then Return ToolDrawUUIDName Else Return value.ToString End If Else Return Nothing End If End Function Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack Return value.ToString End Function End Class ''' ''' Class that represent a Converter that use the selected item of ToolsTreeView, to set the visibility state of the error message. ''' Public Class ErrorVisibilityConverter Implements IValueConverter Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert If String.IsNullOrEmpty(CStr(value)) Then Return Visibility.Collapsed Else Return Visibility.Visible End If End Function Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack Throw New NotImplementedException End Function End Class