diff options
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels')
6 files changed, 101 insertions, 1004 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/CalibrationDataViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/CalibrationDataViewVM.cs index fd69fef35..b34ef83bc 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/CalibrationDataViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/CalibrationDataViewVM.cs @@ -6,7 +6,6 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL.Calibration; -using Tango.BL.Entities; using Tango.Core.Commands; using Tango.MachineStudio.Common; using Tango.MachineStudio.Common.Notifications; @@ -107,14 +106,5 @@ namespace Tango.MachineStudio.RML.ViewModels _notification.ShowError("An error occurred while trying to export the calibration data."); } } - - public void ApplyCalibrationData(LiquidType liquidType, List<CalibrationDataPointVM> newpoints) - { - CalibrationDataVM vm = LiquidsCalibrationData.FirstOrDefault(x => x.LiquidType == liquidType); - if(vm != null) - { - newpoints.ForEach(x => vm.CalibrationPoints.Add(x)); - } - } } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs deleted file mode 100644 index f04eccd90..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs +++ /dev/null @@ -1,551 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.BL.Entities; -using Tango.Core; -using Tango.Core.Commands; -using Tango.MachineStudio.RML.Models; -using Tango.SharedUI; -using OxyPlot; -using OxyPlot.Wpf; -using OxyPlot.Annotations; -using Tango.ColorCalibration; -using Tango.PMR.ColorLab; -using Tango.Logging; -using Tango.MachineStudio.Common.Notifications; -using System.Text.RegularExpressions; -using Microsoft.Win32; - -namespace Tango.MachineStudio.RML.ViewModels -{ - public class ColorCalibrationViewVM : ExtendedObject - { - private IColorCalibrator _calibrator; - private ILinearizationMeasurements _linearizationMeasurementscalibrator; - private INotificationProvider _notification; - - #region Properties - - private Rml _rml; - public Rml RML - { - get { return _rml; } - set { _rml = value; RaisePropertyChangedAuto(); } - } - - private BL.Entities.LiquidType _liquidType; - - public BL.Entities.LiquidType LiquidType - { - get { return _liquidType; } - set { _liquidType = value; RaisePropertyChangedAuto(); RaisePropertyChanged("LiquidTypeName"); } - } - - private List<BL.Entities.LiquidType> _liquidTypes; - - public List<BL.Entities.LiquidType> LiquidTypes - { - get { return _liquidTypes; } - set { _liquidTypes = value; } - } - - - private ObservableCollection<CalibrationMeasurementModel> _measurements; - public ObservableCollection<CalibrationMeasurementModel> Measurements - { - get - { - return _measurements; - } - set - { - _measurements = value; RaisePropertyChangedAuto(); - } - } - - - private double _factor; - - public double Factor - { - get { return _factor; } - set { _factor = value; RaisePropertyChangedAuto(); } - } - - private string _errorMessage; - - public string ErrorMessage - { - get { return _errorMessage; } - set { _errorMessage = value; RaisePropertyChangedAuto(); } - } - private bool _hasError; - - public bool HasError - { - get { return _hasError; } - set { _hasError = value; RaisePropertyChangedAuto(); } - } - - public RelayCommand ImportDataCommand { get; set; } - public RelayCommand CreateGraphCommand { get; set; } - public RelayCommand CreateLinearizationGraphCommand { get; set; } - public RelayCommand ExportGraphCommand { get; set; } - public RelayCommand ApplyCalibrationDataCommand { get; set; } - - - public string LiquidTypeName - { - get { return LiquidType == null ?"" : LiquidType.Name; } - } - - public Plot PlotControl { get; set; } - private IList<DataPoint> _points; - /// <summary> - /// Binding to ItemsSource of line chart. - /// </summary> - public IList<DataPoint> Points - { - get { return _points; } - set - { - _points = value; - RaisePropertyChangedAuto(); - } - } - private IList<DataPoint> _targetPoints; - /// <summary> - /// Binding to ItemsSource of line chart. - /// </summary> - public IList<DataPoint> TargetPoints - { - get { return _targetPoints; } - set - { - _targetPoints = value; - RaisePropertyChangedAuto(); - } - } - private int _step; - public int XStep - { - get { return _step; } - set { _step = value; RaisePropertyChangedAuto(); } - } - - private double _from; - /// <summary> - /// From use to binding to bottom axis min value - /// </summary> - public double From - { - get { return _from; } - set - { - _from = value; RaisePropertyChangedAuto(); - } - } - - private double _to; - /// <summary> - /// To use to binding to bottom axis max value - /// </summary> - public double To - { - get { return _to; } - set - { - _to = value; RaisePropertyChangedAuto(); - } - } - - private double _LabMinVal; - - public double LabMinVal - { - get { return _LabMinVal; } - set { _LabMinVal = value; RaisePropertyChangedAuto(); } - } - - private double _LabMaxVal; - - public double LabMaxVal - { - get { return _LabMaxVal; } - set { _LabMaxVal = value; RaisePropertyChangedAuto(); } - } - - public Plot LABLinearizationPlotControl { get; set; } - public Plot LinearizationPlotControl { get; set; } - private IList<DataPoint> _linearizationPoints; - /// <summary> - /// Binding to ItemsSource of line chart. - /// </summary> - public IList<DataPoint> LinearizationPoints - { - get { return _linearizationPoints; } - set - { - _linearizationPoints = value; - RaisePropertyChangedAuto(); - } - } - - private IList<DataPoint> _LPoints; - - public IList<DataPoint> LPoints - { - get { return _LPoints; } - set { _LPoints = value; } - } - - private IList<DataPoint> _APoints; - - public IList<DataPoint> APoints - { - get { return _APoints; } - set { _APoints = value; } - } - - private IList<DataPoint> _BPoints; - - public IList<DataPoint> BPoints - { - get { return _BPoints; } - set { _BPoints = value; } - } - - - #endregion - - public ColorCalibrationViewVM(INotificationProvider notification) - { - _notification = notification; - Measurements = new ObservableCollection<CalibrationMeasurementModel>() - { - new CalibrationMeasurementModel(), - new CalibrationMeasurementModel(), - new CalibrationMeasurementModel(), - }; - Factor = 0; - HasError = false; - ImportDataCommand = new RelayCommand(ImportDataForCalcFactorExcel); - CreateGraphCommand = new RelayCommand(CreateGraph); - CreateLinearizationGraphCommand = new RelayCommand(CreateLinearizationGraph); - ExportGraphCommand = new RelayCommand(ExportGraph); - ApplyCalibrationDataCommand = new RelayCommand(ApplyCalibrationData); - this.Points = new List<DataPoint>(); - TargetPoints = new List<DataPoint>(); - LinearizationPoints = new List<DataPoint>(); - LPoints = new List<DataPoint>(); - APoints = new List<DataPoint>(); - BPoints = new List<DataPoint>(); - } - - public void Loading() - { - LiquidType = LiquidTypes.Count > 0 ? LiquidTypes[0] : null; - _calibrator = new DefaultColorCalibrator(); - _linearizationMeasurementscalibrator = new DefaultColorCalibrator(); - - } - - public void ClearResults() - { - Points.Clear(); - TargetPoints.Clear(); - ErrorMessage = ""; - HasError = false; - Factor = 0.0; - } - - private double GetLiquidFactor() - { - try - { - CalibrationInput conversionInput = new CalibrationInput(); - Measurements.ToList().ForEach(x => conversionInput.Measurements.Add(new CalibrationMeasurement { L = x.L, A = x.A, B = x.B, NanoliterPerCentimeter = x.Ink })); - conversionInput.LiquidType = PMR.ColorLab.LiquidType.TryParse(_liquidType.Type.ToString(), out PMR.ColorLab.LiquidType outValue) ? outValue : PMR.ColorLab.LiquidType.Black; - - - LAB lab; - if (ColorCalibrationExt.TargetLiquidTypeToLAB.TryGetValue(_liquidType.Type, out lab)) - { - conversionInput.TargetL = lab.L; - conversionInput.TargetA = lab.A; - conversionInput.TargetB = lab.B; - } - CalibrationOutput result = _calibrator.GetLiquidFactor(conversionInput); - - ErrorMessage = result.ErrorMessage; - HasError = false == String.IsNullOrEmpty(ErrorMessage); - - return result.LiquidFactor; - } - catch (Exception ex ) - { - HasError = true; - ErrorMessage = "Error occurred while trying to call GetLiquidFactor."; - LogManager.Log(ex, "Error occurred while trying to call GetLiquidFactor."); - } - return 0.0; - } - - private void ImportDataForCalcFactorExcel() - { - OpenFileDialog dlg = new OpenFileDialog(); - - try - { - dlg.Title = $"Import excel file for calculate Factor"; - dlg.Filter = "Excel Files|*.xlsx"; - if (dlg.ShowDialog().Value) - { - ClearResults(); - - List<ColorLinearizationModel.LinearizationDataItem> items;//List<LinearizationDataItem> items - ColorLinearizationModel model = new ColorLinearizationModel(); - string error = ""; - model.GetDataFromFile(dlg.FileName, out items, ref error); - if (false == String.IsNullOrEmpty(error) || items == null || items.Count == 0) - { - _notification.ShowError("An error occurred while trying to import data form the selected excel file. Please check the file format if valid and is available to read."); - return; - } - Measurements.Clear(); - items.ForEach(x => Measurements.Add(new CalibrationMeasurementModel(x))); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error importing excel file " + dlg.FileName); - _notification.ShowError("An error occurred while trying to import the selected excel file. Please check the file format if valid and is available to read."); - } - } - #region CreateGraph - - private async void CreateGraph(object obj) - { - if (_liquidType == null) - return; - ClearResults(); - PlotControl.InvalidatePlot(true); - string labType = ColorCalibrationExt.DisplayLiquidTypeToLABType[_liquidType.Type]; - await Task.Factory.StartNew(() => - { - Factor = GetLiquidFactor( ); - }); - - DataPoint targetPoint = GetTargetPoint(); - - To = 0; - From = 0; - - Measurements.ToList().ForEach(x =>{ Points.Add(new DataPoint(x.Ink, labType == "L" ? x.L : x.B)); - TargetPoints.Add(new DataPoint(x.Ink, targetPoint.Y)); }); - - _to = labType == "L"? 100 : 128; - _from = labType == "L" ? 0 : -127; - - RaisePropertyChanged("To"); - RaisePropertyChanged("From"); - XStep = (int)(Points.Count / 6); - RaisePropertyChanged("CalibrationType"); - PlotControl.InvalidatePlot(true); - - } - - private DataPoint GetTargetPoint() - { - var listValues = Measurements.ToList(); - if (listValues.Count == 0 || Factor <=0) - return new DataPoint(0, 0); - - string labType = ColorCalibrationExt.DisplayLiquidTypeToLABType[_liquidType.Type]; - - var left = listValues.Where(y => y.Ink == listValues.Min(x => x.Ink)).ToList().First(); - var right = listValues.Where(y => y.Ink == listValues.Max(x => x.Ink)).ToList().First(); - // Normalize start/end to left right to make the offset calc simpler. - DataPoint leftPoint = new DataPoint(left.Ink, labType == "L" ? left.L : left.B); - DataPoint rightPoint = new DataPoint(right.Ink, labType == "L" ? right.L : right.B); - - double deltaX = rightPoint.X - leftPoint.X; - double deltaY = rightPoint.Y - leftPoint.Y; - - // prevents division by zero exceptions. - if (deltaX == 0 ) - return new DataPoint(0, 0); - - double slope = deltaY / deltaX; - double offset = leftPoint.Y - leftPoint.X * slope; - double calculatedY = Factor * slope + offset; - - return new DataPoint(Factor, calculatedY); ; - } - - #endregion - #region CreateLinearizationGraph - - private async void CreateLinearizationGraph(object obj) - { - if (_liquidType == null ) - return; - - string labType = ColorCalibrationExt.DisplayLiquidTypeToLABType[_liquidType.Type]; - - ColorLinearizationModel model = new ColorLinearizationModel(); - string fileName = GetInkDataFileOpen();// @"C:\Test\Test Input Lineration.xlsx";//dialog to open file - if (fileName == null) - return; - - LinearizationPoints.Clear(); - LinearizationPlotControl.InvalidatePlot(true); - LPoints.Clear(); - APoints.Clear(); - BPoints.Clear(); - LabMinVal = LabMaxVal = 0; - LABLinearizationPlotControl.InvalidatePlot(true); - - List<ColorLinearizationModel.LinearizationDataItem> items; - string errors = ""; - model.GetDataFromFile(fileName, out items, ref errors); - if(false == String.IsNullOrEmpty(errors) || items == null || items.Count == 0) - { - _notification.ShowError("An error occurred while trying to import data form the selected excel file. Please check the file format if valid and is available to read."); - return; - } - - List<double> outputPoints = new List<double>(); - - await Task.Factory.StartNew(() => - { - outputPoints = GetLinearizationMeasurements(items); - }); - - LabMinVal = items.Min(x => Math.Min(x.L, Math.Min(x.A, x.B))); - LabMaxVal = items.Max(x => Math.Max(x.L, Math.Max(x.A, x.B))); - foreach (var labItem in items) - { - LPoints.Add(new DataPoint(labItem.InkPercentage, labItem.L)); - APoints.Add(new DataPoint(labItem.InkPercentage, labItem.A)); - BPoints.Add(new DataPoint(labItem.InkPercentage, labItem.B)); - } - LABLinearizationPlotControl.InvalidatePlot(true); - - if (outputPoints == null || outputPoints.Count != items.Count) - return; - - foreach (var nw in items.Zip(outputPoints, Tuple.Create)) - { - LinearizationPoints.Add(new DataPoint(nw.Item1.InkPercentage, nw.Item2)); - } - - LinearizationPlotControl.InvalidatePlot(true); - } - - /// <summary> - /// Open file dialog and get name of file - /// </summary> - /// <returns></returns> - private String GetInkDataFileOpen() - { - OpenFileDialog dlg = new OpenFileDialog(); - dlg.Title = "Select Ink data file"; - dlg.Filter = "Excel |*.xlsx"; - if (dlg.ShowDialogCenter()) - { - return dlg.FileName; - } - - return null; - } - - private List<double> GetLinearizationMeasurements(List<ColorLinearizationModel.LinearizationDataItem> items) - { - try - { - LinearizationInput linearizationInput = new LinearizationInput(); - items.ForEach(x => linearizationInput.Measurements.Add(new LinearizationMeasurement { L = x.L, A = x.A, B = x.B, InkPercentage = x.InkPercentage })); - linearizationInput.LiquidType = PMR.ColorLab.LiquidType.TryParse(_liquidType.Type.ToString(), out PMR.ColorLab.LiquidType outValue) ? outValue : PMR.ColorLab.LiquidType.Black; - - LinearizationOutput result = _linearizationMeasurementscalibrator.GetLinearizationMeasurements(linearizationInput); - - if(!String.IsNullOrEmpty(result.ErrorMessage)) - { - LogManager.Log(result.ErrorMessage, "GetLinearizationMeasurements returns error." + result.ErrorMessage); - InvokeUI(() => - { - _notification.ShowError("Linearization failed. " + result.ErrorMessage); - }); - } - - LAB lab; - if (ColorCalibrationExt.TargetLiquidTypeToLAB.TryGetValue(_liquidType.Type, out lab)) - { - linearizationInput.TargetL = lab.L; - linearizationInput.TargetA = lab.A; - linearizationInput.TargetB = lab.B; - } - return result.InkPercentage.ToList(); - } - catch (Exception ex) - { - LogManager.Log(ex, "Error occurred while trying to call GetLinearizationMeasurements."); - } - return null; - } - #endregion - - #region Export graph - /// <summary> - /// Exports the graph point to Excel file. - /// </summary> - protected void ExportGraph() - { - SaveFileDialog dlg = new SaveFileDialog(); - try - { - dlg.Title = $"Export excel calibration file for {LiquidType.Name}"; - dlg.Filter = "Excel Files|*.xlsx"; - dlg.DefaultExt = ".xlsx"; - dlg.FileName = $"CData_{LiquidType.Name}_v{LiquidType.Version}.xlsx"; - if (dlg.ShowDialog().Value) - { - List<CalibrationPoint> points = new List<CalibrationPoint>(); - LinearizationPoints.ToList().ForEach(x=> points.Add(ToCalibrationPoint(x))); - BL.Calibration.CalibrationHelper.ExportCalibrationDataToExcel(points, dlg.FileName); - } - } - catch (Exception ex) - { - LogManager.Log(ex, "Error exporting excel file " + dlg.FileName); - _notification.ShowError("An error occurred while trying to export the calibration data."); - } - } - public CalibrationPoint ToCalibrationPoint(DataPoint point) - { - return new CalibrationPoint() - { - X = point.X, - Y = point.Y, - }; - } - - /// <summary> - /// Applies the calibration data. - /// </summary> - protected void ApplyCalibrationData() - { - if (LinearizationPoints.Count == 0) - return; - - List<CalibrationDataPointVM> points = new List<CalibrationDataPointVM>(); - LinearizationPoints.ToList().ForEach(x => points.Add(new CalibrationDataPointVM(x.X, x.Y))); - ViewModelLocator.MainViewVM.CalibrationDataViewVM.ApplyCalibrationData(LiquidType, points); - } - #endregion - } -} diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs index 95de19f42..b68239b4b 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorConversionViewVM.cs @@ -111,7 +111,6 @@ namespace Tango.MachineStudio.RML.ViewModels Color = x.LiquidType.Color, Name = x.LiquidType.Name, LiquidType = x.LiquidType, - MaxNanoliterPerCentimeter = x.MaxNlPerCm, }).ToObservableCollection(); } @@ -310,19 +309,6 @@ namespace Tango.MachineStudio.RML.ViewModels } } - private double GetTotalMaximumLiquidNlPerCMLimit() - { - try - { - var tables = RML.GetActiveProcessGroup().ProcessParametersTables.OrderBy(x => x.TableIndex).ToList(); - return tables.Max(x => x.MaxInkUptake); - } - catch - { - return BrushStop.MAX_INK_UPTAKE; - } - } - private void OnLiquidVolumeChanged() { try @@ -330,7 +316,7 @@ namespace Tango.MachineStudio.RML.ViewModels if (LiquidsCalibrationData == null || _prevent_inverse_conversion) return; //TODO: This is temporary because of out of range volumes. - if (LiquidVolumes.Where(x => x.LiquidType.HasPigment).Sum(x => x.NanoliterPerCentimeter) > GetTotalMaximumLiquidNlPerCMLimit()) + if (LiquidVolumes.Where(x => x.LiquidType.HasPigment).Sum(x => x.Volume) > 200) { IsVolumesOutOfRange = true; return; diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/LiquidVolumeVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/LiquidVolumeVM.cs index 27b811bb6..7399d62af 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/LiquidVolumeVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/LiquidVolumeVM.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Tango.BL.Dispensing; using Tango.BL.Entities; using Tango.Core; using Tango.SharedUI; @@ -48,17 +47,5 @@ namespace Tango.MachineStudio.RML.ViewModels get { return _liquidType; } set { _liquidType = value; RaisePropertyChangedAuto(); } } - - public double MaxNanoliterPerCentimeter { get; set; } - - public double NanoliterPerCentimeter - { - get - { - StandardColorDispensingCalc calc = new StandardColorDispensingCalc(); - return calc.CalculateNanoliterPerCentimeter(Volume, MaxNanoliterPerCentimeter); - } - } - } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/MainViewVM.cs index cadd1fb95..ee21b9ac3 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/MainViewVM.cs @@ -21,19 +21,12 @@ using Tango.MachineStudio.RML.Views; using Tango.PMR.ColorLab; using System.Data.Entity; using Tango.Core.ExtensionMethods; -using Tango.MachineStudio.Common.Authentication; -using Tango.BL.ActionLogs; -using Tango.BL.DTO; -using Tango.BL.Enumerations; namespace Tango.MachineStudio.RML.ViewModels { public class MainViewVM : StudioViewModel<IMainView> { private INotificationProvider _notification; - private IAuthenticationProvider _authentication; - private IActionLogManager _actionLogManager; - private RmlDTO _rmlBeforeSave; private ObservablesContext _rmls_context; private ObservablesContext _active_context; @@ -45,20 +38,6 @@ namespace Tango.MachineStudio.RML.ViewModels set { _rmls = value; RaisePropertyChangedAuto(); } } - private ICollectionView _rmlssCollectionView; - /// <summary> - /// Gets or sets the RML collection view. - /// </summary> - public ICollectionView RmlsCollectionView - { - get { return _rmlssCollectionView; } - set - { - _rmlssCollectionView = value; - RaisePropertyChangedAuto(); - } - } - private ObservableCollection<MediaMaterial> _materials; public ObservableCollection<MediaMaterial> Materials { @@ -101,13 +80,6 @@ namespace Tango.MachineStudio.RML.ViewModels set { _fiberSynths = value; RaisePropertyChangedAuto(); } } - private ObservableCollection<SpoolType> _spoolTypes; - public ObservableCollection<SpoolType> SpoolTypes - { - get { return _spoolTypes; } - set { _spoolTypes = value; RaisePropertyChangedAuto(); } - } - private Rml _selectedRML; public Rml SelectedRML { @@ -171,30 +143,6 @@ namespace Tango.MachineStudio.RML.ViewModels set { _colorConversionViewVM = value; RaisePropertyChangedAuto(); } } - private RmlsSpool _selectedSpool; - public RmlsSpool SelectedSpool - { - get { return _selectedSpool; } - set { _selectedSpool = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } - } - - private ColorCalibrationViewVM _colorCalibrationVM; - public ColorCalibrationViewVM ColorCalibrationVM - { - get { return _colorCalibrationVM; } - set { _colorCalibrationVM = value; RaisePropertyChangedAuto(); } - } - - private String _RMLFilter; - /// <summary> - /// Gets or sets the job filter. - /// </summary> - public String RMLFilter - { - get { return _RMLFilter; } - set { _RMLFilter = value; RaisePropertyChangedAuto(); OnRMLFilterChanged(); } - } - /// <summary> /// Gets or sets the manage RML command. /// </summary> @@ -237,21 +185,9 @@ namespace Tango.MachineStudio.RML.ViewModels public RelayCommand ImportRMLFileCommand { get; set; } - /// <summary> - /// Gets or sets the add spool command. - /// </summary> - public RelayCommand AddSpoolCommand { get; set; } - - /// <summary> - /// Gets or sets the remove spool command. - /// </summary> - public RelayCommand RemoveSpoolCommand { get; set; } - - public MainViewVM(INotificationProvider notificationProvider, IAuthenticationProvider authentication, IActionLogManager actionLogManager) + public MainViewVM(INotificationProvider notificationProvider) { _notification = notificationProvider; - _authentication = authentication; - _actionLogManager = actionLogManager; ManageRmlCommand = new RelayCommand(() => LoadActiveRML(SelectedRML.Guid), () => SelectedRML != null); RemoveRmlCommand = new RelayCommand(RemoveSelectedRml, () => SelectedRML != null); CloneRmlCommand = new RelayCommand(CloneSelectedRml, () => SelectedRML != null); @@ -270,9 +206,6 @@ namespace Tango.MachineStudio.RML.ViewModels ExportRMLFileCommand = new RelayCommand(ExportRmlFile, () => SelectedRML != null && IsFree); ImportRMLFileCommand = new RelayCommand(ImportRmlFile, () => IsFree); - - AddSpoolCommand = new RelayCommand(AddNewSpool); - RemoveSpoolCommand = new RelayCommand(RemoveSpool, () => SelectedSpool != null); } public override void OnApplicationReady() @@ -282,177 +215,130 @@ namespace Tango.MachineStudio.RML.ViewModels private async void LoadRmls() { - try - { - IsFree = false; + if (_rmls_context != null) _rmls_context.Dispose(); - using (_notification.PushTaskItem("Loading Rmls...")) - { - if (_rmls_context != null) _rmls_context.Dispose(); + _rmls_context = ObservablesContext.CreateDefault(); + Rmls = await new RmlsCollectionBuilder(_rmls_context).SetAll().WithLiquidFactors().WithMediaProperties().BuildAsync(); - _rmls_context = ObservablesContext.CreateDefault(); - Rmls = await new RmlsCollectionBuilder(_rmls_context).SetAll().WithLiquidFactors().WithMediaProperties().BuildAsync(); - //Load CCT file names... - var ccts = await _rmls_context.Ccts.Select(x => new - { - x.Guid, - x.FileName - }).ToListAsync(); - - foreach (var rml in Rmls) - { - var cct = ccts.SingleOrDefault(x => x.Guid == rml.CctGuid); + //Load CCT file names... + var ccts = await _rmls_context.Ccts.Select(x => new + { + x.Guid, + x.FileName + }).ToListAsync(); - if (cct != null) - { - rml.Cct = new Cct() - { - Guid = cct.Guid, - FileName = cct.FileName, - }; - } - } - RmlsCollectionView = CollectionViewSource.GetDefaultView(Rmls); - RmlsCollectionView.SortDescriptions.Add(new SortDescription(nameof(Rml.LastUpdated), ListSortDirection.Descending)); - //RmlsCollectionView.Filter = new Predicate<object>(FilterCollection); + foreach (var rml in Rmls) + { + var cct = ccts.SingleOrDefault(x => x.Guid == rml.CctGuid); - RmlsCollectionView.Filter = (rml) => + if (cct != null) + { + rml.Cct = new Cct() { - Rml r = rml as Rml; - return String.IsNullOrWhiteSpace(RMLFilter) - || r.Name.ToLower().Contains(RMLFilter.ToLower()); + Guid = cct.Guid, + FileName = cct.FileName, }; - } } - catch (Exception ex) - { - LogManager.Log(ex, $"Error loading RMLS.\n{ex.FlattenMessage()}"); - } - finally - { - IsFree = true; - } } private async void LoadActiveRML(String guid) { using (_notification.PushTaskItem("Loading RML...")) { - try + IsFree = false; + + if (_active_context != null) { - IsFree = false; + _active_context.Dispose(); + } - if (_active_context != null) - { - _active_context.Dispose(); - } + _active_context = ObservablesContext.CreateDefault(); - _active_context = ObservablesContext.CreateDefault(); + CCTS = _active_context.Ccts + .Select(x => new CctModel() + { + Guid = x.Guid, + FileName = x.FileName, - CCTS = _active_context.Ccts - .Select(x => new CctModel() - { - Guid = x.Guid, - FileName = x.FileName, + }).ToObservableCollection(); - }).ToObservableCollection(); + CCTS.Where(x => String.IsNullOrWhiteSpace(x.FileName)).ToList().ForEach(x => x.FileName = x.Guid); - CCTS.Where(x => String.IsNullOrWhiteSpace(x.FileName)).ToList().ForEach(x => x.FileName = x.Guid); + LoadRmlProperties(); - LoadRmlProperties(); + ActiveRML = await new RmlBuilder(_active_context) + .Set(guid) + .WithActiveParametersGroup() + .WithLiquidFactors() + .WithCCT() + .BuildAsync(); - ActiveRML = await new RmlBuilder(_active_context) - .Set(guid) - .WithActiveParametersGroup() - .WithLiquidFactors() - .WithCCT() - .WithSpools() - .BuildAsync(); + if (ActiveRML.Cct != null) + { + SelectedCCT = CCTS.SingleOrDefault(x => x.Guid == ActiveRML.Cct.Guid); + } - if (ActiveRML.Cct != null) + if (ActiveRML.ProcessParametersTablesGroups.ToList().Count == 0) + { + if (!_notification.ShowQuestion("Could not find any process group for the selected RML. Would you like to create one?")) { - SelectedCCT = CCTS.SingleOrDefault(x => x.Guid == ActiveRML.Cct.Guid); + _notification.ShowError("Cannot load an RML with no process group."); + IsFree = true; + return; } - - if (ActiveRML.ProcessParametersTablesGroups.ToList().Count == 0) + else { - if (!_notification.ShowQuestion("Could not find any process group for the selected RML. Would you like to create one?")) - { - _notification.ShowError("Cannot load an RML with no process group."); - IsFree = true; - return; - } - else + ProcessParametersTablesGroup group = new ProcessParametersTablesGroup(); + group.Name = "Active Group"; + group.Active = true; + group.ProcessParametersTables.Add(new ProcessParametersTable() { - ProcessParametersTablesGroup group = new ProcessParametersTablesGroup(); - group.Name = "Active Group"; - group.Active = true; - group.ProcessParametersTables.Add(new ProcessParametersTable() - { - Name = "Process Table 1", - }); + Name = "Process Table 1", + }); - group.Rml = ActiveRML; + group.Rml = ActiveRML; - _active_context.ProcessParametersTablesGroups.Add(group); - _active_context.ProcessParametersTables.Add(group.ProcessParametersTables[0]); - await _active_context.SaveChangesAsync(); - LoadActiveRML(ActiveRML.Guid); - return; - } + _active_context.ProcessParametersTablesGroups.Add(group); + _active_context.ProcessParametersTables.Add(group.ProcessParametersTables[0]); + await _active_context.SaveChangesAsync(); + LoadActiveRML(ActiveRML.Guid); + return; } + } - ActiveProcessParametersGroup = ActiveRML.ProcessParametersTablesGroups.ToList().FirstOrDefault(); - ActiveProcessParametersTableView = CollectionViewSource.GetDefaultView(ActiveProcessParametersGroup.ProcessParametersTables); - ActiveProcessParametersTableView.SortDescriptions.Add(new SortDescription(nameof(ProcessParametersTable.TableIndex), ListSortDirection.Ascending)); - - CalibrationDataViewVM = new CalibrationDataViewVM(_notification); - LiquidTypesRmls = ActiveRML.LiquidTypesRmls; - - foreach (var liquidTypeRml in LiquidTypesRmls) - { - CalibrationDataVM catVM = new CalibrationDataVM(liquidTypeRml.LiquidType); + ActiveProcessParametersGroup = ActiveRML.ProcessParametersTablesGroups.ToList().FirstOrDefault(); + ActiveProcessParametersTableView = CollectionViewSource.GetDefaultView(ActiveProcessParametersGroup.ProcessParametersTables); + ActiveProcessParametersTableView.SortDescriptions.Add(new SortDescription(nameof(ProcessParametersTable.TableIndex), ListSortDirection.Ascending)); - if (liquidTypeRml.DefaultCatData != null) - { - catVM.CalibrationPoints = liquidTypeRml.GetCalibrationData().CalibrationPoints.Select(x => new CalibrationDataPointVM(x.X, x.Y)).ToObservableCollection(); - } + CalibrationDataViewVM = new CalibrationDataViewVM(_notification); + LiquidTypesRmls = ActiveRML.LiquidTypesRmls; - CalibrationDataViewVM.LiquidsCalibrationData.Add(catVM); - } + foreach (var liquidTypeRml in LiquidTypesRmls) + { + CalibrationDataVM catVM = new CalibrationDataVM(liquidTypeRml.LiquidType); - ColorConversionViewVM = new ColorConversionViewVM(_notification) + if (liquidTypeRml.DefaultCatData != null) { - RML = ActiveRML, - CCT = SelectedCCT, - LiquidsCalibrationData = CalibrationDataViewVM.LiquidsCalibrationData, - LiquidTypesRmls = LiquidTypesRmls, - }; + catVM.CalibrationPoints = liquidTypeRml.GetCalibrationData().CalibrationPoints.Select(x => new CalibrationDataPointVM(x.X, x.Y)).ToObservableCollection(); + } - ColorCalibrationVM = new ColorCalibrationViewVM(_notification) - { - RML = ActiveRML, - LiquidTypes = LiquidTypesRmls.Where(x => x.LiquidType.HasPigment).ToList().Select(y => y.LiquidType).ToList(), - }; + CalibrationDataViewVM.LiquidsCalibrationData.Add(catVM); + } - _rmlBeforeSave = RmlDTO.FromObservable(ActiveRML); + ColorConversionViewVM = new ColorConversionViewVM(_notification) + { + RML = ActiveRML, + CCT = SelectedCCT, + LiquidsCalibrationData = CalibrationDataViewVM.LiquidsCalibrationData, + LiquidTypesRmls = LiquidTypesRmls, + }; - View.NavigateTo(RmlNavigationView.RmlView); + View.NavigateTo(RmlNavigationView.RmlView); - InvalidateRelayCommands(); + InvalidateRelayCommands(); - IsFree = true; - } - catch (Exception ex) - { - LogManager.Log($"Error loading RML '{ActiveRML.Name}'..."); - _notification.ShowError($"Error loading the selected thread.\n{ex.FlattenMessage()}"); - } - finally - { - IsFree = true; - } + IsFree = true; } } @@ -485,7 +371,6 @@ namespace Tango.MachineStudio.RML.ViewModels LinearMassDensityUnits = _active_context.LinearMassDensityUnits.ToObservableCollection(); FiberShapes = _active_context.FiberShapes.ToObservableCollection(); FiberSynths = _active_context.FiberSynths.ToObservableCollection(); - SpoolTypes = _active_context.SpoolTypes.ToObservableCollection(); } private async void AddNewRml() @@ -515,10 +400,8 @@ namespace Tango.MachineStudio.RML.ViewModels Rml rml = new Rml(); rml.Name = name; - rml.DisplayName = name; - rml.QualificationDate = DateTime.UtcNow; rml.Manufacturer = "Twine"; - rml.Code = Rmls.Count > 0 ? Rmls.Max(x => x.Code) + 1 : 1; + rml.Code = Rmls.Max(x => x.Code) + 1; rml.MediaMaterial = Materials.FirstOrDefault(); rml.MediaPurpose = Purposes.FirstOrDefault(); rml.MediaCondition = Conditions.FirstOrDefault(); @@ -540,9 +423,6 @@ namespace Tango.MachineStudio.RML.ViewModels _active_context.ProcessParametersTables.Add(group.ProcessParametersTables[0]); _active_context.Rmls.Add(rml); await _active_context.SaveChangesAsync(); - - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.RmlCreated, _authentication.CurrentUser, rml.Name, rml, "Rml created using Machine Studio."); - LoadActiveRML(rml.Guid); IsFree = true; @@ -552,64 +432,25 @@ namespace Tango.MachineStudio.RML.ViewModels private async void RemoveSelectedRml() { - if (_notification.ShowQuestion("Removing the selected thread will result in the loss of all related process parameters and default calibration data. Are you sure you want to delete the selected RML?")) + if (_notification.ShowQuestion("Removing the selected RML will result in the loss of all related process parameters and default calibration data. Are you sure you want to delete the selected RML?")) { + IsFree = false; + using (_notification.PushTaskItem("Removing RML...")) { try { - IsFree = false; - - var rml_jobs = await _rmls_context.Jobs.Where(x => x.RmlGuid == SelectedRML.Guid).Include(x => x.Machine).OrderBy(x => x.Machine.SerialNumber).ToListAsync(); - - if (rml_jobs.Count > 0) - { - var vm = new RmlDeleteDialogViewVM(SelectedRML, Rmls.ToList(), rml_jobs.ToList()); - _notification.ShowModalDialog<RmlDeleteDialogViewVM, RmlDeleteDialogView>(vm, (x) => { }, () => { }); - - if (!vm.DialogResult) - { - return; - } - - //Perform actions... - using (var db = ObservablesContext.CreateDefault()) - { - foreach (var jobAction in vm.JobsActions) - { - if (jobAction.Action == RmlDeleteDialogViewVM.RmlDeleteJobAction.Delete) - { - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.JobDeleted, _authentication.CurrentUser.Guid, jobAction.Job.Name, jobAction.Job.Guid, $"Job deleted due to RML '{SelectedRML.Name}' being removed."); - await jobAction.Job.DeleteCascadeAsync(db); - } - else if (jobAction.Action == RmlDeleteDialogViewVM.RmlDeleteJobAction.Change) - { - var job = await db.Jobs.SingleOrDefaultAsync(x => x.Guid == jobAction.Job.Guid); - job.RmlGuid = jobAction.TargetRml.Guid; - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.JobSaved, _authentication.CurrentUser.Guid, jobAction.Job.Name, jobAction.Job.Guid, $"Job RML changed to '{jobAction.TargetRml.Name}' due to RML '{SelectedRML.Name}' being removed."); - } - } - - await db.SaveChangesAsync(); - } - } - await SelectedRML.DeleteCascadeAsync(_rmls_context); - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.RmlDeleted, _authentication.CurrentUser, SelectedRML.Name, SelectedRML, "RML deleted from Machine Studio."); - LoadRmls(); } catch (Exception ex) { - LogManager.Log(ex, $"Error removing selected RML {SelectedRML?.Name}."); - _notification.ShowError($"An error occurred while trying to remove the selected RML.\n{ex.FlattenMessage()}"); - LoadRmls(); - } - finally - { - IsFree = true; + LogManager.Log(ex, $"Error removing selected RML {SelectedRML.Name}."); + _notification.ShowError($"An error occurred while trying to remove the selected RML.\n{ex.Message}"); } } + + IsFree = true; } } @@ -627,18 +468,15 @@ namespace Tango.MachineStudio.RML.ViewModels using (var context = ObservablesContext.CreateDefault()) { - var rml = await new RmlBuilder(context).Set(SelectedRML.Guid).WithActiveParametersGroup().WithLiquidFactors().WithSpools().BuildAsync(); + var rml = await new RmlBuilder(context).Set(SelectedRML.Guid).WithActiveParametersGroup().WithLiquidFactors().BuildAsync(); Rml cloned = new Rml(); - rml.MapPropertiesTo(cloned, MappingFlags.NoReferenceTypes); + rml.MapPrimitivesWithStrings(cloned); cloned.Code = Rmls.Max(x => x.Code) + 1; cloned.Guid = Guid.NewGuid().ToString(); cloned.ID = 0; cloned.Name = name; - cloned.DisplayName = name; - cloned.RmlQualificationLevel = RmlQualifications.Provisional; - cloned.QualificationDate = DateTime.UtcNow; ProcessParametersTablesGroup group = new ProcessParametersTablesGroup(); group.Name = rml.GetActiveProcessGroup().Name; @@ -664,19 +502,8 @@ namespace Tango.MachineStudio.RML.ViewModels cloned.LiquidTypesRmls.Add(l); } - foreach (var spool in rml.RmlsSpools) - { - RmlsSpool s = new RmlsSpool(); - spool.MapPropertiesTo(s, MappingFlags.ValueTypesOnly); - s.RmlGuid = cloned.Guid; - s.SpoolTypeGuid = spool.SpoolTypeGuid; - cloned.RmlsSpools.Add(s); - } - context.Rmls.Add(cloned); await context.SaveChangesAsync(); - - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.RmlCreated, _authentication.CurrentUser, cloned.Name, cloned, "RML cloned from Machine Studio."); } LoadRmls(); @@ -731,11 +558,6 @@ namespace Tango.MachineStudio.RML.ViewModels ActiveProcessParametersTableView.Refresh(); } - private void OnRMLFilterChanged() - { - RmlsCollectionView.Refresh(); - } - private void RemoveLiquidFactor(LiquidTypesRml liquidFactor) { if (_notification.ShowQuestion("Removing this liquid factor will remove the liquid type association with the RML and will drop the calibration data. Are you sure?")) @@ -826,11 +648,6 @@ namespace Tango.MachineStudio.RML.ViewModels ActiveRML.LastUpdated = DateTime.UtcNow; - if (_rmlBeforeSave.QualificationLevel != ActiveRML.QualificationLevel) - { - ActiveRML.QualificationDate = DateTime.UtcNow; - } - if (SelectedCCT != null) { if (SelectedCCT.IsNew) @@ -848,26 +665,18 @@ namespace Tango.MachineStudio.RML.ViewModels } } - var rmlAfter = RmlDTO.FromObservable(ActiveRML); - await _active_context.SaveChangesAsync(); - - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.RmlSaved, _authentication.CurrentUser, _rmlBeforeSave.Name, _rmlBeforeSave, rmlAfter, "RML saved using Machine Studio."); - - _rmlBeforeSave = rmlAfter; - - LoadActiveRML(ActiveRML.Guid); } } catch (Exception ex) { LogManager.Log(ex, $"Error saving RML {ActiveRML.Name}"); - _notification.ShowError($"An error occurred while trying to save the current RML.\n{ex.FlattenMessage()}"); - } - finally - { - IsFree = true; + _notification.ShowError($"An error occurred while trying to save the current RML.\n{ex.Message}"); } + + LoadActiveRML(ActiveRML.Guid); + + IsFree = true; } private void BackToRmls() @@ -883,12 +692,6 @@ namespace Tango.MachineStudio.RML.ViewModels String file = GetCCTFileOpen(); if (file != null) { - if (CCTS.ToList().Exists(x => x.FileName == Path.GetFileName(file))) - { - _notification.ShowError("The selected CCT file already exists on the database. Please select the CCT file from the dropdown box."); - return; - } - CctModel cctModel = new CctModel(); cctModel.Guid = Guid.NewGuid().ToString(); cctModel.IsNew = true; @@ -1001,8 +804,6 @@ namespace Tango.MachineStudio.RML.ViewModels var rmlFile = await Rml.FromRmlFile(db, json); db.Rmls.Add(rmlFile); - - _actionLogManager.InsertLog(BL.Enumerations.ActionLogType.RmlImported, _authentication.CurrentUser, rmlFile.Name, rmlFile, "RML imported from Machine Studio."); } await db.SaveChangesAsync(); @@ -1059,26 +860,5 @@ namespace Tango.MachineStudio.RML.ViewModels } #endregion - - #region Spools - - private void AddNewSpool() - { - _active_context.RmlsSpools.Add(new RmlsSpool() - { - Rml = ActiveRML, - }); - } - - private void RemoveSpool() - { - if (SelectedSpool != null) - { - _active_context.RmlsSpools.Remove(SelectedSpool); - ActiveRML.RmlsSpools.Remove(SelectedSpool); - } - } - - #endregion } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/RmlDeleteDialogViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/RmlDeleteDialogViewVM.cs deleted file mode 100644 index b4c6c6274..000000000 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/RmlDeleteDialogViewVM.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.BL.Entities; -using Tango.Core; -using Tango.SharedUI; - -namespace Tango.MachineStudio.RML.ViewModels -{ - public class RmlDeleteDialogViewVM : DialogViewVM - { - public enum RmlDeleteJobAction - { - Delete, - Change - } - - public class RmlDeleteJob : ExtendedObject - { - public Job Job { get; set; } - public Machine Machine { get; set; } - private RmlDeleteJobAction _action; - - public RmlDeleteJobAction Action - { - get { return _action; } - set { _action = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(IsDelete)); } - } - - public bool IsDelete - { - get { return Action == RmlDeleteJobAction.Delete; } - } - - - public Rml TargetRml { get; set; } - - public override string ToString() - { - return $"{Machine.SerialNumber} => {Job.Name} => {Action} {(Action == RmlDeleteJobAction.Change ? $" => {TargetRml.Name}" : String.Empty)}"; - } - } - - private List<Job> _jobsToDelete; - - private List<RmlDeleteJob> _jobsActions; - public List<RmlDeleteJob> JobsActions - { - get { return _jobsActions; } - set { _jobsActions = value; RaisePropertyChangedAuto(); } - } - - public Rml Rml { get; set; } - - public List<Rml> Rmls { get; set; } - - public List<RmlDeleteJobAction> Actions { get; set; } - - public RmlDeleteDialogViewVM(Rml rml, List<Rml> rmls, List<Job> jobsToDelete) - { - Rml = rml; - Rmls = rmls.Where(x => x.Guid != rml.Guid).ToList(); - _jobsToDelete = jobsToDelete; - JobsActions = new List<RmlDeleteJob>(); - - Actions = new List<RmlDeleteJobAction>() - { - RmlDeleteJobAction.Delete, - RmlDeleteJobAction.Change - }; - } - - public override void OnShow() - { - base.OnShow(); - - List<RmlDeleteJob> list = new List<RmlDeleteJob>(); - - foreach (var job in _jobsToDelete) - { - RmlDeleteJob deleteJob = new RmlDeleteJob(); - deleteJob.Job = job; - deleteJob.Action = RmlDeleteJobAction.Delete; - deleteJob.Machine = job.Machine; - deleteJob.TargetRml = Rmls.FirstOrDefault(x => x.Guid != Rml.Guid); - - list.Add(deleteJob); - } - - JobsActions = list; - } - } -} |
