4e3aaf96fe
- corretto problema in DB utensili con attivazione quando si dà nuovo nome ad utensile appena prima di attivarlo.
2080 lines
77 KiB
VB.net
2080 lines
77 KiB
VB.net
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
|
|
''' <summary>
|
|
''' Property that determines the tool type of the family
|
|
''' </summary>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Property that determines if the Tool is selected or not
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Corrector
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Exit
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Type
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Coolant
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Corner Radius
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Diameter
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Total Diameter
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Feed
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the End Feed
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Start Feed
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Tip Feed
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Len
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Total Len
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Max Material
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Lon Offset
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Rad Offset
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Speed
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Side Angle
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Max Speed
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Thick
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Max Absorption
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Min Feed
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Draw
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Head
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Name
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the User Notes
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Tc Pos
|
|
''' </summary>
|
|
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
|
|
''' <summary>
|
|
''' Property that read and write to the tool's database the Uuid
|
|
''' </summary>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Returns true if this object has no validation errors.
|
|
''' </summary>
|
|
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"
|
|
|
|
''' <summary>
|
|
''' Returns a command that create a new tool.
|
|
''' </summary>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Creata the new tool. This method is invoked by the NewCommand.
|
|
''' </summary>
|
|
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"
|
|
|
|
''' <summary>
|
|
''' Returns a command that create a new tool.
|
|
''' </summary>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Creata the new tool. This method is invoked by the NewCommand.
|
|
''' </summary>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Class that represent a Converter that use tool type and param type, to set the visibility state of the param type.
|
|
''' </summary>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Class that represent a Converter that convert UUID to ***** in Draw param
|
|
''' </summary>
|
|
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
|
|
|
|
''' <summary>
|
|
''' Class that represent a Converter that use the selected item of ToolsTreeView, to set the visibility state of the error message.
|
|
''' </summary>
|
|
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
|