aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio
diff options
context:
space:
mode:
authorVictoria Plitt <Victoria.Plitt@twine-s.com>2021-01-24 08:11:52 +0200
committerVictoria Plitt <Victoria.Plitt@twine-s.com>2021-01-24 08:11:52 +0200
commit120165cf7b7f164d7a4e83dfafb79cecbf2998cb (patch)
treebe0f661325594807939c35a7cc56835e65ab17cc /Software/Visual_Studio
parent6faa0e140a4203c13d60b93aa1bad62b37b8ddb9 (diff)
downloadTango-120165cf7b7f164d7a4e83dfafb79cecbf2998cb.tar.gz
Tango-120165cf7b7f164d7a4e83dfafb79cecbf2998cb.zip
Created Test project - OutOfGamutTest.CLI. Implement functions in C# GetRecommendedProcessParameters and IsOutOfGamut
Related Work Items: #4376
Diffstat (limited to 'Software/Visual_Studio')
-rw-r--r--Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorConverter.cpp5
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/DefaultColorConverter.cs166
-rw-r--r--Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/App.config14
-rw-r--r--Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/ColorFunctionGenerator.cs113
-rw-r--r--Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Program.cs191
-rw-r--r--Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Properties/AssemblyInfo.cs36
-rw-r--r--Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Sylko_HV_IL350R.cctbin0 -> 1660324 bytes
-rw-r--r--Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Sylko_HV_IL400Bl95R_1.cctbin0 -> 1660328 bytes
-rw-r--r--Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Tango.ColorLib.OutOfGamutTest.CLI.csproj86
-rw-r--r--Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/packages.config4
-rw-r--r--Software/Visual_Studio/Tango.sln35
11 files changed, 636 insertions, 14 deletions
diff --git a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorConverter.cpp b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorConverter.cpp
index 4da243745..5a8a1dbd2 100644
--- a/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorConverter.cpp
+++ b/Software/Visual_Studio/ColorLib/Tango.ColorLib_v4/ColorConverter.cpp
@@ -2332,6 +2332,9 @@ size_t Tango::ColorLib::ColorConverter::P_IsInGamut(uint8_t * input_buffer, size
//count number if inks
int numofInks = 0;
int numLightInks = 0;
+ if (m_colortable == NULL)
+ m_colortable = new ColorTable();
+
CountNumberofInks(conversionInput, numofInks, numLightInks);
readColorTransformations(conversionInput);
@@ -2339,7 +2342,7 @@ size_t Tango::ColorLib::ColorConverter::P_IsInGamut(uint8_t * input_buffer, size
int n_inputliquids = numofInks - numLightInks;
InputLiquid **inputliquid = conversionInput->inputcoordinates->inputliquids;
//Read CMYK Calibration Tables only. Light Inks have no calibration tables
-
+
readCalibrationTables(inputliquid, n_inputliquids);
//Initialize CIECAM02 transformation
diff --git a/Software/Visual_Studio/Tango.ColorConversion/DefaultColorConverter.cs b/Software/Visual_Studio/Tango.ColorConversion/DefaultColorConverter.cs
index 91f39c503..182ee9aaf 100644
--- a/Software/Visual_Studio/Tango.ColorConversion/DefaultColorConverter.cs
+++ b/Software/Visual_Studio/Tango.ColorConversion/DefaultColorConverter.cs
@@ -252,11 +252,90 @@ namespace Tango.ColorConversion
public bool IsOutOfGamut(BrushStop stop)
{
- return Convert(stop, false).OutOfGamut;
+ //return Convert(stop, false).OutOfGamut;
+ if (stop == null)
+ {
+ throw new ArgumentNullException("Specified brush stop is a null reference.");
+ }
+ if (stop.Segment == null || stop.Segment.Job == null)
+ {
+ throw new ArgumentNullException("The specified brush stop must be a part of a job segment.");
+ }
+
+ if (stop.Segment.Job.Machine == null || stop.Segment.Job.Machine.Configuration == null)
+ {
+ throw new ArgumentNullException("The specified brush stop is associated with a job that is not a part of any machine or the machine does not have any configuration.");
+ }
OutOfGamutInput input = new OutOfGamutInput();
input.ColorSpace = (PMR.ColorLab.ColorSpace)stop.BrushColorSpace;
+ var rml = stop.Segment.Job.Rml;
+ if (rml == null)
+ {
+ throw new ArgumentNullException("Specified RML is a null reference.");
+ }
+
+ if (rml.Cct == null || rml.Cct.Data == null)
+ {
+ throw new ArgumentNullException("Specified RML CCT data is null.");
+ }
+
+ Configuration configuration = stop.Segment.Job.Machine.Configuration;
+
+ input.ThreadL = rml.WhitePointL;
+ input.ThreadA = rml.WhitePointA;
+ input.ThreadB = rml.WhitePointB;
+
+ input.InputCoordinates = new InputCoordinates();
+
+ input.InputCoordinates.Red = Math.Max(stop.Red, 1);
+ input.InputCoordinates.Green = Math.Max(stop.Green, 1);
+ input.InputCoordinates.Blue = Math.Max(stop.Blue, 1);
+
+ input.InputCoordinates.L = stop.L;
+ input.InputCoordinates.A = stop.A;
+ input.InputCoordinates.B = stop.B;
+
+ input.InputCoordinates.Cyan = stop.Cyan;
+ input.InputCoordinates.Magenta = stop.Magenta;
+ input.InputCoordinates.Yellow = stop.Yellow;
+ input.InputCoordinates.Key = stop.Black;
+
+
+ input.ForwardData = ByteString.CopyFrom(rml.Cct.Data);
+ foreach (var prTable in rml.GetActiveProcessGroup().ProcessParametersTables)
+ {
+ input.ProcessRanges.Add(new ProcessRange()
+ {
+ MinInkUptake = prTable.MinInkUptake,
+ MaxInkUptake = prTable.MaxInkUptake,
+ });
+ }
+ foreach (var ids_pack in configuration.GetSupportedIdsPacks(rml))
+ {
+ CalibrationData calibrationData = Cat.CreateDemoCalibrationData((PMR.ColorLab.LiquidType)ids_pack.LiquidType.Code);
+
+ var rml_cat = rml.LiquidTypesRmls.SingleOrDefault(x => x.LiquidType.Code == ids_pack.LiquidType.Code);
+
+ if (rml_cat != null)
+ {
+ calibrationData = rml_cat.GetCalibrationData();
+ }
+
+ input.InputCoordinates.InputLiquids.Add(new InputLiquid()
+ {
+ LiquidType = (PMR.ColorLab.LiquidType)ids_pack.LiquidType.Code,
+ MaxNanoliterPerCentimeter = ids_pack.LiquidType.LiquidTypesRmls.Single(x => x.Rml == rml).MaxNlPerCm,
+ Volume = stop.GetVolume(ids_pack.PackIndex),
+ CalibrationData = calibrationData,
+ });
+ }
+
+ OutOfGamutOutput outOfGamutOutput = IsOutOfGamut( input, 4);
+
+ return outOfGamutOutput.OutOfGamut;
+
//TODO: Use IsOutOfGamut(OutOfGamutInput input, 4);
}
@@ -302,26 +381,99 @@ namespace Tango.ColorConversion
RecommendedProcessTableInput input = new RecommendedProcessTableInput();
var stops = job.Segments.SelectMany(x => x.BrushStops).Where(x => x.BrushColorSpace != ColorSpaces.Catalog).ToList();
+ if (stops.Count == 0)
+ {
+ throw new ArgumentOutOfRangeException("THe number of brush stops cannot be zero.");
+ }
+ var rml = job.Rml;
+ if (rml == null)
+ {
+ throw new ArgumentNullException("Specified RML is a null reference.");
+ }
+
+ if (rml.Cct == null || rml.Cct.Data == null)
+ {
+ throw new ArgumentNullException("Specified RML CCT data is null.");
+ }
+ var configuration = job.Machine.Configuration;
+ if (configuration == null)
+ {
+ throw new ArgumentNullException("Specified machine configuration is a null reference.");
+ }
foreach (var stop in stops)
{
- input.Stops.Add(new GradientInputStop()
- {
+ GradientInputStop istop = new GradientInputStop();
+ istop.ColorSpace = (PMR.ColorLab.ColorSpace)stop.ColorSpace.Code;
+ istop.Offset = stop.OffsetPercent / 100d;
+ istop.L = stop.L;
+ istop.A = stop.A;
+ istop.B = stop.B;
+ istop.Red = stop.Red;
+ istop.Green = stop.Green;
+ istop.Blue = stop.Blue;
+ istop.Cyan = stop.Cyan;
+ istop.Magenta = stop.Magenta;
+ istop.Yellow = stop.Yellow;
+ istop.Key = stop.Black;
+ foreach (var liquidVolume in stop.LiquidVolumesOrderedPigmented)
+ {
+ istop.LiquidVolumes.Add(new PMR.ColorLab.LiquidVolume()
+ {
+ LiquidType = (PMR.ColorLab.LiquidType)liquidVolume.LiquidType,
+ Volume = liquidVolume.Volume
+ });
+ }
+ input.Stops.Add(istop);
+ }
+ input.ThreadL = rml.WhitePointL;
+ input.ThreadA = rml.WhitePointA;
+ input.ThreadB = rml.WhitePointB;
+ input.ForwardData = ByteString.CopyFrom(rml.Cct.Data);
+ foreach (var prTable in rml.GetActiveProcessGroup().ProcessParametersTables)
+ {
+ input.ProcessRanges.Add(new ProcessRange()
+ {
+ MinInkUptake = prTable.MinInkUptake,
+ MaxInkUptake = prTable.MaxInkUptake,
});
}
- RecommendedProcessTableOutput output = GetRecommendedProcessParameters(input, job.Rml.ColorConversionVersion);
+ foreach (var ids_pack in configuration.GetSupportedIdsPacks(rml))
+ {
+ CalibrationData calibrationData = Cat.CreateDemoCalibrationData((PMR.ColorLab.LiquidType)ids_pack.LiquidType.Code);
+
+ var rml_cat = rml.LiquidTypesRmls.SingleOrDefault(x => x.LiquidType.Code == ids_pack.LiquidType.Code);
- var catalogIndex = job.Segments.SelectMany(x => x.BrushStops).Where(x => x.BrushColorSpace == ColorSpaces.Catalog).Max(x => x.ColorCatalogsItem.ProcessParametersTableIndex);
+ if (rml_cat != null)
+ {
+ calibrationData = rml_cat.GetCalibrationData();
+ }
+
+ input.InputLiquids.Add(new InputLiquid()
+ {
+ LiquidType = (PMR.ColorLab.LiquidType)ids_pack.LiquidType.Code,
+ MaxNanoliterPerCentimeter = ids_pack.LiquidType.LiquidTypesRmls.Single(x => x.Rml == rml).MaxNlPerCm,
+ CalibrationData = calibrationData,
+ });
+ }
- var maxIndex = Math.Max(output.ProcessParametersTableIndex, catalogIndex);
+ RecommendedProcessTableOutput output = GetRecommendedProcessParameters(input, job.Rml.ColorConversionVersion);
+ var maxIndex = output.ProcessParametersTableIndex;
+ var catalogBrushStops = job.Segments.SelectMany(x => x.BrushStops).Where(x => x.BrushColorSpace == ColorSpaces.Catalog);
+ if(catalogBrushStops.Count() > 0)
+ {
+ var catalogIndex = catalogBrushStops.Max(x => x.ColorCatalogsItem.ProcessParametersTableIndex);
+ maxIndex = Math.Max(output.ProcessParametersTableIndex, catalogIndex);
+ }
+
var processTable = group.ProcessParametersTables.FirstOrDefault(x => x.TableIndex == maxIndex);
if (processTable == null)
{
- //Handle
+ processTable = group.ProcessParametersTables.FirstOrDefault();
}
return processTable;
diff --git a/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/App.config b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/App.config
new file mode 100644
index 000000000..332e7dbda
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/App.config
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+ <startup>
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
+ </startup>
+ <runtime>
+ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+ <dependentAssembly>
+ <assemblyIdentity name="Microsoft.IdentityModel.Clients.ActiveDirectory" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-5.0.5.0" newVersion="5.0.5.0" />
+ </dependentAssembly>
+ </assemblyBinding>
+ </runtime>
+</configuration> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/ColorFunctionGenerator.cs b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/ColorFunctionGenerator.cs
new file mode 100644
index 000000000..f6d560652
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/ColorFunctionGenerator.cs
@@ -0,0 +1,113 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core.Helpers;
+using Tango.PMR;
+using Tango.PMR.ColorLab;
+
+namespace Tango.ColorLib.OutOfGamutTest.CLI
+{
+ public class ColorFunctionGenerator
+ {
+ static class NativeMethods
+ {
+ [DllImport("kernel32.dll")]
+ public static extern IntPtr LoadLibrary(string dllToLoad);
+
+ [DllImport("kernel32.dll")]
+ public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);
+
+ [DllImport("kernel32.dll")]
+ public static extern bool FreeLibrary(IntPtr hModule);
+ }
+
+ public OutOfGamutOutput CheckOutOfGamut(OutOfGamutInput input)
+ {
+ String fileName = $"{AssemblyHelper.GetCurrentAssemblyFolder()}\\Tango.ColorLib_v4.dll";
+
+ if (!File.Exists(fileName))
+ {
+ throw new FileNotFoundException($"Could not find color conversion library '{fileName}'.");
+ }
+
+ IntPtr pDll = NativeMethods.LoadLibrary(fileName);
+ IntPtr pAddressOfFunctionToCall = NativeMethods.GetProcAddress(pDll, "CheckOutOfGamut");
+ NativeMethodDelegate generateIsOutOfGamut = (NativeMethodDelegate)Marshal.GetDelegateForFunctionPointer(
+ pAddressOfFunctionToCall,
+ typeof(NativeMethodDelegate));
+
+ NativePMR<OutOfGamutInput, OutOfGamutOutput> nativePMR = new NativePMR<OutOfGamutInput, OutOfGamutOutput>(generateIsOutOfGamut);
+ OutOfGamutOutput output = nativePMR.Invoke(input);
+
+ bool result = NativeMethods.FreeLibrary(pDll);
+
+ if (output.HasError)
+ {
+ throw new ExternalException($"Out Of Gamut Check Error: {output.ErrorMessage}!");
+ }
+
+ return output;
+ }
+
+ public ConversionOutput P_IsInGamut(ConversionInput input)
+ {
+ String fileName = $"{AssemblyHelper.GetCurrentAssemblyFolder()}\\Tango.ColorLib_v4.dll";
+
+ if (!File.Exists(fileName))
+ {
+ throw new FileNotFoundException($"Could not find color conversion library '{fileName}'.");
+ }
+
+ IntPtr pDll = NativeMethods.LoadLibrary(fileName);
+ IntPtr pAddressOfFunctionToCall = NativeMethods.GetProcAddress(pDll, "P_IsInGamut");
+ NativeMethodDelegate generateIsOutOfGamut = (NativeMethodDelegate)Marshal.GetDelegateForFunctionPointer(
+ pAddressOfFunctionToCall,
+ typeof(NativeMethodDelegate));
+
+ NativePMR<ConversionInput, ConversionOutput> nativePMR = new NativePMR<ConversionInput, ConversionOutput>(generateIsOutOfGamut);
+ ConversionOutput output = nativePMR.Invoke(input);
+
+ bool result = NativeMethods.FreeLibrary(pDll);
+ if (output.HasError)
+ {
+ throw new ExternalException($"Out Of Gamut Check Error: {output.ErrorMessage}!");
+ }
+
+ return output;
+ }
+
+ public RecommendedProcessTableOutput GetRecommendedProcessParameters(RecommendedProcessTableInput input, int version)
+ {
+ if (version < 4) version = 4;
+
+ String fileName = $"{AssemblyHelper.GetCurrentAssemblyFolder()}\\Tango.ColorLib_v{version}.dll";
+
+ if (!File.Exists(fileName))
+ {
+ throw new FileNotFoundException($"Could not find color conversion library '{fileName}'.");
+ }
+
+ IntPtr pDll = NativeMethods.LoadLibrary(fileName);
+ IntPtr pAddressOfFunctionToCall = NativeMethods.GetProcAddress(pDll, "GetRecommendedProcessParameters");
+ NativeMethodDelegate convert = (NativeMethodDelegate)Marshal.GetDelegateForFunctionPointer(
+ pAddressOfFunctionToCall,
+ typeof(NativeMethodDelegate));
+
+ NativePMR<RecommendedProcessTableInput, RecommendedProcessTableOutput> nativePMR = new NativePMR<RecommendedProcessTableInput, RecommendedProcessTableOutput>(convert);
+ RecommendedProcessTableOutput output = nativePMR.Invoke(input);
+
+ bool result = NativeMethods.FreeLibrary(pDll);
+
+ if (output.HasError)
+ {
+ throw new ExternalException($"Recommended Process Parameters Calculation Error: {output.ErrorMessage}!");
+ }
+
+ return output;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Program.cs b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Program.cs
new file mode 100644
index 000000000..8628f5b4e
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Program.cs
@@ -0,0 +1,191 @@
+using Google.Protobuf;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using Tango.Core.ExtensionMethods;
+using Tango.PMR.ColorLab;
+
+namespace Tango.ColorLib.OutOfGamutTest.CLI
+{
+ class Program
+ {
+ public static Random _s_random = new Random();
+ static void Main(string[] args)
+ {
+ ColorFunctionGenerator generator = new ColorFunctionGenerator();
+
+ Stopwatch watch = new Stopwatch();
+ //watch.Start();
+ //for (int i = 0; i < 200; i++)
+ //{
+ // bool result = CheckOutOfGamut(generator);
+ //}
+ //watch.Stop();
+ // Console.WriteLine($"Processing CheckOutOfGamut for 200 brush stops completed after: {watch.Elapsed.Milliseconds.ToString("00000.00")} mseconds.");
+ // Console.WriteLine();
+ watch.Start();
+ for (int i = 0; i < 200; i++)
+ {
+ bool result = IsInGamut(generator);
+ }
+ watch.Stop();
+ Console.WriteLine($"Processing IsInGamut for 200 brush stops completed after: {watch.Elapsed.Milliseconds.ToString()} milliseconds.");
+ Console.WriteLine();
+
+ Console.WriteLine("Press return to exit...");
+ Console.ReadLine();
+ }
+
+ public static bool CheckOutOfGamut(ColorFunctionGenerator generator)
+ {
+ OutOfGamutInput input = new OutOfGamutInput();
+
+ input.ThreadL = 92.7867;
+ input.ThreadA = -0.2519;
+ input.ThreadB = 0.6968;
+
+ input.ColorSpace = PMR.ColorLab.ColorSpace.Rgb;
+ input.InputCoordinates = new InputCoordinates();
+
+ input.InputCoordinates.Red = _s_random.Next(0, 255);
+ input.InputCoordinates.Green = _s_random.Next(0, 255);
+ input.InputCoordinates.Blue = _s_random.Next(0, 255);
+
+ //input.InputCoordinates.L = stop.L;
+ //input.InputCoordinates.A = stop.A;
+ //input.InputCoordinates.B = stop.B;
+
+ //input.InputCoordinates.Cyan = stop.Cyan;
+ //input.InputCoordinates.Magenta = stop.Magenta;
+ //input.InputCoordinates.Yellow = stop.Yellow;
+ //input.InputCoordinates.Key = stop.Black;
+
+ //Process Ranges
+ input.ProcessRanges.Add(new ProcessRange()
+ {
+ MinInkUptake = 200,
+ MaxInkUptake = 200,
+ });
+
+ input.ProcessRanges.Add(new ProcessRange()
+ {
+ MinInkUptake = 200,
+ MaxInkUptake = 400,
+ });
+
+ input.ForwardData = ByteString.CopyFrom(File.ReadAllBytes(@"Sylko_HV_IL350R.cct"));
+
+ //RML Liquid Factors
+ input.InputCoordinates.InputLiquids.Add(new InputLiquid()
+ {
+ LiquidType = LiquidType.Cyan,
+ CalibrationData = BL.Entities.Cat.CreateDemoCalibrationData(LiquidType.Cyan),
+ MaxNanoliterPerCentimeter = 200,
+ });
+
+ input.InputCoordinates.InputLiquids.Add(new InputLiquid()
+ {
+ LiquidType = LiquidType.Magenta,
+ CalibrationData = BL.Entities.Cat.CreateDemoCalibrationData(LiquidType.Magenta),
+ MaxNanoliterPerCentimeter = 200,
+ });
+
+ input.InputCoordinates.InputLiquids.Add(new InputLiquid()
+ {
+ LiquidType = LiquidType.Yellow,
+ CalibrationData = BL.Entities.Cat.CreateDemoCalibrationData(LiquidType.Yellow),
+ MaxNanoliterPerCentimeter = 200,
+ });
+
+ input.InputCoordinates.InputLiquids.Add(new InputLiquid()
+ {
+ LiquidType = LiquidType.Black,
+ CalibrationData = BL.Entities.Cat.CreateDemoCalibrationData(LiquidType.Black),
+ MaxNanoliterPerCentimeter = 200,
+ });
+
+ OutOfGamutOutput outOfGamutOutput = generator.CheckOutOfGamut(input);
+
+ return outOfGamutOutput.OutOfGamut;
+ }
+
+ public static bool IsInGamut(ColorFunctionGenerator generator)
+ {
+ ConversionInput input = new ConversionInput();
+
+ input.ThreadL = 92.7867;
+ input.ThreadA = -0.2519;
+ input.ThreadB = 0.6968;
+
+ input.ColorSpace = PMR.ColorLab.ColorSpace.Rgb;
+ input.InputCoordinates = new InputCoordinates();
+
+ input.InputCoordinates.Red = _s_random.Next(0, 255);
+ input.InputCoordinates.Green = _s_random.Next(0, 255);
+ input.InputCoordinates.Blue = _s_random.Next(0, 255);
+
+ //input.InputCoordinates.L = stop.L;
+ //input.InputCoordinates.A = stop.A;
+ //input.InputCoordinates.B = stop.B;
+
+ //input.InputCoordinates.Cyan = stop.Cyan;
+ //input.InputCoordinates.Magenta = stop.Magenta;
+ //input.InputCoordinates.Yellow = stop.Yellow;
+ //input.InputCoordinates.Key = stop.Black;
+
+ //Process Ranges
+ input.ProcessRanges.Add(new ProcessRange()
+ {
+ MinInkUptake = 200,
+ MaxInkUptake = 200,
+ });
+
+ input.ProcessRanges.Add(new ProcessRange()
+ {
+ MinInkUptake = 200,
+ MaxInkUptake = 400,
+ });
+
+ input.ForwardData = ByteString.CopyFrom(File.ReadAllBytes(@"Sylko_HV_IL350R.cct"));
+
+ //RML Liquid Factors
+ input.InputCoordinates.InputLiquids.Add(new InputLiquid()
+ {
+ LiquidType = LiquidType.Cyan,
+ CalibrationData = BL.Entities.Cat.CreateDemoCalibrationData(LiquidType.Cyan),
+ MaxNanoliterPerCentimeter = 200,
+ });
+
+ input.InputCoordinates.InputLiquids.Add(new InputLiquid()
+ {
+ LiquidType = LiquidType.Magenta,
+ CalibrationData = BL.Entities.Cat.CreateDemoCalibrationData(LiquidType.Magenta),
+ MaxNanoliterPerCentimeter = 200,
+ });
+
+ input.InputCoordinates.InputLiquids.Add(new InputLiquid()
+ {
+ LiquidType = LiquidType.Yellow,
+ CalibrationData = BL.Entities.Cat.CreateDemoCalibrationData(LiquidType.Yellow),
+ MaxNanoliterPerCentimeter = 200,
+ });
+
+ input.InputCoordinates.InputLiquids.Add(new InputLiquid()
+ {
+ LiquidType = LiquidType.Black,
+ CalibrationData = BL.Entities.Cat.CreateDemoCalibrationData(LiquidType.Black),
+ MaxNanoliterPerCentimeter = 200,
+ });
+ input.GenerateHive = false;
+
+ ConversionOutput outOfGamutOutput = generator.P_IsInGamut(input);
+
+ return outOfGamutOutput.OutOfGamut;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Properties/AssemblyInfo.cs b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..eee4cc680
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Tango.ColorLib.OutOfGamutTest.CLI")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Tango.ColorLib.OutOfGamutTest.CLI")]
+[assembly: AssemblyCopyright("Copyright © 2021")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("6b13e186-ade2-4d97-9643-8132e00fc207")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Sylko_HV_IL350R.cct b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Sylko_HV_IL350R.cct
new file mode 100644
index 000000000..d164d7c84
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Sylko_HV_IL350R.cct
Binary files differ
diff --git a/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Sylko_HV_IL400Bl95R_1.cct b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Sylko_HV_IL400Bl95R_1.cct
new file mode 100644
index 000000000..5802a14eb
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Sylko_HV_IL400Bl95R_1.cct
Binary files differ
diff --git a/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Tango.ColorLib.OutOfGamutTest.CLI.csproj b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Tango.ColorLib.OutOfGamutTest.CLI.csproj
new file mode 100644
index 000000000..0080143e5
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/Tango.ColorLib.OutOfGamutTest.CLI.csproj
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{6B13E186-ADE2-4D97-9643-8132E00FC207}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <RootNamespace>Tango.ColorLib.OutOfGamutTest.CLI</RootNamespace>
+ <AssemblyName>Tango.ColorLib.OutOfGamutTest.CLI</AssemblyName>
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+ <Deterministic>true</Deterministic>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Net.Http" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="ColorFunctionGenerator.cs" />
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ <None Include="packages.config" />
+ <None Include="Sylko_HV_IL350R.cct">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </None>
+ <None Include="Sylko_HV_IL400Bl95R_1.cct">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <PackageReference Include="Google.Protobuf">
+ <Version>3.4.1</Version>
+ </PackageReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="..\Build\ColorLib\Debug\Tango.ColorLib_v4.dll">
+ <Link>Tango.ColorLib_v4.dll</Link>
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\Tango.BL\Tango.BL.csproj">
+ <Project>{f441feee-322a-4943-b566-110e12fd3b72}</Project>
+ <Name>Tango.BL</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Tango.Core\Tango.Core.csproj">
+ <Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project>
+ <Name>Tango.Core</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\Tango.PMR\Tango.PMR.csproj">
+ <Project>{e4927038-348d-4295-aaf4-861c58cb3943}</Project>
+ <Name>Tango.PMR</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/packages.config b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/packages.config
new file mode 100644
index 000000000..fa3c0d58d
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorLib.OutOfGamutTest.CLI/packages.config
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="Google.Protobuf" version="3.4.1" targetFramework="net461" />
+</packages> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.sln b/Software/Visual_Studio/Tango.sln
index 655c00e56..c318d0e60 100644
--- a/Software/Visual_Studio/Tango.sln
+++ b/Software/Visual_Studio/Tango.sln
@@ -461,6 +461,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.StubsUtils.ProcedureC
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.CsvToJobTester.CLI", "Utilities\Tango.CsvToJobTester.CLI\Tango.CsvToJobTester.CLI.csproj", "{4747A2DE-F419-41B1-95A7-E9FBB4EA0B3B}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tango.ColorLib.OutOfGamutTest.CLI", "Tango.ColorLib.OutOfGamutTest.CLI\Tango.ColorLib.OutOfGamutTest.CLI.csproj", "{6B13E186-ADE2-4D97-9643-8132E00FC207}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -4376,6 +4378,26 @@ Global
{4747A2DE-F419-41B1-95A7-E9FBB4EA0B3B}.Release|x64.Build.0 = Release|Any CPU
{4747A2DE-F419-41B1-95A7-E9FBB4EA0B3B}.Release|x86.ActiveCfg = Release|Any CPU
{4747A2DE-F419-41B1-95A7-E9FBB4EA0B3B}.Release|x86.Build.0 = Release|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Debug|ARM.Build.0 = Debug|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Debug|ARM64.ActiveCfg = Debug|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Debug|ARM64.Build.0 = Debug|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Debug|x64.Build.0 = Debug|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Debug|x86.Build.0 = Debug|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Release|ARM.ActiveCfg = Release|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Release|ARM.Build.0 = Release|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Release|ARM64.ActiveCfg = Release|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Release|ARM64.Build.0 = Release|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Release|x64.ActiveCfg = Release|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Release|x64.Build.0 = Release|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Release|x86.ActiveCfg = Release|Any CPU
+ {6B13E186-ADE2-4D97-9643-8132E00FC207}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -4538,14 +4560,15 @@ Global
{5C9A4F46-263D-4C23-B361-F09E14BB109E} = {4A8BD6EC-41CF-46A9-B2CD-9D0DF6465963}
{8F0BCFC8-AF0F-40D3-882A-902CD221A6DE} = {4A8BD6EC-41CF-46A9-B2CD-9D0DF6465963}
{4747A2DE-F419-41B1-95A7-E9FBB4EA0B3B} = {5F6BBAA8-EAD0-4B18-97E5-55B4F56DD760}
+ {6B13E186-ADE2-4D97-9643-8132E00FC207} = {8336A702-9C49-4C9E-ADCC-1886A666D3BD}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {7986F7F4-A86A-4994-B1B6-0988D7F057B6}
- BuildVersion_BuildVersioningStyle = None.None.Increment.DeltaBaseYearDayOfYear
- BuildVersion_UpdateAssemblyVersion = True
- BuildVersion_UpdateFileVersion = False
- BuildVersion_StartDate = 2000/1/1
- BuildVersion_AssemblyInfoFilename = Properties\AssemblyInfo.cs
BuildVersion_UseGlobalSettings = False
+ BuildVersion_AssemblyInfoFilename = Properties\AssemblyInfo.cs
+ BuildVersion_StartDate = 2000/1/1
+ BuildVersion_UpdateFileVersion = False
+ BuildVersion_UpdateAssemblyVersion = True
+ BuildVersion_BuildVersioningStyle = None.None.Increment.DeltaBaseYearDayOfYear
+ SolutionGuid = {7986F7F4-A86A-4994-B1B6-0988D7F057B6}
EndGlobalSection
EndGlobal