aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio
diff options
context:
space:
mode:
authorVictoria Plitt <Victoria.Plitt@twine-s.com>2020-06-22 15:31:41 +0300
committerVictoria Plitt <Victoria.Plitt@twine-s.com>2020-06-22 15:31:41 +0300
commite0485a64c8be34fb596fd02befaebec0091625c4 (patch)
treef712180bb03dcd12cce7b58a433c7f53a5ecc4c6 /Software/Visual_Studio
parent69a5fa82c4633e1c9afa3e0164ff215a8d54c1ed (diff)
downloadTango-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')
-rw-r--r--Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.cpp46
-rw-r--r--Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorCalibrator.h3
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/ColorCalibrationViewVM.cs57
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorCalibrationView.xaml24
-rw-r--r--Software/Visual_Studio/Tango.ColorLib.GradientTest.CLI/Program.cs2
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()}");