aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs')
-rw-r--r--Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs193
1 files changed, 98 insertions, 95 deletions
diff --git a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
index bce386bfe..ada7a4b73 100644
--- a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
+++ b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
@@ -2408,150 +2408,153 @@ namespace Tango.Integration.Operation
/// </summary>
/// <param name="job">The job.</param>
/// <returns></returns>
- public Task<JobHandler> Print(Job job)
+ public async Task<JobHandler> Print(Job job)
{
- IColorConverter converter = new DefaultColorConverter();
-
- var jobSegments = job.OrderedSegments;
+ ProcessParametersTable processParameters = null;
- if (job.Rml == null)
+ await Task.Factory.StartNew(() =>
{
- throw new NullReferenceException("Job RML is null");
- }
+ IColorConverter converter = new DefaultColorConverter();
- var processGroup = job.Rml.ProcessParametersTablesGroups.FirstOrDefault(x => x.Active);
+ var jobSegments = job.OrderedSegments;
- if (processGroup == null)
- {
- throw new NullReferenceException("Could not locate an active process parameters tables group for RML " + job.Rml.Name);
- }
+ if (job.Rml == null)
+ {
+ throw new NullReferenceException("Job RML is null");
+ }
- ProcessParametersTable processParameters = null;
+ var processGroup = job.Rml.ProcessParametersTablesGroups.FirstOrDefault(x => x.Active);
- try
- {
- processParameters = converter.GetRecommendedProcessParameters(job);
- }
- catch (Exception ex)
- {
- throw LogManager.Log(new InvalidOperationException($"An error occurred while trying to resolve the recommended process parameters.\n{ex.Message}"));
- }
+ if (processGroup == null)
+ {
+ throw new NullReferenceException("Could not locate an active process parameters tables group for RML " + job.Rml.Name);
+ }
- if (processParameters == null)
- {
- throw new NullReferenceException("Could not locate any process parameters table in group " + processGroup.Name + " for RML " + job.Rml.Name);
- }
+ try
+ {
+ processParameters = converter.GetRecommendedProcessParameters(job);
+ }
+ catch (Exception ex)
+ {
+ throw LogManager.Log(new InvalidOperationException($"An error occurred while trying to resolve the recommended process parameters.\n{ex.Message}"));
+ }
- //Perform color correction
- foreach (var stop in jobSegments.SelectMany(x => x.BrushStops))
- {
- //if (stop.LiquidVolumes == null || stop.BrushColorSpace == ColorSpaces.Volume)
- //{
- if (stop.BrushColorSpace == ColorSpaces.RGB || stop.BrushColorSpace == ColorSpaces.LAB)
+ if (processParameters == null)
{
- var output = converter.Convert(stop, false);
+ throw new NullReferenceException("Could not locate any process parameters table in group " + processGroup.Name + " for RML " + job.Rml.Name);
+ }
- //TODO: Restore this when Mirta conversion is working as expected.
- //if (suggestions.OutOfGamut)
+ //Perform color correction
+ foreach (var stop in jobSegments.SelectMany(x => x.BrushStops))
+ {
+ //if (stop.LiquidVolumes == null || stop.BrushColorSpace == ColorSpaces.Volume)
//{
- // throw new InvalidOperationException("Cannot print a brush stop which is out of gamut.");
- //}
-
- stop.SetLiquidVolumes(job.Machine.Configuration, job.Rml, processParameters);
-
- foreach (var outputLiquid in output.SingleCoordinates.OutputLiquids)
+ if (stop.BrushColorSpace == ColorSpaces.RGB || stop.BrushColorSpace == ColorSpaces.LAB)
{
- var liquidVolume = stop.LiquidVolumes.SingleOrDefault(x => x.IdsPack.LiquidType.Code == outputLiquid.LiquidType.ToInt32());
+ var output = converter.Convert(stop, false);
- if (liquidVolume == null)
- {
- throw new NullReferenceException("Liquid volume not found for color conversion output liquid '" + outputLiquid.LiquidType + "'.");
- }
+ //TODO: Restore this when Mirta conversion is working as expected.
+ //if (suggestions.OutOfGamut)
+ //{
+ // throw new InvalidOperationException("Cannot print a brush stop which is out of gamut.");
+ //}
- liquidVolume.Volume = outputLiquid.Volume;
- }
- }
- else if (stop.BrushColorSpace == ColorSpaces.Catalog)
- {
- if (stop.ColorCatalogsItem != null)
- {
stop.SetLiquidVolumes(job.Machine.Configuration, job.Rml, processParameters);
+ foreach (var outputLiquid in output.SingleCoordinates.OutputLiquids)
{
- var liquidVolume = stop.LiquidVolumes.SingleOrDefault(x => x.LiquidType == LiquidTypes.Cyan);
+ var liquidVolume = stop.LiquidVolumes.SingleOrDefault(x => x.IdsPack.LiquidType.Code == outputLiquid.LiquidType.ToInt32());
if (liquidVolume == null)
{
- throw new NullReferenceException("Liquid volume not found for color conversion output liquid '" + LiquidTypes.Cyan + "'.");
+ throw new NullReferenceException("Liquid volume not found for color conversion output liquid '" + outputLiquid.LiquidType + "'.");
}
- liquidVolume.Volume = stop.ColorCatalogsItem.Cyan;
+ liquidVolume.Volume = outputLiquid.Volume;
}
-
+ }
+ else if (stop.BrushColorSpace == ColorSpaces.Catalog)
+ {
+ if (stop.ColorCatalogsItem != null)
{
- var liquidVolume = stop.LiquidVolumes.SingleOrDefault(x => x.LiquidType == LiquidTypes.Magenta);
+ stop.SetLiquidVolumes(job.Machine.Configuration, job.Rml, processParameters);
- if (liquidVolume == null)
{
- throw new NullReferenceException("Liquid volume not found for color conversion output liquid '" + LiquidTypes.Magenta + "'.");
- }
+ var liquidVolume = stop.LiquidVolumes.SingleOrDefault(x => x.LiquidType == LiquidTypes.Cyan);
- liquidVolume.Volume = stop.ColorCatalogsItem.Magenta;
- }
+ if (liquidVolume == null)
+ {
+ throw new NullReferenceException("Liquid volume not found for color conversion output liquid '" + LiquidTypes.Cyan + "'.");
+ }
- {
- var liquidVolume = stop.LiquidVolumes.SingleOrDefault(x => x.LiquidType == LiquidTypes.Yellow);
+ liquidVolume.Volume = stop.ColorCatalogsItem.Cyan;
+ }
- if (liquidVolume == null)
{
- throw new NullReferenceException("Liquid volume not found for color conversion output liquid '" + LiquidTypes.Yellow + "'.");
- }
+ var liquidVolume = stop.LiquidVolumes.SingleOrDefault(x => x.LiquidType == LiquidTypes.Magenta);
- liquidVolume.Volume = stop.ColorCatalogsItem.Yellow;
- }
+ if (liquidVolume == null)
+ {
+ throw new NullReferenceException("Liquid volume not found for color conversion output liquid '" + LiquidTypes.Magenta + "'.");
+ }
- {
- var liquidVolume = stop.LiquidVolumes.SingleOrDefault(x => x.LiquidType == LiquidTypes.Black);
+ liquidVolume.Volume = stop.ColorCatalogsItem.Magenta;
+ }
- if (liquidVolume == null)
{
- throw new NullReferenceException("Liquid volume not found for color conversion output liquid '" + LiquidTypes.Black + "'.");
+ var liquidVolume = stop.LiquidVolumes.SingleOrDefault(x => x.LiquidType == LiquidTypes.Yellow);
+
+ if (liquidVolume == null)
+ {
+ throw new NullReferenceException("Liquid volume not found for color conversion output liquid '" + LiquidTypes.Yellow + "'.");
+ }
+
+ liquidVolume.Volume = stop.ColorCatalogsItem.Yellow;
}
- liquidVolume.Volume = stop.ColorCatalogsItem.Black;
+ {
+ var liquidVolume = stop.LiquidVolumes.SingleOrDefault(x => x.LiquidType == LiquidTypes.Black);
+
+ if (liquidVolume == null)
+ {
+ throw new NullReferenceException("Liquid volume not found for color conversion output liquid '" + LiquidTypes.Black + "'.");
+ }
+
+ liquidVolume.Volume = stop.ColorCatalogsItem.Black;
+ }
+ }
+ else if (!stop.IsTransparent)
+ {
+ throw new InvalidOperationException($"No catalog item specified for segment color.");
+ }
+ else
+ {
+ stop.SetLiquidVolumes(job.Machine.Configuration, job.Rml, processParameters);
}
}
- else if (!stop.IsTransparent)
+ else if (stop.BrushColorSpace == ColorSpaces.Volume)
{
- throw new InvalidOperationException($"No catalog item specified for segment color.");
+ stop.SetLiquidVolumes(job.Machine.Configuration, job.Rml, processParameters);
}
else
{
- stop.SetLiquidVolumes(job.Machine.Configuration, job.Rml, processParameters);
+ throw new InvalidOperationException($"Unsupported color space {stop.BrushColorSpace}.");
}
- }
- else if (stop.BrushColorSpace == ColorSpaces.Volume)
- {
- stop.SetLiquidVolumes(job.Machine.Configuration, job.Rml, processParameters);
- }
- else
- {
- throw new InvalidOperationException($"Unsupported color space {stop.BrushColorSpace}.");
- }
- //}
-
- if (job.EnableLubrication)
- {
- var lubricantVolume = stop.LiquidVolumes.SingleOrDefault(x => x.IdsPack != null && x.IdsPack.LiquidType != null && x.LiquidType == LiquidTypes.Lubricant);
+ //}
- if (lubricantVolume != null)
+ if (job.EnableLubrication)
{
- lubricantVolume.Volume = 100;
+ var lubricantVolume = stop.LiquidVolumes.SingleOrDefault(x => x.IdsPack != null && x.IdsPack.LiquidType != null && x.LiquidType == LiquidTypes.Lubricant);
+
+ if (lubricantVolume != null)
+ {
+ lubricantVolume.Volume = 100;
+ }
}
}
- }
+ });
- return Print(job, processParameters);
+ return await Print(job, processParameters);
}
/// <summary>