Imports System.Collections.ObjectModel Imports OmagCUT.TreeViewItem Imports System.ComponentModel Imports EgtUILib Imports EgtWPFLib Public Class ToolsDbPageUC ' Riferimento alla MainWindow Private m_MainWindow As MainWindow = Application.Current.MainWindow ' Lista degli utensili Dim ToolsList As New ObservableCollection(Of CathegoryItem) ' Proprietà Private m_bFirst As Boolean = True ' Direttorio costruttori geometria utensili Private m_sToolMakersDir As String = String.Empty ' Abilitazioni visualizzazioni speciali Private m_bShowToolChanger As Boolean = True Private m_bShowHeadExit As Boolean = True ' Stringa identificativa variabile geometrica in modifica Private m_sCurrVar As String = String.Empty ' Parametri geometrici dell'utensile corrente Private m_nToolType As Integer = MCH_TY.NONE Private m_sToolName As String = String.Empty Private m_sToolHolder As String = String.Empty Private m_dToolLen As Double = 0 Private m_dToolDiam As Double = 0 Private m_dToolThick As Double = 0 Private m_dToolMaxMat As Double = 0 'Array che contengono i tipi di Coolant Dim ToolCoolant() As String Dim SawCoolant() As String 'Variabile che conserva l'utensile precedentemente selezionato usata nel caso si selezioni annulla quando si cambia utensile selezionato Private m_OldItem As Object ' Dichiarazione Scene Friend WithEvents ToolScene As New Scene Dim ToolSceneHost As New System.Windows.Forms.Integration.WindowsFormsHost Private Sub ToolsDbPage_Initialized(sender As Object, e As EventArgs) 'Assegnazione scena all'host e posizionamento nella ToolsDbPageGrid ToolSceneHost.Child = ToolScene ToolSceneHost.SetValue(Grid.ColumnProperty, 2) ToolSceneHost.SetValue(Grid.RowProperty, 0) Me.ToolsDbPageGrid.Children.Add(ToolSceneHost) ' Assegno la lista degli utensili come sorgente del treeview ToolTreeView.ItemsSource = ToolsList ' Imposto testo delle combobox da file dei messaggi ToolCoolant = {EgtMsg(MSG_COMBOBOXPARAM + 1), EgtMsg(MSG_COMBOBOXPARAM + 2), EgtMsg(MSG_COMBOBOXPARAM + 3), EgtMsg(MSG_COMBOBOXPARAM + 4)} SawCoolant = {EgtMsg(MSG_COMBOBOXPARAM + 1), EgtMsg(MSG_COMBOBOXPARAM + 3)} 'Imposto i messaggi letti dal file dei messaggi NewBtn.Content = EgtMsg(MSG_MACHINEPAGEUC + 15) SaveBtn.Content = EgtMsg(MSG_MACHINEPAGEUC + 17) RemoveBtn.Content = EgtMsg(MSG_MACHINEPAGEUC + 18) NameTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 1) TCPosTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 2) HeadTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 3) ExitTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 4) SpeedGpBx.Header = EgtMsg(MSG_TOOLSDBPAGEUC + 5) SpeedTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 6) MaxSpeedTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 7) FeedGpBx.Header = EgtMsg(MSG_TOOLSDBPAGEUC + 8) FeedTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 9) TipFeedTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 10) StartFeedTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 11) EndFeedTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 12) CoolantTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 13) CorrTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 14) OffsetGpBx.Header = EgtMsg(MSG_TOOLSDBPAGEUC + 15) LonOffsetTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 16) RadOffsetTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 17) MaxAbsorptionTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 18) MinFeedTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 19) MaxMatTxBl.Text = EgtMsg(MSG_TOOLSDBPAGEUC + 20) ' Associo TextBox e Label Dim TempLabel1 As New Label TempLabel1.Content = SpeedTxBl.Text SpeedTxBx.Tag = TempLabel1 Dim TempLabel2 As New Label TempLabel2.Content = MaxSpeedTxBl.Text MaxSpeedTxBx.Tag = TempLabel2 Dim TempLabel3 As New Label TempLabel3.Content = FeedTxBl.Text FeedTxBx.Tag = TempLabel3 Dim TempLabel4 As New Label TempLabel4.Content = TipFeedTxBl.Text TipFeedTxBx.Tag = TempLabel4 Dim TempLabel5 As New Label TempLabel5.Content = StartFeedTxBl.Text StartFeedTxBx.Tag = TempLabel5 Dim TempLabel6 As New Label TempLabel6.Content = EndFeedTxBl.Text EndFeedTxBx.Tag = TempLabel6 Dim TempLabel7 As New Label TempLabel7.Content = CorrTxBl.Text CorrTxBx.Tag = TempLabel7 Dim TempLabel8 As New Label TempLabel8.Content = LonOffsetTxBl.Text LonOffsetTxBx.Tag = TempLabel8 Dim TempLabel9 As New Label TempLabel9.Content = RadOffsetTxBl.Text RadOffsetTxBx.Tag = TempLabel9 Dim TempLabel10 As New Label TempLabel10.Content = MaxAbsorptionTxBl.Text MaxAbsorptionTxBx.Tag = TempLabel10 Dim TempLabel11 As New Label TempLabel11.Content = MinFeedTxBl.Text MinFeedTxBx.Tag = TempLabel11 Dim TempLabel12 As New Label TempLabel12.Content = MaxMatTxBl.Text MaxMatTxBx.Tag = TempLabel12 End Sub Private Sub ToolsDbPage_Loaded(sender As Object, e As RoutedEventArgs) If m_bFirst Then ' imposto colore di default Dim DefColor As New Color3d(0, 0, 0) GetPrivateProfileColor(S_GEOMDB, K_DEFAULTCOLOR, DefColor, m_MainWindow.GetIniFile()) ToolScene.SetDefaultMaterial(DefColor) ' imposto colori sfondo Dim BackTopColor As New Color3d(224, 224, 224) GetPrivateProfileColor(S_SCENE, K_BACKTOP, BackTopColor, m_MainWindow.GetIniFile()) Dim BackBotColor As New Color3d(BackTopColor) GetPrivateProfileColor(S_SCENE, K_BACKBOTTOM, BackBotColor, m_MainWindow.GetIniFile()) ToolScene.SetViewBackground(BackTopColor, BackBotColor) ' imposto colore di evidenziazione Dim MarkColor As New Color3d(255, 255, 0) GetPrivateProfileColor(S_SCENE, K_MARK, MarkColor, m_MainWindow.GetIniFile()) ToolScene.SetMarkMaterial(MarkColor) ' imposto colore per superfici selezionate Dim SelSurfColor As New Color3d(255, 255, 192) GetPrivateProfileColor(S_SCENE, K_SELSURF, SelSurfColor, m_MainWindow.GetIniFile()) ToolScene.SetSelSurfMaterial(SelSurfColor) ' imposto tipo e colore del rettangolo di zoom Dim bOutline As Boolean = True Dim ZwColor As New Color3d(0, 0, 0) GetPrivateProfileZoomWin(S_SCENE, K_ZOOMWIN, bOutline, ZwColor, m_MainWindow.GetIniFile()) ToolScene.SetZoomWinAttribs(bOutline, ZwColor) ' imposto colore della linea di distanza Dim DstLnColor As New Color3d(255, 0, 0) GetPrivateProfileColor(S_SCENE, K_DISTLINE, DstLnColor, m_MainWindow.GetIniFile()) ToolScene.SetDistLineMaterial(DstLnColor) ' imposto parametri OpenGL Dim nDriver As Integer = GetPrivateProfileInt(S_OPENGL, K_DRIVER, 3, m_MainWindow.GetIniFile()) Dim b2Buff As Boolean = (GetPrivateProfileInt(S_OPENGL, K_DOUBLEBUFFER, 1, m_MainWindow.GetIniFile()) <> 0) Dim nColorBits As Integer = GetPrivateProfileInt(S_OPENGL, K_COLORBITS, 32, m_MainWindow.GetIniFile()) Dim nDepthBits As Integer = GetPrivateProfileInt(S_OPENGL, K_DEPTHBITS, 32, m_MainWindow.GetIniFile()) ToolScene.SetViewAttributes(nDriver, b2Buff, nColorBits, nDepthBits) ' inizializzo la scena (DB geometrico + visualizzazione) ToolScene.Init() ' inibisco selezione diretta da Scene ToolScene.SetStatusNull() ' leggo direttorio toolmakers GetPrivateProfileString(S_MACH, K_TOOLMAKERSDIR, "", m_sToolMakersDir, m_MainWindow.GetIniFile()) ' leggo abilitazioni visualizzazione campi utensili m_bShowToolChanger = GetPrivateProfileInt(S_TOOLS, K_SHOWTOOLCHANGER, 1, m_MainWindow.GetMachIniFile()) <> 0 m_bShowHeadExit = GetPrivateProfileInt(S_TOOLS, K_SHOWHEADEXIT, 1, m_MainWindow.GetMachIniFile()) <> 0 ' Inizializzo le famiglie di utensili nell'albero EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) InitializeToolFamily(K_SAWBLADE, MCH_TF.SAWBLADE, EgtMsg(MSG_TOOLSDBPAGEUC + 31)) InitializeToolFamily(K_DRILLBIT, MCH_TF.DRILLBIT, EgtMsg(MSG_TOOLSDBPAGEUC + 32)) InitializeToolFamily(K_MILL, MCH_TF.MILL, EgtMsg(MSG_TOOLSDBPAGEUC + 33)) 'Sposto tutti i parametri in su di una riga se testa e uscita sono disattivati If Not m_bShowHeadExit Then MoveParam() End If m_bFirst = False Else EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) End If InitializeFirstSelectedItem() End Sub 'Funzione che permette l'inizializzazione di albero e parametri all'apertura della pagina ToolsDb Private Sub InitializeFirstSelectedItem() If ToolsList.Count > 0 Then For Each ToolFamily In ToolsList If ToolFamily.Items.Count > 0 Then ToolFamily.IsExpanded = True ToolFamily.Items(0).IsSelected = True EgtTdbSetCurrTool(ToolFamily.Items(0).Name) m_OldItem = ToolFamily.Items(0) GetToolParams() ViewToolParams() ViewToolDraw() Exit Sub End If Next ToolsList.Item(0).IsSelected = True HideToolParams() End If End Sub Private Sub MoveParam() SpeedGpBx.SetValue(Grid.RowProperty, 3) FeedGpBx.SetValue(Grid.RowProperty, 7) CoolantTxBl.SetValue(Grid.RowProperty, 13) CoolantCmBx.SetValue(Grid.RowProperty, 13) CorrTxBl.SetValue(Grid.RowProperty, 13) CorrTxBx.SetValue(Grid.RowProperty, 13) OffsetGpBx.SetValue(Grid.RowProperty, 16) AbsorptionBrd.SetValue(Grid.RowProperty, 23) MaxMatTxBl.SetValue(Grid.RowProperty, 20) MaxMatTxBx.SetValue(Grid.RowProperty, 20) End Sub Private Sub NewBtn_Click(sender As Object, e As RoutedEventArgs) Handles NewBtn.Click EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) If TypeOf ToolTreeView.SelectedItem Is CathegoryItem Then Dim SelectedCathegory As CathegoryItem = ToolTreeView.SelectedItem Dim NewName As String = SelectedCathegory.Name EgtTdbGetToolNewName(NewName) If EgtTdbAddTool(NewName, SelectedCathegory.nFType) Then For Each ToolFamily In ToolsList If ToolFamily.nFType = SelectedCathegory.nFType Then Dim NewToolItem As New CustomItem(NewName, SelectedCathegory.nFType) ToolFamily.Items.Add(NewToolItem) NewToolItem.IsSelected = True ToolFamily.IsExpanded = True m_OldItem = ToolTreeView.SelectedItem End If Next ' Imposto testa e uscita ' determino il tipo di utensile Dim nTemp As Integer EgtTdbGetCurrToolParam(MCH_TP.TYPE, nTemp) Dim bSaw As Boolean = ((nTemp And MCH_TF.SAWBLADE) <> 0) ' Per macchine con ToolChanger lame su H1.1 e altri utensili su H2.1 If m_bShowToolChanger Then EgtTdbSetCurrToolParam(MCH_TP.HEAD, If(bSaw, "H1", "H2")) EgtTdbSetCurrToolParam(MCH_TP.EXIT_, 1) ' Altrimenti lame su H1.1 e altri utensili su H1.2 Else EgtTdbSetCurrToolParam(MCH_TP.HEAD, "H1") EgtTdbSetCurrToolParam(MCH_TP.EXIT_, If(bSaw, 1, 2)) End If ' Per macchine senza ToolChanger, resetto la posizione su questo If Not m_bShowToolChanger Then EgtTdbSetCurrToolParam(MCH_TP.TCPOS, "") End If EgtTdbSaveCurrTool() GetToolParams() ViewToolParams() ViewToolDraw() End If ElseIf TypeOf ToolTreeView.SelectedItem Is CustomItem Then Dim SelectedCathegory As CustomItem = ToolTreeView.SelectedItem Dim NewName As String = SelectedCathegory.Name EgtTdbGetToolNewName(NewName) If EgtTdbCopyTool(SelectedCathegory.Name, NewName) Then Dim CurrType As Integer EgtTdbGetCurrToolParam(MCH_TP.TYPE, CurrType) For Each ToolFamily In ToolsList If (ToolFamily.nFType And CurrType) <> 0 Then Dim NewToolItem As New CustomItem(NewName, CurrType) ToolFamily.Items.Add(NewToolItem) NewToolItem.IsSelected = True GetToolParams() m_OldItem = ToolTreeView.SelectedItem End If Next End If End If End Sub Private Sub SaveBtn_Click(sender As Object, e As RoutedEventArgs) Handles SaveBtn.Click EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) SetToolParams() EgtTdbSaveCurrTool() SaveToolDraw() Dim CurrTool As CustomItem = TryCast(m_OldItem, CustomItem) If CurrTool IsNot Nothing Then CurrTool.Name = NameTxBx.Text End If End Sub Private Sub RemoveBtn_Click(sender As Object, e As RoutedEventArgs) Handles RemoveBtn.Click If TypeOf ToolTreeView.SelectedItem Is CustomItem Then Dim SelectedItem As CustomItem = ToolTreeView.SelectedItem EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) EgtTdbRemoveTool(SelectedItem.Name) For Each ToolFamily In ToolsList If (ToolFamily.nFType And SelectedItem.nType) <> 0 Then ToolFamily.Items.Remove(SelectedItem) If ToolFamily.Items.Count = 0 Then ToolFamily.IsSelected = True HideToolParams() HideToolDraw() Else ToolFamily.Items(0).IsSelected = True EgtTdbSetCurrTool(ToolFamily.Items(0).Name) m_OldItem = ToolFamily.Items(0) GetToolParams() ViewToolParams() ViewToolDraw() End If End If Next End If End Sub Private Sub OkBtn_Click(sender As Object, e As RoutedEventArgs) Handles OkBtn.Click ' Se necessario, chiedo se salvare l'utensile corrente If Not SaveCurrTool() Then Exit Sub End If ' Salvo il DB utensili EgtTdbSave() ' Esco dalla pagina m_MainWindow.m_MachinePageUC.MachinePageGrid.Children.Remove(m_MainWindow.m_MachinePageUC.m_ToolsDbPageUC) m_MainWindow.m_MachinePageUC.MachinePageGrid.Children.Add(m_MainWindow.m_MachinePageUC.m_AlarmsPageUC) m_MainWindow.m_MachinePageUC.m_ActiveMachinePage = MachinePageUC.MachinePages.Alarms m_MainWindow.m_MachinePageUC.ToolsDBBtn.IsChecked = False m_MainWindow.m_MachinePageUC.AlarmsBtn.IsChecked = True End Sub Friend Sub InitializeToolFamily(sFIniConst As String, nFType As Integer, sFName As String) If GetPrivateProfileInt(S_TOOLS, sFIniConst, 0, m_MainWindow.GetMachIniFile()) = 1 Then Dim ToolCathegory As New CathegoryItem(sFName, nFType) Dim nType As Integer = 0 Dim ToolName As String = String.Empty If EgtTdbGetFirstTool(nFType, ToolName, nType) Then ToolCathegory.Items.Add(New CustomItem(ToolName, nType)) While EgtTdbGetNextTool(nFType, ToolName, nType) ToolCathegory.Items.Add(New CustomItem(ToolName, nType)) End While End If ToolsList.Add(ToolCathegory) End If End Sub Private Sub GetToolParams() EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) EgtTdbGetCurrToolParam(MCH_TP.TYPE, m_nToolType) Dim ToolString As String = String.Empty Dim ToolInt As Integer = 0 Dim ToolDouble As Double = 0 EgtTdbGetCurrToolParam(MCH_TP.NAME, m_sToolName) NameTxBx.Text = m_sToolName EgtTdbGetCurrToolParam(MCH_TP.TCPOS, ToolString) TCPosTxBx.Text = ToolString EgtTdbGetCurrToolParam(MCH_TP.MAXMAT, ToolDouble) MaxMatTxBx.Text = LenToString(ToolDouble, 3) EgtTdbGetCurrToolParam(MCH_TP.LONOFFSET, ToolDouble) LonOffsetTxBx.Text = LenToString(ToolDouble, 3) EgtTdbGetCurrToolParam(MCH_TP.RADOFFSET, ToolDouble) RadOffsetTxBx.Text = LenToString(ToolDouble, 3) EgtTdbGetCurrToolParam(MCH_TP.COOLANT, ToolInt) Dim ToolType As Integer EgtTdbGetCurrToolParam(MCH_TP.TYPE, ToolType) If (ToolType And MCH_TF.SAWBLADE) <> 0 Then CoolantCmBx.ItemsSource = SawCoolant If ToolInt = 0 Then CoolantCmBx.SelectedIndex = 0 ElseIf ToolInt = 2 Then CoolantCmBx.SelectedIndex = 1 End If Else CoolantCmBx.ItemsSource = ToolCoolant CoolantCmBx.SelectedIndex = ToolInt End If EgtTdbGetCurrToolParam(MCH_TP.CORR, ToolInt) CorrTxBx.Text = ToolInt EgtTdbGetCurrToolParam(MCH_TP.MAXSPEED, ToolDouble) MaxSpeedTxBx.Text = DoubleToString(ToolDouble, 3) EgtTdbGetCurrToolParam(MCH_TP.SPEED, ToolDouble) SpeedTxBx.Text = DoubleToString(ToolDouble, 3) EgtTdbGetCurrToolParam(MCH_TP.FEED, ToolDouble) FeedTxBx.Text = LenToString(ToolDouble, 3) EgtTdbGetCurrToolParam(MCH_TP.TIPFEED, ToolDouble) TipFeedTxBx.Text = LenToString(ToolDouble, 3) EgtTdbGetCurrToolParam(MCH_TP.STARTFEED, ToolDouble) StartFeedTxBx.Text = LenToString(ToolDouble, 3) EgtTdbGetCurrToolParam(MCH_TP.ENDFEED, ToolDouble) EndFeedTxBx.Text = LenToString(ToolDouble, 3) EgtTdbGetCurrToolParam(MCH_TP.MAXABSORPTION, ToolDouble) MaxAbsorptionTxBx.Text = DoubleToString(ToolDouble, 3) EgtTdbGetCurrToolParam(MCH_TP.MINFEED, ToolDouble) MinFeedTxBx.Text = LenToString(ToolDouble, 3) EgtTdbGetCurrToolParam(MCH_TP.HEAD, ToolString) HeadTxBx.Text = ToolString EgtTdbGetCurrToolParam(MCH_TP.EXIT_, ToolInt) ExitTxBx.Text = ToolInt End Sub Friend Sub SetToolParams() EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) Dim dTemp As Double Dim nTemp As Integer EgtTdbSetCurrToolParam(MCH_TP.NAME, NameTxBx.Text) EgtTdbSetCurrToolParam(MCH_TP.TCPOS, TCPosTxBx.Text) If m_nToolType = MCH_TY.SAW_STD Then StringToLen(MaxMatTxBx.Text, dTemp) EgtTdbSetCurrToolParam(MCH_TP.MAXMAT, dTemp) End If If m_nToolType <> MCH_TY.DRILL_STD Then StringToLen(LonOffsetTxBx.Text, dTemp) EgtTdbSetCurrToolParam(MCH_TP.LONOFFSET, dTemp) StringToLen(RadOffsetTxBx.Text, dTemp) EgtTdbSetCurrToolParam(MCH_TP.RADOFFSET, dTemp) End If If m_nToolType = MCH_TY.SAW_STD Then If CoolantCmBx.SelectedIndex = 0 Then nTemp = 0 ElseIf CoolantCmBx.SelectedIndex = 1 Then nTemp = 2 End If Else nTemp = CoolantCmBx.SelectedIndex End If EgtTdbSetCurrToolParam(MCH_TP.COOLANT, nTemp) Int32.TryParse(CorrTxBx.Text, nTemp) EgtTdbSetCurrToolParam(MCH_TP.CORR, nTemp) StringToDouble(MaxSpeedTxBx.Text, dTemp) EgtTdbSetCurrToolParam(MCH_TP.MAXSPEED, dTemp) StringToDouble(SpeedTxBx.Text, dTemp) EgtTdbSetCurrToolParam(MCH_TP.SPEED, dTemp) StringToLen(FeedTxBx.Text, dTemp) EgtTdbSetCurrToolParam(MCH_TP.FEED, dTemp) StringToLen(TipFeedTxBx.Text, dTemp) EgtTdbSetCurrToolParam(MCH_TP.TIPFEED, dTemp) StringToLen(StartFeedTxBx.Text, dTemp) EgtTdbSetCurrToolParam(MCH_TP.STARTFEED, dTemp) StringToLen(EndFeedTxBx.Text, dTemp) EgtTdbSetCurrToolParam(MCH_TP.ENDFEED, dTemp) StringToDouble(MaxAbsorptionTxBx.Text, dTemp) EgtTdbSetCurrToolParam(MCH_TP.MAXABSORPTION, dTemp) StringToLen(MinFeedTxBx.Text, dTemp) EgtTdbSetCurrToolParam(MCH_TP.MINFEED, dTemp) EgtTdbSetCurrToolParam(MCH_TP.HEAD, HeadTxBx.Text) Int32.TryParse(ExitTxBx.Text, nTemp) EgtTdbSetCurrToolParam(MCH_TP.EXIT_, nTemp) End Sub Private Sub ViewToolParams() NameTxBl.Visibility = Windows.Visibility.Visible NameTxBx.Visibility = Windows.Visibility.Visible TCPosBrd.Visibility = If(m_bShowToolChanger, Windows.Visibility.Visible, Windows.Visibility.Hidden) HeadExitBrd.Visibility = If(m_bShowHeadExit, Windows.Visibility.Visible, Windows.Visibility.Hidden) SpeedGpBx.Visibility = Windows.Visibility.Visible FeedGpBx.Visibility = Windows.Visibility.Visible CoolantTxBl.Visibility = Windows.Visibility.Visible CoolantCmBx.Visibility = Windows.Visibility.Visible CorrTxBl.Visibility = Windows.Visibility.Visible CorrTxBx.Visibility = Windows.Visibility.Visible MaxMatTxBl.Visibility = If(m_nToolType = MCH_TY.SAW_STD, Windows.Visibility.Visible, Windows.Visibility.Hidden) MaxMatTxBx.Visibility = If(m_nToolType = MCH_TY.SAW_STD, Windows.Visibility.Visible, Windows.Visibility.Hidden) OffsetGpBx.Visibility = If(m_nToolType <> MCH_TY.DRILL_STD, Windows.Visibility.Visible, Windows.Visibility.Hidden) If m_nToolType = MCH_TY.DRILL_STD Then AbsorptionBrd.SetValue(Grid.RowProperty, 19) Else AbsorptionBrd.SetValue(Grid.RowProperty, 23) End If AbsorptionBrd.Visibility = Windows.Visibility.Visible End Sub Private Sub HideToolParams() NameTxBl.Visibility = Windows.Visibility.Hidden NameTxBx.Visibility = Windows.Visibility.Hidden TCPosBrd.Visibility = Windows.Visibility.Hidden HeadExitBrd.Visibility = Windows.Visibility.Hidden SpeedGpBx.Visibility = Windows.Visibility.Hidden FeedGpBx.Visibility = Windows.Visibility.Hidden CoolantTxBl.Visibility = Windows.Visibility.Hidden CoolantCmBx.Visibility = Windows.Visibility.Hidden CorrTxBl.Visibility = Windows.Visibility.Hidden CorrTxBx.Visibility = Windows.Visibility.Hidden MaxMatTxBl.Visibility = Windows.Visibility.Hidden MaxMatTxBx.Visibility = Windows.Visibility.Hidden OffsetGpBx.Visibility = Windows.Visibility.Hidden AbsorptionBrd.Visibility = Windows.Visibility.Hidden End Sub Private Sub ToolTreeView_PreviewMouseUp(sender As Object, e As MouseButtonEventArgs) Handles ToolTreeView.PreviewMouseUp ' Se necessario, chiedo se salvare l'utensile corrente If Not SaveCurrTool() Then Dim PreviousTool As CustomItem = m_OldItem PreviousTool.IsSelected = True Exit Sub End If ' Aggiorno If TypeOf ToolTreeView.SelectedItem Is CathegoryItem Then Dim SelectedCathegory As CathegoryItem = ToolTreeView.SelectedItem SelectedCathegory.IsExpanded = Not SelectedCathegory.IsExpanded HideToolParams() HideToolDraw() ElseIf TypeOf ToolTreeView.SelectedItem Is CustomItem Then Dim SelectedTool As CustomItem = ToolTreeView.SelectedItem EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) EgtTdbSetCurrTool(SelectedTool.Name) GetToolParams() ViewToolParams() ViewToolDraw() End If m_OldItem = ToolTreeView.SelectedItem End Sub Private Sub ViewToolDraw() ' Preparo dati per modello dell'utensile e lo creo If Not PrepareToolDraw() OrElse Not CreateToolDraw() Then EgtSetCurrentContext(ToolScene.GetCtx()) EgtNewFile() End If ' Aggiorno visualizzazione EgtSetCurrentContext(ToolScene.GetCtx()) EgtSetView(VT.TOP, False) EgtZoom(ZM.ALL) End Sub Private Sub HideToolDraw() EgtSetCurrentContext(ToolScene.GetCtx()) EgtNewFile() EgtDraw() End Sub Private Sub OnMyMouseDownScene(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles ToolScene.OnMouseDownScene ' Annullo nome variabile corrente m_sCurrVar = String.Empty ' Si può selezionare solo con il tasto sinistro e se stato NULL If e.Button <> Windows.Forms.MouseButtons.Left Or Not ToolScene.IsStatusNull() Then Return End If ' Verifico se selezionato testo di quota EgtSetObjFilterForSelect(False, False, False, False, True) Dim nSel As Integer EgtSelect(e.Location, Scene.DIM_SEL, Scene.DIM_SEL, nSel) Dim nId As Integer = EgtGetFirstObjInSelWin() While nId <> GDB_ID.NULL ' Recupero eventuale info di variabile Dim sVar As String = String.Empty If EgtGetInfo(nId, "Var", sVar) Then m_sCurrVar = sVar EgtSelectObj(nId) EgtDraw() Exit While End If nId = EgtGetNextObjInSelWin() End While ' Se non modifica variabile If String.IsNullOrWhiteSpace(m_sCurrVar) Then Return End If ' Recupero il valore della variabile Dim dVal As Double If Not GetVariableValue(dVal) Then Return End If ' Recupero indice messaggio titolo per calcolatrice Dim nMsg As Integer = 0 Select Case GetVariableType() Case MCH_TP.LEN nMsg = MSG_TOOLSDBPAGEUC + 21 ' Lunghezza Case MCH_TP.DIAM nMsg = MSG_TOOLSDBPAGEUC + 22 ' Diametro Case MCH_TP.THICK nMsg = MSG_TOOLSDBPAGEUC + 23 ' Spessore Case MCH_TP.MAXMAT nMsg = MSG_TOOLSDBPAGEUC + 24 ' Tagliente End Select ' Predispongo calcolatrice (converto sempre in UIUnits perchè tutte lunghezze) Dim EgtCalculator As New EgtCalculatorWD(m_MainWindow, EgtToUiUnits(dVal), 300, WidthType.PIXEL, 0, 0, EgtMsg(nMsg)) ' Se inserito valore valido e confermato If EgtCalculator.DialogResult Then RecreateToolDraw(EgtFromUiUnits(EgtCalculator.dResult)) End If ' Aggiorno visualizzazione EgtSetCurrentContext(ToolScene.GetCtx()) EgtDeselectAll() EgtSetView(VT.TOP, False) EgtZoom(ZM.ALL) End Sub Private Sub RecreateToolDraw(ByVal dVal As Double) ' Aggiorno dati utensile If Not UpdateCurrVariableValue(dVal) Then Return End If ' Ricreo utensile If CreateToolDraw() Then ' Aggiorno utensile nel DB con il valore modificato SetVariableValue(dVal) ' Ritorno al valore precedente Else RevertCurrVariableValue() CreateToolDraw() End If End Sub Private Function GetVariableValue(ByRef dVal As Double) As Boolean ' Recupero valore variabile EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) Return EgtTdbGetCurrToolParam(GetVariableType(), dVal) End Function Private Function SetVariableValue(ByVal dVal As Double) As Boolean ' Recupero tipo di variabile EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) Dim nType As Integer = GetVariableType() If m_nToolType = MCH_TY.DRILL_STD Then Select Case nType Case MCH_TP.LEN EgtTdbSetCurrToolParam(MCH_TP.TOTLEN, dVal) Case MCH_TP.DIAM EgtTdbSetCurrToolParam(MCH_TP.TOTDIAM, dVal) End Select ElseIf m_nToolType = MCH_TY.MILL_STD Then Select Case nType Case MCH_TP.LEN EgtTdbSetCurrToolParam(MCH_TP.TOTLEN, dVal) Case MCH_TP.DIAM EgtTdbSetCurrToolParam(MCH_TP.TOTDIAM, dVal) End Select End If Return EgtTdbSetCurrToolParam(nType, dVal) End Function Private Function UpdateCurrVariableValue(ByVal dVal As Double) As Boolean ' Assegno valore variabile corrente Select Case GetVariableType() Case MCH_TP.LEN m_dToolLen = dVal Case MCH_TP.DIAM m_dToolDiam = dVal Case MCH_TP.THICK m_dToolThick = dVal Case MCH_TP.MAXMAT m_dToolMaxMat = dVal Case Else Return False End Select Return True End Function Private Function RevertCurrVariableValue() As Boolean ' Assegno valore variabile corrente EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) Select Case GetVariableType() Case MCH_TP.LEN EgtTdbGetCurrToolParam(MCH_TP.LEN, m_dToolLen) Case MCH_TP.DIAM EgtTdbGetCurrToolParam(MCH_TP.DIAM, m_dToolDiam) Case MCH_TP.THICK EgtTdbGetCurrToolParam(MCH_TP.THICK, m_dToolThick) Case MCH_TP.MAXMAT EgtTdbGetCurrToolParam(MCH_TP.MAXMAT, m_dToolMaxMat) Case Else Return False End Select Return True End Function Private Function GetVariableType() As Integer Dim nType As Integer = MCH_TP.NONE If m_sCurrVar = "LEN" Then nType = MCH_TP.LEN ElseIf m_sCurrVar = "DIAM" Then nType = MCH_TP.DIAM ElseIf m_sCurrVar = "THICK" Then nType = MCH_TP.THICK ElseIf m_sCurrVar = "MAXMAT" Then nType = MCH_TP.MAXMAT End If Return nType End Function Private Function PrepareToolDraw() As Boolean Select Case m_nToolType Case MCH_TY.DRILL_STD ' assegno nome portautensile LoadToolHolder(K_DRILLHOLDER) ' assegno parametri geometrici EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) EgtTdbGetCurrToolParam(MCH_TP.LEN, m_dToolLen) If m_dToolLen < EPS_SMALL Then m_dToolLen = 120 End If EgtTdbGetCurrToolParam(MCH_TP.DIAM, m_dToolDiam) If m_dToolDiam < EPS_SMALL Then m_dToolDiam = 20 End If m_dToolThick = 0 EgtTdbGetCurrToolParam(MCH_TP.MAXMAT, m_dToolMaxMat) If m_dToolMaxMat < EPS_SMALL Then m_dToolMaxMat = 40 End If ' passo all'ambiente di disegno dell'utensile EgtSetCurrentContext(ToolScene.GetCtx()) ' carico funzioni di creazione utensile Return LoadToolMaker(K_DRILLMAKER) Case MCH_TY.SAW_STD ' assegno nome portautensile LoadToolHolder(K_SAWBLADEHOLDER) ' assegno parametri geometrici EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) EgtTdbGetCurrToolParam(MCH_TP.LEN, m_dToolLen) If m_dToolLen < EPS_SMALL Then m_dToolLen = 20 End If EgtTdbGetCurrToolParam(MCH_TP.DIAM, m_dToolDiam) If m_dToolDiam < EPS_SMALL Then m_dToolDiam = 400 End If EgtTdbGetCurrToolParam(MCH_TP.THICK, m_dToolThick) If m_dToolThick < EPS_SMALL Then m_dToolThick = 5 End If EgtTdbGetCurrToolParam(MCH_TP.MAXMAT, m_dToolMaxMat) If m_dToolMaxMat < EPS_SMALL Then m_dToolMaxMat = 40 End If ' passo all'ambiente di disegno dell'utensile EgtSetCurrentContext(ToolScene.GetCtx()) ' carico funzioni di creazione utensile Return LoadToolMaker(K_SAWBLADEMAKER) Case MCH_TY.MILL_STD ' assegno nome portautensile LoadToolHolder(K_MILLHOLDER) ' assegno parametri geometrici EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) EgtTdbGetCurrToolParam(MCH_TP.LEN, m_dToolLen) If m_dToolLen < EPS_SMALL Then m_dToolLen = 120 End If EgtTdbGetCurrToolParam(MCH_TP.DIAM, m_dToolDiam) If m_dToolDiam < EPS_SMALL Then m_dToolDiam = 20 End If m_dToolThick = 0 EgtTdbGetCurrToolParam(MCH_TP.MAXMAT, m_dToolMaxMat) If m_dToolMaxMat < EPS_SMALL Then m_dToolMaxMat = 40 End If ' passo all'ambiente di disegno dell'utensile EgtSetCurrentContext(ToolScene.GetCtx()) ' carico funzioni di creazione utensile Return LoadToolMaker(K_MILLMAKER) End Select Return False End Function Private Sub LoadToolHolder(ByVal sKey As String) Dim sHolder As String = String.Empty GetPrivateProfileString(S_TOOLS, sKey, "", sHolder, m_MainWindow.GetMachIniFile()) If String.IsNullOrWhiteSpace(sHolder) Then m_sToolHolder = String.Empty Else EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) EgtTdbGetToolHolderDir(m_sToolHolder) m_sToolHolder += "\" & sHolder End If End Sub Private Function LoadToolMaker(ByVal sKey As String) As Boolean Dim sMaker As String = String.Empty GetPrivateProfileString(S_TOOLS, sKey, "", sMaker, m_MainWindow.GetMachIniFile()) Return EgtLuaExecFile(m_sToolMakersDir & "\" & sMaker) End Function Private Function CreateToolDraw() As Boolean Select Case m_nToolType Case MCH_TY.DRILL_STD ' passo all'ambiente di disegno dell'utensile EgtSetCurrentContext(ToolScene.GetCtx()) ' imposto dati utensile EgtLuaSetGlobStringVar("TOOL.TOOLHOLDER", m_sToolHolder) EgtLuaSetGlobNumVar("TOOL.LEN", m_dToolLen) EgtLuaSetGlobNumVar("TOOL.DIAM", m_dToolDiam) EgtLuaSetGlobNumVar("TOOL.MAXMAT", m_dToolMaxMat) ' eseguo creazione utensile EgtLuaExecLine("CreateTool()") ' recupero errore Dim nErr As Integer = 999 EgtLuaGetGlobIntVar("TOOL.ERR", nErr) Return (nErr = 0) Case MCH_TY.SAW_STD ' passo all'ambiente di disegno dell'utensile EgtSetCurrentContext(ToolScene.GetCtx()) ' imposto dati utensile EgtLuaSetGlobStringVar("TOOL.TOOLHOLDER", m_sToolHolder) EgtLuaSetGlobNumVar("TOOL.LEN", m_dToolLen) EgtLuaSetGlobNumVar("TOOL.DIAM", m_dToolDiam) Dim dCore As Double = If(m_dToolLen >= m_dToolThick, m_dToolThick - 1, 2 * m_dToolLen - m_dToolThick) EgtLuaSetGlobNumVar("TOOL.CORE", dCore) EgtLuaSetGlobNumVar("TOOL.THICK", m_dToolThick) EgtLuaSetGlobNumVar("TOOL.MAXMAT", m_dToolMaxMat) ' eseguo creazione utensile EgtLuaExecLine("CreateTool()") ' recupero errore Dim nErr As Integer = 999 EgtLuaGetGlobIntVar("TOOL.ERR", nErr) Return (nErr = 0) Case MCH_TY.MILL_STD ' passo all'ambiente di disegno dell'utensile EgtSetCurrentContext(ToolScene.GetCtx()) ' imposto dati utensile EgtLuaSetGlobStringVar("TOOL.TOOLHOLDER", m_sToolHolder) EgtLuaSetGlobNumVar("TOOL.LEN", m_dToolLen) EgtLuaSetGlobNumVar("TOOL.DIAM", m_dToolDiam) EgtLuaSetGlobNumVar("TOOL.MAXMAT", m_dToolMaxMat) ' eseguo creazione utensile EgtLuaExecLine("CreateTool()") ' recupero errore Dim nErr As Integer = 999 EgtLuaGetGlobIntVar("TOOL.ERR", nErr) Return (nErr = 0) End Select Return False End Function Private Function SaveToolDraw() As Boolean If m_nToolType = MCH_TY.DRILL_STD Or m_nToolType = MCH_TY.SAW_STD Or m_nToolType = MCH_TY.MILL_STD Then ' nome e direttorio del file da salvare EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) Dim sDrawName As String = String.Empty EgtTdbGetCurrToolParam(MCH_TP.UUID, sDrawName) sDrawName = sDrawName & ".nge" Dim sPath As String = String.Empty EgtTdbGetToolDir(sPath) sPath = sPath & "\" & sDrawName ' passo all'ambiente di disegno dell'utensile EgtSetCurrentContext(ToolScene.GetCtx()) ' nascondo layer ausiliario Dim nAuxId As Integer = GDB_ID.NULL nAuxId = EgtGetFirstNameInGroup(EgtGetFirstGroupInGroup(GDB_ID.ROOT), "AUX") EgtSetStatus(nAuxId, GDB_ST.OFF) ' se lama devo ruotare -90 deg attorno a Z+ If m_nToolType = MCH_TY.SAW_STD Then EgtRotate(EgtGetFirstGroupInGroup(GDB_ID.ROOT), Point3d.ORIG(), Vector3d.Z_AX(), -90, GDB_RT.GLOB) End If ' salvo il modello Dim bOk As Boolean = EgtSaveFile(sPath, NGE.CMPTEXT) ' eseguo controrotazione per lama If m_nToolType = MCH_TY.SAW_STD Then EgtRotate(EgtGetFirstGroupInGroup(GDB_ID.ROOT), Point3d.ORIG(), Vector3d.Z_AX(), 90, GDB_RT.GLOB) End If ' ripristino visualizzazione layer aux EgtSetStatus(nAuxId, GDB_ST.ON_) ' salvo nome del modello EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) EgtTdbSetCurrToolParam(MCH_TP.DRAW, sDrawName) EgtTdbSaveCurrTool() Return bOk End If Return False End Function Friend Function SaveCurrTool() As Boolean SetToolParams() If EgtTdbIsCurrToolModified() Then Dim SaveCurrToolWnd As New EgtMsgBox(m_MainWindow, "", EgtMsg(MSG_EGTMSGBOX + 2), EgtMsgBox.Buttons.YES_NO_CANCEL, EgtMsgBox.Icons.NULL) Select Case SaveCurrToolWnd.DialogResult Case 0 ' Annulla Return False Case 1 ' Si EgtTdbSaveCurrTool() SaveToolDraw() Dim CurrTool As CustomItem = TryCast(m_OldItem, CustomItem) If CurrTool IsNot Nothing Then CurrTool.Name = NameTxBx.Text End If Case 2 ' No EgtTdbSetCurrTool(m_sToolName) GetToolParams() End Select End If Return True End Function Private Sub NameTxBx_EgtClosed(sender As Object, e As EventArgs) Handles NameTxBx.EgtClosed ' Se cambiato nome If NameTxBx.Text <> m_sToolName Then ' Imposto contesto macchina EgtSetCurrentContext(m_MainWindow.m_CurrentProjectPageUC.CurrentProjectScene.GetCtx()) ' Se nome nuovo,lo assegno Dim TempName As String = NameTxBx.Text EgtTdbGetToolNewName(TempName) If TempName = NameTxBx.Text Then NameTxBx.Text = NameTxBx.Text Else ' Nome già utilizzato Dim InfoBox As New EgtMsgBox(m_MainWindow, "", EgtMsg(91104), EgtMsgBox.Buttons.OK, EgtMsgBox.Icons.ESCLAMATION) NameTxBx.Text = m_sToolName End If Else NameTxBx.Text = m_sToolName End If End Sub End Class 'Namespace TreeViewItem ' Public Class CathegoryItem ' Inherits TreeViewItemBase ' 'Private m_sTitle As String ' Private m_sPictureString As String ' Private m_nFType As Integer ' Private m_Items As ObservableCollection(Of CustomItem) ' 'Public Property Name As String ' ' Get ' ' Return m_sTitle ' ' End Get ' ' Set(value As String) ' ' m_sTitle = value ' ' End Set ' 'End Property ' Public ReadOnly Property PictureString As String ' Get ' Return "/Resources/ToolsTreeViewImages/Lama.png" ' End Get ' End Property ' Public ReadOnly Property nFType As Integer ' Get ' Return m_nFType ' End Get ' End Property ' Public Property Items As ObservableCollection(Of CustomItem) ' Get ' Return m_Items ' End Get ' Set(value As ObservableCollection(Of CustomItem)) ' m_Items = value ' End Set ' End Property ' Sub New(sName As String, nType As Integer) ' Name = sName ' m_nFType = nType ' Me.Items = New ObservableCollection(Of CustomItem) ' End Sub ' End Class ' Public Class CustomItem ' Inherits TreeViewItemBase ' 'Private m_sTitle As String ' Private m_nType As Integer ' 'Public Property Name As String ' ' Get ' ' Return m_sTitle ' ' End Get ' ' Set(value As String) ' ' m_sTitle = value ' ' End Set ' 'End Property ' Public ReadOnly Property nType As Integer ' Get ' Return m_nType ' End Get ' End Property ' Sub New(Title As String, nType As Integer) ' Me.Name = Title ' m_nType = nType ' End Sub ' End Class ' Public Class TreeViewItemBase ' Implements INotifyPropertyChanged ' Private m_Name As String ' Public Property Name As String ' Get ' Return m_Name ' End Get ' Set(value As String) ' If (value <> m_Name) Then ' m_Name = value ' NotifyPropertyChanged("Name") ' End If ' End Set ' End Property ' Private m_isSelected As Boolean ' Public Property IsSelected As Boolean ' Get ' Return m_isSelected ' End Get ' Set(value As Boolean) ' If (value <> m_isSelected) Then ' m_isSelected = value ' NotifyPropertyChanged("IsSelected") ' End If ' End Set ' End Property ' Private m_isExpanded As Boolean ' Public Property IsExpanded As Boolean ' Get ' Return m_isExpanded ' End Get ' Set(value As Boolean) ' If (value <> m_isExpanded) Then ' m_isExpanded = value ' NotifyPropertyChanged("IsExpanded") ' End If ' End Set ' End Property ' Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged ' Public Sub NotifyPropertyChanged(propName As String) ' RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName)) ' End Sub ' End Class 'End Namespace