aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoy Ben Shabat <Roy.mail.net@gmail.com>2024-09-10 07:15:23 +0300
committerRoy Ben Shabat <Roy.mail.net@gmail.com>2024-09-10 07:15:23 +0300
commit28a79338c4c250d9d6f3722a1c15c239fff56a29 (patch)
treef92897e7fa27e0dbdaa1190b6812b1731d9363f2
parent2718ce44b9dd90ab1e222cba82c0cbe6cac174f0 (diff)
downloadTango-28a79338c4c250d9d6f3722a1c15c239fff56a29.tar.gz
Tango-28a79338c4c250d9d6f3722a1c15c239fff56a29.zip
Major advancement on Violet predictions.
-rw-r--r--Software/DB/Tango.mdfbin75497472 -> 75497472 bytes
-rw-r--r--Software/DB/Tango_log.ldfbin22675456 -> 22675456 bytes
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs5
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs3
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/ConfigurationView.xaml23
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineView.xaml33
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorConversionView.xaml4
-rw-r--r--Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MachineView.xaml22
-rw-r--r--Software/Visual_Studio/Tango.BL/DTO/BrushStopDTOBase.cs32
-rw-r--r--Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs6
-rw-r--r--Software/Visual_Studio/Tango.BL/Entities/BrushStopBase.cs152
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYK.cs10
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYKV.cs7
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYKVColorConverter.cs77
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYKVMeasurement.cs8
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/CMYKV/DemoData.cs47
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/CMYKV/KNearestNeighborsPrediction.cs45
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/CMYKV/LAB.cs9
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/CMYKV/LinearInterpolationPrediction.cs44
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/CMYKV/LinearRegressionPrediction.cs54
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/CMYKV/PredictionMethod.cs10
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/CMYKV/RGB.cs9
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/CMYKV/SplineInterpolationPrediction.cs30
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/DefaultColorConverter.cs79
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/ExtensionMethods/MathExtensions.cs15
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/Tango.ColorConversion.csproj17
-rw-r--r--Software/Visual_Studio/Tango.ColorConversion/packages.config1
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/BRUSH_STOPS.cs4
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx12
-rw-r--r--Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram192
30 files changed, 758 insertions, 192 deletions
diff --git a/Software/DB/Tango.mdf b/Software/DB/Tango.mdf
index c79733166..7ffb8ecf1 100644
--- a/Software/DB/Tango.mdf
+++ b/Software/DB/Tango.mdf
Binary files differ
diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf
index b456972d7..f33d73883 100644
--- a/Software/DB/Tango_log.ldf
+++ b/Software/DB/Tango_log.ldf
Binary files differ
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
index 4fd1a834b..a32fa58df 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/ViewModels/MainViewVM.cs
@@ -2336,10 +2336,9 @@ namespace Tango.MachineStudio.Developer.ViewModels
newJob.Machine = SelectedMachine;
-
SelectedMachine.Jobs.Add(newJob);
var segment = newJob.AddSolidSegment();
- segment.BrushStops[0].SetAllDispensingStepDivisions(BL.Dispensing.DispenserStepDivisions.D8);
+ segment.BrushStops[0].SetAllDispensingStepDivisions(BL.Dispensing.DispenserStepDivisions.D8, SelectedMachine.Configuration);
LogManager.Log("Saving selected machine to database...");
await SelectedMachine.SaveAsync(_machineDbContext);
@@ -2407,7 +2406,7 @@ namespace Tango.MachineStudio.Developer.ViewModels
stop.Segment = SelectedSegment;
stop.ColorSpace = ColorSpaces.FirstOrDefault();
stop.Color = Colors.Black;
- stop.SetAllDispensingStepDivisions(BL.Dispensing.DispenserStepDivisions.D8);
+ stop.SetAllDispensingStepDivisions(BL.Dispensing.DispenserStepDivisions.D8, SelectedMachine.Configuration);
stop.SetLiquidVolumes(SelectedMachine.Configuration, SelectedRML, SelectedProcessParametersTable);
SelectedSegment.BrushStops.Add(stop);
// _activeJobDbContext.BrushStops.Add(stop);
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs
index cad54c848..ddc0d91a3 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/ViewModels/MainViewVM.cs
@@ -36,6 +36,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels
{
public class MainViewVM : StudioViewModel<IMainView>
{
+ private const int MAX_IDS_PACKS = 12;
private INotificationProvider _notification;
private IActionLogManager _actionLogManager;
private IAuthenticationProvider _authentication;
@@ -283,7 +284,7 @@ namespace Tango.MachineStudio.MachineDesigner.ViewModels
_machines_action_timer = new ActionTimer(TimeSpan.FromMilliseconds(200));
_dispensers_action_timer = new ActionTimer(TimeSpan.FromMilliseconds(200));
- AddIdsCommand = new RelayCommand(AddIds, (x) => ActiveMachine != null && ActiveMachine.Configuration != null && ActiveMachine.Configuration.IdsPacks.Count < 10);
+ AddIdsCommand = new RelayCommand(AddIds, (x) => ActiveMachine != null && ActiveMachine.Configuration != null && ActiveMachine.Configuration.IdsPacks.Count < MAX_IDS_PACKS);
RemoveIdsCommand = new RelayCommand(RemoveIds, (x) => SelectedIds != null);
EditMachineCommand = new RelayCommand(() => LoadSelectedMachine(), () => SelectedMachine != null);
BackToMachinesCommand = new RelayCommand(() => View.NavigateTo(MachineDesignerNavigationView.MachinesView));
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/ConfigurationView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/ConfigurationView.xaml
index d1eaaaeff..9b99c9ec5 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/ConfigurationView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/ConfigurationView.xaml
@@ -139,18 +139,6 @@
<materialDesign:PackIcon Kind="Minus" Width="24" Height="24"></materialDesign:PackIcon>
</Button>
- <UniformGrid Width="310" Canvas.Top="295" Canvas.Left="420" Rows="1" Columns="10" TextElement.FontSize="9">
- <TextBlock HorizontalAlignment="Center">1</TextBlock>
- <TextBlock HorizontalAlignment="Center">2</TextBlock>
- <TextBlock HorizontalAlignment="Center">3</TextBlock>
- <TextBlock HorizontalAlignment="Center">4</TextBlock>
- <TextBlock HorizontalAlignment="Center">5</TextBlock>
- <TextBlock HorizontalAlignment="Center">6</TextBlock>
- <TextBlock HorizontalAlignment="Center">7</TextBlock>
- <TextBlock HorizontalAlignment="Center">8</TextBlock>
- <TextBlock HorizontalAlignment="Center">9</TextBlock>
- <TextBlock HorizontalAlignment="Center">10</TextBlock>
- </UniformGrid>
<Grid x:Name="gridIds" Width="310" Height="195" Canvas.Top="314" Canvas.Left="420">
<ListBox ItemsSource="{Binding ActiveMachine.Configuration.IdsPacks}" SelectedItem="{Binding SelectedIds}" ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemContainerStyle>
@@ -162,13 +150,14 @@
</ListBox.ItemContainerStyle>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
- <UniformGrid Columns="10"></UniformGrid>
+ <UniformGrid Rows="1"></UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
- <Grid dragAndDrop:DragAndDropService.DraggableBorderBrush="{StaticResource AccentColorBrush}" dragAndDrop:DragAndDropService.Drop="OnDropOnIdsPack">
+ <Grid MaxWidth="35" dragAndDrop:DragAndDropService.DraggableBorderBrush="{StaticResource AccentColorBrush}" dragAndDrop:DragAndDropService.Drop="OnDropOnIdsPack">
<Grid.RowDefinitions>
+ <RowDefinition Height="11"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
@@ -179,7 +168,7 @@
</Style.Triggers>
</Style>
</Grid.Style>
- <UniformGrid Columns="1" Rows="2">
+ <UniformGrid Grid.Row="1" Columns="1" Rows="2">
<Grid Margin="2">
<Image IsHitTestVisible="False" Source="../Images/dispenser.png" RenderOptions.BitmapScalingMode="Fant">
<Image.Style>
@@ -231,7 +220,7 @@
</Grid>
</UniformGrid>
- <Grid Grid.Row="1" Margin="3" IsHitTestVisible="False">
+ <Grid Grid.Row="2" Margin="3" IsHitTestVisible="False">
<Grid.Style>
<Style TargetType="Grid">
<Style.Triggers>
@@ -258,6 +247,8 @@
</Border.Background>
</Border>
</Grid>
+
+ <TextBlock Grid.Row="0" FontSize="9" HorizontalAlignment="Center" VerticalAlignment="Top" Text="{Binding PackIndex}"></TextBlock>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineView.xaml
index 54e47c0d4..ea2e2e84d 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.MachineDesigner/Views/MachineView.xaml
@@ -69,19 +69,6 @@
<Rectangle Stroke="Gray" HorizontalAlignment="Left" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/>
</Grid>
- <UniformGrid Width="310" Canvas.Top="295" Canvas.Left="420" Rows="1" Columns="10" TextElement.FontSize="9">
- <TextBlock HorizontalAlignment="Center">1</TextBlock>
- <TextBlock HorizontalAlignment="Center">2</TextBlock>
- <TextBlock HorizontalAlignment="Center">3</TextBlock>
- <TextBlock HorizontalAlignment="Center">4</TextBlock>
- <TextBlock HorizontalAlignment="Center">5</TextBlock>
- <TextBlock HorizontalAlignment="Center">6</TextBlock>
- <TextBlock HorizontalAlignment="Center">7</TextBlock>
- <TextBlock HorizontalAlignment="Center">8</TextBlock>
- <TextBlock HorizontalAlignment="Center">9</TextBlock>
- <TextBlock HorizontalAlignment="Center">10</TextBlock>
- </UniformGrid>
-
<Grid x:Name="gridIds" Width="310" Height="195" Canvas.Top="314" Canvas.Left="420">
<ListBox ItemsSource="{Binding Configuration.IdsPacks}" ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemContainerStyle>
@@ -93,24 +80,18 @@
</ListBox.ItemContainerStyle>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
- <UniformGrid Columns="10"></UniformGrid>
+ <UniformGrid Rows="1"></UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
- <Grid dragAndDrop:DragAndDropService.DraggableBorderBrush="{StaticResource AccentColorBrush}" >
+ <Grid MaxWidth="35">
<Grid.RowDefinitions>
+ <RowDefinition Height="11"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
- <Grid.Style>
- <Style TargetType="Grid" BasedOn="{StaticResource draggableGrid}">
- <Style.Triggers>
-
- </Style.Triggers>
- </Style>
- </Grid.Style>
- <UniformGrid Columns="1" Rows="2">
+ <UniformGrid Grid.Row="1" Columns="1" Rows="2">
<Grid Margin="2">
<Image IsHitTestVisible="False" Source="../Images/dispenser.png" RenderOptions.BitmapScalingMode="Fant">
<Image.Style>
@@ -156,7 +137,7 @@
</Grid>
</UniformGrid>
- <Grid Grid.Row="1" Margin="3" IsHitTestVisible="False">
+ <Grid Grid.Row="2" Margin="3" IsHitTestVisible="False">
<Grid.Style>
<Style TargetType="Grid">
<Style.Triggers>
@@ -183,6 +164,8 @@
</Border.Background>
</Border>
</Grid>
+
+ <TextBlock Grid.Row="0" FontSize="9" HorizontalAlignment="Center" VerticalAlignment="Top" Text="{Binding PackIndex}"></TextBlock>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
@@ -199,7 +182,7 @@
</Style.Triggers>
</Style>
</Grid.Style>
- <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" FontWeight="Bold" Foreground="Gainsboro">NO IDS PACKS</TextBlock>
+ <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="20" FontWeight="Bold" Foreground="{StaticResource BorderBrushGainsboro}">NO IDS PACKS</TextBlock>
</Grid>
<Rectangle VerticalAlignment="Bottom" Stroke="DimGray" StrokeThickness="1">
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorConversionView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorConversionView.xaml
index 73f5208db..c3816e93f 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorConversionView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/ColorConversionView.xaml
@@ -128,7 +128,7 @@
<TextBlock FontStyle="Italic" HorizontalAlignment="Center" Grid.Column="2" Margin="0 0 0 0">SUGGESTIONS</TextBlock>
<TextBlock FontStyle="Italic" HorizontalAlignment="Center" Grid.Column="4" Margin="-80 0 0 0">LIQUID VOLUMES</TextBlock>
- <Image Source="../Images/arrow-long-right.png" Grid.Column="1" Grid.Row="1" Width="100" Stretch="Fill" Height="30" Opacity="0.8" Margin="20 0 20 0"></Image>
+ <Image Source="../Images/arrow-long-right.png" Grid.Column="1" Grid.Row="1" Width="70" Stretch="Fill" Height="30" Opacity="0.8" Margin="20 0 20 0"></Image>
<hive:HexList Width="220" Height="270" UseHexItemHasContainer="True" Grid.Column="2" Grid.Row="1" RowCount="6" ColumnCount="5" ItemsSource="{Binding HiveSuggestions}" SelectedItem="{Binding SelectedSuggestion,Mode=TwoWay}">
<hive:HexList.ItemContainerStyle>
@@ -175,7 +175,7 @@
</TextBlock.Style>
</TextBlock>
- <Image Source="../Images/arrow-long-right.png" Grid.Column="3" Grid.Row="1" Width="100" Stretch="Fill" Height="30" Opacity="0.8" Margin="20 0 20 0"></Image>
+ <Image Source="../Images/arrow-long-right.png" Grid.Column="3" Grid.Row="1" Width="70" Stretch="Fill" Height="30" Opacity="0.8" Margin="20 0 20 0"></Image>
<Grid Grid.Column="4" Grid.Row="1" IsHitTestVisible="False">
<StackPanel HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0 -20 0 0">
diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MachineView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MachineView.xaml
index 013dca6ce..886b32cf9 100644
--- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MachineView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.Common/Controls/MachineView.xaml
@@ -53,17 +53,6 @@
<Rectangle Stroke="Gray" HorizontalAlignment="Left" StrokeThickness="1" StrokeDashArray="5" RenderTransformOrigin="0.5,0.5"/>
</Grid>
- <UniformGrid Width="310" Canvas.Top="295" Canvas.Left="420" Rows="1" Columns="8" TextElement.FontSize="9">
- <TextBlock HorizontalAlignment="Center">1</TextBlock>
- <TextBlock HorizontalAlignment="Center">2</TextBlock>
- <TextBlock HorizontalAlignment="Center">3</TextBlock>
- <TextBlock HorizontalAlignment="Center">4</TextBlock>
- <TextBlock HorizontalAlignment="Center">5</TextBlock>
- <TextBlock HorizontalAlignment="Center">6</TextBlock>
- <TextBlock HorizontalAlignment="Center">7</TextBlock>
- <TextBlock HorizontalAlignment="Center">8</TextBlock>
- </UniformGrid>
-
<Grid x:Name="gridIds" Width="310" Height="195" Canvas.Top="314" Canvas.Left="420">
<ListBox ItemsSource="{Binding Configuration.IdsPacks}" ScrollViewer.VerticalScrollBarVisibility="Disabled" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListBox.ItemContainerStyle>
@@ -75,17 +64,18 @@
</ListBox.ItemContainerStyle>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
- <UniformGrid Columns="8"></UniformGrid>
+ <UniformGrid Rows="1"></UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
- <Grid>
+ <Grid MaxWidth="35">
<Grid.RowDefinitions>
+ <RowDefinition Height="11"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="30"/>
</Grid.RowDefinitions>
- <UniformGrid Columns="1" Rows="2">
+ <UniformGrid Grid.Row="1" Columns="1" Rows="2">
<Grid Margin="2">
<Image IsHitTestVisible="False" Source="../Images/dispenser.png" RenderOptions.BitmapScalingMode="Fant">
<Image.Style>
@@ -131,7 +121,7 @@
</Grid>
</UniformGrid>
- <Grid Grid.Row="1" Margin="3" IsHitTestVisible="False">
+ <Grid Grid.Row="2" Margin="3" IsHitTestVisible="False">
<Grid.Style>
<Style TargetType="Grid">
<Style.Triggers>
@@ -158,6 +148,8 @@
</Border.Background>
</Border>
</Grid>
+
+ <TextBlock Grid.Row="0" FontSize="9" HorizontalAlignment="Center" VerticalAlignment="Top" Text="{Binding PackIndex}"></TextBlock>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
diff --git a/Software/Visual_Studio/Tango.BL/DTO/BrushStopDTOBase.cs b/Software/Visual_Studio/Tango.BL/DTO/BrushStopDTOBase.cs
index 7730131d8..de8dfdb08 100644
--- a/Software/Visual_Studio/Tango.BL/DTO/BrushStopDTOBase.cs
+++ b/Software/Visual_Studio/Tango.BL/DTO/BrushStopDTOBase.cs
@@ -294,6 +294,38 @@ namespace Tango.BL.DTO
}
/// <summary>
+ /// v10
+ /// </summary>
+ public Double V10
+ {
+ get; set;
+ }
+
+ /// <summary>
+ /// v10 div
+ /// </summary>
+ public Int32 V10Div
+ {
+ get; set;
+ }
+
+ /// <summary>
+ /// v11
+ /// </summary>
+ public Double V11
+ {
+ get; set;
+ }
+
+ /// <summary>
+ /// v11 div
+ /// </summary>
+ public Int32 V11Div
+ {
+ get; set;
+ }
+
+ /// <summary>
/// corrected
/// </summary>
public Boolean Corrected
diff --git a/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs b/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs
index 5f2996014..41ebbee7c 100644
--- a/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs
+++ b/Software/Visual_Studio/Tango.BL/Entities/BrushStop.cs
@@ -588,9 +588,9 @@ namespace Tango.BL.Entities
/// Sets all dispensing step divisions.
/// </summary>
/// <param name="division">The division.</param>
- public void SetAllDispensingStepDivisions(Dispensing.DispenserStepDivisions division)
+ public void SetAllDispensingStepDivisions(Dispensing.DispenserStepDivisions division, Configuration configuration)
{
- for (int i = 0; i < 8; i++)
+ for (int i = 0; i < configuration.IdsPacks.Count; i++)
{
typeof(BrushStop).GetProperty("V" + i + "Div").SetValue(this, (int)division);
}
@@ -835,7 +835,7 @@ namespace Tango.BL.Entities
cloned.BestMatchR = this.BestMatchR;
cloned.BestMatchG = this.BestMatchG;
cloned.BestMatchB = this.BestMatchB;
-
+
cloned.ColorCatalogGuid = this.ColorCatalogGuid;
cloned.ColorCatalogsItem = this.ColorCatalogsItem;
diff --git a/Software/Visual_Studio/Tango.BL/Entities/BrushStopBase.cs b/Software/Visual_Studio/Tango.BL/Entities/BrushStopBase.cs
index 23cb993be..60de12338 100644
--- a/Software/Visual_Studio/Tango.BL/Entities/BrushStopBase.cs
+++ b/Software/Visual_Studio/Tango.BL/Entities/BrushStopBase.cs
@@ -91,6 +91,14 @@ namespace Tango.BL.Entities
public event EventHandler<Int32> V9DivChanged;
+ public event EventHandler<Double> V10Changed;
+
+ public event EventHandler<Int32> V10DivChanged;
+
+ public event EventHandler<Double> V11Changed;
+
+ public event EventHandler<Int32> V11DivChanged;
+
public event EventHandler<Boolean> CorrectedChanged;
public event EventHandler<Boolean> IsTransparentChanged;
@@ -1025,6 +1033,114 @@ namespace Tango.BL.Entities
}
}
+ protected Double _v10;
+
+ /// <summary>
+ /// Gets or sets the brushstopbase v10.
+ /// </summary>
+
+ [Column("V10")]
+
+ public Double V10
+ {
+ get
+ {
+ return _v10;
+ }
+
+ set
+ {
+ if (_v10 != value)
+ {
+ _v10 = value;
+
+ OnV10Changed(value);
+
+ }
+ }
+ }
+
+ protected Int32 _v10div;
+
+ /// <summary>
+ /// Gets or sets the brushstopbase v10 div.
+ /// </summary>
+
+ [Column("V10_DIV")]
+
+ public Int32 V10Div
+ {
+ get
+ {
+ return _v10div;
+ }
+
+ set
+ {
+ if (_v10div != value)
+ {
+ _v10div = value;
+
+ OnV10DivChanged(value);
+
+ }
+ }
+ }
+
+ protected Double _v11;
+
+ /// <summary>
+ /// Gets or sets the brushstopbase v11.
+ /// </summary>
+
+ [Column("V11")]
+
+ public Double V11
+ {
+ get
+ {
+ return _v11;
+ }
+
+ set
+ {
+ if (_v11 != value)
+ {
+ _v11 = value;
+
+ OnV11Changed(value);
+
+ }
+ }
+ }
+
+ protected Int32 _v11div;
+
+ /// <summary>
+ /// Gets or sets the brushstopbase v11 div.
+ /// </summary>
+
+ [Column("V11_DIV")]
+
+ public Int32 V11Div
+ {
+ get
+ {
+ return _v11div;
+ }
+
+ set
+ {
+ if (_v11div != value)
+ {
+ _v11div = value;
+
+ OnV11DivChanged(value);
+
+ }
+ }
+ }
+
protected Boolean _corrected;
/// <summary>
@@ -1629,6 +1745,42 @@ namespace Tango.BL.Entities
}
/// <summary>
+ /// Called when the V10 has changed.
+ /// </summary>
+ protected virtual void OnV10Changed(Double v10)
+ {
+ V10Changed?.Invoke(this, v10);
+ RaisePropertyChanged(nameof(V10));
+ }
+
+ /// <summary>
+ /// Called when the V10Div has changed.
+ /// </summary>
+ protected virtual void OnV10DivChanged(Int32 v10div)
+ {
+ V10DivChanged?.Invoke(this, v10div);
+ RaisePropertyChanged(nameof(V10Div));
+ }
+
+ /// <summary>
+ /// Called when the V11 has changed.
+ /// </summary>
+ protected virtual void OnV11Changed(Double v11)
+ {
+ V11Changed?.Invoke(this, v11);
+ RaisePropertyChanged(nameof(V11));
+ }
+
+ /// <summary>
+ /// Called when the V11Div has changed.
+ /// </summary>
+ protected virtual void OnV11DivChanged(Int32 v11div)
+ {
+ V11DivChanged?.Invoke(this, v11div);
+ RaisePropertyChanged(nameof(V11Div));
+ }
+
+ /// <summary>
/// Called when the Corrected has changed.
/// </summary>
protected virtual void OnCorrectedChanged(Boolean corrected)
diff --git a/Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYK.cs b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYK.cs
new file mode 100644
index 000000000..a720fe5c3
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYK.cs
@@ -0,0 +1,10 @@
+namespace Tango.ColorConversion
+{
+ public class CMYK
+ {
+ public double C { get; set; }
+ public double M { get; set; }
+ public double Y { get; set; }
+ public double K { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYKV.cs b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYKV.cs
new file mode 100644
index 000000000..fecfdb5c4
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYKV.cs
@@ -0,0 +1,7 @@
+namespace Tango.ColorConversion
+{
+ public class CMYKV : CMYK
+ {
+ public double V { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYKVColorConverter.cs b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYKVColorConverter.cs
new file mode 100644
index 000000000..ab7cbc5b0
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYKVColorConverter.cs
@@ -0,0 +1,77 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Tango.ColorConversion
+{
+ public class CMYKVColorConverter
+ {
+ private IColorConverter colorConverter = new DefaultColorConverter();
+
+ private List<CMYKVMeasurement> measurements = new List<CMYKVMeasurement>();
+
+ public void AddMeasurement(CMYKV cmykv, LAB lab)
+ {
+ measurements.Add(new CMYKVMeasurement { CMYKVValue = cmykv, LABValue = lab });
+ }
+
+ public CMYKV ConvertRGBToCMYKV(RGB rgb, Func<RGB, CMYK> RGBToCMYK, float hueThreshold, PredictionMethod method)
+ {
+ var cmyk = RGBToCMYK(rgb);
+ var violetAdded = (GetHue(rgb) >= hueThreshold) ? 0.2f : 0.0f;
+ var cmykv = new CMYKV { C = cmyk.C, M = cmyk.M, Y = cmyk.Y, K = cmyk.K, V = violetAdded };
+
+ LAB lab;
+ switch (method)
+ {
+ case PredictionMethod.LinearInterpolation:
+ lab = new LinearInterpolationPrediction().Predict(cmykv, measurements);
+ break;
+ case PredictionMethod.LinearRegression:
+ lab = new LinearRegressionPrediction().Predict(cmykv, measurements);
+ break;
+ case PredictionMethod.KNearestNeighbors:
+ lab = new KNearestNeighborsPrediction(5).Predict(cmykv, measurements);
+ break;
+ case PredictionMethod.SplineInterpolation:
+ lab = new SplineInterpolationPrediction().Predict(cmykv, measurements);
+ break;
+ default:
+ throw new ArgumentException("Invalid prediction method");
+ }
+
+ return cmykv;
+ }
+
+ public RGB ConvertCMYKVToRGB(CMYKV cmykv, Func<CMYK, RGB> CMYKToRGB, PredictionMethod method)
+ {
+ var rgb = CMYKToRGB(new CMYK { C = cmykv.C, M = cmykv.M, Y = cmykv.Y, K = cmykv.K });
+
+ LAB lab;
+ switch (method)
+ {
+ case PredictionMethod.LinearInterpolation:
+ lab = new LinearInterpolationPrediction().Predict(cmykv, measurements);
+ break;
+ case PredictionMethod.LinearRegression:
+ lab = new LinearRegressionPrediction().Predict(cmykv, measurements);
+ break;
+ case PredictionMethod.KNearestNeighbors:
+ lab = new KNearestNeighborsPrediction(5).Predict(cmykv, measurements);
+ break;
+ case PredictionMethod.SplineInterpolation:
+ lab = new SplineInterpolationPrediction().Predict(cmykv, measurements);
+ break;
+ default:
+ throw new ArgumentException("Invalid prediction method");
+ }
+
+ return rgb;
+ }
+
+ private float GetHue(RGB rgb)
+ {
+ return (float)Math.Atan2(Math.Sqrt(3) * (rgb.G - rgb.B), 2 * rgb.R - rgb.G - rgb.B);
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYKVMeasurement.cs b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYKVMeasurement.cs
new file mode 100644
index 000000000..90e5b863b
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/CMYKVMeasurement.cs
@@ -0,0 +1,8 @@
+namespace Tango.ColorConversion
+{
+ public class CMYKVMeasurement
+ {
+ public CMYKV CMYKVValue { get; set; }
+ public LAB LABValue { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.ColorConversion/CMYKV/DemoData.cs b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/DemoData.cs
new file mode 100644
index 000000000..acd66b14d
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/DemoData.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+
+namespace Tango.ColorConversion
+{
+ public class DemoData
+ {
+ public List<CMYKVMeasurement> GetData()
+ {
+ var data = new List<CMYKVMeasurement>();
+
+ Random rand = new Random();
+
+ for (int i = 0; i < 100; i++)
+ {
+ // Random CMYKV values between 0 and 100 (representing % ink coverage)
+ double C = rand.NextDouble() * 100;
+ double M = rand.NextDouble() * 100;
+ double Y = rand.NextDouble() * 100;
+ double K = rand.NextDouble() * 100;
+ double V = rand.NextDouble() * 100;
+
+ // Simulate LAB values based on CMYKV (simplified simulation)
+ // In a real-world scenario, you'd derive these from actual measurements.
+ // For now, I simulate LAB by assuming that lightness (L) decreases as more ink (K) is added,
+ // and A, B values are influenced by C, M, Y components.
+
+ double L = 100 - K - (C + M + Y) * 0.3; // Simulating lightness decrease with more ink
+ double A = C * 0.5 - M * 0.5; // Simulating red-green axis
+ double B = Y * 0.6 - V * 0.4; // Simulating yellow-blue axis
+
+ // Clamp LAB values within realistic ranges (L: 0-100, A/B: -128 to 127)
+ L = L.Clamp(0, 100);
+ A = A.Clamp(-128, 127);
+ B = B.Clamp(-128, 127);
+
+ data.Add(new CMYKVMeasurement
+ {
+ CMYKVValue = new CMYKV { C = C, M = M, Y = Y, K = K, V = V },
+ LABValue = new LAB { L = L, A = A, B = B }
+ });
+ }
+
+ return data;
+ }
+ }
+} \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.ColorConversion/CMYKV/KNearestNeighborsPrediction.cs b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/KNearestNeighborsPrediction.cs
new file mode 100644
index 000000000..bce1e90ce
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/KNearestNeighborsPrediction.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Tango.ColorConversion
+{
+ public class KNearestNeighborsPrediction
+ {
+ private int k;
+
+ public KNearestNeighborsPrediction(int k)
+ {
+ this.k = k;
+ }
+
+ public LAB Predict(CMYKV cmykv, List<CMYKVMeasurement> measurements)
+ {
+ // K-Nearest Neighbors logic: Find the k closest measurements and average their LAB values
+ if (measurements.Count < k)
+ throw new InvalidOperationException($"Not enough measurements for KNN (requires at least {k})");
+
+ // Calculate distances and take the k nearest measurements
+ var nearest = measurements
+ .OrderBy(m => GetDistance(m.CMYKVValue, cmykv))
+ .Take(k)
+ .ToArray();
+
+ // Average their LAB values
+ var avgL = nearest.Average(m => m.LABValue.L);
+ var avgA = nearest.Average(m => m.LABValue.A);
+ var avgB = nearest.Average(m => m.LABValue.B);
+
+ return new LAB { L = avgL, A = avgA, B = avgB };
+ }
+
+ private double GetDistance(CMYKV m1, CMYKV m2)
+ {
+ return Math.Sqrt(Math.Pow(m1.C - m2.C, 2) +
+ Math.Pow(m1.M - m2.M, 2) +
+ Math.Pow(m1.Y - m2.Y, 2) +
+ Math.Pow(m1.K - m2.K, 2) +
+ Math.Pow(m1.V - m2.V, 2));
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.ColorConversion/CMYKV/LAB.cs b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/LAB.cs
new file mode 100644
index 000000000..5dfd5ee7e
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/LAB.cs
@@ -0,0 +1,9 @@
+namespace Tango.ColorConversion
+{
+ public class LAB
+ {
+ public double L { get; set; }
+ public double A { get; set; }
+ public double B { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.ColorConversion/CMYKV/LinearInterpolationPrediction.cs b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/LinearInterpolationPrediction.cs
new file mode 100644
index 000000000..5d5fa6f95
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/LinearInterpolationPrediction.cs
@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Tango.ColorConversion
+{
+ public class LinearInterpolationPrediction
+ {
+ public LAB Predict(CMYKV cmykv, List<CMYKVMeasurement> measurements)
+ {
+ // Linear interpolation logic: Find the two closest points and interpolate between them.
+
+ if (measurements.Count < 2)
+ throw new InvalidOperationException("Not enough measurements for interpolation");
+
+ // Calculate the Euclidean distance between the input and each measurement's CMYKV values
+ var closest = measurements
+ .OrderBy(m => GetDistance(m.CMYKVValue, cmykv))
+ .Take(2)
+ .ToArray();
+
+ // Perform interpolation between the two closest points
+ var weight1 = GetDistance(closest[1].CMYKVValue, cmykv);
+ var weight2 = GetDistance(closest[0].CMYKVValue, cmykv);
+ var totalWeight = weight1 + weight2;
+
+ return new LAB
+ {
+ L = (closest[0].LABValue.L * weight2 + closest[1].LABValue.L * weight1) / totalWeight,
+ A = (closest[0].LABValue.A * weight2 + closest[1].LABValue.A * weight1) / totalWeight,
+ B = (closest[0].LABValue.B * weight2 + closest[1].LABValue.B * weight1) / totalWeight
+ };
+ }
+
+ private double GetDistance(CMYKV m1, CMYKV m2)
+ {
+ return Math.Sqrt(Math.Pow(m1.C - m2.C, 2) +
+ Math.Pow(m1.M - m2.M, 2) +
+ Math.Pow(m1.Y - m2.Y, 2) +
+ Math.Pow(m1.K - m2.K, 2) +
+ Math.Pow(m1.V - m2.V, 2));
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.ColorConversion/CMYKV/LinearRegressionPrediction.cs b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/LinearRegressionPrediction.cs
new file mode 100644
index 000000000..04fc7df70
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/LinearRegressionPrediction.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Tango.ColorConversion
+{
+ public class LinearRegressionPrediction
+ {
+ public LAB Predict(CMYKV cmykv, List<CMYKVMeasurement> measurements)
+ {
+ // Simple linear regression to fit LAB as a function of CMYKV
+
+ var n = measurements.Count;
+ if (n == 0)
+ throw new InvalidOperationException("No measurements for regression");
+
+ double sumC = 0, sumM = 0, sumY = 0, sumK = 0, sumV = 0;
+ double sumL = 0, sumA = 0, sumB = 0;
+
+ // Sum up the CMYKV and LAB components
+ foreach (var m in measurements)
+ {
+ sumC += m.CMYKVValue.C;
+ sumM += m.CMYKVValue.M;
+ sumY += m.CMYKVValue.Y;
+ sumK += m.CMYKVValue.K;
+ sumV += m.CMYKVValue.V;
+
+ sumL += m.LABValue.L;
+ sumA += m.LABValue.A;
+ sumB += m.LABValue.B;
+ }
+
+ // Compute the averages
+ var avgC = sumC / n;
+ var avgM = sumM / n;
+ var avgY = sumY / n;
+ var avgK = sumK / n;
+ var avgV = sumV / n;
+
+ var avgL = sumL / n;
+ var avgA = sumA / n;
+ var avgB = sumB / n;
+
+ // Predict LAB by applying the linear model (this is a simple averaging model)
+ return new LAB
+ {
+ L = avgL,
+ A = avgA,
+ B = avgB
+ };
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.ColorConversion/CMYKV/PredictionMethod.cs b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/PredictionMethod.cs
new file mode 100644
index 000000000..200368571
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/PredictionMethod.cs
@@ -0,0 +1,10 @@
+namespace Tango.ColorConversion
+{
+ public enum PredictionMethod
+ {
+ LinearInterpolation,
+ LinearRegression,
+ KNearestNeighbors,
+ SplineInterpolation
+ }
+}
diff --git a/Software/Visual_Studio/Tango.ColorConversion/CMYKV/RGB.cs b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/RGB.cs
new file mode 100644
index 000000000..7775a713c
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/RGB.cs
@@ -0,0 +1,9 @@
+namespace Tango.ColorConversion
+{
+ public class RGB
+ {
+ public float R { get; set; }
+ public float G { get; set; }
+ public float B { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.ColorConversion/CMYKV/SplineInterpolationPrediction.cs b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/SplineInterpolationPrediction.cs
new file mode 100644
index 000000000..5d118bc8d
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorConversion/CMYKV/SplineInterpolationPrediction.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MathNet.Numerics.Interpolation;
+
+namespace Tango.ColorConversion
+{
+ public class SplineInterpolationPrediction
+ {
+ public LAB Predict(CMYKV cmykv, List<CMYKVMeasurement> measurements)
+ {
+ // Spline interpolation logic: Perform cubic spline interpolation
+ var cValues = measurements.Select(m => m.CMYKVValue.C).ToArray();
+ var lValues = measurements.Select(m => m.LABValue.L).ToArray();
+ var aValues = measurements.Select(m => m.LABValue.A).ToArray();
+ var bValues = measurements.Select(m => m.LABValue.B).ToArray();
+
+ var lSpline = CubicSpline.InterpolateNatural(cValues, lValues);
+ var aSpline = CubicSpline.InterpolateNatural(cValues, aValues);
+ var bSpline = CubicSpline.InterpolateNatural(cValues, bValues);
+
+ return new LAB
+ {
+ L = (float)lSpline.Interpolate(cmykv.C),
+ A = (float)aSpline.Interpolate(cmykv.C),
+ B = (float)bSpline.Interpolate(cmykv.C)
+ };
+ }
+ }
+}
diff --git a/Software/Visual_Studio/Tango.ColorConversion/DefaultColorConverter.cs b/Software/Visual_Studio/Tango.ColorConversion/DefaultColorConverter.cs
index d6f34edd2..dc9f1bd07 100644
--- a/Software/Visual_Studio/Tango.ColorConversion/DefaultColorConverter.cs
+++ b/Software/Visual_Studio/Tango.ColorConversion/DefaultColorConverter.cs
@@ -55,40 +55,28 @@ namespace Tango.ColorConversion
NativePMR<ConversionInput, ConversionOutput> nativePMR = new NativePMR<ConversionInput, ConversionOutput>(convert);
ConversionOutput output = nativePMR.Invoke(conversionInput);
- //if (conversionInput.UseLightInks)
- //{
- // try
- // {
- // InputLiquid cyan = conversionInput.InputCoordinates.InputLiquids.SingleOrDefault(x => x.LiquidType == PMR.ColorLab.LiquidType.Cyan);
- // OutputLiquid lightCyan = output.SingleCoordinates.OutputLiquids.SingleOrDefault(x => x.LiquidType == PMR.ColorLab.LiquidType.LightCyan);
-
- // InputLiquid magenta = conversionInput.InputCoordinates.InputLiquids.SingleOrDefault(x => x.LiquidType == PMR.ColorLab.LiquidType.Magenta);
- // OutputLiquid lightMagenta = output.SingleCoordinates.OutputLiquids.SingleOrDefault(x => x.LiquidType == PMR.ColorLab.LiquidType.LightMagenta);
-
- // InputLiquid yellow = conversionInput.InputCoordinates.InputLiquids.SingleOrDefault(x => x.LiquidType == PMR.ColorLab.LiquidType.Yellow);
- // OutputLiquid lightYellow = output.SingleCoordinates.OutputLiquids.SingleOrDefault(x => x.LiquidType == PMR.ColorLab.LiquidType.LightYellow);
-
- // if (lightCyan != null && lightCyan.Volume > 0)
- // {
- // lightCyan.Volume = (double)((decimal)cyan.Volume * 10m);
- // }
- // if (lightMagenta != null && lightMagenta.Volume > 0)
- // {
- // lightMagenta.Volume = (double)((decimal)magenta.Volume * 10m);
+ if (conversionInput.ColorSpace == PMR.ColorLab.ColorSpace.Volume)
+ {
+ var violetInput = conversionInput.InputCoordinates.InputLiquids.FirstOrDefault(x => x.LiquidType == PMR.ColorLab.LiquidType.Violet);
- // }
- // if (lightYellow != null && lightYellow.Volume > 0)
- // {
- // lightYellow.Volume = (double)((decimal)yellow.Volume * 10m);
+ //conversionInput.GenerateHive
- // }
- // }
- // catch (Exception)
- // {
- // LogManager.Default.Log("Error while correcting light inks decimal parts.", LogCategory.Error);
- // }
- //}
+ //Blend violet to best match color.
+ if (violetInput != null && violetInput.Volume > 0)
+ {
+ var color = BlendWithViolet(output.SingleCoordinates.Red, output.SingleCoordinates.Green, output.SingleCoordinates.Blue, (float)(violetInput.Volume / 100d));
+ output.SingleCoordinates.Red = color.R;
+ output.SingleCoordinates.Green = color.G;
+ output.SingleCoordinates.Blue = color.B;
+ }
+ }
+ else
+ {
+ var violetOutput = new OutputLiquid() { LiquidType = PMR.ColorLab.LiquidType.Violet, Volume = 0 };
+ output.SingleCoordinates.OutputLiquids.Add(violetOutput);
+ output.HiveCoordinates.ToList().ForEach(x => x.OutputLiquids.Add(violetOutput));
+ }
bool result = NativeMethods.FreeLibrary(pDll);
@@ -1023,5 +1011,34 @@ namespace Tango.ColorConversion
}
#endregion
+
+ #region Additional Ink Color Conversion
+
+ private static Color Violet = Color.FromRgb(127, 0, 255);
+
+ public static Color BlendWithViolet(int r, int g, int b, float violetFactor)
+ {
+ // Ensure violetFactor is between 0.0 and 1.0
+ violetFactor = violetFactor.Clamp(0.0f, 1.0f);
+
+ // Violet color in RGB
+ int violetR = Violet.R;
+ int violetG = Violet.G;
+ int violetB = Violet.B;
+
+ // Blend the current color with violet using the factor
+ int blendedR = (int)((r * (1 - violetFactor)) + (violetR * violetFactor));
+ int blendedG = (int)((g * (1 - violetFactor)) + (violetG * violetFactor));
+ int blendedB = (int)((b * (1 - violetFactor)) + (violetB * violetFactor));
+
+ // Clamp values to 0-255 range
+ blendedR = blendedR.Clamp(0, 255);
+ blendedG = blendedG.Clamp(0, 255);
+ blendedB = blendedB.Clamp(0, 255);
+
+ return Color.FromRgb((byte)blendedR, (byte)blendedG, (byte)blendedB);
+ }
+
+ #endregion
}
}
diff --git a/Software/Visual_Studio/Tango.ColorConversion/ExtensionMethods/MathExtensions.cs b/Software/Visual_Studio/Tango.ColorConversion/ExtensionMethods/MathExtensions.cs
new file mode 100644
index 000000000..7f80c2b88
--- /dev/null
+++ b/Software/Visual_Studio/Tango.ColorConversion/ExtensionMethods/MathExtensions.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+public static class MathExtensions
+{
+ public static T Clamp<T>(this T val, T min, T max) where T : IComparable<T>
+ {
+ if (val.CompareTo(min) < 0) return min;
+ else if (val.CompareTo(max) > 0) return max;
+ else return val;
+ }
+}
diff --git a/Software/Visual_Studio/Tango.ColorConversion/Tango.ColorConversion.csproj b/Software/Visual_Studio/Tango.ColorConversion/Tango.ColorConversion.csproj
index 40d16e599..dc33e8557 100644
--- a/Software/Visual_Studio/Tango.ColorConversion/Tango.ColorConversion.csproj
+++ b/Software/Visual_Studio/Tango.ColorConversion/Tango.ColorConversion.csproj
@@ -34,6 +34,9 @@
<Reference Include="Google.Protobuf, Version=3.4.1.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
<HintPath>..\packages\Google.Protobuf.3.4.1\lib\net45\Google.Protobuf.dll</HintPath>
</Reference>
+ <Reference Include="MathNet.Numerics, Version=6.0.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\packages\MathNet.Numerics.6.0.0-beta1\lib\netstandard2.0\MathNet.Numerics.dll</HintPath>
+ </Reference>
<Reference Include="PresentationCore" />
<Reference Include="System" />
<Reference Include="System.Core" />
@@ -48,15 +51,29 @@
<Compile Include="..\Versioning\GlobalVersionInfo.cs">
<Link>GlobalVersionInfo.cs</Link>
</Compile>
+ <Compile Include="CMYKV\CMYK.cs" />
+ <Compile Include="CMYKV\CMYKV.cs" />
+ <Compile Include="CMYKV\CMYKVColorConverter.cs" />
+ <Compile Include="CMYKV\CMYKVMeasurement.cs" />
+ <Compile Include="CMYKV\DemoData.cs" />
+ <Compile Include="CMYKV\KNearestNeighborsPrediction.cs" />
+ <Compile Include="CMYKV\LAB.cs" />
+ <Compile Include="CMYKV\LinearInterpolationPrediction.cs" />
+ <Compile Include="CMYKV\LinearRegressionPrediction.cs" />
+ <Compile Include="CMYKV\PredictionMethod.cs" />
+ <Compile Include="CMYKV\RGB.cs" />
+ <Compile Include="CMYKV\SplineInterpolationPrediction.cs" />
<Compile Include="ColorConversionSettings.cs" />
<Compile Include="ColorConversionSuggestion.cs" />
<Compile Include="DefaultColorConverter.cs" />
<Compile Include="ExtensionMethods\ColorConversionSuggestionExtensions.cs" />
<Compile Include="ExtensionMethods\ConversionOutputExtensions.cs" />
+ <Compile Include="ExtensionMethods\MathExtensions.cs" />
<Compile Include="IColorConverter.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
+ <None Include="app.config" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
diff --git a/Software/Visual_Studio/Tango.ColorConversion/packages.config b/Software/Visual_Studio/Tango.ColorConversion/packages.config
index fa3c0d58d..87e0b85f7 100644
--- a/Software/Visual_Studio/Tango.ColorConversion/packages.config
+++ b/Software/Visual_Studio/Tango.ColorConversion/packages.config
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Google.Protobuf" version="3.4.1" targetFramework="net461" />
+ <package id="MathNet.Numerics" version="6.0.0-beta1" targetFramework="net461" />
</packages> \ No newline at end of file
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/BRUSH_STOPS.cs b/Software/Visual_Studio/Tango.DAL.Remote/DB/BRUSH_STOPS.cs
index 5671e17a3..b94e74a97 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/BRUSH_STOPS.cs
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/BRUSH_STOPS.cs
@@ -51,6 +51,10 @@ namespace Tango.DAL.Remote.DB
public int V8_DIV { get; set; }
public double V9 { get; set; }
public int V9_DIV { get; set; }
+ public double V10 { get; set; }
+ public int V10_DIV { get; set; }
+ public double V11 { get; set; }
+ public int V11_DIV { get; set; }
public bool CORRECTED { get; set; }
public string COLOR_CATALOG_GUID { get; set; }
public string COLOR_CATALOGS_ITEM_GUID { get; set; }
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx
index a8b4ebbd6..61d68c102 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx
@@ -119,6 +119,10 @@
<Property Name="V8_DIV" Type="int" Nullable="false" />
<Property Name="V9" Type="float" Nullable="false" />
<Property Name="V9_DIV" Type="int" Nullable="false" />
+ <Property Name="V10" Type="float" Nullable="false" />
+ <Property Name="V10_DIV" Type="int" Nullable="false" />
+ <Property Name="V11" Type="float" Nullable="false" />
+ <Property Name="V11_DIV" Type="int" Nullable="false" />
<Property Name="CORRECTED" Type="bit" Nullable="false" />
<Property Name="COLOR_CATALOG_GUID" Type="varchar" MaxLength="36" />
<Property Name="COLOR_CATALOGS_ITEM_GUID" Type="varchar" MaxLength="36" />
@@ -5732,6 +5736,10 @@
<Property Name="V8_DIV" Type="Int32" Nullable="false" />
<Property Name="V9" Type="Double" Nullable="false" />
<Property Name="V9_DIV" Type="Int32" Nullable="false" />
+ <Property Name="V10" Type="Double" Nullable="false" />
+ <Property Name="V10_DIV" Type="Int32" Nullable="false" />
+ <Property Name="V11" Type="Double" Nullable="false" />
+ <Property Name="V11_DIV" Type="Int32" Nullable="false" />
<Property Name="CORRECTED" Type="Boolean" Nullable="false" />
<Property Name="COLOR_CATALOG_GUID" Type="String" MaxLength="36" FixedLength="false" Unicode="false" />
<Property Name="COLOR_CATALOGS_ITEM_GUID" Type="String" MaxLength="36" FixedLength="false" Unicode="false" />
@@ -9236,6 +9244,10 @@
<ScalarProperty Name="COLOR_CATALOGS_ITEM_GUID" ColumnName="COLOR_CATALOGS_ITEM_GUID" />
<ScalarProperty Name="COLOR_CATALOG_GUID" ColumnName="COLOR_CATALOG_GUID" />
<ScalarProperty Name="CORRECTED" ColumnName="CORRECTED" />
+ <ScalarProperty Name="V11_DIV" ColumnName="V11_DIV" />
+ <ScalarProperty Name="V11" ColumnName="V11" />
+ <ScalarProperty Name="V10_DIV" ColumnName="V10_DIV" />
+ <ScalarProperty Name="V10" ColumnName="V10" />
<ScalarProperty Name="V9_DIV" ColumnName="V9_DIV" />
<ScalarProperty Name="V9" ColumnName="V9" />
<ScalarProperty Name="V8_DIV" ColumnName="V8_DIV" />
diff --git a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram
index 0887ffcae..66a74fb5e 100644
--- a/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram
+++ b/Software/Visual_Studio/Tango.DAL.Remote/DB/RemoteADO.edmx.diagram
@@ -5,102 +5,102 @@
<!-- Diagram content (shape and connector positions) -->
<edmx:Diagrams>
<Diagram DiagramId="f9ae01d708754bbd997add25a4bacc79" Name="Diagram1" ZoomLevel="58">
- <EntityTypeShape EntityType="RemoteModel.ACTION_LOGS" Width="1.5" PointX="11.25" PointY="16" />
- <EntityTypeShape EntityType="RemoteModel.ADDRESS" Width="1.5" PointX="1.5" PointY="0.75" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_DISPLAY_PANEL_VERSIONS" Width="1.5" PointX="4.5" PointY="77" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_FIRMWARE_VERSIONS" Width="1.5" PointX="4.5" PointY="71.125" />
- <EntityTypeShape EntityType="RemoteModel.APPLICATION_OS_VERSIONS" Width="1.5" PointX="4.5" PointY="74" />
- <EntityTypeShape EntityType="RemoteModel.BIT_TYPES" Width="1.5" PointX="3.75" PointY="2.125" />
- <EntityTypeShape EntityType="RemoteModel.BRUSH_STOPS" Width="1.5" PointX="18" PointY="22.25" />
- <EntityTypeShape EntityType="RemoteModel.BTSR_APPLICATION_TYPES" Width="1.5" PointX="0.75" PointY="42.125" />
- <EntityTypeShape EntityType="RemoteModel.BTSR_YARN_TYPES" Width="1.5" PointX="0.75" PointY="29.5" />
- <EntityTypeShape EntityType="RemoteModel.CARTRIDGE_TYPES" Width="1.5" PointX="6.75" PointY="37.375" />
- <EntityTypeShape EntityType="RemoteModel.CAT" Width="1.5" PointX="5.25" PointY="29.75" />
- <EntityTypeShape EntityType="RemoteModel.CCT" Width="1.5" PointX="0.75" PointY="12" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS" Width="1.5" PointX="1.5" PointY="59.625" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_GROUPS" Width="1.5" PointX="0.75" PointY="54.125" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_ITEMS" Width="1.5" PointX="3" PointY="52.875" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_ITEMS_RECIPES" Width="1.5" PointX="5.25" PointY="25.75" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_PROCESS_INK_UPTAKE" Width="1.5" PointX="5.75" PointY="2.125" />
- <EntityTypeShape EntityType="RemoteModel.COLOR_SPACES" Width="1.5" PointX="9" PointY="30.75" />
- <EntityTypeShape EntityType="RemoteModel.CONFIGURATION" Width="1.5" PointX="6.75" PointY="72.25" />
- <EntityTypeShape EntityType="RemoteModel.CONTACT" Width="1.5" PointX="1.5" PointY="48.875" />
- <EntityTypeShape EntityType="RemoteModel.CUSTOMER" Width="1.5" PointX="9" PointY="37.375" />
- <EntityTypeShape EntityType="RemoteModel.DATA_STORE_ITEMS" Width="1.5" PointX="11.25" PointY="82.75" />
- <EntityTypeShape EntityType="RemoteModel.DISPENSER_TYPES" Width="1.5" PointX="4.5" PointY="13.5" />
- <EntityTypeShape EntityType="RemoteModel.DISPENSER" Width="1.5" PointX="6.75" PointY="12.875" />
- <EntityTypeShape EntityType="RemoteModel.EMBEDDED_FIRMWARE_VERSIONS" Width="1.5" PointX="4.5" PointY="79.875" />
- <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES" Width="1.5" PointX="9" PointY="2.25" />
- <EntityTypeShape EntityType="RemoteModel.FIBER_SHAPES" Width="1.5" PointX="0.75" PointY="26.25" />
- <EntityTypeShape EntityType="RemoteModel.FIBER_SYNTHS" Width="1.5" PointX="0.75" PointY="39.25" />
- <EntityTypeShape EntityType="RemoteModel.FSE_VERSIONS" Width="1.5" PointX="11.25" PointY="8.625" />
- <EntityTypeShape EntityType="RemoteModel.GBD" Width="1.5" PointX="0.75" PointY="15.375" />
- <EntityTypeShape EntityType="RemoteModel.GLOBAL_DATA_STORE_ITEMS" Width="1.5" PointX="5.75" PointY="6.125" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWER_TYPES" Width="1.5" PointX="9.5" PointY="90.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWERS" Width="1.5" PointX="11.75" PointY="70.875" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSOR_TYPES" Width="1.5" PointX="7.5" PointY="41.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSORS" Width="1.5" PointX="9.75" PointY="61" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCER_TYPES" Width="1.5" PointX="7.5" PointY="86.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCERS" Width="1.5" PointX="9.75" PointY="65.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTOR_TYPES" Width="1.5" PointX="10.5" PointY="57.125" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTORS" Width="1.5" PointX="12.75" PointY="60.875" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROL_TYPES" Width="1.5" PointX="12.5" PointY="79.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROLS" Width="1.5" PointX="14.75" PointY="71.375" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSOR_TYPES" Width="1.5" PointX="4.5" PointY="63.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSORS" Width="1.5" PointX="6.75" PointY="67" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_VERSIONS" Width="1.5" PointX="4.5" PointY="66.5" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDER_TYPES" Width="1.5" PointX="9.5" PointY="94.25" />
- <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDERS" Width="1.5" PointX="11.75" PointY="75" />
- <EntityTypeShape EntityType="RemoteModel.IDS_PACK_FORMULAS" Width="1.5" PointX="6.75" PointY="45.25" />
- <EntityTypeShape EntityType="RemoteModel.IDS_PACKS" Width="1.5" PointX="9" PointY="44.75" />
- <EntityTypeShape EntityType="RemoteModel.JOB_RUNS" Width="1.5" PointX="18.75" PointY="6.125" />
- <EntityTypeShape EntityType="RemoteModel.JOB" Width="1.5" PointX="11.25" PointY="22" />
- <EntityTypeShape EntityType="RemoteModel.LINEAR_MASS_DENSITY_UNITS" Width="1.5" PointX="0.75" PointY="18.625" />
- <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES" Width="1.5" PointX="6" PointY="17.375" />
- <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES_RMLS" Width="1.5" PointX="8.25" PointY="22" />
- <EntityTypeShape EntityType="RemoteModel.LUB" Width="1.5" PointX="0.75" PointY="36" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE_PROTOTYPES" Width="1.5" PointX="2.75" PointY="10.125" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE_STUDIO_VERSIONS" Width="1.5" PointX="11.25" PointY="12.5" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE_VERSIONS" Width="1.5" PointX="6.75" PointY="82.875" />
- <EntityTypeShape EntityType="RemoteModel.MACHINE" Width="1.5" PointX="9" PointY="70.5" />
- <EntityTypeShape EntityType="RemoteModel.MACHINES_EVENTS" Width="1.5" PointX="11.25" PointY="42.625" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_CONDITIONS" Width="1.5" PointX="0.75" PointY="21.625" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_MATERIALS" Width="1.5" PointX="0.75" PointY="32.875" />
- <EntityTypeShape EntityType="RemoteModel.MEDIA_PURPOSES" Width="1.5" PointX="0.75" PointY="45.5" />
- <EntityTypeShape EntityType="RemoteModel.MID_TANK_TYPES" Width="1.5" PointX="6.75" PointY="77.625" />
- <EntityTypeShape EntityType="RemoteModel.ORGANIZATION" Width="1.5" PointX="0.75" PointY="5.75" />
- <EntityTypeShape EntityType="RemoteModel.PERMISSION" Width="1.5" PointX="12" PointY="0.75" />
- <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES" Width="1.5" PointX="7.5" PointY="50.125" />
- <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES_GROUPS" Width="1.5" PointX="5.25" PointY="56.375" />
- <EntityTypeShape EntityType="RemoteModel.PUBLISHED_PROCEDURE_PROJECTS" Width="1.5" PointX="16.75" PointY="2.375" />
- <EntityTypeShape EntityType="RemoteModel.PUBLISHED_PROCEDURE_PROJECTS_VERSIONS" Width="1.5" PointX="19" PointY="2.625" />
- <EntityTypeShape EntityType="RemoteModel.RML_EXTENSION_TEST_WASHING_RESULTS" Width="1.5" PointX="16" PointY="14.375" />
- <EntityTypeShape EntityType="RemoteModel.RML" Width="1.5" PointX="3" PointY="19.75" />
- <EntityTypeShape EntityType="RemoteModel.RMLS_SPOOLS" Width="1.5" PointX="8.25" PointY="25.5" />
- <EntityTypeShape EntityType="RemoteModel.ROLE" Width="1.5" PointX="12" PointY="4.625" />
- <EntityTypeShape EntityType="RemoteModel.ROLES_PERMISSIONS" Width="1.5" PointX="14.25" PointY="2.75" />
- <EntityTypeShape EntityType="RemoteModel.RUBBING_RESULTS" Width="1.5" PointX="13.75" PointY="18.125" />
- <EntityTypeShape EntityType="RemoteModel.SEGMENT" Width="1.5" PointX="15.75" PointY="25.75" />
- <EntityTypeShape EntityType="RemoteModel.SEGMENTS_GROUPS" Width="1.5" PointX="13.5" PointY="26.125" />
- <EntityTypeShape EntityType="RemoteModel.SITE" Width="1.5" PointX="3" PointY="5.875" />
- <EntityTypeShape EntityType="RemoteModel.SITES_CATALOGS" Width="1.5" PointX="11.25" PointY="34.375" />
- <EntityTypeShape EntityType="RemoteModel.SITES_RMLS" Width="1.5" PointX="5.25" PointY="22.125" />
- <EntityTypeShape EntityType="RemoteModel.SITES_SPOOL_TYPES" Width="1.5" PointX="14.25" PointY="10.75" />
- <EntityTypeShape EntityType="RemoteModel.SPOOL_TYPES" Width="1.5" PointX="9" PointY="13.375" />
- <EntityTypeShape EntityType="RemoteModel.SPOOL" Width="1.5" PointX="11.25" PointY="47.625" />
- <EntityTypeShape EntityType="RemoteModel.sysdiagram" Width="1.5" PointX="15.75" PointY="18.125" />
- <EntityTypeShape EntityType="RemoteModel.TANGO_UPDATES" Width="1.5" PointX="18.75" PointY="17.125" />
- <EntityTypeShape EntityType="RemoteModel.TANGO_VERSIONS" Width="1.5" PointX="14.25" PointY="44.5" />
- <EntityTypeShape EntityType="RemoteModel.TECH_CONTROLLERS" Width="1.5" PointX="20.75" PointY="6.125" />
- <EntityTypeShape EntityType="RemoteModel.TECH_DISPENSERS" Width="1.5" PointX="20.75" PointY="10.125" />
- <EntityTypeShape EntityType="RemoteModel.TECH_HEATERS" Width="1.5" PointX="20.75" PointY="13.125" />
- <EntityTypeShape EntityType="RemoteModel.TECH_IOS" Width="1.5" PointX="20.75" PointY="16.125" />
- <EntityTypeShape EntityType="RemoteModel.TECH_MONITORS" Width="1.5" PointX="20.75" PointY="21.125" />
- <EntityTypeShape EntityType="RemoteModel.TECH_VALVES" Width="1.5" PointX="13.75" PointY="22.125" />
- <EntityTypeShape EntityType="RemoteModel.USER" Width="1.5" PointX="9" PointY="7.375" />
- <EntityTypeShape EntityType="RemoteModel.USERS_ROLES" Width="1.5" PointX="14.25" PointY="6.75" />
- <EntityTypeShape EntityType="RemoteModel.WASHING_TEST_MATERIALS" Width="1.5" PointX="13.75" PointY="14.875" />
- <EntityTypeShape EntityType="RemoteModel.WINDING_METHODS" Width="1.5" PointX="9" PointY="34.25" />
+ <EntityTypeShape EntityType="RemoteModel.ACTION_LOGS" Width="1.5" PointX="11.25" PointY="32.625" />
+ <EntityTypeShape EntityType="RemoteModel.ADDRESS" Width="1.5" PointX="1.5" PointY="85.375" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_DISPLAY_PANEL_VERSIONS" Width="1.5" PointX="1.5" PointY="76.25" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_FIRMWARE_VERSIONS" Width="1.5" PointX="1.5" PointY="73.25" />
+ <EntityTypeShape EntityType="RemoteModel.APPLICATION_OS_VERSIONS" Width="1.5" PointX="1.5" PointY="70.375" />
+ <EntityTypeShape EntityType="RemoteModel.BIT_TYPES" Width="1.5" PointX="0.75" PointY="0.75" />
+ <EntityTypeShape EntityType="RemoteModel.BRUSH_STOPS" Width="1.5" PointX="18" PointY="20.625" />
+ <EntityTypeShape EntityType="RemoteModel.BTSR_APPLICATION_TYPES" Width="1.5" PointX="0.75" PointY="14" />
+ <EntityTypeShape EntityType="RemoteModel.BTSR_YARN_TYPES" Width="1.5" PointX="0.75" PointY="41.625" />
+ <EntityTypeShape EntityType="RemoteModel.CARTRIDGE_TYPES" Width="1.5" PointX="3.75" PointY="45.5" />
+ <EntityTypeShape EntityType="RemoteModel.CAT" Width="1.5" PointX="8.25" PointY="24.625" />
+ <EntityTypeShape EntityType="RemoteModel.CCT" Width="1.5" PointX="0.75" PointY="32" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS" Width="1.5" PointX="1.5" PointY="5.375" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_GROUPS" Width="1.5" PointX="3.75" PointY="5.875" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_ITEMS" Width="1.5" PointX="6" PointY="4.625" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_CATALOGS_ITEMS_RECIPES" Width="1.5" PointX="8.25" PointY="20.5" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_PROCESS_INK_UPTAKE" Width="1.5" PointX="2.75" PointY="0.75" />
+ <EntityTypeShape EntityType="RemoteModel.COLOR_SPACES" Width="1.5" PointX="9" PointY="16" />
+ <EntityTypeShape EntityType="RemoteModel.CONFIGURATION" Width="1.5" PointX="3.75" PointY="71.5" />
+ <EntityTypeShape EntityType="RemoteModel.CONTACT" Width="1.5" PointX="1.5" PointY="89.5" />
+ <EntityTypeShape EntityType="RemoteModel.CUSTOMER" Width="1.5" PointX="9" PointY="28.875" />
+ <EntityTypeShape EntityType="RemoteModel.DATA_STORE_ITEMS" Width="1.5" PointX="8.25" PointY="85.875" />
+ <EntityTypeShape EntityType="RemoteModel.DISPENSER_TYPES" Width="1.5" PointX="1.5" PointY="94" />
+ <EntityTypeShape EntityType="RemoteModel.DISPENSER" Width="1.5" PointX="3.75" PointY="93.375" />
+ <EntityTypeShape EntityType="RemoteModel.EMBEDDED_FIRMWARE_VERSIONS" Width="1.5" PointX="1.5" PointY="79.125" />
+ <EntityTypeShape EntityType="RemoteModel.EVENT_TYPES" Width="1.5" PointX="9" PointY="43.75" />
+ <EntityTypeShape EntityType="RemoteModel.FIBER_SHAPES" Width="1.5" PointX="0.75" PointY="20.25" />
+ <EntityTypeShape EntityType="RemoteModel.FIBER_SYNTHS" Width="1.5" PointX="0.75" PointY="29.125" />
+ <EntityTypeShape EntityType="RemoteModel.FSE_VERSIONS" Width="1.5" PointX="11.25" PointY="50" />
+ <EntityTypeShape EntityType="RemoteModel.GBD" Width="1.5" PointX="0.75" PointY="24.875" />
+ <EntityTypeShape EntityType="RemoteModel.GLOBAL_DATA_STORE_ITEMS" Width="1.5" PointX="4.75" PointY="0.75" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWER_TYPES" Width="1.5" PointX="7.5" PointY="94.5" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BLOWERS" Width="1.5" PointX="9.75" PointY="66.125" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSOR_TYPES" Width="1.5" PointX="7.5" PointY="90.5" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_BREAK_SENSORS" Width="1.5" PointX="9.75" PointY="62.25" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCER_TYPES" Width="1.5" PointX="6.5" PointY="70.5" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_DANCERS" Width="1.5" PointX="8.75" PointY="70.375" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTOR_TYPES" Width="1.5" PointX="9.5" PointY="76.375" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_MOTORS" Width="1.5" PointX="11.75" PointY="70.125" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROL_TYPES" Width="1.5" PointX="1.5" PointY="55.5" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_PID_CONTROLS" Width="1.5" PointX="3.75" PointY="63.625" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSOR_TYPES" Width="1.5" PointX="4.5" PointY="51.5" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_SPEED_SENSORS" Width="1.5" PointX="6.75" PointY="66.25" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_VERSIONS" Width="1.5" PointX="1.5" PointY="65.75" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDER_TYPES" Width="1.5" PointX="1.5" PointY="59.5" />
+ <EntityTypeShape EntityType="RemoteModel.HARDWARE_WINDERS" Width="1.5" PointX="3.75" PointY="59.25" />
+ <EntityTypeShape EntityType="RemoteModel.IDS_PACK_FORMULAS" Width="1.5" PointX="3.75" PointY="42.125" />
+ <EntityTypeShape EntityType="RemoteModel.IDS_PACKS" Width="1.5" PointX="6" PointY="42.25" />
+ <EntityTypeShape EntityType="RemoteModel.JOB_RUNS" Width="1.5" PointX="13.75" PointY="0.75" />
+ <EntityTypeShape EntityType="RemoteModel.JOB" Width="1.5" PointX="11.25" PointY="20.875" />
+ <EntityTypeShape EntityType="RemoteModel.LINEAR_MASS_DENSITY_UNITS" Width="1.5" PointX="0.75" PointY="17.25" />
+ <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES" Width="1.5" PointX="3" PointY="13.25" />
+ <EntityTypeShape EntityType="RemoteModel.LIQUID_TYPES_RMLS" Width="1.5" PointX="5.25" PointY="20.75" />
+ <EntityTypeShape EntityType="RemoteModel.LUB" Width="1.5" PointX="0.75" PointY="38.25" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE_PROTOTYPES" Width="1.5" PointX="2.75" PointY="9.75" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE_STUDIO_VERSIONS" Width="1.5" PointX="11.25" PointY="39.5" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE_VERSIONS" Width="1.5" PointX="3.75" PointY="82.125" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINE" Width="1.5" PointX="6" PointY="73.75" />
+ <EntityTypeShape EntityType="RemoteModel.MACHINES_EVENTS" Width="1.5" PointX="11.25" PointY="57.125" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_CONDITIONS" Width="1.5" PointX="0.75" PointY="11" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_MATERIALS" Width="1.5" PointX="0.75" PointY="44.875" />
+ <EntityTypeShape EntityType="RemoteModel.MEDIA_PURPOSES" Width="1.5" PointX="0.75" PointY="35.375" />
+ <EntityTypeShape EntityType="RemoteModel.MID_TANK_TYPES" Width="1.5" PointX="3.75" PointY="38.875" />
+ <EntityTypeShape EntityType="RemoteModel.ORGANIZATION" Width="1.5" PointX="3.75" PointY="87.375" />
+ <EntityTypeShape EntityType="RemoteModel.PERMISSION" Width="1.5" PointX="12" PointY="13.5" />
+ <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES" Width="1.5" PointX="7.5" PointY="49" />
+ <EntityTypeShape EntityType="RemoteModel.PROCESS_PARAMETERS_TABLES_GROUPS" Width="1.5" PointX="5.25" PointY="55.25" />
+ <EntityTypeShape EntityType="RemoteModel.PUBLISHED_PROCEDURE_PROJECTS" Width="1.5" PointX="8.75" PointY="5" />
+ <EntityTypeShape EntityType="RemoteModel.PUBLISHED_PROCEDURE_PROJECTS_VERSIONS" Width="1.5" PointX="11" PointY="5.125" />
+ <EntityTypeShape EntityType="RemoteModel.RML_EXTENSION_TEST_WASHING_RESULTS" Width="1.5" PointX="11" PointY="1" />
+ <EntityTypeShape EntityType="RemoteModel.RML" Width="1.5" PointX="3" PointY="18.5" />
+ <EntityTypeShape EntityType="RemoteModel.RMLS_SPOOLS" Width="1.5" PointX="5.25" PointY="24.25" />
+ <EntityTypeShape EntityType="RemoteModel.ROLE" Width="1.5" PointX="12" PointY="17.5" />
+ <EntityTypeShape EntityType="RemoteModel.ROLES_PERMISSIONS" Width="1.5" PointX="14.25" PointY="17.5" />
+ <EntityTypeShape EntityType="RemoteModel.RUBBING_RESULTS" Width="1.5" PointX="5.75" PointY="10.75" />
+ <EntityTypeShape EntityType="RemoteModel.SEGMENT" Width="1.5" PointX="15.75" PointY="24.625" />
+ <EntityTypeShape EntityType="RemoteModel.SEGMENTS_GROUPS" Width="1.5" PointX="13.5" PointY="24.875" />
+ <EntityTypeShape EntityType="RemoteModel.SITE" Width="1.5" PointX="3" PointY="34.625" />
+ <EntityTypeShape EntityType="RemoteModel.SITES_CATALOGS" Width="1.5" PointX="5.25" PointY="17.375" />
+ <EntityTypeShape EntityType="RemoteModel.SITES_RMLS" Width="1.5" PointX="5.25" PointY="29" />
+ <EntityTypeShape EntityType="RemoteModel.SITES_SPOOL_TYPES" Width="1.5" PointX="14.25" PointY="20.875" />
+ <EntityTypeShape EntityType="RemoteModel.SPOOL_TYPES" Width="1.5" PointX="9" PointY="10.5" />
+ <EntityTypeShape EntityType="RemoteModel.SPOOL" Width="1.5" PointX="11.25" PointY="45.875" />
+ <EntityTypeShape EntityType="RemoteModel.sysdiagram" Width="1.5" PointX="14.75" PointY="11.75" />
+ <EntityTypeShape EntityType="RemoteModel.TANGO_UPDATES" Width="1.5" PointX="15.75" PointY="0.75" />
+ <EntityTypeShape EntityType="RemoteModel.TANGO_VERSIONS" Width="1.5" PointX="14.25" PointY="58" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_CONTROLLERS" Width="1.5" PointX="15.75" PointY="5.75" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_DISPENSERS" Width="1.5" PointX="16.75" PointY="9.75" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_HEATERS" Width="1.5" PointX="16.75" PointY="12.75" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_IOS" Width="1.5" PointX="16.75" PointY="15.75" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_MONITORS" Width="1.5" PointX="17.75" PointY="0.75" />
+ <EntityTypeShape EntityType="RemoteModel.TECH_VALVES" Width="1.5" PointX="17.75" PointY="5.75" />
+ <EntityTypeShape EntityType="RemoteModel.USER" Width="1.5" PointX="9" PointY="35.125" />
+ <EntityTypeShape EntityType="RemoteModel.USERS_ROLES" Width="1.5" PointX="14.25" PointY="36.5" />
+ <EntityTypeShape EntityType="RemoteModel.WASHING_TEST_MATERIALS" Width="1.5" PointX="8.75" PointY="1.5" />
+ <EntityTypeShape EntityType="RemoteModel.WINDING_METHODS" Width="1.5" PointX="9" PointY="32" />
<AssociationConnector Association="RemoteModel.FK_ACTION_LOGS_USERS" />
<AssociationConnector Association="RemoteModel.FK_ORGANIZATIONS_ADDRESSES" />
<AssociationConnector Association="RemoteModel.FK_USERS_ADDRESSES" />