Imports System.Windows.Forms.Integration
Imports System.Collections.ObjectModel
Imports System.Reflection
Imports System.IO
Imports EgtUILib
Imports EgtWPFLib5
Namespace EgtCAM5
Public Class ToolsDbViewModel
Inherits TabViewModel
Friend Shared m_bActive As Boolean = False
Private m_Title As String
Public ReadOnly Property Title As String
Get
Return EgtMsg(MSG_MAINWINDOW + 3)
End Get
End Property
' Lista degli utensili
Private m_ToolsList As New ObservableCollection(Of FamilyToolTreeViewItem)
Public Property ToolsList As ObservableCollection(Of FamilyToolTreeViewItem)
Get
Return m_ToolsList
End Get
Set(value As ObservableCollection(Of FamilyToolTreeViewItem))
m_ToolsList = value
End Set
End Property
Private m_IsEnabledNewBtn As Boolean
Public ReadOnly Property IsEnabledNewBtn As Boolean
Get
Return m_IsEnabledNewBtn
End Get
End Property
Private m_IsEnabledSaveBtn As Boolean
Public ReadOnly Property IsEnabledSaveBtn As Boolean
Get
Return m_IsEnabledSaveBtn
End Get
End Property
Private m_IsEnabledRemoveBtn As Boolean
Public ReadOnly Property IsEnabledRemoveBtn As Boolean
Get
Return m_IsEnabledRemoveBtn
End Get
End Property
'PROJECT PAGE'S SCENE FIELDS AND PROPERTIES
' Reference to the ProjectScene
Private WithEvents m_ToolScene As New Scene
' Reference to the ProjectSceneHost
Private SceneHost As WindowsFormsHost
' Property used to bind the scene to the WindowsFormsHost in XAML
Private m_bfirst As Boolean = True
Public ReadOnly Property ToolSceneHost As WindowsFormsHost
Get
If m_bfirst Then
SceneHost = New WindowsFormsHost() With {.Child = m_ToolScene}
If Not m_ToolScene.Init() Then
EgtOutLog("Error in Tool scene creation")
'Application.Msn.NotifyColleagues(Application.CLOSEAPPLICATION)
End If
IniFile.m_ToolsDbSceneContext = m_ToolScene.GetCtx()
' inibisco selezione diretta da Scene
m_ToolScene.SetStatusNull()
'OnPropertyChanged("SelectedMachine")
m_bfirst = False
End If
Return SceneHost
End Get
End Property
' Definizione comandi
Private m_cmdNew As ICommand
Private m_cmdSave As ICommand
Private m_cmdRemove As ICommand
Private m_cmdReloadTool As ICommand
Private m_cmdCloseToolsDb As ICommand
#Region "MESSAGES"
'Definizione dei messaggi della pagina
Public ReadOnly Property CorrTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 51)
End Get
End Property
Public ReadOnly Property ExitParTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 52)
End Get
End Property
Public ReadOnly Property TypeTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 53)
End Get
End Property
Public ReadOnly Property CoolantTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 54)
End Get
End Property
Public ReadOnly Property CornRadTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 55)
End Get
End Property
Public ReadOnly Property DiamTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 56)
End Get
End Property
Public ReadOnly Property TotDiamTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 57)
End Get
End Property
Public ReadOnly Property FeedTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 58)
End Get
End Property
Public ReadOnly Property EndFeedTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 59)
End Get
End Property
Public ReadOnly Property StartFeedTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 60)
End Get
End Property
Public ReadOnly Property TipFeedTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 61)
End Get
End Property
Public ReadOnly Property LenTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 62)
End Get
End Property
Public ReadOnly Property TotLenTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 63)
End Get
End Property
Public ReadOnly Property MaxMatTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 64)
End Get
End Property
Public ReadOnly Property LonOffsetTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 65)
End Get
End Property
Public ReadOnly Property RadOffsetTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 66)
End Get
End Property
Public ReadOnly Property SpeedTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 67)
End Get
End Property
Public ReadOnly Property SideAngTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 68)
End Get
End Property
Public ReadOnly Property MaxSpeedTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 69)
End Get
End Property
Public ReadOnly Property ThickTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 70)
End Get
End Property
Public ReadOnly Property MaxAbsorptionTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 71)
End Get
End Property
Public ReadOnly Property MinFeedTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 72)
End Get
End Property
Public ReadOnly Property DrawTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 73)
End Get
End Property
Public ReadOnly Property HeadTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 74)
End Get
End Property
Public ReadOnly Property NameParTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 75)
End Get
End Property
Public ReadOnly Property UserNotesTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 76)
End Get
End Property
Public ReadOnly Property TcPosTxBl As String
Get
Return EgtMsg(MSG_TOOLSDBPAGE + 77)
End Get
End Property
#End Region
#Region "CONSTRUCTOR"
Sub New()
m_bActive = True
' leggo direttorio toolmakers
GetPrivateProfileString(S_MACH, K_TOOLMAKERSDIR, "", IniFile.m_sToolMakersDir)
' Passo all'item della lista il delegato alla funzuione che permette di cancellare una lavorazione
ToolTreeViewItem.m_delRemoveTool = AddressOf RemoveTool
' Passo all'item della lista il delegato alla funzuione che permette di disattivare la lista delle lavorazioni
ToolTreeViewItem.m_delErrorOnTool = AddressOf ErrorOnTool
' Passo all'item della lista il delegato alla funzuione che permette di disattivare la lista delle lavorazioni
ToolTreeViewItem.m_delIsEnabledBtns = AddressOf IsEnabledBtns
FamilyToolTreeViewItem.m_delIsEnabledBtns = AddressOf IsEnabledBtns
LoadSelectedMachineTools()
' carico lista teste
ToolTreeViewItem.m_HeadList.Clear()
Dim sHeads As String = String.Empty
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
If EgtGetAllHeadsNames(sHeads) Then
Dim sHeadList() As String = sHeads.Split(","c)
For HeadIndex = 0 To sHeadList.Count - 1
Dim sHText As String = String.Empty
EgtUILib.GetPrivateProfileString(S_HEADS, sHeadList(HeadIndex), "", sHText, IniFile.m_sCurrMachIniFilePath)
Dim sHTextMsg As String = String.Empty
If IsNumeric(sHText) Then
sHTextMsg = EgtMsg(CInt(sHText))
If sHTextMsg = ("Msg" & CInt(sHText)) Then
sHTextMsg = sHText
End If
Else
sHTextMsg = sHText
End If
sHTextMsg &= " (" & sHeadList(HeadIndex) & ")"
ToolTreeViewItem.m_HeadList.Add(New HeadItem(sHeadList(HeadIndex), sHTextMsg))
Next
Else
MessageBox.Show("Impossible loading Head list from machine!", "Error", MessageBoxButton.OK, MessageBoxImage.Error)
EgtOutLog("Error: Impossible loading Head list from machine!")
End If
' se carico Lua che contiene le funzioni di attrezzaggio
ToolTreeViewItem.m_OrigTcPosList.Clear()
If EgtLuaExecFile(IniFile.m_sCurrMachScriptsDirPath & "\" & SETUP_LUA) Then
' creo lista di tutti i TcPos
Dim nPosIndex As Integer = 1
Dim sTcPos As String = String.Empty
Dim nErr As Integer = 0
While nErr = 0
EgtLuaSetGlobIntVar("STU.INDEX", nPosIndex)
If Not EgtLuaCallFunction("STU.GetTcPosFromPos") Then Exit While
' Leggo variabili
EgtLuaGetGlobStringVar("STU.TCPOS", sTcPos)
If Not EgtLuaGetGlobIntVar("STU.ERR", nErr) Then nErr = 999
If nErr = 0 Then
ToolTreeViewItem.m_OrigTcPosList.Add(sTcPos)
End If
nPosIndex += 1
End While
' altrimenti
Else
MessageBox.Show(EgtMsg(MSG_TOOLSERRORS + 25), EgtMsg(MSG_TOOLSERRORS + 26), MessageBoxButton.OK, MessageBoxImage.Error)
EgtOutLog("Error: SetUp configuration file not found!")
End If
End Sub
#End Region ' Constructor
#Region "METHODS"
Private Sub IsEnabledBtns(bIsEnabledNewBtn As Boolean, bIsEnabledSaveBtn As Boolean, bIsEnabledDeleteBtn As Boolean)
m_IsEnabledNewBtn = bIsEnabledNewBtn
m_IsEnabledSaveBtn = bIsEnabledSaveBtn
m_IsEnabledRemoveBtn = bIsEnabledDeleteBtn
OnPropertyChanged("IsEnabledNewBtn")
OnPropertyChanged("IsEnabledSaveBtn")
OnPropertyChanged("IsEnabledRemoveBtn")
End Sub
' Quando chiamato, disattiva tutti gli item dell'albero o li riattiva a seconda che ci sia o meno un errore
Private Sub ErrorOnTool(bIsEnabled As Boolean)
For Each FamilyToolItem In ToolsList
FamilyToolItem.IsEnabled = Not bIsEnabled
Next
End Sub
'''
''' Method that search tools for the currently selected Machine and add it to the ToolsList.
'''
Private Sub LoadSelectedMachineTools()
Dim ActiveToolsFamilies() As ToolsFamily = MachineModel.ReadActiveToolsFamilies()
For Each ToolsFamily In ActiveToolsFamilies
Dim FamilyTreeView As New FamilyToolTreeViewItem(ToolsFamily.FamilyName, ToolsFamily.FamilyId)
ToolsList.Add(FamilyTreeView)
Dim nType As Integer = 0
Dim ToolName As String = String.Empty
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
If EgtTdbGetFirstTool(ToolsFamily.FamilyId, ToolName, nType) Then
FamilyTreeView.Items.Add(New ToolTreeViewItem(ToolName))
While EgtTdbGetNextTool(ToolsFamily.FamilyId, ToolName, nType)
FamilyTreeView.Items.Add(New ToolTreeViewItem(ToolName))
End While
End If
Next
' Se esiste almeno una famiglia di utensili, la seleziono
If ToolsList.Count > 0 Then
ToolsList(0).IsSelected = True
ToolsList(0).NotifyPropertyChanged("IsSelected")
End If
End Sub
#End Region ' Methods
#Region "COMMANDS"
#Region "NewCommand"
'''
''' Returns a command that create a new tool.
'''
Public ReadOnly Property NewCommand As ICommand
Get
If m_cmdNew Is Nothing Then
m_cmdNew = New RelayCommand(AddressOf NewPar)
End If
Return m_cmdNew
End Get
End Property
'''
''' Creata the new tool. This method is invoked by the NewCommand.
'''
Public Sub NewPar(ByVal param As Object)
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
' Verifico se sia selezionata una famiglia
Dim NewToolItem As ToolTreeViewItem
If TypeOf param Is FamilyToolTreeViewItem Then
Dim ToolFamily As FamilyToolTreeViewItem = DirectCast(param, FamilyToolTreeViewItem)
Dim NewName As String = ToolFamily.Name
EgtTdbGetToolNewName(NewName)
If EgtTdbAddTool(NewName, ToolFamily.ToolType) Then
NewToolItem = New ToolTreeViewItem(NewName)
ToolFamily.Items.Add(NewToolItem)
EgtTdbSaveCurrTool()
NewToolItem.NewTool = True
If Not ToolFamily.IsExpanded Then ToolFamily.IsExpanded = True
NewToolItem.IsSelected = True
NewToolItem.NotifyPropertyChanged("IsSelected")
End If
' Verifico se sia selezionato un utensile
ElseIf TypeOf param Is ToolTreeViewItem Then
Dim ToolCopied As ToolTreeViewItem = DirectCast(param, ToolTreeViewItem)
Dim NewName As String = ToolCopied.Name
EgtTdbGetToolNewName(NewName)
If EgtTdbCopyTool(ToolCopied.Name, NewName) Then
' Elimino disegno che non deve essere copiato
EgtTdbSetCurrToolParam(MCH_TP.DRAW, String.Empty)
Dim CurrType As Integer
EgtTdbGetCurrToolParam(MCH_TP.TYPE, CurrType)
For Each ToolFamily In ToolsList
If (ToolFamily.ToolType And CurrType) <> 0 Then
NewToolItem = New ToolTreeViewItem(NewName)
ToolFamily.Items.Add(NewToolItem)
EgtTdbSaveCurrTool()
NewToolItem.NewTool = True
' Reimposto l'utensile vecchio nel Db per deselezionarlo e fare le verifiche correttamente
EgtTdbSetCurrTool(ToolCopied.Name)
ToolCopied.IsSelected = False
ToolCopied.NotifyPropertyChanged("IsSelected")
NewToolItem.IsSelected = True
Exit For
End If
Next
End If
End If
End Sub
#End Region ' NewCommand
#Region "SaveCommand"
'''
''' Returns a command that save the current selected tool.
'''
Public ReadOnly Property SaveCommand() As ICommand
Get
If m_cmdSave Is Nothing Then
m_cmdSave = New RelayCommand(AddressOf Save)
End If
Return m_cmdSave
End Get
End Property
'''
''' Saves the current tool. This method is invoked by the SaveCommand.
'''
Public Sub Save(ByVal param As Object)
Dim CurrTool As ToolTreeViewItem = DirectCast(param, ToolTreeViewItem)
CurrTool.WriteToolParam()
CurrTool.m_Name = CurrTool.m_Name.Trim()
CurrTool.WriteToolName()
If IsUUID(Path.GetFileNameWithoutExtension(CurrTool.m_Draw)) Then
CurrTool.SaveToolDraw()
End If
EgtTdbSaveCurrTool()
CurrTool.NewTool = False
CurrTool.IsModifiedReset()
IsEnabledBtns(CurrTool.IsValid And Not CurrTool.IsModified, False, True)
End Sub
#End Region ' SaveCommand
#Region "RemoveCommand"
'''
''' Returns a command that remove the current selected tool.
'''
Public ReadOnly Property RemoveCommand() As ICommand
Get
If m_cmdRemove Is Nothing Then
m_cmdRemove = New RelayCommand(AddressOf Remove)
End If
Return m_cmdRemove
End Get
End Property
'''
''' Remove the current selected tools from Db and TreeView. This method is invoked by the RemoveCommand.
'''
Public Sub Remove(ByVal param As Object)
Dim ToolToRemove As ToolTreeViewItem = DirectCast(param, ToolTreeViewItem)
' Chiedo conferma cancellazione lavorazione
If MessageBox.Show(EgtMsg(MSG_TOOLSERRORS + 22) & " " & ToolToRemove.Name & EgtMsg(MSG_TOOLSERRORS + 23), EgtMsg(MSG_TOOLSERRORS + 24), MessageBoxButton.YesNo, MessageBoxImage.Question) <> MessageBoxResult.Yes Then
Return
End If
RemoveTool(ToolToRemove)
End Sub
Private Sub RemoveTool(ToolToRemove As ToolTreeViewItem)
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
' Cancello disegno dell'utensile
EraseToolDraw()
' Salvo il tipo di utensile per poterlo cancellare
Dim ToolType As Integer = ToolToRemove.Type
' Cancello l'utensile
Dim CurrToolOriginalName As String = String.Empty
EgtTdbGetToolFromUUID(ToolToRemove.Uuid, CurrToolOriginalName)
EgtTdbRemoveTool(CurrToolOriginalName)
' Rimuovo il nome dell'albero
For Each ToolFamily In ToolsList
If (ToolFamily.ToolType And ToolType) <> 0 Then
ToolFamily.Items.Remove(ToolToRemove)
End If
Next
ErrorOnTool(False)
End Sub
Private Function EraseToolDraw() As Boolean
' nome e direttorio del file da cancellare
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
Dim sDrawName As String = String.Empty
EgtTdbGetCurrToolParam(MCH_TP.DRAW, sDrawName)
Dim sPath As String = String.Empty
EgtTdbGetToolDir(sPath)
sPath = sPath & "\" & sDrawName
' se automatico ed esiste lo cancello
Try
If IsUUID(Path.GetFileNameWithoutExtension(sPath)) And
My.Computer.FileSystem.FileExists(sPath) Then
My.Computer.FileSystem.DeleteFile(sPath)
End If
Return True
Catch ex As Exception
Return False
End Try
End Function
#End Region ' RemoveCommand
#Region "ReloadToolCommand"
'''
''' Returns a command that reload the current selected tool.
'''
Public ReadOnly Property ReloadToolCommand() As ICommand
Get
If m_cmdReloadTool Is Nothing Then
m_cmdReloadTool = New RelayCommand(AddressOf ReloadTool)
End If
Return m_cmdReloadTool
End Get
End Property
'''
''' Reload the current selected tools. This method is invoked by the RemoveCommand.
'''
Public Sub ReloadTool(ByVal param As Object)
If TypeOf param Is FamilyToolTreeViewItem Then
Return
' Verifico se sia selezionato un utensile
ElseIf TypeOf param Is ToolTreeViewItem Then
Dim ToolToReload As ToolTreeViewItem = DirectCast(param, ToolTreeViewItem)
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
ToolToReload.ReadToolParam()
ToolToReload.ReadToolName()
ToolToReload.IsModifiedReset()
End If
End Sub
#End Region ' ReloadToolCommand
#Region "CloseToolDbCommand"
'''
''' Returns a command that remove the current selected machining.
'''
Public ReadOnly Property CloseToolsDbCommand() As ICommand
Get
If m_cmdCloseToolsDb Is Nothing Then
m_cmdCloseToolsDb = New RelayCommand(AddressOf CloseToolsDb)
End If
Return m_cmdCloseToolsDb
End Get
End Property
'''
''' Manage the MachiningDb closing. This method is invoked by the CloseMachiningDbCommand.
'''
Public Sub CloseToolsDb(param As Object)
m_bActive = False
' Imposto contesto di progetto
EgtSetCurrentContext(IniFile.m_ProjectSceneContext)
' Se selezionata una lavorazione, verifico salvataggio
If TypeOf param Is ToolTreeViewItem Then
Dim CurrTool As ToolTreeViewItem = DirectCast(param, ToolTreeViewItem)
If CurrTool.IsValid Then
CurrTool.WriteToolParam()
If EgtTdbIsCurrToolModified() Or CurrTool.m_IsModifiedName Or CurrTool.NewTool Then
Select Case MsgBox(EgtMsg(MSG_TOOLSERRORS), MsgBoxStyle.YesNo, EgtMsg(MSG_TOOLSERRORS + 1))
Case MsgBoxResult.Yes
CurrTool.NewTool = False
CurrTool.m_Name = CurrTool.m_Name.Trim()
CurrTool.WriteToolName()
EgtTdbSaveCurrTool()
Case MsgBoxResult.No
If CurrTool.NewTool Then
RemoveTool(CurrTool)
ElseIf CurrTool.m_IsModifiedName Then
Dim DbName As String = String.Empty
EgtTdbGetCurrToolParam(MCH_TP.NAME, DbName)
CurrTool.NamePar = DbName
End If
End Select
End If
Else
MessageBox.Show(EgtMsg(MSG_TOOLSERRORS + 29), EgtMsg(MSG_TOOLSERRORS + 26))
Return
End If
End If
' Salvataggio DB utensili
EgtTdbSave()
' Reset lua
EgtLuaResetGlobVar("STU")
' Chiusura finestra
ToolTreeViewItem.m_delRemoveTool = Nothing
ToolTreeViewItem.m_delErrorOnTool = Nothing
ToolTreeViewItem.m_delIsEnabledBtns = Nothing
FamilyToolTreeViewItem.m_delIsEnabledBtns = Nothing
For Each Window In Application.Current.Windows
If TypeOf Window Is ToolsDbView Then
Dim ToolsDbWindow As ToolsDbView = DirectCast(Window, ToolsDbView)
ToolsDbWindow.DataContext = Nothing
ToolsDbWindow.Close()
End If
Next
End Sub
#End Region ' CloseToolsDbCommand
#End Region ' Commands
End Class
End Namespace