aboutsummaryrefslogtreecommitdiffstats
path: root/Software
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2020-12-23 00:24:11 +0200
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2020-12-23 00:24:11 +0200
commit518c9192e4445d82f192edcccb2ffb64ffc88a65 (patch)
treebbf30297b0e452066801aefd9c9f2916020e57a6 /Software
parent7b6ec0a4e66a4402d5ee0beb4b34b18604e28cd8 (diff)
downloadTango-518c9192e4445d82f192edcccb2ffb64ffc88a65.tar.gz
Tango-518c9192e4445d82f192edcccb2ffb64ffc88a65.zip
ColorSpace per stop implemented on PPC.
Synchronization only when values change. Volume open for all. RGB to closest catalog item...
Diffstat (limited to 'Software')
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs161
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobsViewVM.cs10
-rw-r--r--Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml83
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/Printing/DefaultPrintingManager.cs9
-rw-r--r--Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest2
-rw-r--r--Software/Visual_Studio/Tango.BL/Builders/CatalogsCollectionBuilder.cs31
-rw-r--r--Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs71
-rw-r--r--Software/Visual_Studio/Tango.BL/Entities/ColorCatalog.cs20
-rw-r--r--Software/Visual_Studio/Tango.BL/Entities/ColorCatalogsGroup.cs8
-rw-r--r--Software/Visual_Studio/Tango.BL/ExtensionMethods/ColorCatalogItemsExtensions.cs23
-rw-r--r--Software/Visual_Studio/Tango.BL/Tango.BL.csproj3
-rw-r--r--Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs193
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.xaml2
-rw-r--r--Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.cs17
14 files changed, 383 insertions, 250 deletions
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs
index 5e90d3b5b..e8af7c957 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs
@@ -37,6 +37,7 @@ using Tango.PPC.Storage;
using System.IO;
using Tango.ColorConversion;
using Tango.Integration.Operation;
+using Tango.BL.Enumerations;
namespace Tango.PPC.Jobs.ViewModels
{
@@ -188,39 +189,16 @@ namespace Tango.PPC.Jobs.ViewModels
set { _isJobDetailsExpanded = value; RaisePropertyChangedAuto(); }
}
- private List<ColorCatalogsItem> _catalogItems;
- /// <summary>
- /// Gets or sets the twine catalog items.
- /// </summary>
- public List<ColorCatalogsItem> CatalogItems
- {
- get { return _catalogItems; }
- set { _catalogItems = value; RaisePropertyChangedAuto(); }
- }
-
- private ColorCatalogsItem _selectedCatalogItem;
- /// <summary>
- /// Gets or sets the selected catalog item.
- /// </summary>
- public ColorCatalogsItem SelectedCatalogItem
- {
- get { return _selectedCatalogItem; }
- set { _selectedCatalogItem = value; RaisePropertyChangedAuto(); }
- }
-
/// <summary>
/// Gets or sets the twine catalog automatic complete provider.
/// </summary>
public IAutoCompleteProvider CatalogAutoCompleteProvider { get; set; }
- private ColorCatalog _selectedCatalog;
- /// <summary>
- /// Gets or sets the selected catalog.
- /// </summary>
- public ColorCatalog SelectedCatalog
+ private List<ColorCatalog> _availableCatalogs;
+ public List<ColorCatalog> AvailableCatalogs
{
- get { return _selectedCatalog; }
- set { _selectedCatalog = value; RaisePropertyChangedAuto(); }
+ get { return _availableCatalogs; }
+ set { _availableCatalogs = value; RaisePropertyChangedAuto(); }
}
#endregion
@@ -362,7 +340,6 @@ namespace Tango.PPC.Jobs.ViewModels
FineTuneItems = new ObservableCollection<FineTuneItem>();
ApprovalFineTuneItems = new ObservableCollection<FineTuneItem>();
- CatalogItems = new List<ColorCatalogsItem>();
CustomersAutoCompleteProvider = new AutoCompleteProvider<Customer>((customer, filter) =>
{
@@ -471,33 +448,17 @@ namespace Tango.PPC.Jobs.ViewModels
LogManager.Log("Loading RMLS...");
Rmls = (await new RmlsCollectionBuilder(_db).SetAll().WithActiveParametersGroup().WithCAT(Job.MachineGuid).WithCCT().WithLiquidFactors().WithSpools().ForHeadType(MachineProvider.Machine.MachineHeadType).ForSite(MachineProvider.Machine.SiteGuid).BuildAsync()).ToList();
LogManager.Log("Loading Color Spaces...");
- ColorSpaces = await _db.ColorSpaces.ToListAsync();
+ ColorSpaces = await _db.ColorSpaces.Where(x => x.Code != (int)BL.Enumerations.ColorSpaces.CMYK).ToListAsync();
LogManager.Log("Loading Spool Types...");
SpoolTypes = await _db.SpoolTypes.ToListAsync();
LogManager.Log("Loading Customers...");
Customers = await _db.Customers.Where(x => x.OrganizationGuid == MachineProvider.Machine.OrganizationGuid).ToListAsync();
- if (Job.ColorSpace.Space == BL.Enumerations.ColorSpaces.Catalog)
- {
- SelectedCatalog = await new CatalogBuilder(_db).Set(Job.ColorCatalogGuid).WithGroups().WithItems().BuildAsync();
-
- if (SelectedCatalog != null)
- {
- CatalogItems = SelectedCatalog.ColorCatalogsGroups.SelectMany(x => x.ColorCatalogsItems).OrderBy(x => x.ItemIndex).ToList();
- }
- else
- {
- await NotificationProvider.ShowError("The selected color catalog for this job could not be found.\nCannot load job.");
- Job = null;
- _can_navigate_back = true;
- await NavigationManager.NavigateBack();
- return;
- }
- }
+ AvailableCatalogs = await new CatalogsCollectionBuilder(_db).SetAll().WithGroups().WithItems().ForSite(MachineProvider.Machine.SiteGuid).BuildListAsync();
foreach (var segment in Job.Segments)
{
- SetSegmentLiquidVolumesIfVolume(segment);
+ SetSegmentLiquidVolumes(segment);
}
if (!_check_gamut_thread.IsAlive)
@@ -540,6 +501,8 @@ namespace Tango.PPC.Jobs.ViewModels
ValidateBrushStops();
+ CoerceBrushStopsColorSpaceChange();
+
DyeCommand.RaiseCanExecuteChanged();
StartSampleDyeCommand.RaiseCanExecuteChanged();
StartFineTuningCommand.RaiseCanExecuteChanged();
@@ -718,7 +681,8 @@ namespace Tango.PPC.Jobs.ViewModels
{
LogManager.Log("Adding new solid segment...");
var s = Job.AddSolidSegment(Settings.DefaultSegmentLength > 0 ? Settings.DefaultSegmentLength : 10);
- SetSegmentLiquidVolumesIfVolume(s);
+ SetSegmentLiquidVolumes(s);
+ CoerceBrushStopsColorSpaceChange();
return s;
}
catch (Exception ex)
@@ -738,7 +702,8 @@ namespace Tango.PPC.Jobs.ViewModels
{
LogManager.Log("Adding new gradient segment...");
var s = Job.AddGradientSegment(Settings.DefaultSegmentLength > 0 ? Settings.DefaultSegmentLength : 10);
- SetSegmentLiquidVolumesIfVolume(s);
+ SetSegmentLiquidVolumes(s);
+ CoerceBrushStopsColorSpaceChange();
return s;
}
catch (Exception ex)
@@ -811,19 +776,16 @@ namespace Tango.PPC.Jobs.ViewModels
/// Sets the segment liquid volumes.
/// </summary>
/// <param name="segment">The segment.</param>
- private void SetSegmentLiquidVolumesIfVolume(Segment segment)
+ private void SetSegmentLiquidVolumes(Segment segment)
{
- if (Job.ColorSpace.Code == BL.Enumerations.ColorSpaces.Volume.ToInt32())
+ foreach (var stop in segment.BrushStops)
{
- foreach (var stop in segment.BrushStops)
- {
- stop.SetLiquidVolumes(Job.Machine.Configuration, Job.Rml, Job.Rml.GetActiveProcessGroup().ProcessParametersTables.FirstOrDefault());
+ stop.SetLiquidVolumes(Job.Machine.Configuration, Job.Rml, Job.Rml.GetActiveProcessGroup().ProcessParametersTables.FirstOrDefault());
- var lub = stop.LiquidVolumes.FirstOrDefault(x => x.IdsPack.LiquidType.Code == (int)BL.Enumerations.LiquidTypes.Lubricant);
- if (lub != null)
- {
- lub.Volume = 100;
- }
+ var lub = stop.LiquidVolumes.FirstOrDefault(x => x.IdsPack.LiquidType.Code == (int)BL.Enumerations.LiquidTypes.Lubricant);
+ if (lub != null)
+ {
+ lub.Volume = 100;
}
}
}
@@ -844,6 +806,24 @@ namespace Tango.PPC.Jobs.ViewModels
#region Brush Stops Management
+ private void CoerceBrushStopsColorSpaceChange()
+ {
+ if (Job != null)
+ {
+ foreach (var stop in Job.Segments.SelectMany(x => x.BrushStops).ToList())
+ {
+ stop.ColorSpaceChanged -= Stop_ColorSpaceChanged;
+ stop.ColorSpaceChanged += Stop_ColorSpaceChanged;
+ }
+ }
+ }
+
+ private void Stop_ColorSpaceChanged(object sender, ColorSpace e)
+ {
+ BrushStop stop = sender as BrushStop;
+ stop.Segment.BrushStops.Where(x => x != stop).ToList().ForEach(x => x.ColorSpace = stop.ColorSpace);
+ }
+
/// <summary>
/// Adds a new brush stop to the specified segment.
/// </summary>
@@ -852,7 +832,8 @@ namespace Tango.PPC.Jobs.ViewModels
{
LogManager.Log($"Adding new brush stop to segment {segment.SegmentIndex}.");
segment.AddBrushStop();
- SetSegmentLiquidVolumesIfVolume(segment);
+ SetSegmentLiquidVolumes(segment);
+ CoerceBrushStopsColorSpaceChange();
}
/// <summary>
@@ -987,34 +968,56 @@ namespace Tango.PPC.Jobs.ViewModels
{
if (stop != null && stop.ColorSpace != null)
{
- stop.Corrected = false;
- stop.OutOfGamutChecked = false;
+ if (stop.BrushColorSpace == BL.Enumerations.ColorSpaces.Catalog) return;
- if (stop.BrushColorSpace == BL.Enumerations.ColorSpaces.Volume)
+ _volumeConversionTimer.ResetReplace(() =>
{
- _volumeConversionTimer.ResetReplace(() =>
+
+ try
{
- try
- {
- var output = _converter.Convert(stop, false);
+ var output = _converter.Convert(stop, false);
+ if (stop.BrushColorSpace == BL.Enumerations.ColorSpaces.Volume)
+ {
stop.Red = output.SingleCoordinates.Red;
stop.Green = output.SingleCoordinates.Green;
stop.Blue = output.SingleCoordinates.Blue;
+ stop.L = output.SingleCoordinates.L;
+ stop.A = output.SingleCoordinates.A;
+ stop.B = output.SingleCoordinates.B;
stop.Corrected = true;
stop.IsOutOfGamut = false;
-
- InvokeUI(() =>
- {
- DyeCommand.RaiseCanExecuteChanged();
- });
}
- catch (Exception ex)
+ else if (stop.BrushColorSpace == BL.Enumerations.ColorSpaces.LAB)
{
- LogManager.Log(ex, "An error occurred while trying to get volume => RGB from conversion engine.");
+ output.ApplyOnBrushStopVolumesOnly(stop);
+ stop.Corrected = false;
+ stop.OutOfGamutChecked = false;
}
- });
- }
+ else if (stop.BrushColorSpace == BL.Enumerations.ColorSpaces.RGB)
+ {
+ output.ApplyOnBrushStopVolumesOnly(stop);
+ stop.Corrected = false;
+ stop.OutOfGamutChecked = false;
+ }
+
+ try
+ {
+ var closestItem = AvailableCatalogs.SelectMany(x => x.AllItemsOrdered).GetClosestItem(stop.Color);
+ stop.ColorCatalog = closestItem.ColorCatalogsGroup.ColorCatalog;
+ stop.ColorCatalogsItem = closestItem;
+ }
+ catch { }
+
+ InvokeUI(() => DyeCommand.RaiseCanExecuteChanged());
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "An error occurred while trying to get volume => RGB from conversion engine.");
+ }
+
+ });
+
}
}
@@ -1027,7 +1030,7 @@ namespace Tango.PPC.Jobs.ViewModels
var catalogItem = await NavigationManager.NavigateForResult<JobsModule, TwineCatalogView, ColorCatalogsItem, TwineCatalogNavigationObject>(new TwineCatalogNavigationObject()
{
SelectedItem = stop.ColorCatalogsItem,
- Catalog = SelectedCatalog
+ Catalog = stop.ColorCatalog
}, true);
if (catalogItem != null)
@@ -1298,9 +1301,9 @@ namespace Tango.PPC.Jobs.ViewModels
{
Thread.Sleep(500);
- if (Job != null && Job.Rml.Cct != null && IsVisible && (Job.ColorSpace != null && (Job.ColorSpace.Code == BL.Enumerations.ColorSpaces.RGB.ToInt32() || Job.ColorSpace.Code == BL.Enumerations.ColorSpaces.LAB.ToInt32())))
+ if (Job != null && Job.Rml.Cct != null && IsVisible)
{
- var brushStops = Job.Segments.SelectMany(x => x.BrushStops).Where(x => !x.Corrected && !x.OutOfGamutChecked).ToList();
+ var brushStops = Job.Segments.SelectMany(x => x.BrushStops).Where(x => (x.BrushColorSpace == BL.Enumerations.ColorSpaces.LAB || x.BrushColorSpace == BL.Enumerations.ColorSpaces.RGB) && !x.Corrected && !x.OutOfGamutChecked).ToList();
foreach (var stop in brushStops)
{
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobsViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobsViewVM.cs
index 64931cbe3..23e381206 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobsViewVM.cs
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobsViewVM.cs
@@ -314,11 +314,11 @@ namespace Tango.PPC.Jobs.ViewModels
/// <param name="job">The job.</param>
public async void SelectJob(Job job, bool directlyToEdit = false)
{
- if (!ApplicationManager.IsInTechnicianMode && job.ColorSpace != null && job.ColorSpace.Code == ColorSpaces.Volume.ToInt32())
- {
- await NotificationProvider.ShowError("The selected job is supported only in technician mode.");
- return;
- }
+ //if (!ApplicationManager.IsInTechnicianMode && job.ColorSpace != null && job.ColorSpace.Code == ColorSpaces.Volume.ToInt32())
+ //{
+ // await NotificationProvider.ShowError("The selected job is supported only in technician mode.");
+ // return;
+ //}
LogManager.Log($"Job '{job.Name}' selected.");
diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml
index 6a94034db..467c3f72b 100644
--- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml
+++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml
@@ -65,33 +65,34 @@
<DataTemplate x:Key="RGB_Template" DataType="{x:Type entities:BrushStop}">
<UniformGrid Rows="1" Columns="3">
- <touch:TouchNumericTextBox Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding Red}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" Maximum="255" />
- <touch:TouchNumericTextBox Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding Green}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" Maximum="255" />
- <touch:TouchNumericTextBox Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding Blue}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" Maximum="255" />
+ <touch:TouchNumericTextBox UpdateBindingOnlyWhenFocused="True" Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding Red}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" Maximum="255" />
+ <touch:TouchNumericTextBox UpdateBindingOnlyWhenFocused="True" Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding Green}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" Maximum="255" />
+ <touch:TouchNumericTextBox UpdateBindingOnlyWhenFocused="True" Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding Blue}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" Maximum="255" />
</UniformGrid>
</DataTemplate>
<DataTemplate x:Key="CMYK_Template" DataType="{x:Type entities:BrushStop}">
<UniformGrid Rows="1" Columns="4">
- <touch:TouchNumericTextBox Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding Cyan,Converter={StaticResource OneToPercentConverter}}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" HasDecimalPoint="True" Maximum="100" StringFormat="0" />
- <touch:TouchNumericTextBox Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding Magenta,Converter={StaticResource OneToPercentConverter}}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" HasDecimalPoint="True" Maximum="100" StringFormat="0" />
- <touch:TouchNumericTextBox Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding Yellow,Converter={StaticResource OneToPercentConverter}}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" HasDecimalPoint="True" Maximum="100" StringFormat="0" />
- <touch:TouchNumericTextBox Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding Black,Converter={StaticResource OneToPercentConverter}}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" HasDecimalPoint="True" Maximum="100" StringFormat="0" />
+ <touch:TouchNumericTextBox UpdateBindingOnlyWhenFocused="True" Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding Cyan,Converter={StaticResource OneToPercentConverter}}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" HasDecimalPoint="True" Maximum="100" StringFormat="0" />
+ <touch:TouchNumericTextBox UpdateBindingOnlyWhenFocused="True" Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding Magenta,Converter={StaticResource OneToPercentConverter}}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" HasDecimalPoint="True" Maximum="100" StringFormat="0" />
+ <touch:TouchNumericTextBox UpdateBindingOnlyWhenFocused="True" Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding Yellow,Converter={StaticResource OneToPercentConverter}}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" HasDecimalPoint="True" Maximum="100" StringFormat="0" />
+ <touch:TouchNumericTextBox UpdateBindingOnlyWhenFocused="True" Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding Black,Converter={StaticResource OneToPercentConverter}}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" HasDecimalPoint="True" Maximum="100" StringFormat="0" />
</UniformGrid>
</DataTemplate>
<DataTemplate x:Key="LAB_Template" DataType="{x:Type entities:BrushStop}">
<UniformGrid Rows="1" Columns="3">
- <touch:TouchNumericTextBox Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding L}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" HasDecimalPoint="True" Minimum="0" Maximum="100" StringFormat="0.00" />
- <touch:TouchNumericTextBox Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding A}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" HasDecimalPoint="True" Minimum="-128" Maximum="128" StringFormat="0.00" />
- <touch:TouchNumericTextBox Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding B}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" HasDecimalPoint="True" Minimum="-128" Maximum="128" StringFormat="0.00" />
+ <touch:TouchNumericTextBox UpdateBindingOnlyWhenFocused="True" Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding L}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" HasDecimalPoint="True" Minimum="0" Maximum="100" StringFormat="0.00" />
+ <touch:TouchNumericTextBox UpdateBindingOnlyWhenFocused="True" Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding A}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" HasDecimalPoint="True" Minimum="-128" Maximum="128" StringFormat="0.00" />
+ <touch:TouchNumericTextBox UpdateBindingOnlyWhenFocused="True" Margin="2 0" ValueChanged="OnBrushStopFieldValueChanged" HorizontalContentAlignment="Center" Value="{Binding B}" keyboard:KeyboardView.Container="{Binding ElementName=Container}" HasDecimalPoint="True" Minimum="-128" Maximum="128" StringFormat="0.00" />
</UniformGrid>
</DataTemplate>
<DataTemplate x:Key="CATALOG_Template" DataType="{x:Type entities:BrushStop}">
- <DockPanel>
+ <DockPanel Margin="0 0 -90 0">
+ <touch:TouchComboBox DockPanel.Dock="Left" ItemsSource="{Binding ElementName=view,Path=DataContext.AvailableCatalogs}" SelectedItem="{Binding ColorCatalog}" DisplayMemberPath="Name" Title="Select Catalog" Width="130" Margin="0 0 10 0" />
<touch:TouchIconButton Margin="0 0 -50 -10" CornerRadius="50" Width="50" Height="50" Padding="13" RippleBrush="{StaticResource TangoRippleDarkBrush}" DockPanel.Dock="Right" Icon="Palette" Foreground="{StaticResource TangoPrimaryAccentBrush}" Command="{Binding RelativeSource={RelativeSource AncestorType=UserControl},Path=DataContext.OpenCatalogCommand}" CommandParameter="{Binding}"></touch:TouchIconButton>
- <touch:TouchAutoComplete Margin="2 0" ItemsSource="{Binding ElementName=view,Path=DataContext.CatalogItems}" Watermark="Color Code" PopupHeight="250" DisplayMemberPath="Name" AutoCompleteProvider="{Binding ElementName=view,Path=DataContext.CatalogAutoCompleteProvider}" SelectedItem="{Binding ColorCatalogsItem,Mode=TwoWay,ValidatesOnDataErrors=True,ValidatesOnNotifyDataErrors=True}" keyboard:KeyboardView.Container="{Binding ElementName=Container}">
+ <touch:TouchAutoComplete Margin="2 0" ItemsSource="{Binding ColorCatalog.AllItemsOrdered}" Watermark="Color Code" PopupHeight="250" DisplayMemberPath="Name" AutoCompleteProvider="{Binding ElementName=view,Path=DataContext.CatalogAutoCompleteProvider}" SelectedItem="{Binding ColorCatalogsItem,Mode=TwoWay,ValidatesOnDataErrors=True,ValidatesOnNotifyDataErrors=True}" keyboard:KeyboardView.Container="{Binding ElementName=Container}">
<touch:TouchAutoComplete.ItemTemplate>
<DataTemplate>
<DockPanel Margin="2">
@@ -149,32 +150,21 @@
</Setter.Value>
</Setter>
<Style.Triggers>
- <DataTrigger Binding="{Binding ElementName=view,Path=DataContext.Job.ColorSpace.Name,IsAsync=True}" Value="RGB">
+ <DataTrigger Binding="{Binding ColorSpace.Name,IsAsync=True}" Value="RGB">
<Setter Property="ContentTemplate" Value="{StaticResource RGB_Template}" />
</DataTrigger>
- <DataTrigger Binding="{Binding ElementName=view,Path=DataContext.Job.ColorSpace.Name,IsAsync=True}" Value="CMYK">
+ <DataTrigger Binding="{Binding ColorSpace.Name,IsAsync=True}" Value="CMYK">
<Setter Property="ContentTemplate" Value="{StaticResource CMYK_Template}" />
</DataTrigger>
- <DataTrigger Binding="{Binding ElementName=view,Path=DataContext.Job.ColorSpace.Name,IsAsync=True}" Value="LAB">
+ <DataTrigger Binding="{Binding ColorSpace.Name,IsAsync=True}" Value="LAB">
<Setter Property="ContentTemplate" Value="{StaticResource LAB_Template}" />
</DataTrigger>
- <DataTrigger Binding="{Binding ElementName=view,Path=DataContext.Job.ColorSpace.Name,IsAsync=True}" Value="Catalog">
+ <DataTrigger Binding="{Binding ColorSpace.Name,IsAsync=True}" Value="Catalog">
<Setter Property="ContentTemplate" Value="{StaticResource CATALOG_Template}" />
</DataTrigger>
- <DataTrigger Binding="{Binding ElementName=view,Path=DataContext.Job.ColorSpace.Name,IsAsync=True}" Value="Volume">
+ <DataTrigger Binding="{Binding ColorSpace.Name,IsAsync=True}" Value="Volume">
<Setter Property="ContentTemplate" Value="{StaticResource Volume_Template}" />
</DataTrigger>
- <DataTrigger Binding="{Binding IsTransparent,IsAsync=True}" Value="True">
- <Setter Property="ContentTemplate">
- <Setter.Value>
- <DataTemplate>
- <Grid Height="40">
- <TextBlock VerticalAlignment="Bottom" Foreground="{StaticResource TangoGrayBrush}">Transparent</TextBlock>
- </Grid>
- </DataTemplate>
- </Setter.Value>
- </Setter>
- </DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
@@ -215,9 +205,6 @@
<Border.CacheMode>
<BitmapCache RenderAtScale="1" SnapsToDevicePixels="True" />
</Border.CacheMode>
- <!--<Border.Effect>
- <DropShadowEffect Opacity="0.5" Color="{StaticResource TangoDropShadowColor}" BlurRadius="10" ShadowDepth="15" />
- </Border.Effect>-->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
@@ -303,8 +290,12 @@
</StackPanel>
<Grid>
- <StackPanel Margin="0 30 0 0" VerticalAlignment="Bottom" HorizontalAlignment="Left" Width="300" Visibility="{Binding ElementName=toggle_large_list,Path=IsChecked,Converter={StaticResource BooleanToVisibilityConverter},IsAsync=True}">
- <DockPanel LastChildFill="False">
+ <StackPanel Margin="0 5 0 0" HorizontalAlignment="Left" Width="300" Visibility="{Binding ElementName=toggle_large_list,Path=IsChecked,Converter={StaticResource BooleanToVisibilityConverter},IsAsync=True}">
+ <DockPanel LastChildFill="False" Margin="0 0 0 0">
+ <TextBlock Text="Color space:" VerticalAlignment="Bottom"></TextBlock>
+ <touch:TouchComboBox DockPanel.Dock="Right" ItemsSource="{Binding ElementName=view,Path=DataContext.ColorSpaces}" SelectedItem="{Binding BrushStops[0].ColorSpace}" DisplayMemberPath="Name" Title="Select Color Space" Width="179" HorizontalAlignment="Right" />
+ </DockPanel>
+ <DockPanel LastChildFill="False" Margin="0 5 0 0">
<DockPanel.Style>
<Style TargetType="DockPanel">
<Setter Property="Visibility" Value="Visible"></Setter>
@@ -330,32 +321,21 @@
</Setter.Value>
</Setter>
<Style.Triggers>
- <DataTrigger Binding="{Binding ElementName=view,Path=DataContext.Job.ColorSpace.Name,IsAsync=True}" Value="RGB">
+ <DataTrigger Binding="{Binding ColorSpace.Name,IsAsync=True}" Value="RGB">
<Setter Property="ContentTemplate" Value="{StaticResource RGB_Template}" />
</DataTrigger>
- <DataTrigger Binding="{Binding ElementName=view,Path=DataContext.Job.ColorSpace.Name,IsAsync=True}" Value="CMYK">
+ <DataTrigger Binding="{Binding ColorSpace.Name,IsAsync=True}" Value="CMYK">
<Setter Property="ContentTemplate" Value="{StaticResource CMYK_Template}" />
</DataTrigger>
- <DataTrigger Binding="{Binding ElementName=view,Path=DataContext.Job.ColorSpace.Name,IsAsync=True}" Value="LAB">
+ <DataTrigger Binding="{Binding ColorSpace.Name,IsAsync=True}" Value="LAB">
<Setter Property="ContentTemplate" Value="{StaticResource LAB_Template}" />
</DataTrigger>
- <DataTrigger Binding="{Binding ElementName=view,Path=DataContext.Job.ColorSpace.Name,IsAsync=True}" Value="Catalog">
+ <DataTrigger Binding="{Binding ColorSpace.Name,IsAsync=True}" Value="Catalog">
<Setter Property="ContentTemplate" Value="{StaticResource CATALOG_Template}" />
</DataTrigger>
- <DataTrigger Binding="{Binding ElementName=view,Path=DataContext.Job.ColorSpace.Name,IsAsync=True}" Value="Volume">
+ <DataTrigger Binding="{Binding ColorSpace.Name,IsAsync=True}" Value="Volume">
<Setter Property="ContentTemplate" Value="{StaticResource Volume_Template}" />
</DataTrigger>
- <DataTrigger Binding="{Binding IsTransparent,IsAsync=True}" Value="True">
- <Setter Property="ContentTemplate">
- <Setter.Value>
- <DataTemplate>
- <Grid Height="40">
- <TextBlock VerticalAlignment="Bottom" Foreground="{StaticResource TangoGrayBrush}">Transparent</TextBlock>
- </Grid>
- </DataTemplate>
- </Setter.Value>
- </Setter>
- </DataTrigger>
</Style.Triggers>
</Style>
</ContentControl.Style>
@@ -380,7 +360,7 @@
</Canvas.Style>
<TextBlock Canvas.Top="2" Foreground="{StaticResource TangoErrorBrush}" FontSize="{StaticResource TangoSmallFontSize}" Text="Color is out of gamut. Modify color or select an alternative."></TextBlock>
</Canvas>
- <DockPanel LastChildFill="False" Margin="0 20 0 0">
+ <DockPanel LastChildFill="False" Margin="0 0 0 0">
<TextBlock VerticalAlignment="Bottom" DockPanel.Dock="Left" Text="Length (m):"></TextBlock>
<touch:TouchNumericTextBox Width="180" DockPanel.Dock="Right" Value="{Binding Length}" StringFormat="0.0" AutoCalculateJogStep="False" HasDecimalPoint="True" Minimum="1" Maximum="100000" KeyboardContainer="{Binding ElementName=Container}" />
</DockPanel>
@@ -507,8 +487,7 @@
<TextBlock FontWeight="Medium" Margin="20 0 0 0" VerticalAlignment="Center" FontSize="{StaticResource TangoExpanderHeaderFontSize}">Job Details</TextBlock>
<TextBlock FontWeight="Medium" Margin="50 0 0 0" VerticalAlignment="Center">
- <Run Text="{Binding Job.Rml.Name}"></Run><Run>,</Run>
- <Run Text="{Binding Job.ColorSpace.Name}"></Run>
+ <Run Text="{Binding Job.Rml.Name}"></Run>
</TextBlock>
</StackPanel>
</touch:TouchExpander.Header>
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Printing/DefaultPrintingManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Printing/DefaultPrintingManager.cs
index 1f2895f26..b3fcd1208 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Printing/DefaultPrintingManager.cs
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Printing/DefaultPrintingManager.cs
@@ -58,14 +58,23 @@ namespace Tango.PPC.UI.Printing
#else
try
{
+ _notificationProvider.SetGlobalBusyMessage("Processing job...");
handler = await _machineProvider.MachineOperator.Print(job);
+ _notificationProvider.ReleaseGlobalBusyMessage();
}
catch (InsufficientLiquidQuantityException ex)
{
+ _notificationProvider.ReleaseGlobalBusyMessage();
LogManager.Log(ex);
await _notificationProvider.ShowDialog(new InsufficientLiquidQuantityViewVM(ex));
throw ex;
}
+ catch (Exception ex)
+ {
+ _notificationProvider.ReleaseGlobalBusyMessage();
+ LogManager.Log(ex);
+ throw ex;
+ }
#endif
handler.Completed += async (x, e) =>
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
index d72e75011..efc5f8179 100644
--- a/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
+++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/app.manifest
@@ -16,7 +16,7 @@
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
- <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
+ <!--<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />-->
</requestedPrivileges>
</security>
</trustInfo>
diff --git a/Software/Visual_Studio/Tango.BL/Builders/CatalogsCollectionBuilder.cs b/Software/Visual_Studio/Tango.BL/Builders/CatalogsCollectionBuilder.cs
index fb690eb99..dd9e9a54c 100644
--- a/Software/Visual_Studio/Tango.BL/Builders/CatalogsCollectionBuilder.cs
+++ b/Software/Visual_Studio/Tango.BL/Builders/CatalogsCollectionBuilder.cs
@@ -37,5 +37,36 @@ namespace Tango.BL.Builders
}
});
}
+
+ public virtual CatalogsCollectionBuilder WithGroups()
+ {
+ return AddQueryStep(2, (query) =>
+ {
+ return query.Include(x => x.ColorCatalogsGroups);
+ });
+ }
+
+ public virtual CatalogsCollectionBuilder WithItems()
+ {
+ return AddQueryStep(3, (query) =>
+ {
+ return query.Include(x => x.ColorCatalogsGroups.Select(y => y.ColorCatalogsItems));
+ });
+ }
+
+ public virtual CatalogsCollectionBuilder WithRecipes(Rml rml = null)
+ {
+ return AddQueryStep(4, (query) =>
+ {
+ if (rml != null)
+ {
+ return query.Include(x => x.ColorCatalogsGroups.Select(y => y.ColorCatalogsItems.Select(z => z.ColorCatalogsItemsRecipes.Where(r => r.RmlGuid == rml.Guid))));
+ }
+ else
+ {
+ return query.Include(x => x.ColorCatalogsGroups.Select(y => y.ColorCatalogsItems.Select(z => z.ColorCatalogsItemsRecipes)));
+ }
+ });
+ }
}
}
diff --git a/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs b/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs
index 4ad21d4cd..9f47aca05 100644
--- a/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs
+++ b/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs
@@ -164,7 +164,24 @@ namespace Tango.BL.Entities
[JsonIgnore]
public Color Color
{
- get { return Color.FromRgb((byte)_red, (byte)_green, (byte)_blue); }
+ get
+ {
+ if (ColorSpace != null && BrushColorSpace == ColorSpaces.Catalog)
+ {
+ if (ColorCatalogsItem != null)
+ {
+ return Color.FromRgb((byte)ColorCatalogsItem.Red, (byte)ColorCatalogsItem.Green, (byte)ColorCatalogsItem.Blue);
+ }
+ else
+ {
+ return Colors.White;
+ }
+ }
+ else
+ {
+ return Color.FromRgb((byte)_red, (byte)_green, (byte)_blue);
+ }
+ }
set
{
Rgb rgb = new Rgb(value.R, value.G, value.B);
@@ -555,12 +572,6 @@ namespace Tango.BL.Entities
Rgb rgb = new Rgb(Red, Green, Blue);
Cmyk cmyk = new Cmyk(Cyan, Magenta, Yellow, Black);
Lab lab = new Lab(L, A, B);
- Rgb rgb_catalog = new Rgb(255, 255, 255);
-
- if (ColorCatalogsItem != null)
- {
- rgb_catalog = new Rgb(ColorCatalogsItem.Red, ColorCatalogsItem.Green, ColorCatalogsItem.Blue);
- }
switch ((ColorSpaces)ColorSpace.Code)
{
@@ -577,9 +588,35 @@ namespace Tango.BL.Entities
cmyk = lab.To<Cmyk>();
break;
case ColorSpaces.Catalog:
- cmyk = rgb_catalog.To<Cmyk>();
- lab = rgb_catalog.To<Lab>();
- rgb = rgb_catalog;
+
+ if (ColorCatalogsItem != null)
+ {
+ rgb = new Rgb(ColorCatalogsItem.Red, ColorCatalogsItem.Green, ColorCatalogsItem.Blue);
+ lab = new Lab(ColorCatalogsItem.L, ColorCatalogsItem.A, ColorCatalogsItem.B);
+ cmyk = new Cmyk(ColorCatalogsItem.Cyan, ColorCatalogsItem.Magenta, ColorCatalogsItem.Yellow, ColorCatalogsItem.Black);
+
+ try
+ {
+ if (LiquidVolumes != null)
+ {
+ var cyan = LiquidVolumes.FirstOrDefault(x => x.LiquidType == LiquidTypes.Cyan);
+ if (cyan != null) cyan.Volume = ColorCatalogsItem.Cyan;
+
+ var magenta = LiquidVolumes.FirstOrDefault(x => x.LiquidType == LiquidTypes.Magenta);
+ if (magenta != null) magenta.Volume = ColorCatalogsItem.Magenta;
+
+ var yellow = LiquidVolumes.FirstOrDefault(x => x.LiquidType == LiquidTypes.Yellow);
+ if (yellow != null) yellow.Volume = ColorCatalogsItem.Yellow;
+
+ var black = LiquidVolumes.FirstOrDefault(x => x.LiquidType == LiquidTypes.Black);
+ if (black != null) black.Volume = ColorCatalogsItem.Black;
+ }
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine(ex);
+ }
+ }
Validate(null);
break;
}
@@ -722,6 +759,12 @@ namespace Tango.BL.Entities
Corrected = false;
IsOutOfGamut = false;
}
+
+ _ignorePropChanged = true;
+ RaisePropertyChanged(nameof(Color));
+ RaisePropertyChanged(nameof(Brush));
+ Segment?.RaiseSegmentBrushChanged();
+ _ignorePropChanged = false;
}
#endregion
@@ -770,10 +813,10 @@ namespace Tango.BL.Entities
{
base.OnValidating(context);
- if (BrushColorSpace == ColorSpaces.Catalog && ColorCatalogsItem == null)
- {
- InsertError(nameof(ColorCatalogsItem), "Please specify a color code.");
- }
+ //if (BrushColorSpace == ColorSpaces.Catalog && ColorCatalogsItem == null)
+ //{
+ // InsertError(nameof(ColorCatalogsItem), "Please specify a color code.");
+ //}
}
#endregion
diff --git a/Software/Visual_Studio/Tango.BL/Entities/ColorCatalog.cs b/Software/Visual_Studio/Tango.BL/Entities/ColorCatalog.cs
index 82b88f156..9972a0c2d 100644
--- a/Software/Visual_Studio/Tango.BL/Entities/ColorCatalog.cs
+++ b/Software/Visual_Studio/Tango.BL/Entities/ColorCatalog.cs
@@ -34,5 +34,25 @@ namespace Tango.BL.Entities
{
get { return ColorCatalogsGroups.OrderBy(x => x.GroupIndex).ToObservableCollection(); }
}
+
+ [JsonIgnore]
+ [NotMapped]
+ public List<ColorCatalogsItem> AllItemsOrdered
+ {
+ get { return ColorCatalogsGroupsOrdered.SelectMany(x => x.ColorCatalogsItemsOrdered).ToList(); }
+ }
+
+ public ColorCatalogsItem GetClosestItem(Color color)
+ {
+ var minDiff = AllItemsOrdered.Select(x => x.Color).Select(n => ColorDiff(n, color)).Min(n => n);
+ return AllItemsOrdered.FirstOrDefault(n => ColorDiff(n.Color, color) == minDiff);
+ }
+
+ private int ColorDiff(Color c1, Color c2)
+ {
+ return (int)Math.Sqrt((c1.R - c2.R) * (c1.R - c2.R)
+ + (c1.G - c2.G) * (c1.G - c2.G)
+ + (c1.B - c2.B) * (c1.B - c2.B));
+ }
}
}
diff --git a/Software/Visual_Studio/Tango.BL/Entities/ColorCatalogsGroup.cs b/Software/Visual_Studio/Tango.BL/Entities/ColorCatalogsGroup.cs
index 17f6115d1..86d82c634 100644
--- a/Software/Visual_Studio/Tango.BL/Entities/ColorCatalogsGroup.cs
+++ b/Software/Visual_Studio/Tango.BL/Entities/ColorCatalogsGroup.cs
@@ -1,6 +1,7 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
+using System.Collections.ObjectModel;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
@@ -31,6 +32,13 @@ namespace Tango.BL.Entities
}
}
+ [JsonIgnore]
+ [NotMapped]
+ public ObservableCollection<ColorCatalogsItem> ColorCatalogsItemsOrdered
+ {
+ get { return ColorCatalogsItems.OrderBy(x => x.ItemIndex).ToObservableCollection(); }
+ }
+
public override void Delete(ObservablesContext context)
{
base.Delete(context);
diff --git a/Software/Visual_Studio/Tango.BL/ExtensionMethods/ColorCatalogItemsExtensions.cs b/Software/Visual_Studio/Tango.BL/ExtensionMethods/ColorCatalogItemsExtensions.cs
new file mode 100644
index 000000000..2a548371e
--- /dev/null
+++ b/Software/Visual_Studio/Tango.BL/ExtensionMethods/ColorCatalogItemsExtensions.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Media;
+using Tango.BL.Entities;
+
+public static class ColorCatalogItemsExtensions
+{
+ public static ColorCatalogsItem GetClosestItem(this IEnumerable<ColorCatalogsItem> items, Color color)
+ {
+ var minDiff = items.Select(x => x.Color).Select(n => ColorDiff(n, color)).Min(n => n);
+ return items.FirstOrDefault(n => ColorDiff(n.Color, color) == minDiff);
+ }
+
+ private static int ColorDiff(Color c1, Color c2)
+ {
+ return (int)Math.Sqrt((c1.R - c2.R) * (c1.R - c2.R)
+ + (c1.G - c2.G) * (c1.G - c2.G)
+ + (c1.B - c2.B) * (c1.B - c2.B));
+ }
+}
diff --git a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj
index dc817af6e..0fbf6c5ab 100644
--- a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj
+++ b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj
@@ -427,6 +427,7 @@
<Compile Include="Enumerations\PublishedProcedureProjectVisibilities.cs" />
<Compile Include="Enumerations\TangoUpdateStatuses.cs" />
<Compile Include="Enumerations\RmlQualifications.cs" />
+ <Compile Include="ExtensionMethods\ColorCatalogItemsExtensions.cs" />
<Compile Include="IObservableEntityDTO.cs" />
<Compile Include="ObservableDTOPropertyAttribute.cs" />
<Compile Include="ObservableEntityDTO.cs" />
@@ -645,7 +646,7 @@
</Target>
<ProjectExtensions>
<VisualStudio>
- <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" />
+ <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" />
</VisualStudio>
</ProjectExtensions>
</Project> \ No newline at end of file
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>
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.xaml b/Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.xaml
index da8580488..b0b78c177 100644
--- a/Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.xaml
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchAutoComplete.xaml
@@ -138,7 +138,7 @@
</Style.Triggers>
</Style>
</Canvas.Style>
- <TextBlock FontWeight="Bold" FontSize="11" Foreground="{StaticResource TangoPrimaryAccentBrush}" Canvas.Top="{Binding RelativeSource={RelativeSource Self},Path=ActualHeight,Converter={StaticResource MathOperatorConverter},ConverterParameter='*-1'}" Text="{Binding RelativeSource={RelativeSource AncestorType=local:TouchAutoComplete},Path=Watermark}">
+ <TextBlock FontWeight="Bold" FontSize="11" Foreground="{StaticResource TangoPrimaryAccentBrush}" Canvas.Top="{Binding RelativeSource={RelativeSource Self},Path=ActualHeight,Converter={StaticResource MathOperatorConverter},ConverterParameter='*-1'}" Text="">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Opacity" Value="0"></Setter>
diff --git a/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.cs b/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.cs
index 2a0caf13e..da5d5e34b 100644
--- a/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.cs
+++ b/Software/Visual_Studio/Tango.Touch/Controls/TouchNumericTextBox.cs
@@ -109,6 +109,16 @@ namespace Tango.Touch.Controls
public static readonly DependencyProperty AutoCalculateJogStepProperty =
DependencyProperty.Register("AutoCalculateJogStep", typeof(bool), typeof(TouchNumericTextBox), new PropertyMetadata(true));
+ public bool UpdateBindingOnlyWhenFocused
+ {
+ get { return (bool)GetValue(UpdateBindingOnlyWhenFocusedProperty); }
+ set { SetValue(UpdateBindingOnlyWhenFocusedProperty, value); }
+ }
+ public static readonly DependencyProperty UpdateBindingOnlyWhenFocusedProperty =
+ DependencyProperty.Register("UpdateBindingOnlyWhenFocused", typeof(bool), typeof(TouchNumericTextBox), new PropertyMetadata(false));
+
+
+
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
@@ -222,8 +232,11 @@ namespace Tango.Touch.Controls
_lastValue = Value;
- DoubleValueChangedEventArgs args = new DoubleValueChangedEventArgs(ValueChangedEvent, this, Value);
- RaiseEvent(args);
+ if (!UpdateBindingOnlyWhenFocused || (_text_box != null && _text_box.IsKeyboardFocused))
+ {
+ DoubleValueChangedEventArgs args = new DoubleValueChangedEventArgs(ValueChangedEvent, this, Value);
+ RaiseEvent(args);
+ }
}
}