diff options
| author | Victoria Plitt <Victoria.Plitt@twine-s.com> | 2020-06-22 15:31:41 +0300 |
|---|---|---|
| committer | Victoria Plitt <Victoria.Plitt@twine-s.com> | 2020-06-22 15:31:41 +0300 |
| commit | e0485a64c8be34fb596fd02befaebec0091625c4 (patch) | |
| tree | f712180bb03dcd12cce7b58a433c7f53a5ecc4c6 /Software/Visual_Studio | |
| parent | 69a5fa82c4633e1c9afa3e0164ff215a8d54c1ed (diff) | |
| download | Tango-e0485a64c8be34fb596fd02befaebec0091625c4.tar.gz Tango-e0485a64c8be34fb596fd02befaebec0091625c4.zip | |
Color calibration. Added warning text and Factor to show in GUI.
Related Work Items: #2957
Diffstat (limited to 'Software/Visual_Studio')
5 files changed, 98 insertions, 34 deletions
diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.cpp b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.cpp index 90c023060..a0e44c95c 100644 --- a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.cpp +++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.cpp @@ -51,14 +51,15 @@ size_t Tango::ColorLib::ColorCalibrator::GetLiquidFactor(uint8_t * input_buffer, calibrationInput = (CalibrationInput*)malloc(sizeof(CalibrationInput)); calibrationInput = calibration_input__unpack(NULL, input_buffer_size, input_buffer); - //Call Mirta with input + //Investigate Input InitData((const CalibrationMeasurement**)calibrationInput->measurements, calibrationInput->n_measurements, calibrationInput->liquidtype, calibrationInput->targetl, calibrationInput->targeta, calibrationInput->targetb); //Init Output CalibrationOutput *calibrationOutput = (CalibrationOutput*)malloc(sizeof(CalibrationOutput)); calibration_output__init(calibrationOutput); - //Investigate Input + + //{{{ TEST //double targetL = calibrationInput->has_targetl; //Get Target LAB... //for (size_t i = 0; i < calibrationInput->n_measurements; i++) //Iterate measurements... @@ -70,12 +71,23 @@ size_t Tango::ColorLib::ColorCalibrator::GetLiquidFactor(uint8_t * input_buffer, // m->a; //A // m->b; //B //} + //calibrationOutput->liquidfactor = 5.0; + //}}} //Set Output calibrationOutput->has_liquidfactor = true; - MaximalDispensingRate(calibrationOutput->liquidfactor); - //calibrationOutput->liquidfactor = 5.0; + std:string error_message; + MaximalDispensingRate(calibrationOutput->liquidfactor, error_message); + const char* c_error = error_message.c_str(); + int nErrorLength = strlen(c_error); + if (nErrorLength > 0) + { + calibrationOutput->errormessage = (char*)malloc(nErrorLength); + for (int i = 0; i < nErrorLength; ++i) + calibrationOutput->errormessage[i] = c_error[i]; + } + //Pack Output output_buffer = (uint8_t*)malloc(calibration_output__get_packed_size(calibrationOutput)); int size = calibration_output__pack(calibrationOutput, output_buffer); @@ -114,7 +126,7 @@ void Tango::ColorLib::ColorCalibrator::InitData(const CalibrationMeasurement** m if (m_inkChannel == 2) m_CalIndex = 2; } -void Tango::ColorLib::ColorCalibrator::MaximalDispensingRate(double &MDispRate) +void Tango::ColorLib::ColorCalibrator::MaximalDispensingRate(double &MDispRate, std::string &outputmessage) { MDispRate = -1000; double *yVal = new double[m_nsize]; @@ -141,7 +153,8 @@ void Tango::ColorLib::ColorCalibrator::MaximalDispensingRate(double &MDispRate) { delete[] yVal; yVal = NULL; - throw std::exception("Maximal and Minimal Values are too close"); + outputmessage = "Maximal and Minimal Values are too close"; + return; } //increasing or decreasing @@ -172,7 +185,8 @@ void Tango::ColorLib::ColorCalibrator::MaximalDispensingRate(double &MDispRate) delete[] yVal; yVal = NULL; } - throw std::exception("Target Value does not fall in data interval,decrease dispensing rate"); + outputmessage = "Target Value does not fall in data interval,decrease dispensing rate"; + return; } } else if (m_targetVal[indLab] > maxVal) @@ -188,7 +202,8 @@ void Tango::ColorLib::ColorCalibrator::MaximalDispensingRate(double &MDispRate) delete[] yVal; yVal = NULL; } - throw std::exception("Target Value does not fall in data interval,increase dispensing rate"); + outputmessage ="Target Value does not fall in data interval,increase dispensing rate"; + return; } } } @@ -207,7 +222,8 @@ void Tango::ColorLib::ColorCalibrator::MaximalDispensingRate(double &MDispRate) delete[] yVal; yVal = NULL; } - throw std::exception("Target Value does not fall in data interval,increase dispensing rate"); + outputmessage = "Target Value does not fall in data interval,increase dispensing rate"; + return; } } else if (m_targetVal[indLab] > maxVal) @@ -217,7 +233,16 @@ void Tango::ColorLib::ColorCalibrator::MaximalDispensingRate(double &MDispRate) if (dE < dEThr) MDispRate = m_nlcm[maxInd]; else - throw std::exception("Target Value does not fall in data interval,decrease dispensing rate"); + { + + if (yVal != NULL) + { + delete[] yVal; + yVal = NULL; + outputmessage = "Target Value does not fall in data interval,decrease dispensing rate"; + return; + } + } } } } @@ -234,6 +259,7 @@ void Tango::ColorLib::ColorCalibrator::MaximalDispensingRate(double &MDispRate) } } + void Tango::ColorLib::ColorCalibrator::dEcmc(double *refX, double *samX, double &dECMC) { //dEcmc(refX, samX) calculates color difference CMC(2:1) in diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.h b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.h index 711462e2a..131241ccb 100644 --- a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.h +++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.h @@ -1,5 +1,6 @@ #include <cstdlib> #include <cstdint> +#include <string> #include "CalibrationInput.pb-c.h" #include "CalibrationOutput.pb-c.h" #include "CalibrationMeasurement.pb-c.h" @@ -18,7 +19,7 @@ namespace Tango size_t Tango::ColorLib::ColorCalibrator::GetLiquidFactor(uint8_t * input_buffer, size_t input_buffer_size, uint8_t *& output_buffer); protected: void InitData(const CalibrationMeasurement** m, const size_t &nsize, const int &inkChannel, const double& targetl, const double& targeta, const double& targetb); - void MaximalDispensingRate(double &MDispRate); + void MaximalDispensingRate(double &MDispRate, std::string &outputmessage); void dEcmc(double *refX, double *samX, double &dECMC); private: 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 index dd0c66c58..d44ef7a0c 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs @@ -16,6 +16,7 @@ using Tango.ColorCalibration; using Tango.PMR.ColorLab; using Tango.Logging; using Tango.MachineStudio.Common.Notifications; +using System.Text.RegularExpressions; namespace Tango.MachineStudio.RML.ViewModels { @@ -69,9 +70,24 @@ namespace Tango.MachineStudio.RML.ViewModels public double Factor { get { return _factor; } - set { _factor = value; } + 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 CreateGraphCommand { get; set; } @@ -152,6 +168,7 @@ namespace Tango.MachineStudio.RML.ViewModels new CalibrationMeasurementModel(), }; Factor = 0; + HasError = false; CreateGraphCommand = new RelayCommand(CreateGraph); this.Points = new List<DataPoint>(); TargetPoints = new List<DataPoint>(); @@ -166,24 +183,31 @@ namespace Tango.MachineStudio.RML.ViewModels 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; - + 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); - return result.LiquidFactor; + + 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 = Regex.Replace(result.ErrorMessage, "[^A-Za-z0-9_., ]+", ""); + + 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; @@ -196,11 +220,10 @@ namespace Tango.MachineStudio.RML.ViewModels if (_liquidType == null) return; - LAB lab; string labType = ColorCalibrationExt.DisplayLiquidTypeToLABType[_liquidType.Type]; await Task.Factory.StartNew(() => { - Factor = GetLiquidFactor(); + Factor = GetLiquidFactor( ); }); Points.Clear(); diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml index 02cef3c0d..ffe3bf68e 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml @@ -13,12 +13,13 @@ mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800" Background="Transparent" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> - <UserControl.Resources> - <converters:EmptyStringToNullConverter x:Key="EmptyStringToNullConverter" /> - <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/> - </UserControl.Resources> + <UserControl.Resources> + <converters:EmptyStringToNullConverter x:Key="EmptyStringToNullConverter" /> + <converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/> + <converters:BooleanToVisibilityInverseConverter x:Key="BooleanToVisibilityInverseConverter"/> + </UserControl.Resources> - <Grid> + <Grid> <DockPanel> <Border DockPanel.Dock="Top" Background="{StaticResource TransparentBackgroundBrush200}" Margin="20 0" Padding="5" CornerRadius="5"> <Border.Effect> @@ -115,6 +116,19 @@ </oxy:Plot> </Border> </Grid> + <Grid Grid.Column="2" Margin="40 0 0 0"> + <StackPanel Orientation="Vertical"> + <TextBlock FontSize="16" HorizontalAlignment="Left" Foreground="{StaticResource MainWindow.Foreground}" Height="50" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityInverseConverter}}"> + <Run FontWeight="DemiBold"> Factor: </Run> + <Run Text="{Binding Factor}"></Run> + <LineBreak /> + </TextBlock> + <TextBlock FontSize="16" Foreground="{StaticResource MainWindow.Foreground}" FontWeight="SemiBold" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}" Margin="0 20 10 20" >Warning:</TextBlock> + <Border BorderThickness="1" CornerRadius="4" BorderBrush="{StaticResource DarkGrayBrush}" Visibility="{Binding HasError, Converter={StaticResource BooleanToVisibilityConverter}}"> + <TextBlock Margin="5" Foreground="{StaticResource RedBrush300}" Text="{Binding ErrorMessage}" Height="75" TextWrapping="Wrap" TextTrimming="CharacterEllipsis" /> + </Border> + </StackPanel> + </Grid> </Grid> </DockPanel> </Grid> diff --git a/Software/Visual_Studio/Tango.ColorLib.GradientTest.CLI/Program.cs b/Software/Visual_Studio/Tango.ColorLib.GradientTest.CLI/Program.cs index b76c16f21..c0e589f2f 100644 --- a/Software/Visual_Studio/Tango.ColorLib.GradientTest.CLI/Program.cs +++ b/Software/Visual_Studio/Tango.ColorLib.GradientTest.CLI/Program.cs @@ -102,7 +102,7 @@ namespace Tango.ColorLib.GradientTest.CLI GradientConversionOutput output = generator.GenerateGradient(input); watch.Stop(); - Console.WriteLine($"Processing completed after: {watch.Elapsed.TotalSeconds.ToString("0.0")} seconds."); + Console.WriteLine($"Processing completed after: {watch.Elapsed.TotalMilliseconds.ToString("0.0")} milliseconds."); Console.WriteLine(); Console.WriteLine($"Result:\n{output.ToJsonString()}"); |
