From f8b17066de2aaeb4504fdc0cf758d11ca6ea4049 Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Sun, 10 Jul 2016 11:34:07 +0000 Subject: [PATCH] EgtCAM5 : - Migliorie varie. --- Application.xaml.vb | 1 + Constants/ConstIni.vb | 6 + Constants/ConstMsg.vb | 1 + EgtCAM5.vbproj | 45 +- EgtCAM5Resources.xaml | 61 +- MachiningsDbPage/MachiningsDbView.xaml | 194 +++--- ProjectPage/DrawPanel/DrawPanelView.xaml | 105 +-- ProjectPage/DrawPanel/DrawPanelViewModel.vb | 537 ++++++++++++++- .../DrawOptionPanel/DrawOptionPanelView.xaml | 13 +- .../DrawOptionPanelViewModel.vb | 101 ++- .../MachiningTreeExpanderView.xaml | 11 + .../MachiningTreeExpanderView.xaml.vb | 3 + .../MachiningTreeExpanderViewModel.vb | 7 + .../ManageLayerExpanderView.xaml | 2 +- .../ManageLayerExpanderViewModel.vb | 4 +- .../OperationExpanderView.xaml | 3 +- .../OperationExpanderViewModel.vb | 1 + .../OperationPropertyExpanderView.xaml | 11 + .../OperationPropertyExpanderView.xaml.vb | 3 + .../OperationPropertyExpanderViewModel.vb | 7 + .../SimulationExpanderView.xaml | 83 +++ .../SimulationExpanderView.xaml.vb | 3 + .../SimulationExpanderViewModel.vb | 611 ++++++++++++++++++ ProjectPage/ProjectViewModel.vb | 59 +- Resources/DrawPanel/Chamfer.png | Bin 0 -> 422 bytes Resources/DrawPanel/ChangeColorAlpha.png | Bin 0 -> 1277 bytes Resources/DrawPanel/CircleCD.png | Bin 0 -> 419 bytes Resources/DrawPanel/CircleCP.png | Bin 0 -> 375 bytes Resources/DrawPanel/Mirror3D.png | Bin 0 -> 538 bytes Resources/DrawPanel/PolygonSide.png | Bin 0 -> 620 bytes Resources/DrawPanel/RemoveColor.png | Bin 0 -> 1048 bytes Resources/DrawPanel/Rotate3D.png | Bin 0 -> 667 bytes Resources/DrawPanel/Scale3D.png | Bin 0 -> 687 bytes Resources/DrawPanel/SplitCurve.png | Bin 0 -> 675 bytes .../SimulationExpander/Pause.png | Bin 0 -> 394 bytes .../SimulationExpander/Play.png | Bin 0 -> 549 bytes .../SimulationExpander/PlayStep.png | Bin 0 -> 550 bytes .../SimulationExpander/Stop.png | Bin 0 -> 412 bytes ToolsDbPage/ToolsDbView.xaml | 104 +-- ToolsDbPage/ToolsDbView.xaml.vb | 5 +- Utility.vb | 7 + 41 files changed, 1706 insertions(+), 282 deletions(-) create mode 100644 ProjectPage/OptionPanel/DrawOptionPanel/MachiningsTreeViewExpander/MachiningTreeExpanderView.xaml create mode 100644 ProjectPage/OptionPanel/DrawOptionPanel/MachiningsTreeViewExpander/MachiningTreeExpanderView.xaml.vb create mode 100644 ProjectPage/OptionPanel/DrawOptionPanel/MachiningsTreeViewExpander/MachiningTreeExpanderViewModel.vb create mode 100644 ProjectPage/OptionPanel/DrawOptionPanel/OperationPropertyExpander/OperationPropertyExpanderView.xaml create mode 100644 ProjectPage/OptionPanel/DrawOptionPanel/OperationPropertyExpander/OperationPropertyExpanderView.xaml.vb create mode 100644 ProjectPage/OptionPanel/DrawOptionPanel/OperationPropertyExpander/OperationPropertyExpanderViewModel.vb create mode 100644 ProjectPage/OptionPanel/DrawOptionPanel/SimulationExpander/SimulationExpanderView.xaml create mode 100644 ProjectPage/OptionPanel/DrawOptionPanel/SimulationExpander/SimulationExpanderView.xaml.vb create mode 100644 ProjectPage/OptionPanel/DrawOptionPanel/SimulationExpander/SimulationExpanderViewModel.vb create mode 100644 Resources/DrawPanel/Chamfer.png create mode 100644 Resources/DrawPanel/ChangeColorAlpha.png create mode 100644 Resources/DrawPanel/CircleCD.png create mode 100644 Resources/DrawPanel/CircleCP.png create mode 100644 Resources/DrawPanel/Mirror3D.png create mode 100644 Resources/DrawPanel/PolygonSide.png create mode 100644 Resources/DrawPanel/RemoveColor.png create mode 100644 Resources/DrawPanel/Rotate3D.png create mode 100644 Resources/DrawPanel/Scale3D.png create mode 100644 Resources/DrawPanel/SplitCurve.png create mode 100644 Resources/OptionPanel/MachiningOptionPanel/SimulationExpander/Pause.png create mode 100644 Resources/OptionPanel/MachiningOptionPanel/SimulationExpander/Play.png create mode 100644 Resources/OptionPanel/MachiningOptionPanel/SimulationExpander/PlayStep.png create mode 100644 Resources/OptionPanel/MachiningOptionPanel/SimulationExpander/Stop.png diff --git a/Application.xaml.vb b/Application.xaml.vb index 034d211..ad146d9 100644 --- a/Application.xaml.vb +++ b/Application.xaml.vb @@ -132,6 +132,7 @@ Class Application Friend Const UPDATEHEADERNAME As String = "UpdateHeaderName" Friend Const UPDATEHEADERCOLOR As String = "UpdateHeaderColor" Friend Const UPDATEOBJTREEOLDID As String = "UpdateObjTreeOldId" + Friend Const DRAWOPTIONPANEL_CLOSING As String = "DrawOptionPanel_Closing" ' StatusBar messages Friend Const STATUSGRIDCOMMAND As String = "StatusGridCommand" diff --git a/Constants/ConstIni.vb b/Constants/ConstIni.vb index 7182302..985719e 100644 --- a/Constants/ConstIni.vb +++ b/Constants/ConstIni.vb @@ -85,6 +85,12 @@ Module ConstIni Public Const S_MACH As String = "Mach" Public Const K_MACHINESDIR As String = "MachinesDir" Public Const K_TOOLMAKERSDIR As String = "ToolMakersDir" + Public Const K_CURRMACH As String = "CurrMach" + + Public Const S_SIMUL As String = "Simul" + Public Const K_SLIDERX As String = "SliderX" + Public Const K_SLIDERVAL As String = "SliderVal" + Public Const S_MRUFILES As String = "MruFiles" Public Const S_MRUSCRIPTS As String = "MruScripts" diff --git a/Constants/ConstMsg.vb b/Constants/ConstMsg.vb index 1949213..c7804f6 100644 --- a/Constants/ConstMsg.vb +++ b/Constants/ConstMsg.vb @@ -5,6 +5,7 @@ Public Const MSG_EGTCAM5 As Integer = 5000 Public Const MSG_MAINWINDOW As Integer = MSG_EGTCAM5 + Public Const MSG_DRAWMODE As Integer = MSG_EGTCAM5 + 200 Public Const MSG_TOOLSDBPAGE As Integer = MSG_EGTCAM5 + 1000 Public Const MSG_TOOLSERRORS As Integer = MSG_EGTCAM5 + 1085 Public Const MSG_MACHININGSDBPAGE As Integer = MSG_EGTCAM5 + 1100 diff --git a/EgtCAM5.vbproj b/EgtCAM5.vbproj index b6099bf..256e6da 100644 --- a/EgtCAM5.vbproj +++ b/EgtCAM5.vbproj @@ -147,6 +147,10 @@ InputExpanderView.xaml + + MachiningTreeExpanderView.xaml + + ManageLayerExpanderView.xaml @@ -157,6 +161,14 @@ + + OperationPropertyExpanderView.xaml + + + + SimulationExpanderView.xaml + + ProjectView.xaml @@ -221,6 +233,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -229,6 +245,14 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -296,9 +320,7 @@ - - @@ -309,7 +331,6 @@ - @@ -402,6 +423,24 @@ + + + + + + + + + + + + + + + + + + IF "$(PlatformName)"=="x86" IF "$(ConfigurationName)" == "Release" copy $(TargetPath) c:\EgtProg\EgtCAM5\EgtCAM5R32.exe diff --git a/EgtCAM5Resources.xaml b/EgtCAM5Resources.xaml index 6b0d700..b3e9f1c 100644 --- a/EgtCAM5Resources.xaml +++ b/EgtCAM5Resources.xaml @@ -2,7 +2,8 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:EgtCAM5" - xmlns:ViewModel="clr-namespace:EgtCAM5.EgtCAM5"> + xmlns:ViewModel="clr-namespace:EgtCAM5.EgtCAM5" + xmlns:EgtWPFLib5="clr-namespace:EgtWPFLib5;assembly=EgtWPFLib5"> @@ -64,17 +65,62 @@ + + + + + + + + - + + + + + + + + + + + + + + + + + + - + + diff --git a/MachiningsDbPage/MachiningsDbView.xaml b/MachiningsDbPage/MachiningsDbView.xaml index 139109a..4c5fa5d 100644 --- a/MachiningsDbPage/MachiningsDbView.xaml +++ b/MachiningsDbPage/MachiningsDbView.xaml @@ -203,11 +203,11 @@ - - - - - - - - - - - - - - @@ -486,6 +493,7 @@ UpdateSourceTrigger=PropertyChanged}"/>--> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - + - - - - + - - + - + - - - - - - - - - + - - - + + - - - - - + - - - + - - - + - + - + diff --git a/ProjectPage/DrawPanel/DrawPanelViewModel.vb b/ProjectPage/DrawPanel/DrawPanelViewModel.vb index 7e38700..b2c011f 100644 --- a/ProjectPage/DrawPanel/DrawPanelViewModel.vb +++ b/ProjectPage/DrawPanel/DrawPanelViewModel.vb @@ -5,17 +5,244 @@ Namespace EgtCAM5 Public Class DrawPanelViewModel Inherits ViewModelBase + 'Proprietà ToolTip + Public ReadOnly Property PointToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 1) + End Get + End Property + Public ReadOnly Property Line2PToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 2) + End Get + End Property + Public ReadOnly Property LinePDLToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 3) + End Get + End Property + Public ReadOnly Property CirclePDToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 4) + End Get + End Property + Public ReadOnly Property CircleCDToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 5) + End Get + End Property + Public ReadOnly Property ArcCSEToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 6) + End Get + End Property + Public ReadOnly Property Arc3PToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 7) + End Get + End Property + Public ReadOnly Property ArcPDPToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 8) + End Get + End Property + Public ReadOnly Property FilletToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 9) + End Get + End Property + Public ReadOnly Property ChamferToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 10) + End Get + End Property + Public ReadOnly Property Rectangle2PToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 11) + End Get + End Property + Public ReadOnly Property PolygonToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 12) + End Get + End Property + Public ReadOnly Property PolygonSideToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 13) + End Get + End Property + Public ReadOnly Property TextToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 14) + End Get + End Property + + Public ReadOnly Property PlaneToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 15) + End Get + End Property + Public ReadOnly Property ExtrudeToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 16) + End Get + End Property + Public ReadOnly Property RevolveToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 17) + End Get + End Property + Public ReadOnly Property ScrewToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 18) + End Get + End Property + Public ReadOnly Property RuledToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 19) + End Get + End Property + Public ReadOnly Property MergeSurfToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 20) + End Get + End Property + Public ReadOnly Property ExplodeSurfToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 21) + End Get + End Property + Public ReadOnly Property InvertSurfToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 22) + End Get + End Property + + Public ReadOnly Property DeleteToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 23) + End Get + End Property + + Public ReadOnly Property ChangeLayerToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 24) + End Get + End Property + Public ReadOnly Property ChangeAlphaToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 25) + End Get + End Property + Public ReadOnly Property ResetColorToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 26) + End Get + End Property + Public ReadOnly Property ChangeColorToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 27) + End Get + End Property + + Public ReadOnly Property InvertCurveToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 28) + End Get + End Property + Public ReadOnly Property ChangeStartToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 29) + End Get + End Property + Public ReadOnly Property ExtendCurveToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 30) + End Get + End Property + Public ReadOnly Property BreakCurveToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 31) + End Get + End Property + Public ReadOnly Property SplitCurveToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 32) + End Get + End Property + + Public ReadOnly Property JoinCurveToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 33) + End Get + End Property + Public ReadOnly Property ExplodeCurveToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 34) + End Get + End Property + Public ReadOnly Property ThickCurveToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 35) + End Get + End Property + + Public ReadOnly Property MoveToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 36) + End Get + End Property + Public ReadOnly Property RotateToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 37) + End Get + End Property + Public ReadOnly Property Rotate3DToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 38) + End Get + End Property + Public ReadOnly Property MirrorToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 39) + End Get + End Property + Public ReadOnly Property Mirror3DToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 40) + End Get + End Property + Public ReadOnly Property ScaleToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 41) + End Get + End Property + Public ReadOnly Property Scale3DToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 42) + End Get + End Property + + Public ReadOnly Property OffsetToolTip As String + Get + Return EgtMsg(MSG_DRAWMODE + 43) + End Get + End Property + ' Definizione comandi Private m_cmdPoint As ICommand Private m_cmdLine2P As ICommand Private m_cmdLinePDL As ICommand - Private m_cmdCircle As ICommand + Private m_cmdCircleCP As ICommand + Private m_cmdCircleCD As ICommand Private m_cmdArcCSE As ICommand Private m_cmdArc3P As ICommand Private m_cmdArcPDP As ICommand Private m_cmdFillet As ICommand + Private m_cmdChamfer As ICommand Private m_cmdRectangle2P As ICommand Private m_cmdPolygon As ICommand + Private m_cmdPolygonSide As ICommand Private m_cmdText As ICommand Private m_cmdPlane As ICommand Private m_cmdExtrude As ICommand @@ -27,18 +254,24 @@ Namespace EgtCAM5 Private m_cmdInvertSurf As ICommand Private m_cmdDelete As ICommand Private m_cmdChangeLayer As ICommand + Private m_cmdChangeAlpha As ICommand + Private m_cmdResetColor As ICommand Private m_cmdChangeColor As ICommand Private m_cmdInvertCurve As ICommand Private m_cmdChangeStartCurve As ICommand Private m_cmdExtendCurve As ICommand Private m_cmdBreakCurve As ICommand + Private m_cmdSplitCurve As ICommand Private m_cmdJoinCurve As ICommand Private m_cmdExplodeCurve As ICommand Private m_cmdSetCurveTh As ICommand Private m_cmdMove As ICommand Private m_cmdRotate As ICommand + Private m_cmdRotate3D As ICommand Private m_cmdMirror As ICommand + Private m_cmdMirror3D As ICommand Private m_cmdScale As ICommand + Private m_cmdScale3D As ICommand Private m_cmdOffset As ICommand @@ -136,35 +369,65 @@ Namespace EgtCAM5 #End Region ' LinePDLCommand -#Region "CircleCommand" +#Region "CircleCPCommand" ''' - ''' Returns a command that do Circle. + ''' Returns a command that do CircleCP. ''' - Public ReadOnly Property CircleCommand As ICommand + Public ReadOnly Property CircleCPCommand As ICommand Get - If m_cmdCircle Is Nothing Then - m_cmdCircle = New RelayCommand(AddressOf Circle, AddressOf CanCircle) + If m_cmdCircleCP Is Nothing Then + m_cmdCircleCP = New RelayCommand(AddressOf CircleCP, AddressOf CanCircleCP) End If - Return m_cmdCircle + Return m_cmdCircleCP End Get End Property ''' - ''' Execute the Circle. This method is invoked by the CircleCommand. + ''' Execute the CircleCP. This method is invoked by the CircleCPCommand. ''' - Public Sub Circle(ByVal param As Object) - Application.Msn.NotifyColleagues(Application.CIRCLE) + Public Sub CircleCP(ByVal param As Object) + Application.Msn.NotifyColleagues(Application.EXECUTECOMMAND, Controller.CMD.CIRCLECP) End Sub ''' ''' Returns always true. ''' - Private Function CanCircle(ByVal param As Object) As Boolean + Private Function CanCircleCP(ByVal param As Object) As Boolean Return True End Function -#End Region ' CircleCommand +#End Region ' CircleCPCommand + +#Region "CircleCDCommand" + + ''' + ''' Returns a command that do CircleCD. + ''' + Public ReadOnly Property CircleCDCommand As ICommand + Get + If m_cmdCircleCD Is Nothing Then + m_cmdCircleCD = New RelayCommand(AddressOf CircleCD, AddressOf CanCircleCD) + End If + Return m_cmdCircleCD + End Get + End Property + + ''' + ''' Execute the CircleCD. This method is invoked by the CircleCDCommand. + ''' + Public Sub CircleCD(ByVal param As Object) + Application.Msn.NotifyColleagues(Application.EXECUTECOMMAND, Controller.CMD.CIRCLECD) + End Sub + + ''' + ''' Returns always true. + ''' + Private Function CanCircleCD(ByVal param As Object) As Boolean + Return True + End Function + +#End Region ' CircleCDCommand #Region "ArcCSECommand" @@ -286,6 +549,36 @@ Namespace EgtCAM5 #End Region ' FilletCommand +#Region "ChamferCommand" + + ''' + ''' Returns a command that do Chamfer. + ''' + Public ReadOnly Property ChamferCommand As ICommand + Get + If m_cmdChamfer Is Nothing Then + m_cmdChamfer = New RelayCommand(AddressOf Chamfer, AddressOf CanChamfer) + End If + Return m_cmdChamfer + End Get + End Property + + ''' + ''' Execute the Chamfer. This method is invoked by the ChamferCommand. + ''' + Public Sub Chamfer(ByVal param As Object) + Application.Msn.NotifyColleagues(Application.EXECUTECOMMAND, Controller.CMD.CHAMFER) + End Sub + + ''' + ''' Returns always true. + ''' + Private Function CanChamfer(ByVal param As Object) As Boolean + Return True + End Function + +#End Region ' ChamferCommand + #Region "Rectangle2PCommand" ''' @@ -346,6 +639,36 @@ Namespace EgtCAM5 #End Region ' PolygonCommand +#Region "PolygonSideCommand" + + ''' + ''' Returns a command that do PolygonSide. + ''' + Public ReadOnly Property PolygonSideCommand As ICommand + Get + If m_cmdPolygonSide Is Nothing Then + m_cmdPolygonSide = New RelayCommand(AddressOf PolygonSide, AddressOf CanPolygonSide) + End If + Return m_cmdPolygonSide + End Get + End Property + + ''' + ''' Execute the PolygonSide. This method is invoked by the PolygonSideCommand. + ''' + Public Sub PolygonSide(ByVal param As Object) + Application.Msn.NotifyColleagues(Application.EXECUTECOMMAND, Controller.CMD.POLYGONSIDE) + End Sub + + ''' + ''' Returns always true. + ''' + Private Function CanPolygonSide(ByVal param As Object) As Boolean + Return True + End Function + +#End Region ' PolygonSideCommand + #Region "TextCommand" ''' @@ -676,6 +999,66 @@ Namespace EgtCAM5 #End Region ' ChangeLayerCommand +#Region "ChangeAlphaCommand" + + ''' + ''' Returns a command that do ChangeAlpha. + ''' + Public ReadOnly Property ChangeAlphaCommand As ICommand + Get + If m_cmdChangeAlpha Is Nothing Then + m_cmdChangeAlpha = New RelayCommand(AddressOf ChangeAlpha, AddressOf CanChangeAlpha) + End If + Return m_cmdChangeAlpha + End Get + End Property + + ''' + ''' Execute the ChangeAlpha. This method is invoked by the ChangeAlphaCommand. + ''' + Public Sub ChangeAlpha(ByVal param As Object) + Application.Msn.NotifyColleagues(Application.EXECUTECOMMAND, Controller.CMD.CHANGEALPHA) + End Sub + + ''' + ''' Returns always true. + ''' + Private Function CanChangeAlpha(ByVal param As Object) As Boolean + Return True + End Function + +#End Region ' ChangeAlphaCommand + +#Region "ResetColorCommand" + + ''' + ''' Returns a command that do ResetColor. + ''' + Public ReadOnly Property ResetColorCommand As ICommand + Get + If m_cmdResetColor Is Nothing Then + m_cmdResetColor = New RelayCommand(AddressOf ResetColor, AddressOf CanResetColor) + End If + Return m_cmdResetColor + End Get + End Property + + ''' + ''' Execute the ResetColor. This method is invoked by the ResetColorCommand. + ''' + Public Sub ResetColor(ByVal param As Object) + Application.Msn.NotifyColleagues(Application.EXECUTECOMMAND, Controller.CMD.RESETCOLOR) + End Sub + + ''' + ''' Returns always true. + ''' + Private Function CanResetColor(ByVal param As Object) As Boolean + Return True + End Function + +#End Region ' ResetColorCommand + #Region "ChangeColorCommand" ''' @@ -694,7 +1077,7 @@ Namespace EgtCAM5 ''' Execute the ChangeColor. This method is invoked by the ChangeColorCommand. ''' Public Sub ChangeColor(ByVal param As Object) - Application.Msn.NotifyColleagues(Application.CHANGECOLOR) + Application.Msn.NotifyColleagues(Application.EXECUTECOMMAND, Controller.CMD.CHANGECOLOR) End Sub ''' @@ -814,7 +1197,7 @@ Namespace EgtCAM5 ''' Execute the BreakCurve. This method is invoked by the BreakCurveCommand. ''' Public Sub BreakCurve(ByVal param As Object) - Application.Msn.NotifyColleagues(Application.BREAKCURVE) + Application.Msn.NotifyColleagues(Application.EXECUTECOMMAND, Controller.CMD.BREAKCURVE) End Sub ''' @@ -826,6 +1209,36 @@ Namespace EgtCAM5 #End Region ' BreakCurveCommand +#Region "SplitCurveCommand" + + ''' + ''' Returns a command that do SplitCurve. + ''' + Public ReadOnly Property SplitCurveCommand As ICommand + Get + If m_cmdSplitCurve Is Nothing Then + m_cmdSplitCurve = New RelayCommand(AddressOf SplitCurve, AddressOf CanSplitCurve) + End If + Return m_cmdSplitCurve + End Get + End Property + + ''' + ''' Execute the SplitCurve. This method is invoked by the SplitCurveCommand. + ''' + Public Sub SplitCurve(ByVal param As Object) + Application.Msn.NotifyColleagues(Application.EXECUTECOMMAND, Controller.CMD.SPLITCURVE) + End Sub + + ''' + ''' Returns always true. + ''' + Private Function CanSplitCurve(ByVal param As Object) As Boolean + Return True + End Function + +#End Region ' SplitCurveCommand + #Region "JoinCurveCommand" ''' @@ -964,7 +1377,7 @@ Namespace EgtCAM5 ''' Execute the Rotate. This method is invoked by the RotateCommand. ''' Public Sub Rotate(ByVal param As Object) - Application.Msn.NotifyColleagues(Application.ROTATE) + Application.Msn.NotifyColleagues(Application.EXECUTECOMMAND, Controller.CMD.ROTATE) End Sub ''' @@ -976,6 +1389,36 @@ Namespace EgtCAM5 #End Region ' RotateCommand +#Region "Rotate3DCommand" + + ''' + ''' Returns a command that do Rotate3D. + ''' + Public ReadOnly Property Rotate3DCommand As ICommand + Get + If m_cmdRotate3D Is Nothing Then + m_cmdRotate3D = New RelayCommand(AddressOf Rotate3D, AddressOf CanRotate3D) + End If + Return m_cmdRotate3D + End Get + End Property + + ''' + ''' Execute the Rotate3D. This method is invoked by the Rotate3DCommand. + ''' + Public Sub Rotate3D(ByVal param As Object) + Application.Msn.NotifyColleagues(Application.EXECUTECOMMAND, Controller.CMD.ROTATE3D) + End Sub + + ''' + ''' Returns always true. + ''' + Private Function CanRotate3D(ByVal param As Object) As Boolean + Return True + End Function + +#End Region ' Rotate3DCommand + #Region "MirrorCommand" ''' @@ -994,7 +1437,7 @@ Namespace EgtCAM5 ''' Execute the Mirror. This method is invoked by the MirrorCommand. ''' Public Sub Mirror(ByVal param As Object) - Application.Msn.NotifyColleagues(Application.MIRROR) + Application.Msn.NotifyColleagues(Application.EXECUTECOMMAND, Controller.CMD.MIRROR) End Sub ''' @@ -1006,6 +1449,36 @@ Namespace EgtCAM5 #End Region ' MirrorCommand +#Region "Mirror3DCommand" + + ''' + ''' Returns a command that do Mirror3D. + ''' + Public ReadOnly Property Mirror3DCommand As ICommand + Get + If m_cmdMirror3D Is Nothing Then + m_cmdMirror3D = New RelayCommand(AddressOf Mirror3D, AddressOf CanMirror3D) + End If + Return m_cmdMirror3D + End Get + End Property + + ''' + ''' Execute the Mirror3D. This method is invoked by the Mirror3DCommand. + ''' + Public Sub Mirror3D(ByVal param As Object) + Application.Msn.NotifyColleagues(Application.EXECUTECOMMAND, Controller.CMD.MIRROR3D) + End Sub + + ''' + ''' Returns always true. + ''' + Private Function CanMirror3D(ByVal param As Object) As Boolean + Return True + End Function + +#End Region ' Mirror3DCommand + #Region "ScaleCommand" ''' @@ -1024,7 +1497,7 @@ Namespace EgtCAM5 ''' Execute the Scale. This method is invoked by the ScaleCommand. ''' Public Sub Scale(ByVal param As Object) - Application.Msn.NotifyColleagues(Application.SCALE) + Application.Msn.NotifyColleagues(Application.EXECUTECOMMAND, Controller.CMD.SCALE) End Sub ''' @@ -1036,6 +1509,36 @@ Namespace EgtCAM5 #End Region ' ScaleCommand +#Region "Scale3DCommand" + + ''' + ''' Returns a command that do Scale3D. + ''' + Public ReadOnly Property Scale3DCommand As ICommand + Get + If m_cmdScale3D Is Nothing Then + m_cmdScale3D = New RelayCommand(AddressOf Scale3D, AddressOf CanScale3D) + End If + Return m_cmdScale3D + End Get + End Property + + ''' + ''' Execute the Scale3D. This method is invoked by the Scale3DCommand. + ''' + Public Sub Scale3D(ByVal param As Object) + Application.Msn.NotifyColleagues(Application.EXECUTECOMMAND, Controller.CMD.SCALE3D) + End Sub + + ''' + ''' Returns always true. + ''' + Private Function CanScale3D(ByVal param As Object) As Boolean + Return True + End Function + +#End Region ' Scale3DCommand + #Region "OffsetCommand" ''' diff --git a/ProjectPage/OptionPanel/DrawOptionPanel/DrawOptionPanelView.xaml b/ProjectPage/OptionPanel/DrawOptionPanel/DrawOptionPanelView.xaml index cfe00f6..1d2b3e0 100644 --- a/ProjectPage/OptionPanel/DrawOptionPanel/DrawOptionPanelView.xaml +++ b/ProjectPage/OptionPanel/DrawOptionPanel/DrawOptionPanelView.xaml @@ -1,6 +1,13 @@  + xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="200" + xmlns:interactivity="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"> + + + + + + @@ -8,11 +15,13 @@ - + + + diff --git a/ProjectPage/OptionPanel/DrawOptionPanel/DrawOptionPanelViewModel.vb b/ProjectPage/OptionPanel/DrawOptionPanel/DrawOptionPanelViewModel.vb index 9b060ff..8913ba2 100644 --- a/ProjectPage/OptionPanel/DrawOptionPanel/DrawOptionPanelViewModel.vb +++ b/ProjectPage/OptionPanel/DrawOptionPanel/DrawOptionPanelViewModel.vb @@ -19,6 +19,9 @@ Namespace EgtCAM5 EgtZoom(ZM.ALL) End If OnPropertyChanged("ManageLayerExpander") + OnPropertyChanged("InfoExpander") + OnPropertyChanged("InputExpander") + OnPropertyChanged("SimulationExpander") End If End Set End Property @@ -40,9 +43,11 @@ Namespace EgtCAM5 EgtAddMachGroup("Mach01", "CMS-PF122R8RR") End If EgtZoom(ZM.ALL) - Application.Msn.NotifyColleagues(Application.LOADOPERATIONLIST) End If OnPropertyChanged("ManageLayerExpander") + OnPropertyChanged("InfoExpander") + OnPropertyChanged("InputExpander") + OnPropertyChanged("SimulationExpander") End If End Set End Property @@ -63,38 +68,108 @@ Namespace EgtCAM5 m_OperationExpander = New OperationExpanderView m_OperationExpander.DataContext = New OperationExpanderViewModel End If + Application.Msn.NotifyColleagues(Application.LOADOPERATIONLIST) Return m_OperationExpander End If End Get End Property - Private m_InputExpander As InputExpanderView - Public ReadOnly Property InputExpander As InputExpanderView + Private m_OperationPropertyExpander As OperationPropertyExpanderView + Private m_InfoExpander As InfoExpanderView + Public ReadOnly Property InfoExpander As ContentControl Get - If IsNothing(m_InputExpander) Then - m_InputExpander = New InputExpanderView - m_InputExpander.DataContext = New InputExpanderViewModel + If m_DrawIsChecked Then + If IsNothing(m_InfoExpander) Then + m_InfoExpander = New InfoExpanderView + m_InfoExpander.DataContext = New InfoExpanderViewModel + End If + Return m_InfoExpander + Else + If IsNothing(m_OperationPropertyExpander) Then + m_OperationPropertyExpander = New OperationPropertyExpanderView + m_OperationPropertyExpander.DataContext = New OperationPropertyExpanderViewModel + End If + Return m_OperationPropertyExpander End If - Return m_InputExpander End Get End Property - Private m_InfoExpander As InfoExpanderView - Public ReadOnly Property InfoExpander As InfoExpanderView + Private m_MachiningsTreeExpander As MachiningTreeExpanderView + Private m_InputExpander As InputExpanderView + Public ReadOnly Property InputExpander As ContentControl Get - If IsNothing(m_InfoExpander) Then - m_InfoExpander = New InfoExpanderView - m_InfoExpander.DataContext = New InfoExpanderViewModel + If m_DrawIsChecked Then + If IsNothing(m_InputExpander) Then + m_InputExpander = New InputExpanderView + m_InputExpander.DataContext = New InputExpanderViewModel + End If + Return m_InputExpander + Else + If IsNothing(m_MachiningsTreeExpander) Then + m_MachiningsTreeExpander = New MachiningTreeExpanderView + m_MachiningsTreeExpander.DataContext = New MachiningTreeExpanderViewModel + End If + Return m_MachiningsTreeExpander End If - Return m_InfoExpander End Get End Property + Private m_SimulationExpander As SimulationExpanderView + Public ReadOnly Property SimulationExpander As ContentControl + Get + If m_DrawIsChecked Then + Return Nothing + Else + If IsNothing(m_SimulationExpander) Then + m_SimulationExpander = New SimulationExpanderView + m_SimulationExpander.DataContext = New SimulationExpanderViewModel + End If + Return m_SimulationExpander + End If + End Get + End Property + + ' Definizione comandi + Private m_cmdClosing As ICommand + Sub New() ' Inizializzo la selezione della modilità Draw all'apertura del programma DrawIsChecked = True End Sub +#Region "COMMANDS" + +#Region "ClosingCommand" + + ''' + ''' Returns a command that create a new tool. + ''' + Public ReadOnly Property ClosingCommand As ICommand + Get + If m_cmdClosing Is Nothing Then + m_cmdClosing = New RelayCommand(AddressOf Closing, AddressOf CanClosing) + End If + Return m_cmdClosing + End Get + End Property + + ''' + ''' Creata the new tool. This method is invoked by the NewCommand. + ''' + Public Sub Closing(ByVal param As Object) + Application.Msn.NotifyColleagues(Application.DRAWOPTIONPANEL_CLOSING) + End Sub + + ''' + ''' Returns true if the selected treeviewitem is valid for new tool creation. + ''' + Private Function CanClosing(ByVal param As Object) As Boolean + Return True + End Function + +#End Region ' ClosingCommand + +#End Region ' Commands End Class End Namespace \ No newline at end of file diff --git a/ProjectPage/OptionPanel/DrawOptionPanel/MachiningsTreeViewExpander/MachiningTreeExpanderView.xaml b/ProjectPage/OptionPanel/DrawOptionPanel/MachiningsTreeViewExpander/MachiningTreeExpanderView.xaml new file mode 100644 index 0000000..331b4eb --- /dev/null +++ b/ProjectPage/OptionPanel/DrawOptionPanel/MachiningsTreeViewExpander/MachiningTreeExpanderView.xaml @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/ProjectPage/OptionPanel/DrawOptionPanel/MachiningsTreeViewExpander/MachiningTreeExpanderView.xaml.vb b/ProjectPage/OptionPanel/DrawOptionPanel/MachiningsTreeViewExpander/MachiningTreeExpanderView.xaml.vb new file mode 100644 index 0000000..492f63d --- /dev/null +++ b/ProjectPage/OptionPanel/DrawOptionPanel/MachiningsTreeViewExpander/MachiningTreeExpanderView.xaml.vb @@ -0,0 +1,3 @@ +Public Class MachiningTreeExpanderView + +End Class diff --git a/ProjectPage/OptionPanel/DrawOptionPanel/MachiningsTreeViewExpander/MachiningTreeExpanderViewModel.vb b/ProjectPage/OptionPanel/DrawOptionPanel/MachiningsTreeViewExpander/MachiningTreeExpanderViewModel.vb new file mode 100644 index 0000000..a39dc21 --- /dev/null +++ b/ProjectPage/OptionPanel/DrawOptionPanel/MachiningsTreeViewExpander/MachiningTreeExpanderViewModel.vb @@ -0,0 +1,7 @@ +Namespace EgtCAM5 + + Public Class MachiningTreeExpanderViewModel + + End Class + +End Namespace \ No newline at end of file diff --git a/ProjectPage/OptionPanel/DrawOptionPanel/ManageLayerExpander/ManageLayerExpanderView.xaml b/ProjectPage/OptionPanel/DrawOptionPanel/ManageLayerExpander/ManageLayerExpanderView.xaml index 3fae2b0..c92100b 100644 --- a/ProjectPage/OptionPanel/DrawOptionPanel/ManageLayerExpander/ManageLayerExpanderView.xaml +++ b/ProjectPage/OptionPanel/DrawOptionPanel/ManageLayerExpander/ManageLayerExpanderView.xaml @@ -18,7 +18,7 @@ + + + + + + + + + + + + + diff --git a/ProjectPage/OptionPanel/DrawOptionPanel/SimulationExpander/SimulationExpanderView.xaml.vb b/ProjectPage/OptionPanel/DrawOptionPanel/SimulationExpander/SimulationExpanderView.xaml.vb new file mode 100644 index 0000000..1e22ed1 --- /dev/null +++ b/ProjectPage/OptionPanel/DrawOptionPanel/SimulationExpander/SimulationExpanderView.xaml.vb @@ -0,0 +1,3 @@ +Public Class SimulationExpanderView + +End Class diff --git a/ProjectPage/OptionPanel/DrawOptionPanel/SimulationExpander/SimulationExpanderViewModel.vb b/ProjectPage/OptionPanel/DrawOptionPanel/SimulationExpander/SimulationExpanderViewModel.vb new file mode 100644 index 0000000..298f96e --- /dev/null +++ b/ProjectPage/OptionPanel/DrawOptionPanel/SimulationExpander/SimulationExpanderViewModel.vb @@ -0,0 +1,611 @@ +Imports EgtUILib +Namespace EgtCAM5 + + Public Class SimulationExpanderViewModel + Inherits ViewModelBase + +#Region "FIELDS & PROPERTIES" + + 'EGT PROPERTIES + ' Stato di visualizzazione della macchina + Private m_nMachLook As Integer = MCH_LOOK.ALL + ' Utensile corrente + Private m_sCurrTool As String = String.Empty + ' Stato e comando correnti + Public Enum SIM_ST As Integer + ST_STOP = 1 + ST_PLAY = 2 + ST_STEP = 3 + ST_PAUSE = 4 + End Enum + Private m_nStatus As Integer = SIM_ST.ST_STOP + ' Stato bottone Play + Private m_bPlay As Boolean = True + ' Coefficiente per valore Slider + Private m_SliderX As Double = 1 + + 'GRAPHICAL PROPERTIES + + 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 + If value Then + InitializeSimulation() + Else + CloseSimulation() + End If + m_IsExpanded = value + OnPropertyChanged("IsExpanded") + End If + End Set + End Property + + Private m_L1Name As String + Public Property L1Name As String + Get + Return m_L1Name + End Get + Set(value As String) + If value <> m_L1Name Then + m_L1Name = value + OnPropertyChanged("L1Name") + End If + End Set + End Property + + Private m_L1Value As String + Public Property L1Value As String + Get + Return m_L1Value + End Get + Set(value As String) + If value <> m_L1Value Then + m_L1Value = value + OnPropertyChanged("L1Value") + End If + End Set + End Property + + Private m_L2Name As String + Public Property L2Name As String + Get + Return m_L2Name + End Get + Set(value As String) + If value <> m_L2Name Then + m_L2Name = value + OnPropertyChanged("L2Name") + End If + End Set + End Property + + Private m_L2Value As String + Public Property L2Value As String + Get + Return m_L2Value + End Get + Set(value As String) + If value <> m_L2Value Then + m_L2Value = value + OnPropertyChanged("L2Value") + End If + End Set + End Property + + Private m_L3Name As String + Public Property L3Name As String + Get + Return m_L3Name + End Get + Set(value As String) + If value <> m_L3Name Then + m_L3Name = value + OnPropertyChanged("L3Name") + End If + End Set + End Property + + Private m_L3Value As String + Public Property L3Value As String + Get + Return m_L3Value + End Get + Set(value As String) + If value <> m_L2Value Then + m_L3Value = value + OnPropertyChanged("L3Value") + End If + End Set + End Property + + Private m_R1Name As String + Public Property R1Name As String + Get + Return m_R1Name + End Get + Set(value As String) + If value <> m_R1Name Then + m_R1Name = value + OnPropertyChanged("R1Name") + End If + End Set + End Property + + Private m_R1Value As String + Public Property R1Value As String + Get + Return m_R1Value + End Get + Set(value As String) + If value <> m_L2Value Then + m_R1Value = value + OnPropertyChanged("R1Value") + End If + End Set + End Property + + Private m_R2Name As String + Public Property R2Name As String + Get + Return m_R2Name + End Get + Set(value As String) + If value <> m_R2Name Then + m_R2Name = value + OnPropertyChanged("R2Name") + End If + End Set + End Property + + Private m_R2Value As String + Public Property R2Value As String + Get + Return m_R2Value + End Get + Set(value As String) + If value <> m_L2Value Then + m_R2Value = value + OnPropertyChanged("R2Value") + End If + End Set + End Property + + Private m_GCode As String + Public Property GCode As String + Get + Return m_GCode + End Get + Set(value As String) + If value <> m_GCode Then + m_GCode = value + OnPropertyChanged("GCode") + End If + End Set + End Property + + Private m_FValue As String + Public Property FValue As String + Get + Return m_FValue + End Get + Set(value As String) + If value <> m_FValue Then + m_FValue = value + OnPropertyChanged("FValue") + End If + End Set + End Property + + Private m_TName As String + Public Property TName As String + Get + Return m_TName + End Get + Set(value As String) + If value <> m_TName Then + m_TName = value + OnPropertyChanged("TName") + End If + End Set + End Property + + Private m_SValue As String + Public Property SValue As String + Get + Return m_SValue + End Get + Set(value As String) + If value <> m_SValue Then + m_SValue = value + OnPropertyChanged("SValue") + End If + End Set + End Property + + Private m_PlayPauseImage As String + Public ReadOnly Property PlayPauseImage As String + Get + Select Case m_bPlay + Case False + Return "/Resources/OptionPanel/MachiningOptionPanel/SimulationExpander/Pause.png" + Case True + Return "/Resources/OptionPanel/MachiningOptionPanel/SimulationExpander/Play.png" + Case Else + Return "" + End Select + End Get + End Property + + Private m_SliderValue As Double + Public Property SliderValue As Double + Get + Return m_SliderValue + End Get + Set(value As Double) + If value <> m_SliderValue Then + m_SliderValue = value + EgtSimSetStep(value * m_SliderX) + OnPropertyChanged("SliderValue") + End If + End Set + End Property + + ' Definizione comandi + Private m_cmdStep As ICommand + Private m_cmdPlayPause As ICommand + Private m_cmdStop As ICommand + +#End Region + +#Region "CONSTRUCTOR" + + Sub New() + Application.Msn.Register(Application.DRAWOPTIONPANEL_CLOSING, Sub() + If IsExpanded Then + ResetSimulation() + End If + End Sub) + End Sub + +#End Region + +#Region "COMMANDS" + +#Region "StepCommand" + + ''' + ''' Returns a command that create a new tool. + ''' + Public ReadOnly Property StepCommand As ICommand + Get + If m_cmdStep Is Nothing Then + m_cmdStep = New RelayCommand(AddressOf StepCmd, AddressOf CanStep) + End If + Return m_cmdStep + End Get + End Property + + ''' + ''' Creata the new tool. This method is invoked by the NewCommand. + ''' + Public Sub StepCmd(ByVal param As Object) + 'm_CurrProjPage.ClearMessage() + ' Se stato stop, devo avviare simulazione + If m_nStatus = SIM_ST.ST_STOP Then + m_nStatus = SIM_ST.ST_STEP + ExecSim() + ' Aggiorno bottone + 'SetPlayPauseBtnToPlay() + ' Alrimenti imposto solo il nuovo stato + Else + m_nStatus = SIM_ST.ST_STEP + ' Aggiornamenti per bottone Play/Pause + 'SetPlayPauseBtnToPause() + End If + End Sub + + ''' + ''' Returns true if the selected treeviewitem is valid for new tool creation. + ''' + Private Function CanStep(ByVal param As Object) As Boolean + Return True + End Function + +#End Region ' StepCommand + +#Region "PlayPauseCommand" + + ''' + ''' Returns a command that create a new tool. + ''' + Public ReadOnly Property PlayPauseCommand As ICommand + Get + If m_cmdPlayPause Is Nothing Then + m_cmdPlayPause = New RelayCommand(AddressOf PlayPause, AddressOf CanPlayPause) + End If + Return m_cmdPlayPause + End Get + End Property + + ''' + ''' Creata the new tool. This method is invoked by the NewCommand. + ''' + Public Sub PlayPause(ByVal param As Object) + 'm_CurrProjPage.ClearMessage() + If m_bPlay Then + ' Aggiorno bottone + m_bPlay = False + OnPropertyChanged("PlayPauseImage") + ' Eseguo + If m_nStatus = SIM_ST.ST_STOP Then + ' Lancio simulazione + m_nStatus = SIM_ST.ST_PLAY + ExecSim() + ' Aggiorno bottone + m_bPlay = True + OnPropertyChanged("PlayPauseImage") + ElseIf m_nStatus = SIM_ST.ST_PAUSE Then + m_nStatus = SIM_ST.ST_PLAY + End If + Else + ' Aggiorno bottone + m_bPlay = True + OnPropertyChanged("PlayPauseImage") + ' Se play o step, imposto stato pausa + If m_nStatus = SIM_ST.ST_PLAY Or m_nStatus = SIM_ST.ST_STEP Then + m_nStatus = SIM_ST.ST_PAUSE + End If + End If + End Sub + + ''' + ''' Returns true if the selected treeviewitem is valid for new tool creation. + ''' + Private Function CanPlayPause(ByVal param As Object) As Boolean + Return True + End Function + +#End Region ' PlayPauseCommand + +#Region "StopCommand" + + ''' + ''' Returns a command that create a new tool. + ''' + Public ReadOnly Property StopCommand As ICommand + Get + If m_cmdStop Is Nothing Then + m_cmdStop = New RelayCommand(AddressOf StopCmd, AddressOf CanStop) + End If + Return m_cmdStop + End Get + End Property + + ''' + ''' Creata the new tool. This method is invoked by the NewCommand. + ''' + Public Sub StopCmd(ByVal param As Object) + 'm_CurrProjPage.ClearMessage() + ' Se stato già stop, porto in home + If m_nStatus = SIM_ST.ST_STOP Then + ' Vado in home + EgtSimHome() + ' Imposto prima fase + EgtSetCurrPhase(1, True) + ' Aggiorno visualizzazione + EgtDraw() + ' Aggiorno dati CNC + ShowCncData() + End If + ' Imposto il nuovo stato + m_nStatus = SIM_ST.ST_STOP + End Sub + + ''' + ''' Returns true if the selected treeviewitem is valid for new tool creation. + ''' + Private Function CanStop(ByVal param As Object) As Boolean + Return True + End Function + +#End Region ' StopCommand + +#End Region + +#Region "METHODS" + + Private Sub InitializeSimulation() + ' Imposto prima fase + EgtSetCurrPhase(1) + ' Costringo ad aggiornare UI + UpdateUI() + ' Imposto stato corrente + m_nStatus = SIM_ST.ST_STOP + m_bPlay = True + m_SliderX = GetPrivateProfileDouble(S_SIMUL, K_SLIDERX, 1) + Dim SliderVal As Double = GetPrivateProfileDouble(S_SIMUL, K_SLIDERVAL, 10) + SliderValue = SliderVal + ' Porto la testa in home + EgtSimStart() + EgtSimHome() + LoadCurrTools() + EgtDraw() + ShowCncData() + End Sub + + Private Sub CloseSimulation() + ' Mi assicuro di terminare la simulazione + ResetSimulation() + ' Nascondo tutte le lavorazioni + 'HideAllMachinings() + ' Cancello eventuali messaggi + 'm_CurrProjPage.ClearMessage() + + End Sub + + Private Sub ResetSimulation() + ' Termino la simulazione + m_nStatus = SIM_ST.ST_STOP + EgtSimStop() + ' Salvo valore dello slider + Dim sVal As String = DoubleToString(SliderValue, 1) + WritePrivateProfileString(S_SIMUL, K_SLIDERVAL, sVal) + ' Torno alla prima fase + EgtSetCurrPhase(1, True) + ' Ripristino visibilità standard + 'EgtSetMachineLook(MCH_LOOK.TAB) + End Sub + + Private Sub ExecSim() + EgtSimStart() + LoadCurrTools() + EgtSimSetStep(SliderValue * m_SliderX) + While m_nStatus <> SIM_ST.ST_STOP + ' Se simulazione in svolgimento + If m_nStatus = SIM_ST.ST_PLAY Or m_nStatus = SIM_ST.ST_STEP Then + ' Eseguo movimento + Dim nMove As Integer + Dim bMove As Boolean = EgtSimMove(nMove) + ' Se arrivato a fine step e sono in step + If bMove Then + If m_nStatus = SIM_ST.ST_STEP And nMove = MCH_SIM.END_STEP Then + ' Imposto stato Pausa + m_nStatus = SIM_ST.ST_PAUSE + ' Aggiornamenti per bottone Play/Pause + 'SetPlayPauseBtnToPlay() + m_bPlay = True + OnPropertyChanged("PlayPauseImage") + End If + ' Se movimento non riuscito + Else + m_nStatus = SIM_ST.ST_STOP + m_bPlay = True + OnPropertyChanged("PlayPauseImage") + ' Aggiornamenti per bottone Play/Pause + 'SetPlayPauseBtnToPlay() + 'Select Case nMove + ' Case MCH_SIM.END_ + ' m_CurrProjPage.SetInfoMessage(EgtMsg(MSG_SIMULATIONPAGEUC + 1)) 'Simulazione completata + ' Case MCH_SIM.OUTSTROKE + ' Dim sInfo As String = String.Empty + ' EgtGetOutstrokeInfo(sInfo) + ' m_CurrProjPage.SetErrorMessage(EgtMsg(MSG_SIMULATIONPAGEUC + 2) & " " & sInfo) 'Extracorsa ... + ' Case MCH_SIM.DIR_ERR + ' m_CurrProjPage.SetErrorMessage(EgtMsg(MSG_SIMULATIONPAGEUC + 3)) 'Direzione utensile irraggiungibile + ' Case Else + ' m_CurrProjPage.SetErrorMessage(EgtMsg(MSG_SIMULATIONPAGEUC + 4)) 'Errore + 'End Select + End If + ' Aggiorno stato visualizzazione macchina (dipende anche da utensile) + 'UpdateMachView() + ' Aggiorno visualizzazione + EgtDraw() + ' Aggiorno dati CNC + ShowCncData() + Else + ' Per evitare di ciclare rapidissimamente e consumare inutilmente CPU + System.Threading.Thread.Sleep(1) + End If + '' Costringo ad aggiornare UI + UpdateUI() + End While + End Sub + + Private Sub ShowCncData() + ' Assi + ShowAxisNameVal(0, L1Name, L1Value) + ShowAxisNameVal(1, L2Name, L2Value) + ShowAxisNameVal(2, L3Name, L3Value) + ShowAxisNameVal(3, R1Name, R1Value) + ShowAxisNameVal(4, R2Name, R2Value) + ' Tipo di movimento e feed + ShowMoveTypeFeed() + ' Nome utensile e speed + ShowToolNameSpeed() + End Sub + + Private Function ShowAxisNameVal(ByVal nInd As Integer, ByRef sName As String, ByRef sVal As String) As Boolean + Dim sInfo As String = String.Empty + Dim dVal As Double = 0 + If EgtSimGetAxisInfoPos(nInd, sInfo, dVal) Then + sName = sInfo + sVal = If(nInd < 3, LenToString(dVal, -3), DoubleToString(dVal, -3)) + Return True + Else + sName = String.Empty + sVal = String.Empty + Return False + End If + End Function + + Private Function ShowMoveTypeFeed() As Boolean + Dim nG As Integer = 0 + Dim dFeed As Double = 0 + If EgtSimGetMoveInfo(nG, dFeed) Then + If nG <> 0 Then + GCode = "G" & nG.ToString() + FValue = "F" & LenToString(dFeed, 0) + Else + GCode = "G" & nG.ToString() + FValue = "" + End If + Return True + Else + GCode = "" + FValue = "" + Return False + End If + End Function + + Private Function ShowToolNameSpeed() As Boolean + Dim sTool As String = String.Empty + Dim dSpeed As Double = 0 + If EgtSimGetToolInfo(sTool, dSpeed) Then + TName = sTool + SValue = "S" & DoubleToString(dSpeed, 0) + Return True + Else + TName = "" + SValue = "" + Return False + End If + End Function + + Private Function LoadCurrTools() As Boolean + '' Imposto la lama corrente + 'Dim sSaw As String = m_MainWindow.m_CurrentMachine.sCurrSaw + 'If Not EgtLoadTool("H1", 1, sSaw) Then + ' Return False + 'End If + '' Imposto eventuale secondo utensile montato + 'If m_MainWindow.m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.SAWANDAUXTOOL Then + ' Dim sTool As String = m_MainWindow.m_CurrentMachine.sCurrDrill + ' If String.IsNullOrEmpty(sTool) Then sTool = m_MainWindow.m_CurrentMachine.sCurrMill + ' If Not String.IsNullOrEmpty(sTool) AndAlso Not EgtLoadTool("H1", 2, sTool) Then + ' Return False + ' End If + 'End If + Return True + End Function + + Private Sub UpdateMachView() + ' Se cambiato utensile, aggiorno stato visualizzazione macchina + Dim sTool As String = String.Empty + Dim dSpeed As Double = 0 + If EgtSimGetToolInfo(sTool, dSpeed) Then + If sTool <> m_sCurrTool Then + m_sCurrTool = sTool + EgtSetMachineLook(m_nMachLook) + End If + End If + End Sub + +#End Region + + End Class + +End Namespace \ No newline at end of file diff --git a/ProjectPage/ProjectViewModel.vb b/ProjectPage/ProjectViewModel.vb index d0e05b6..0997df0 100644 --- a/ProjectPage/ProjectViewModel.vb +++ b/ProjectPage/ProjectViewModel.vb @@ -97,6 +97,7 @@ Namespace EgtCAM5 RegisterControllerCommands() ManageTopCommandBar() ' Funzione che contiene la registrazione di tutti le funzioni del DrawPanel + RegisterGridViewPanelCommands() RegisterDrawPanelCommands() ' Funzione che contiene la registrazione di tutti i comandi del DrawOptionPanel RegisterDrawOptionPanelCommands() @@ -241,7 +242,7 @@ Namespace EgtCAM5 ''' ''' Method that manage the visibility of the ProjectPage's Panels ''' - Sub RegisterDrawPanelCommands() + Sub RegisterGridViewPanelCommands() Application.Msn.Register(Application.WIREFRAME, Sub() m_ProjectScene.WireFrame() End Sub) @@ -346,6 +347,9 @@ Namespace EgtCAM5 Application.Msn.Register(Application.CPLANEOBJ, Sub() m_Controller.ExecuteCommand(Controller.CMD.GRID_OBJ) End Sub) + End Sub + + Sub RegisterDrawPanelCommands() Application.Msn.Register(Application.POINT, Sub() If (Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control Then m_Controller.ExecuteCommand(Controller.CMD.FRAME) @@ -369,13 +373,6 @@ Namespace EgtCAM5 m_Controller.ExecuteCommand(Controller.CMD.LINEPVL) End If End Sub) - Application.Msn.Register(Application.CIRCLE, Sub() - If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then - m_Controller.ExecuteCommand(Controller.CMD.CIRCLECP) - Else - m_Controller.ExecuteCommand(Controller.CMD.CIRCLECD) - End If - End Sub) Application.Msn.Register(Application.ARCPDP, Sub() If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then If (Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control Then @@ -387,14 +384,7 @@ Namespace EgtCAM5 m_Controller.ExecuteCommand(Controller.CMD.ARCPVP) End If End Sub) - Application.Msn.Register(Application.FILLET, Sub() - If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then - m_Controller.ExecuteCommand(Controller.CMD.FILLET) - Else - m_Controller.ExecuteCommand(Controller.CMD.CHAMFER) - End If - End Sub) - Application.Msn.Register(Application.POLYGON, Sub() + Application.Msn.Register(Application.POLYGON, Sub() If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then m_Controller.ExecuteCommand(Controller.CMD.POLYGON) Else @@ -419,22 +409,6 @@ Namespace EgtCAM5 m_Controller.SetLastInteger(GDB_ID.SEL) m_Controller.ExecuteCommand(Controller.CMD.DELETE) End Sub) - Application.Msn.Register(Application.CHANGECOLOR, Sub() - If (Keyboard.Modifiers And ModifierKeys.Control) = ModifierKeys.Control Then - m_Controller.ExecuteCommand(Controller.CMD.CHANGEALPHA) - ElseIf (Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift Then - m_Controller.ExecuteCommand(Controller.CMD.RESETCOLOR) - Else - m_Controller.ExecuteCommand(Controller.CMD.CHANGECOLOR) - End If - End Sub) - Application.Msn.Register(Application.BREAKCURVE, Sub() - If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then - m_Controller.ExecuteCommand(Controller.CMD.BREAKCURVE) - Else - m_Controller.ExecuteCommand(Controller.CMD.SPLITCURVE) - End If - End Sub) Application.Msn.Register(Application.JOINCURVE, Sub() If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then m_Controller.SetLastBoolean(False) @@ -443,27 +417,6 @@ Namespace EgtCAM5 End If m_Controller.ExecuteCommand(Controller.CMD.JOINCURVE) End Sub) - Application.Msn.Register(Application.ROTATE, Sub() - If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then - m_Controller.ExecuteCommand(Controller.CMD.ROTATE) - Else - m_Controller.ExecuteCommand(Controller.CMD.ROTATE3D) - End If - End Sub) - Application.Msn.Register(Application.MIRROR, Sub() - If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then - m_Controller.ExecuteCommand(Controller.CMD.MIRROR) - Else - m_Controller.ExecuteCommand(Controller.CMD.MIRROR3D) - End If - End Sub) - Application.Msn.Register(Application.SCALE, Sub() - If (Keyboard.Modifiers And ModifierKeys.Shift) <> ModifierKeys.Shift Then - m_Controller.ExecuteCommand(Controller.CMD.SCALE) - Else - m_Controller.ExecuteCommand(Controller.CMD.SCALE3D) - End If - End Sub) End Sub Sub RegisterDrawOptionPanelCommands() diff --git a/Resources/DrawPanel/Chamfer.png b/Resources/DrawPanel/Chamfer.png new file mode 100644 index 0000000000000000000000000000000000000000..a10190dc374bfc2121bf9c9b382d4bdb3692d699 GIT binary patch literal 422 zcmV;X0a^ZuP)Xex-SeeGpzKrTlng_@{^vB7Iw7=?hD7HoM+%Ok0!Z$L|;`$Glus4RamzZh125 zyr67Qnc-AnGvFc9ds9{;ebd)5LXm05H}Q05Em40P-0XXphT#&K(SG2f?}c421Q1R z07XKH0){x$j8&w>C_bbUIX)kRO)AYEsX=Yc{u5(p8$L1Ux3f-ty1!Ys%e=1USAar0s zP|#Tf5fpU)jEM+#c5|~VZE2@PW*M}0O)9q9->qw#rZ&0elHQNpdB=9?C37U#Rv4@g zj=b;ZUfzA)_kHe@?+YYJ61dwM4DQ0VMQV%GJwXc11g;MZ1UZ&F^4RX0saz-d`toGc zbeP#0jq}@BAz5TZk&xYL2w(`j>av-}orJ05={-gLxy}b=`cyD5I5Ipuf|Ynm4rqx% z5cIbE@u_y~2hCpr8h;R+9$QJ9-XBBBl7brvS!L` zwj`D#kwQ_DI_2=GjEoJ+lkAi;QxcqxT>NBYz6yYq+g8d*hENx0yQapEN8@EvG@g%D zpBVh|*hfFUTEFe|twkQsY5SB$k)&mGV!|PJZzHA7+b$C zq1zn}TwX~cw76J4KR?&4y*Dtq+`S$`Y8#HT{F%O)`sUBhKB9{hilV?q5VX>tnw|Bv zU-q{v{ZpTx_ni4_!MD-3OCc5pRQ3M-PhvRM=%u^A(Hs&LLf>YJm{gwmBYAefX{EBG`aG85npAG#@|A`Iuw$)~ix0_ z6~=H{gW*6CJB+4bKFZEEH8zl0HD$u_VFZR7GjYG)&s6Ssn9eVBw`oP4O!5U*o2y%k z!Ki@*CPzx>@GYTB8lk)Lpa%l|KgpSD$X>dTB>B>v(%t;=hjTrBp+Ma?{X?p#6`^0U z9MUE9y#*HYcJuEm=gzgrmBM!$uhG4vwe9RPl_eX|(rX8N{K-s?Yo9p%g7+EWoa2y9k z_B;^i`vsi8(3-VIhc@F6j)_^OZYj!{)V)mVUjYUH8W)!!Qhe46^tD0Xk&KJ$Q*0$eP3XVjY~pfDX{{b#kE^7DZ7GngS6(7%(Wl zN9yw^A&I{nhZbiMQ4yhG+RT8YX#f-e1E#guB=IP4H;E{)_V}9wj9{*kCJa+-z=)Rtaom-v*q4FW*``Gy5L!WjSgw_sf0-?u{GH{+Dk7+!MRxq%H#EOaQdN zx2jMj;LRN4%zT~Q70dn~Lkcp^0DyG6+)v}@831s5i>Xnx0tv&kEJ05N4kgtq62|o- zVYr|0bCjBl0A2I(e}mX`nk N002ovPDHLkV1ka6srdi^ literal 0 HcmV?d00001 diff --git a/Resources/DrawPanel/CircleCP.png b/Resources/DrawPanel/CircleCP.png new file mode 100644 index 0000000000000000000000000000000000000000..c825800dc38a0350c455bb6c964167d2ecdbbe8b GIT binary patch literal 375 zcmV--0f_#IP)=MNI(dtd!>#3xd3MH8i^`_jAIk9g2+!i zj&*>UkyHrx)_E=F6xVp-JMW}5bE+j-9nj>f^sV%yqC~){2>4JX@B#PXYZ1m&P{*f~ z(=@NSvuG{k!}jF8UxIxAeA_VmlM8Q*z0akRneOT~`6hX`kRj3_tJL%k0P%2@i zdS~=&+CBh2*7Ac=WvfQl+r^#=wU+=G8fyBehTP5JQALfz*;lMx@R95jbxbtne9tm&y;L{=BflLWHlsoG#(Ll_^CZUU-t`ZU;uq*A2N z`IZ@-z+S5qYYOGtCNxL~erK0FiFcnklte~%N;#$eg;J{N2afq(G(t6|+ri2Aa@Fv; z2SkeJ#-dQX0R1VwDpFn~-*lhC+<>n)6OIh?GjS+m!I&4Mh4VF2^tcs749b1ra8Q2* c>PLV90O~Hdo=U~?!T literal 0 HcmV?d00001 diff --git a/Resources/DrawPanel/PolygonSide.png b/Resources/DrawPanel/PolygonSide.png new file mode 100644 index 0000000000000000000000000000000000000000..c90cd4bf39657dd193a5cd9e52dcb030da9db3b6 GIT binary patch literal 620 zcmV-y0+aoTP)601yJ9Df?t7HA4Byj zK=pw*3y9J~grN@PL;;?tcc6x&4nPfiK#qfu%y|Gc=Kw{H0)hl29|ln9r~o9h63B8C z5C|Zpg#(m02urAg%oQNVQON1QfJ%-sASQj{%Q62+$uT52Yypzl3Zyt{12Mr&rlXLP z#Rj4rg;oR$1Y%-eZh2{ZDS_#Ox zWCDebnm}x>rmA7o@*Guzom$C&*p36JuIf)r&1Crd=Xc4X`E$;a(s3xMZkXTG3Myq7 z3W4@bAZQ=4102}}CHEMdvJ}<-y=5@iP{Z)|-CLsceTZ#fn9X9qVDog(i>jOiNvd{6 z&3s}{to+QTXu<}ptZqDHU_Sqbpq{^mA`JVu#2FZVF)&DL815&!<4ej=(5fSMsti`w z+~u0F=OwXvzGb+GUkGhc4zp2dqlu$NM_oo8HB=o15MTfmDvP+;`#bOe0000-4W#^l*dK_ws2x&_=;hS8GiUF9{`@)D-qB$j4hJa#DNtyLfeqji5@O;OlxAf6 zF9h@=ACsLo1Jm2TmBkN_A4|&NVZc@W+UOtE9 zgwD>+{_D@5KcDYEe7NG^{sUfUAp~&{w}=>%xUeMy+Y1y2;RC-Pt`Yxnv2XV8efew1 z%6-z3l6;@PeCB=e^2MA}Cr-*k(@+)6LCiwT#tcmFxJgYb|9`$>_<40w@bBH3J4kkv zxP$~JBO~MYS8v`(-hcRD*LNZBBv2XxN0}g}{(r_V6y@5VH)gp1K2W-VMC2=o ze)amb+6m^M=3iU}T%a@r3?U9`%M+3u#mvmiz|Y5DFDob4|8qlKEZ>t&a5;G@C3Z#*p*uvUDX@bC1i%ggYi8rS zNRw73uPpJ75)u-gs-U3I1Xn1ewS(FYVwDU0imge5)lou%f;(m9WOGo0nU#Awibu~OLlGpI*3g*svchpl#$%A1W*g|*PRu?poSZ< zAq9#uRt3*OLQP^uN(MOop6pEd`}RuCpVt@kK}``{jsiJ`S=@9jC=G$qCdnNKvTFMy zwV<}V*S{~%3>g0X;sIA3|NpUq3PxZKy8x71OpIfw>ZsANgi%M0I*JSc5MThH8%D(z SmHwCj0000LmDNeeoMsScc zRiErT>G5@i9J|zsQH^C54r@*PeZv+LJv|@xVZBa zr8rH0j9K0iM)uRmr|UbvsisDJDswf@Ao~)CRun@kuneq)E(s%Ii9g%Xv3QiCbq3$d zUm@%eu-kuHW&oqW!sK&JjdG0vY)_cl$04f;0I+3Y3NpadYDNOgE6gbYU`eho(wR_4 z7Y;N>dzu(fq_0!jV1+v5B`70>f=Y@Ar4X2sdA-TRWS6tItGnaJp}V_M2EKJlK%xCI)Sk7J#)0IH zR{OiphO(i4^|QTHE^A2Xx-~z=F&XDBPh0q+FofJy06PKl`EI<1F1B1q8-GTn@y7 zKwJS8>j2{SATgk$U9maLqjRy`Pi8hHavdS{_8HsK_QG9Q9R;*-HPB)~sKZtRaVW?^ zKyhWD_)H)>4T#gx9kf$O-Ceh_Cl_m_jL!V@QuS65(rEiOw|;mCF748!_297L-ht&m3@HS*e1_`s99kDVD` ze8efw%E9%XQC;aA-5g~&VdIVqBA)KJ9-&2X>HvFnr`tj4BzZ?FFu~6GVcpW9Grow=)u48(3{x2;YME7!v7zfeSQN%ikq{0&&{Qrk2 zTjZI6G5O`~5w<-Wj$>2%^A8idzz>ES#5jl|M=>%o{DV2jnCVIV%=WydK~eX?95k;h zy@{GpO}3+${{Cd7g@f=$->*maRtmp+^#hmuTgLZ4r*@S!(IQhYj*jFFWk&%77yv_t VF99PtC&K^$002ovPDHLkV1jN=Hv0eo literal 0 HcmV?d00001 diff --git a/Resources/DrawPanel/SplitCurve.png b/Resources/DrawPanel/SplitCurve.png new file mode 100644 index 0000000000000000000000000000000000000000..25386eb5239433684fc2356aaf18d6257c51741e GIT binary patch literal 675 zcmV;U0$lxxP){zi%13?ho3-%t`D#kA`SP7y=ZLCZXtVBG~%EqLyu+emag+ve(RC4(OW1;m~ z*l2TtSVt5)A$~wu-5YI9f{| zU<9}$!6T9m3*Q3B`AK6YS8E=T&xd9St$c_#B;QKa{p6KW&Q-m zb(HFKBe-G51CeT=p|WOOm5w&4um~x4_%s`( ztKIw9Ph6cU3mZL0s1Yf<+k~1$%IPK{f)V`{6p@NZb!mJHFaX>*mLYP1L7D&n002ov JPDHLkV1gVDGuHqB literal 0 HcmV?d00001 diff --git a/Resources/OptionPanel/MachiningOptionPanel/SimulationExpander/Pause.png b/Resources/OptionPanel/MachiningOptionPanel/SimulationExpander/Pause.png new file mode 100644 index 0000000000000000000000000000000000000000..f7c517691d915b76f4d06dc501e82669004603e7 GIT binary patch literal 394 zcmeAS@N?(olHy`uVBq!ia0vp^?I6s-1|)5sdx0d_lDyqr82*Fcg1yTp14TFsJR*x3 z82FBWFymBhK53vJdx@v7EBk#;Az@PspZD|Z7#JAEJzX3_DsH{KZOD7TfXDTqg;x6_ z?p=$tyX2W>UQ(UOeh7fHbf>#0Y?3M|q5 if#f5w<_4hOW~(s>@^fBY=M)7DH3m;tKbLh*2~7YNSa^g0 literal 0 HcmV?d00001 diff --git a/Resources/OptionPanel/MachiningOptionPanel/SimulationExpander/Play.png b/Resources/OptionPanel/MachiningOptionPanel/SimulationExpander/Play.png new file mode 100644 index 0000000000000000000000000000000000000000..322e67eb2879211399599168af01ef0974860cc8 GIT binary patch literal 549 zcmeAS@N?(olHy`uVBq!ia0vp^?I6s-1|)5sdx0d_lDyqr82*Fcg1yTp14TFsJR*x3 z82FBWFymBhK53vJdx@v7EBk#;Az?FK!$Qt`3=E8$JY5_^DsH{KyOFoaL8Kw^{Eh6K zIR|Y^cx3#JU9g?g*!F_ue3WyNQ;1&w`}dj_`)o8GXb5hc&=wWNbWqWPrTu|`Op|i~ z2Op55g34uS2g(K}XaA0CbCE7PBHZluYD8Pvj zb!482CWxn;y#JnhZffVk24*gc1rWkH6qyGTpYk?8sK9}dU8La8($ksyEnWVfsGC>N zGgHLZzWa0Q;kV3u8V?$nunh?GkaPS>ev|wp}ARyD^ z4CHX4at|s3Wli=xyDolWdGwMgL0e|$+_``Lb#U;RV#BA4_Q&qfvJF#cWEQdj6UW|7 zx_)}0N86vU)^{@N-}YbMJ$Ffh%-lMgU*%1qD@{qTqvsvMzFA@D841SBDl zsUiFrO24FgJZN~5+k4wsUZsq$Qb82tZVwc1D4T3wA6co*%_uMyfZGq>J3B`{FDiZz=?K;GapvA-7molnz1R6US4|A09oZn5c7o=kDJX1!IR)k} uf(jlnfRs8GPd&o5!xHKbe46WbF>IZ~&v|cxuK_R|89ZJ6T-G@yGywq9&4n=l literal 0 HcmV?d00001 diff --git a/ToolsDbPage/ToolsDbView.xaml b/ToolsDbPage/ToolsDbView.xaml index c6302b9..d2bab09 100644 --- a/ToolsDbPage/ToolsDbView.xaml +++ b/ToolsDbPage/ToolsDbView.xaml @@ -173,11 +173,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -