aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/MachineStudio/Modules
diff options
context:
space:
mode:
authorVictoria Plitt <Victoria.Plitt@twine-s.com>2019-04-07 16:15:05 +0300
committerVictoria Plitt <Victoria.Plitt@twine-s.com>2019-04-07 16:15:05 +0300
commitb4a71931ea52636c6b36376aa9d71697ccf73524 (patch)
treed4b6db4671e4e7bf1f91d008798ae909462ed784 /Software/Visual_Studio/MachineStudio/Modules
parent4a9fb8a89a7fc48d9d3ecc9f24770c472834453d (diff)
parentdf349ae963176cb53ef7b924cfb53ba09d32bfaf (diff)
downloadTango-b4a71931ea52636c6b36376aa9d71697ccf73524.tar.gz
Tango-b4a71931ea52636c6b36376aa9d71697ccf73524.zip
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Visual_Studio/MachineStudio/Modules')
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/App.config75
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/ColorCaptureSettings.cs20
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Controls/IndexedUniformGrid.cs12
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Graph/WpfGraphController.cs2
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Models/BenchmarkItem.cs95
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Models/CaptureConfig.cs82
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Models/CaptureItem.cs31
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Tango.MachineStudio.ColorCapture.csproj22
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Themes/Generic.xaml8
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/ViewModels/MainViewVM.cs267
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Views/MainView.xaml626
-rw-r--r--Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/packages.config2
12 files changed, 1069 insertions, 173 deletions
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/App.config b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/App.config
index a6a2b7fa9..8b30e609b 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/App.config
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/App.config
@@ -1,2 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
-<configuration /> \ No newline at end of file
+<configuration>
+ <runtime>
+ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+ <dependentAssembly>
+ <assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-1.2.2.0" newVersion="1.2.2.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Reflection.Metadata" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-1.4.2.0" newVersion="1.4.2.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.IO.FileSystem" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.IO.FileSystem.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Security.Cryptography.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Xml.XPath.XDocument" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Console" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Diagnostics.StackTrace" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="Microsoft.Data.Services.Client" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="System.Reactive.Core" publicKeyToken="94bc3704cddfc263" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-3.0.3000.0" newVersion="3.0.3000.0" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="Microsoft.IdentityModel.Clients.ActiveDirectory" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-3.19.8.16603" newVersion="3.19.8.16603" />
+ </dependentAssembly>
+ <dependentAssembly>
+ <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
+ <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
+ </dependentAssembly>
+ </assemblyBinding>
+ </runtime>
+</configuration> \ No newline at end of file
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/ColorCaptureSettings.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/ColorCaptureSettings.cs
new file mode 100644
index 000000000..63ed247ef
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/ColorCaptureSettings.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.MachineStudio.ColorCapture.Models;
+using Tango.Settings;
+
+namespace Tango.MachineStudio.ColorCapture
+{
+ public class ColorCaptureSettings : SettingsBase
+ {
+ public CaptureConfig Config { get; set; }
+
+ public ColorCaptureSettings()
+ {
+ Config = new CaptureConfig();
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Controls/IndexedUniformGrid.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Controls/IndexedUniformGrid.cs
index af34e038d..93a5c07ab 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Controls/IndexedUniformGrid.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Controls/IndexedUniformGrid.cs
@@ -16,7 +16,7 @@ namespace Tango.MachineStudio.ColorCapture.Controls
set { SetValue(ColumnsProperty, value); }
}
public static readonly DependencyProperty ColumnsProperty =
- DependencyProperty.Register("Columns", typeof(int), typeof(IndexedUniformGrid), new PropertyMetadata(0));
+ DependencyProperty.Register("Columns", typeof(int), typeof(IndexedUniformGrid), new PropertyMetadata(0, (d, e) => (d as IndexedUniformGrid).Init()));
public int Rows
{
@@ -24,7 +24,7 @@ namespace Tango.MachineStudio.ColorCapture.Controls
set { SetValue(RowsProperty, value); }
}
public static readonly DependencyProperty RowsProperty =
- DependencyProperty.Register("Rows", typeof(int), typeof(IndexedUniformGrid), new PropertyMetadata(0));
+ DependencyProperty.Register("Rows", typeof(int), typeof(IndexedUniformGrid), new PropertyMetadata(0, (d, e) => (d as IndexedUniformGrid).Init()));
public IndexedUniformGrid()
{
@@ -33,6 +33,14 @@ namespace Tango.MachineStudio.ColorCapture.Controls
private void IndexedUniformGrid_Loaded(object sender, RoutedEventArgs e)
{
+ Init();
+ }
+
+ private void Init()
+ {
+ ColumnDefinitions.Clear();
+ RowDefinitions.Clear();
+
for (int i = 0; i < Columns; i++)
{
ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) });
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Graph/WpfGraphController.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Graph/WpfGraphController.cs
index dd32cde93..63ce7035e 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Graph/WpfGraphController.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Graph/WpfGraphController.cs
@@ -19,7 +19,7 @@ namespace Tango.MachineStudio.ColorCapture.Graph
AddDataSeries(new WpfDataSeries()
{
StrokeThickness = 1,
- Stroke = Colors.Black,
+ Stroke = Colors.DodgerBlue,
});
var renderer = new GraphScrollingRenderer<WpfDataSeries, DoubleDataPoint, DoubleDataPoint>()
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Models/BenchmarkItem.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Models/BenchmarkItem.cs
new file mode 100644
index 000000000..d7d33e437
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Models/BenchmarkItem.cs
@@ -0,0 +1,95 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Media;
+using Tango.Core;
+using Tango.PMR.TCC;
+
+namespace Tango.MachineStudio.ColorCapture.Models
+{
+ public class BenchmarkItem : ExtendedObject
+ {
+ private int _Red;
+ public int Red
+ {
+ get { return _Red; }
+ set { _Red = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(Color)); }
+ }
+
+ private int _Green;
+ public int Green
+ {
+ get { return _Green; }
+ set { _Green = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(Color)); }
+ }
+
+ private int _Blue;
+ public int Blue
+ {
+ get { return _Blue; }
+ set { _Blue = value; RaisePropertyChangedAuto(); RaisePropertyChanged(nameof(Color)); }
+ }
+
+ private double _L;
+ public double L
+ {
+ get { return _L; }
+ set { _L = value; RaisePropertyChangedAuto(); }
+ }
+
+ private double _A;
+ public double A
+ {
+ get { return _A; }
+ set { _A = value; RaisePropertyChangedAuto(); }
+ }
+
+ private double _B;
+ public double B
+ {
+ get { return _B; }
+ set { _B = value; RaisePropertyChangedAuto(); }
+ }
+
+ public int Index { get; private set; }
+
+ public Color Color
+ {
+ get { return Color.FromArgb(255, (byte)Red, (byte)Green, (byte)Blue); }
+ }
+
+ public static BenchmarkItem FromDetectionBenchmark(DetectionBenchmark benchmark, int index)
+ {
+ BenchmarkItem item = new BenchmarkItem();
+
+ item.Red = benchmark.Red;
+ item.Green = benchmark.Green;
+ item.Blue = benchmark.Blue;
+
+ item.L = benchmark.L;
+ item.A = benchmark.A;
+ item.B = benchmark.B;
+
+ item.Index = index;
+
+ return item;
+ }
+
+ public DetectionBenchmark ToDetectionBenchmark()
+ {
+ DetectionBenchmark item = new DetectionBenchmark();
+
+ item.Red = Red;
+ item.Green = Green;
+ item.Blue = Blue;
+
+ item.L = L;
+ item.A = A;
+ item.B = B;
+
+ return item;
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Models/CaptureConfig.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Models/CaptureConfig.cs
new file mode 100644
index 000000000..c1f5d4f48
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Models/CaptureConfig.cs
@@ -0,0 +1,82 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tango.Core;
+using Tango.Core.Helpers;
+
+namespace Tango.MachineStudio.ColorCapture.Models
+{
+ public class CaptureConfig : ExtendedObject
+ {
+ private int _columns;
+ public int Columns
+ {
+ get { return _columns; }
+ set { _columns = value; RaisePropertyChangedAuto(); }
+ }
+
+ private int _rows;
+ public int Rows
+ {
+ get { return _rows; }
+ set { _rows = value; RaisePropertyChangedAuto(); }
+ }
+
+ private int _targetIndex;
+ public int TargetIndex
+ {
+ get { return _targetIndex; }
+ set { _targetIndex = value; RaisePropertyChangedAuto(); }
+ }
+
+ private String _samplesFolder;
+ public String SamplesFolder
+ {
+ get { return _samplesFolder; }
+ set { _samplesFolder = value; RaisePropertyChangedAuto(); }
+ }
+
+ private String _benchmarksFile;
+ public String BenchmarksFile
+ {
+ get { return _benchmarksFile; }
+ set { _benchmarksFile = value; RaisePropertyChangedAuto(); }
+ }
+
+ private String _templateFile;
+ public String TemplateFile
+ {
+ get { return _templateFile; }
+ set { _templateFile = value; RaisePropertyChangedAuto(); }
+ }
+
+ private int _sampleWidth;
+ public int SampleWidth
+ {
+ get { return _sampleWidth; }
+ set { _sampleWidth = value; RaisePropertyChangedAuto(); }
+ }
+
+ private int _sampleHeight;
+ public int SampleHeight
+ {
+ get { return _sampleHeight; }
+ set { _sampleHeight = value; RaisePropertyChangedAuto(); }
+ }
+
+ public CaptureConfig()
+ {
+ Columns = 10;
+ Rows = 11;
+ TargetIndex = 89;
+ SampleWidth = 300;
+ SampleHeight = 330;
+ SamplesFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Twine", "Tango", "TCC Samples");
+ BenchmarksFile = Path.Combine(AssemblyHelper.GetCurrentAssemblyFolder(), "TCC", "benchmarks_rgb_lab.csv");
+ TemplateFile = Path.Combine(AssemblyHelper.GetCurrentAssemblyFolder(), "TCC", "template.bmp");
+ }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Models/CaptureItem.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Models/CaptureItem.cs
new file mode 100644
index 000000000..66fe7d7af
--- /dev/null
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Models/CaptureItem.cs
@@ -0,0 +1,31 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Media;
+
+namespace Tango.MachineStudio.ColorCapture.Models
+{
+ public class CaptureItem
+ {
+ public DateTime Time { get; set; }
+
+ [JsonIgnore]
+ public String Folder { get; set; }
+
+ [JsonIgnore]
+ public String Image { get; set; }
+
+ public Color CapturedColor { get; set; }
+ public Color ProcessedColor { get; set; }
+ public Color RefColor { get; set; }
+
+ public double RefL { get; set; }
+ public double RefA { get; set; }
+ public double RefB { get; set; }
+
+ public double DeltaE { get; set; }
+ }
+}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Tango.MachineStudio.ColorCapture.csproj b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Tango.MachineStudio.ColorCapture.csproj
index 4d0c0fae5..1679f2af9 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Tango.MachineStudio.ColorCapture.csproj
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Tango.MachineStudio.ColorCapture.csproj
@@ -53,6 +53,15 @@
<Reference Include="Microsoft.Practices.ServiceLocation, Version=1.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\..\..\packages\CommonServiceLocator.1.3\lib\portable-net4+sl5+netcore45+wpa81+wp8\Microsoft.Practices.ServiceLocation.dll</HintPath>
</Reference>
+ <Reference Include="Microsoft.WindowsAPICodePack.Shell, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\Microsoft.WindowsAPICodePack-Shell.1.1.0.0\lib\Microsoft.WindowsAPICodePack.Shell.dll</HintPath>
+ </Reference>
+ <Reference Include="Microsoft.WindowsAPICodePack.ShellExtensions, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\Microsoft.WindowsAPICodePack-Shell.1.1.0.0\lib\Microsoft.WindowsAPICodePack.ShellExtensions.dll</HintPath>
+ </Reference>
+ <Reference Include="Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+ <HintPath>..\..\..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
+ </Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Data" />
@@ -87,10 +96,14 @@
<Compile Include="..\..\..\Versioning\GlobalVersionInfo.cs">
<Link>GlobalVersionInfo.cs</Link>
</Compile>
+ <Compile Include="ColorCaptureSettings.cs" />
<Compile Include="ColorLabModule.cs" />
<Compile Include="Controls\ColorMatrixControl.cs" />
<Compile Include="Controls\IndexedUniformGrid.cs" />
<Compile Include="Graph\WpfGraphController.cs" />
+ <Compile Include="Models\BenchmarkItem.cs" />
+ <Compile Include="Models\CaptureConfig.cs" />
+ <Compile Include="Models\CaptureItem.cs" />
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
@@ -113,6 +126,7 @@
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
+ <None Include="App.config" />
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
@@ -140,6 +154,14 @@
<Project>{a34ee0f0-649d-41c8-8489-b6f1cc6924ee}</Project>
<Name>Tango.Core</Name>
</ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.CSV\Tango.CSV.csproj">
+ <Project>{58e8825f-0c96-449c-b320-1e82b0aa876b}</Project>
+ <Name>Tango.CSV</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\..\..\Tango.Logging\Tango.Logging.csproj">
+ <Project>{bc932dbd-7cdb-488c-99e4-f02cf441f55e}</Project>
+ <Name>Tango.Logging</Name>
+ </ProjectReference>
<ProjectReference Include="..\..\..\Tango.PMR\Tango.PMR.csproj">
<Project>{e4927038-348d-4295-aaf4-861c58cb3943}</Project>
<Name>Tango.PMR</Name>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Themes/Generic.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Themes/Generic.xaml
index 0a2ebbca8..87a3f1bf2 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Themes/Generic.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Themes/Generic.xaml
@@ -30,10 +30,10 @@
</ItemsControl.ItemTemplate>
</ItemsControl>
<controls:IndexedUniformGrid Columns="{TemplateBinding Columns}" Rows="{TemplateBinding Rows}">
- <Image Source="Images/topLeft.bmp" Stretch="Fill" Grid.Column="0" Grid.Row="0" />
- <Image Source="Images/topRight.bmp" Stretch="Fill" Grid.Column="{TemplateBinding Columns}" Grid.Row="0" />
- <Image Source="Images/bottomLeft.bmp" Stretch="Fill" Grid.Column="0" Grid.Row="{TemplateBinding Rows}" />
- <Image Source="Images/bottomRight.bmp" Stretch="Fill" Grid.Column="{TemplateBinding Columns}" Grid.Row="{TemplateBinding Rows}" />
+ <Image Source="/Tango.MachineStudio.ColorCapture;component/Images/topLeft.bmp" Stretch="Fill" Grid.Column="0" Grid.Row="0" />
+ <Image Source="/Tango.MachineStudio.ColorCapture;component/Images/topRight.bmp" Stretch="Fill" Grid.Column="{TemplateBinding Columns}" Grid.Row="0" />
+ <Image Source="/Tango.MachineStudio.ColorCapture;component/Images/bottomLeft.bmp" Stretch="Fill" Grid.Column="0" Grid.Row="{TemplateBinding Rows}" />
+ <Image Source="/Tango.MachineStudio.ColorCapture;component/Images/bottomRight.bmp" Stretch="Fill" Grid.Column="{TemplateBinding Columns}" Grid.Row="{TemplateBinding Rows}" />
</controls:IndexedUniformGrid>
</Grid>
</Border>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/ViewModels/MainViewVM.cs
index f21c403de..5b9d20bc4 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/ViewModels/MainViewVM.cs
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/ViewModels/MainViewVM.cs
@@ -1,19 +1,28 @@
using ColorMine.ColorSpaces;
using ColorMine.ColorSpaces.Comparisons;
+using Microsoft.Win32;
+using Microsoft.WindowsAPICodePack.Dialogs;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
+using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using System.Windows.Media.Imaging;
+using Tango.Core;
using Tango.Core.Commands;
+using Tango.CSV;
+using Tango.Logging;
using Tango.MachineStudio.ColorCapture.Graph;
+using Tango.MachineStudio.ColorCapture.Models;
using Tango.MachineStudio.Common;
using Tango.MachineStudio.Common.Notifications;
using Tango.MachineStudio.Common.Video;
+using Tango.PMR.TCC;
+using Tango.Settings;
using Tango.TCC.BL;
using Tango.Video.DirectCapture;
@@ -24,6 +33,10 @@ namespace Tango.MachineStudio.ColorCapture.ViewModels
private INotificationProvider _notification;
private CardDetector _cardDetector;
private int _sampleCounter;
+ private bool _abort;
+ private BitmapSource _last_original_source;
+ private DetectionOutput _last_detection_output;
+ private byte[] templateBitmap;
public IVideoCaptureProvider VideoProvider { get; set; }
@@ -44,7 +57,7 @@ namespace Tango.MachineStudio.ColorCapture.ViewModels
public BitmapSource DetectedSource
{
get { return _detectedSource; }
- set { _detectedSource = value; RaisePropertyChangedAuto(); }
+ set { _detectedSource = value; RaisePropertyChangedAuto(); InvokeUI(() => CreateSnapshotCommand.RaiseCanExecuteChanged()); }
}
private ObservableCollection<Color> _colors;
@@ -89,18 +102,60 @@ namespace Tango.MachineStudio.ColorCapture.ViewModels
set { _measureB = value; RaisePropertyChangedAuto(); }
}
+ public double DeltaE { get; set; }
public WpfGraphController CaptureDeltaEController { get; set; }
public RelayCommand ToggleCameraCommand { get; set; }
+ public SynchronizedObservableCollection<CaptureItem> CaptureItems { get; set; }
+
+ private ObservableCollection<BenchmarkItem> _benchmarks;
+ public ObservableCollection<BenchmarkItem> Benchmarks
+ {
+ get { return _benchmarks; }
+ set { _benchmarks = value; RaisePropertyChangedAuto(); }
+ }
+
+ private CaptureConfig _config;
+ public CaptureConfig Config
+ {
+ get { return _config; }
+ set { _config = value; RaisePropertyChangedAuto(); }
+ }
+
+ public RelayCommand ImportBenchmarksCommand { get; set; }
+
+ public RelayCommand ExportBenchmarksCommand { get; set; }
+
+ public RelayCommand CreateSnapshotCommand { get; set; }
+
+ public RelayCommand<CaptureItem> OpenCaptureItemCommand { get; set; }
+
+ public RelayCommand SelectSamplesFolderCommand { get; set; }
+
+ public RelayCommand SelectBenchmarksFileCommand { get; set; }
+
+ public RelayCommand SelectTemplateFileCommand { get; set; }
+
public MainViewVM()
{
+ Config = new CaptureConfig();
+ CaptureItems = new SynchronizedObservableCollection<CaptureItem>();
+ Benchmarks = new ObservableCollection<BenchmarkItem>();
_cardDetector = new CardDetector();
ToggleCameraCommand = new RelayCommand(ToggleCamera);
CaptureDeltaEController = new WpfGraphController();
CaptureDeltaEController.Range.AutoY = true;
CaptureDeltaEController.Range.MaximumX = 1000;
+
+ ImportBenchmarksCommand = new RelayCommand(OpenBenchmarksFile);
+ ExportBenchmarksCommand = new RelayCommand(SaveBenchmarksFile);
+ CreateSnapshotCommand = new RelayCommand(CreateSnapshot, () => DetectedSource != null);
+ OpenCaptureItemCommand = new RelayCommand<CaptureItem>(OpenCaptureItem);
+ SelectSamplesFolderCommand = new RelayCommand(SelectSamplesFolder);
+ SelectBenchmarksFileCommand = new RelayCommand(SelectBenchmarkFile);
+ SelectTemplateFileCommand = new RelayCommand(SelectTemplateFile);
}
public MainViewVM(IVideoCaptureProvider videoProvider, INotificationProvider notificationProvider) : this()
@@ -110,16 +165,165 @@ namespace Tango.MachineStudio.ColorCapture.ViewModels
SelectedVideoDevice = videoProvider.AvailableCaptureDevices.FirstOrDefault();
}
+ private void SelectTemplateFile()
+ {
+ OpenFileDialog dlg = new OpenFileDialog();
+ dlg.Filter = "Bitmap Files|*.bmp";
+ if (dlg.ShowDialog().Value)
+ {
+ templateBitmap = File.ReadAllBytes(Config.TemplateFile);
+ Config.TemplateFile = dlg.FileName;
+ }
+ }
+
+ private void SelectBenchmarkFile()
+ {
+ OpenBenchmarksFile();
+ }
+
+ private void SelectSamplesFolder()
+ {
+ CommonOpenFileDialog dlg = new CommonOpenFileDialog();
+ dlg.Title = "Select samples folder.";
+ dlg.IsFolderPicker = true;
+ if (dlg.ShowDialog() == CommonFileDialogResult.Ok)
+ {
+ Config.SamplesFolder = dlg.FileName;
+ }
+ }
+
+ private void OpenCaptureItem(CaptureItem item)
+ {
+ using (_notification.PushTaskItem("Opening snapshot folder..."))
+ {
+ Process.Start("explorer.exe", string.Format("/select,\"{0}\"", item.Image));
+ }
+ }
+
+ private void CreateSnapshot()
+ {
+ try
+ {
+ DateTime now = DateTime.Now;
+
+ Directory.CreateDirectory(Config.SamplesFolder);
+
+ String sample_folder = Config.SamplesFolder + "\\" + now.ToFileName();
+ Directory.CreateDirectory(sample_folder);
+
+ String rectified_file = sample_folder + "\\rectified.bmp";
+ DetectedSource.SaveBmpFile(rectified_file);
+
+ String original_file = sample_folder + "\\source.bmp";
+ _last_original_source.SaveBmpFile(original_file);
+
+ String means_file = sample_folder + "\\means.bmp";
+ var bitmap = ColorDetector.DetectionOutputToImage(new DetectionInput()
+ {
+ Columns = Config.Columns,
+ Rows = Config.Rows,
+ TargetIndex = Config.TargetIndex
+
+ }, _last_detection_output, Config.SampleWidth, Config.SampleHeight);
+
+ bitmap.Save(means_file);
+
+ String capture_item_file = sample_folder + "\\info.txt";
+
+ var rgb = new Lab(MeasureL, _measureA, _measureB).ToRgb();
+ Color refColor = Color.FromArgb(255, (byte)rgb.R, (byte)rgb.G, (byte)rgb.B);
+
+ var captureItem = new CaptureItem()
+ {
+ Image = rectified_file,
+ CapturedColor = CapturedColor,
+ ProcessedColor = ProcessedColor,
+ RefColor = refColor,
+ DeltaE = DeltaE,
+ RefL = MeasureL,
+ RefA = MeasureA,
+ RefB = MeasureB,
+ Time = now,
+ Folder = sample_folder,
+ };
+
+ File.WriteAllText(capture_item_file, captureItem.ToJsonString());
+
+ CaptureItems.Insert(0, captureItem);
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error in color capture snapshot save method.");
+ _notification.ShowError($"An error occurred while trying to create the snapshot. Please try again.\n{ex.Message}");
+ }
+ }
+
+ private void SaveBenchmarksFile()
+ {
+ SaveFileDialog dlg = new SaveFileDialog();
+ dlg.Filter = "CSV Files|*.csv";
+ if (dlg.ShowDialog().Value)
+ {
+ try
+ {
+ ExportBenchmarks(dlg.FileName);
+ _notification.ShowInfo("Benchmarks successfully saved.");
+ }
+ catch (Exception ex)
+ {
+ _notification.ShowError($"An error occurred while trying to export the benchmark file.\n{ex.FlattenMessage()}");
+ }
+ }
+ }
+
+ private void OpenBenchmarksFile()
+ {
+ OpenFileDialog dlg = new OpenFileDialog();
+ dlg.Filter = "CSV Files|*.csv";
+ if (dlg.ShowDialog().Value)
+ {
+ try
+ {
+ ImportBenchmarks(dlg.FileName);
+ _notification.ShowInfo("Benchmarks successfully loaded.");
+ }
+ catch (Exception ex)
+ {
+ _notification.ShowError($"An error occurred while trying to import the benchmark file.\n{ex.FlattenMessage()}");
+ }
+ }
+ }
+
+ private void ExportBenchmarks(String file)
+ {
+ ColorDetector.SaveBenchmarks(file, Benchmarks.ToList().Select(x => x.ToDetectionBenchmark()));
+ }
+
+ private void ImportBenchmarks(String file)
+ {
+ var marks = ColorDetector.LoadBenchmarks(file).ToList();
+ var benchmarks = marks.Select(x => BenchmarkItem.FromDetectionBenchmark(x, marks.IndexOf(x))).ToList();
+ Benchmarks = new ObservableCollection<BenchmarkItem>(benchmarks);
+ Config.BenchmarksFile = file;
+ }
+
private void ToggleCamera()
{
if (SelectedVideoDevice != null)
{
if (SelectedVideoDevice.IsStarted)
{
+ _abort = true;
SelectedVideoDevice.Stop();
+ ProcessedColor = System.Windows.Media.Colors.Transparent;
+ CapturedColor = System.Windows.Media.Colors.Transparent;
+ Colors = null;
+ DetectedSource = null;
+ CaptureDeltaEController.Clear();
}
else
{
+ _abort = false;
SelectedVideoDevice.Resolution = new Resolution(1280, 720);
SelectedVideoDevice.Start();
}
@@ -140,15 +344,28 @@ namespace Tango.MachineStudio.ColorCapture.ViewModels
}
}
- double deltaE = 0;
private async void OnVideoFrameReceived(object sender, Video.DirectShow.EventArguments.FrameReceivedEventArgs args)
{
+ if (_abort) return;
+
if (_cardDetector.CanDetect)
{
- var result = await _cardDetector.Detect(args.BitmapSource);
+ var result = await _cardDetector.Detect(args.BitmapSource, new CardDetectionConfig()
+ {
+ Benchmarks = Benchmarks.ToList().Select(x => x.ToDetectionBenchmark()).ToList(),
+ Columns = Config.Columns,
+ Rows = Config.Rows,
+ DesiredBitmapWidth = Config.SampleWidth,
+ DesiredBitmapHeight = Config.SampleHeight,
+ TargetIndex = Config.TargetIndex,
+ TemplateBitmapBytes = templateBitmap,
+ });
if (result.IsDetected)
{
+ _last_original_source = result.Source;
+ _last_detection_output = result.ColorDetectionOutput;
+
DetectedSource = result.DetectedBitmap;
if (Colors == null)
@@ -166,20 +383,54 @@ namespace Tango.MachineStudio.ColorCapture.ViewModels
CapturedColor = Color.FromArgb(255, (byte)result.ColorDetectionOutput.RawColor.R, (byte)result.ColorDetectionOutput.RawColor.G, (byte)result.ColorDetectionOutput.RawColor.B);
ProcessedColor = Color.FromArgb(255, (byte)result.ColorDetectionOutput.ProcessedColor.R, (byte)result.ColorDetectionOutput.ProcessedColor.G, (byte)result.ColorDetectionOutput.ProcessedColor.B);
- });
- //calculate delta E.
- Lab measureLab = new Lab(MeasureL, MeasureA, MeasureB);
- deltaE = measureLab.Compare(new Rgb(ProcessedColor.R, ProcessedColor.G, ProcessedColor.B), new CieDe2000Comparison());
+ //calculate delta E.
+ Lab measureLab = new Lab(MeasureL, MeasureA, MeasureB);
+ DeltaE = measureLab.Compare(new Rgb(ProcessedColor.R, ProcessedColor.G, ProcessedColor.B), new CieDe2000Comparison());
+ });
}
}
- CaptureDeltaEController.PushData(_sampleCounter++, deltaE);
+ CaptureDeltaEController.PushData(_sampleCounter++, DeltaE);
}
public override void OnApplicationReady()
{
+ Config = SettingsManager.Default.GetOrCreate<ColorCaptureSettings>().Config;
+
+ //Load benchmarks.
+ if (File.Exists(Config.BenchmarksFile))
+ {
+ try
+ {
+ ImportBenchmarks(Config.BenchmarksFile);
+ }
+ catch (Exception ex)
+ {
+ LogManager.Log(ex, "Error loading benchmarks.");
+ }
+ }
+ else
+ {
+ LogManager.Log("Could not locate benchmarks csv file.", LogCategory.Warning);
+ }
+
+ //Load template bitmap.
+ if (File.Exists(Config.TemplateFile))
+ {
+ templateBitmap = File.ReadAllBytes(Config.TemplateFile);
+ }
+ else
+ {
+ LogManager.Log("Could not locate template bitmap file.", LogCategory.Warning);
+ }
+ }
+ public override void OnShuttingDown()
+ {
+ base.OnShuttingDown();
+ SettingsManager.Default.GetOrCreate<ColorCaptureSettings>().Config = Config;
+ SettingsManager.Default.Save();
}
}
}
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Views/MainView.xaml
index 259e3160e..c1555fbcd 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Views/MainView.xaml
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/Views/MainView.xaml
@@ -10,190 +10,502 @@
xmlns:graphX="clr-namespace:RealTimeGraphX.WPF.Surfaces;assembly=RealTimeGraphX.WPF"
xmlns:componentsX="clr-namespace:RealTimeGraphX.WPF.Components;assembly=RealTimeGraphX.WPF"
xmlns:controls="clr-namespace:Tango.MachineStudio.ColorCapture.Controls"
+ xmlns:sharedControls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI"
xmlns:realtimeGraphX="clr-namespace:RealTimeGraphX.WPF.Surfaces;assembly=RealTimeGraphX.WPF"
xmlns:global="clr-namespace:Tango.MachineStudio.ColorCapture"
xmlns:local="clr-namespace:Tango.MachineStudio.ColorCapture.Views"
mc:Ignorable="d"
- d:DesignHeight="1080" d:DesignWidth="1920" Background="Transparent" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}">
- <Grid Margin="20">
- <Grid.RowDefinitions>
- <RowDefinition Height="247*"/>
- <RowDefinition Height="113*"/>
- </Grid.RowDefinitions>
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="1*"/>
- <ColumnDefinition Width="1*"/>
- </Grid.ColumnDefinitions>
+ d:DesignHeight="1080" d:DesignWidth="1920" Background="#202020" Foreground="#BBBBBB" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}">
+
+ <UserControl.Resources>
+ <SolidColorBrush x:Key="Foreground" Color="#BBBBBB" />
+ <SolidColorBrush x:Key="Background" Color="#202020" />
+ <SolidColorBrush x:Key="Accent" Color="{StaticResource AccentColor}" />
+ <SolidColorBrush x:Key="Red" Color="#FF5F5F" />
+ <SolidColorBrush x:Key="Green" Color="#68E46E" />
+ <SolidColorBrush x:Key="Blue" Color="#64B8EC" />
+ <SolidColorBrush x:Key="BorderBrush" Color="#3E3E3E" />
+ <SolidColorBrush x:Key="LightBackground" Color="#303030" />
+ </UserControl.Resources>
- <Border RenderOptions.BitmapScalingMode="Fant">
+ <Grid Margin="20">
+ <TabControl Background="{StaticResource Background}" Foreground="{StaticResource Foreground}">
+ <TabControl.Resources>
+ <Style TargetType="TabPanel">
+ <Setter Property="HorizontalAlignment" Value="Center"/>
+ </Style>
+ <Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}">
+ <Setter Property="Padding" Value="20,2"></Setter>
+ </Style>
+ </TabControl.Resources>
+ <TabItem Header="CAPTURE" Foreground="{StaticResource Foreground}">
+ <TabItem.HeaderTemplate>
+ <DataTemplate>
+ <TextBlock Text="{Binding}" FontSize="25" VerticalAlignment="Center">
+ <TextBlock.Style>
+ <Style TargetType="TextBlock">
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TabItem},Path=IsSelected}" Value="True">
+ <Setter Property="Foreground" Value="{StaticResource Accent}"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </TextBlock.Style>
+ </TextBlock>
+ </DataTemplate>
+ </TabItem.HeaderTemplate>
<Grid>
- <DockPanel>
- <DockPanel DockPanel.Dock="Bottom" Margin="60 0" TextElement.FontSize="25">
- <TextBlock VerticalAlignment="Center">Capture Device</TextBlock>
- <Button DockPanel.Dock="Right" Command="{Binding ToggleCameraCommand}" CommandParameter="{Binding}" Style="{StaticResource MaterialDesignFloatingActionMiniButton}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Width="60" Height="60" Padding="0">
- <materialDesign:PackIcon Width="40" Height="40">
- <materialDesign:PackIcon.Style>
- <Style TargetType="materialDesign:PackIcon">
- <Setter Property="Kind" Value="Play"></Setter>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="600"/>
+ <RowDefinition Height="1*"/>
+ </Grid.RowDefinitions>
+ <Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="800"/>
+ <ColumnDefinition Width="1*"/>
+ </Grid.ColumnDefinitions>
+
+ <Border RenderOptions.BitmapScalingMode="Fant">
+ <Grid>
+ <DockPanel>
+ <DockPanel DockPanel.Dock="Top" TextElement.FontSize="16">
+ <TextBlock VerticalAlignment="Center" Foreground="{StaticResource AccentColorBrush}" FontWeight="SemiBold">Capture Device</TextBlock>
+ <Button DockPanel.Dock="Right" Command="{Binding ToggleCameraCommand}" CommandParameter="{Binding}" Style="{StaticResource MaterialDesignFlatButton}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Width="50" Height="50" Padding="0">
+ <materialDesign:PackIcon Width="40" Height="40">
+ <materialDesign:PackIcon.Style>
+ <Style TargetType="materialDesign:PackIcon">
+ <Setter Property="Kind" Value="Play"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding SelectedVideoDevice.IsStarted}" Value="True">
+ <Setter Property="Kind" Value="Stop"></Setter>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding SelectedVideoDevice.IsStarted}" Value="False">
+ <Setter Property="Kind" Value="Play"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </materialDesign:PackIcon.Style>
+ </materialDesign:PackIcon>
+ </Button>
+ <ComboBox FontWeight="SemiBold" Margin="20 0" ItemsSource="{Binding VideoProvider.AvailableCaptureDevices}" SelectedItem="{Binding SelectedVideoDevice}" DisplayMemberPath="Device" BorderBrush="{StaticResource Foreground}"></ComboBox>
+ </DockPanel>
+
+ <Border Padding="2" Background="{StaticResource LightBackground}" BorderThickness="1" BorderBrush="{StaticResource Accent}" Margin="0 10 0 0">
+ <Image Source="{Binding SelectedVideoDevice.VideoSource,Mode=OneWay,IsAsync=True}" Stretch="Fill">
+ <Image.Style>
+ <Style TargetType="Image">
+ <Setter Property="Visibility" Value="Hidden"></Setter>
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding SelectedVideoDevice.IsStarted}" Value="True">
+ <Setter Property="Visibility" Value="Visible"></Setter>
+ </DataTrigger>
+ <DataTrigger Binding="{Binding SelectedVideoDevice.IsStarted}" Value="False">
+ <Setter Property="Visibility" Value="Hidden"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </Image.Style>
+ </Image>
+ </Border>
+ </DockPanel>
+ </Grid>
+ </Border>
+
+ <Grid Grid.Column="1" Margin="200 60 0 0" HorizontalAlignment="Left">
+ <Grid.RowDefinitions>
+ <RowDefinition Height="180*"/>
+ <RowDefinition Height="130*"/>
+ </Grid.RowDefinitions>
+ <Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="500"/>
+ <ColumnDefinition Width="1*"/>
+ </Grid.ColumnDefinitions>
+
+ <TextBlock Margin="0 -20 0 0" FontWeight="SemiBold" Foreground="{StaticResource Accent}">Rectified Image</TextBlock>
+ <Border Padding="2" Background="{StaticResource LightBackground}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="300" Height="310" BorderThickness="1" BorderBrush="{StaticResource Accent}">
+ <Image Source="{Binding DetectedSource,Mode=OneWay,IsAsync=True}" Stretch="Fill"></Image>
+ </Border>
+
+ <TextBlock Grid.Column="1" Margin="0 -20 0 0" FontWeight="SemiBold" Foreground="{StaticResource Accent}">Calculated Averages</TextBlock>
+ <Border Padding="2" HorizontalAlignment="Left" Grid.Column="1" VerticalAlignment="Top" Width="300" Height="310" BorderThickness="1" BorderBrush="{StaticResource Accent}">
+ <controls:ColorMatrixControl Colors="{Binding Colors,Mode=OneWay}" Columns="10" Rows="11" Background="{StaticResource LightBackground}" />
+ </Border>
+ </Grid>
+
+ <Grid Grid.Row="1">
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="500"/>
+ <ColumnDefinition Width="1*"/>
+ </Grid.ColumnDefinitions>
+
+ <Grid Height="120" VerticalAlignment="Top" HorizontalAlignment="Left">
+ <DockPanel>
+ <TextBlock Margin="0 10 0 0" DockPanel.Dock="Top" Foreground="{StaticResource AccentColorBrush}" FontWeight="SemiBold" FontSize="16">Captured Color</TextBlock>
+ <DockPanel Margin="0 5 0 0" TextElement.FontSize="16">
+ <UniformGrid DockPanel.Dock="Right" Rows="3" Margin="10 0 0 0" Width="55">
+ <TextBlock Foreground="{StaticResource Red}"><Run Text="R:"></Run> <Run FontWeight="SemiBold" FontStyle="Italic" Text="{Binding CapturedColor.R,Mode=OneWay}"></Run></TextBlock>
+ <TextBlock Foreground="{StaticResource Green}"><Run Text="G:"></Run> <Run FontWeight="SemiBold" FontStyle="Italic" Text="{Binding CapturedColor.G,Mode=OneWay}"></Run></TextBlock>
+ <TextBlock Foreground="{StaticResource Blue}"><Run Text="B:"></Run> <Run FontWeight="SemiBold" FontStyle="Italic" Text="{Binding CapturedColor.B,Mode=OneWay}"></Run></TextBlock>
+ </UniformGrid>
+ <Border Padding="2" Width="300" BorderThickness="1" BorderBrush="{StaticResource Accent}" Background="{StaticResource LightBackground}">
+ <Rectangle>
+ <Rectangle.Fill>
+ <SolidColorBrush Color="{Binding CapturedColor,Mode=OneWay}" />
+ </Rectangle.Fill>
+ </Rectangle>
+ </Border>
+ </DockPanel>
+ </DockPanel>
+ </Grid>
+
+ <Grid Height="120" HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Column="1">
+ <DockPanel>
+ <TextBlock Margin="0 10 0 0" DockPanel.Dock="Top" Foreground="{StaticResource AccentColorBrush}" FontWeight="SemiBold" FontSize="16">Processed Color</TextBlock>
+ <DockPanel Margin="0 5 0 0" TextElement.FontSize="16">
+ <UniformGrid DockPanel.Dock="Right" Rows="3" Margin="10 0 0 0" Width="55">
+ <TextBlock Foreground="{StaticResource Red}"><Run Text="R:"></Run> <Run FontWeight="SemiBold" FontStyle="Italic" Text="{Binding ProcessedColor.R,Mode=OneWay}"></Run></TextBlock>
+ <TextBlock Foreground="{StaticResource Green}"><Run Text="G:"></Run> <Run FontWeight="SemiBold" FontStyle="Italic" Text="{Binding ProcessedColor.G,Mode=OneWay}"></Run></TextBlock>
+ <TextBlock Foreground="{StaticResource Blue}"><Run Text="B:"></Run> <Run FontWeight="SemiBold" FontStyle="Italic" Text="{Binding ProcessedColor.B,Mode=OneWay}"></Run></TextBlock>
+ </UniformGrid>
+ <Border Padding="2" Width="300" BorderThickness="1" BorderBrush="{StaticResource Accent}" Background="{StaticResource LightBackground}">
+ <Rectangle>
+ <Rectangle.Fill>
+ <SolidColorBrush Color="{Binding ProcessedColor,Mode=OneWay}" />
+ </Rectangle.Fill>
+ </Rectangle>
+ </Border>
+ </DockPanel>
+ </DockPanel>
+ </Grid>
+
+ <DockPanel VerticalAlignment="Bottom" Grid.ColumnSpan="2" TextElement.FontSize="16">
+ <TextBlock HorizontalAlignment="Center" Foreground="{StaticResource AccentColorBrush}" FontWeight="SemiBold" FontSize="16">Delta E Reference Point</TextBlock>
+ <UniformGrid Columns="3" Margin="20 0 70 0">
+ <DockPanel>
+ <TextBlock FontWeight="SemiBold">L:</TextBlock>
+ <mahapps:NumericUpDown BorderBrush="{StaticResource BorderBrush}" MinWidth="120" HorizontalContentAlignment="Left" Value="{Binding MeasureL,UpdateSourceTrigger=PropertyChanged}" Minimum="0" Maximum="100" Margin="5 0 0 0" HasDecimals="True" HideUpDownButtons="True" Background="{StaticResource LightBackground}" FontSize="16" Foreground="{StaticResource Accent}" BorderThickness="1" />
+ </DockPanel>
+
+ <DockPanel>
+ <TextBlock Margin="20 0 0 0" FontWeight="SemiBold">A:</TextBlock>
+ <mahapps:NumericUpDown BorderBrush="{StaticResource BorderBrush}" MinWidth="120" HorizontalContentAlignment="Left" Value="{Binding MeasureA,UpdateSourceTrigger=PropertyChanged}" Minimum="-127" Maximum="128" Margin="5 0 0 0" HasDecimals="True" HideUpDownButtons="True" Background="{StaticResource LightBackground}" FontSize="16" Foreground="{StaticResource Accent}" BorderThickness="1" />
+ </DockPanel>
+
+ <DockPanel>
+ <TextBlock Margin="20 0 0 0" FontWeight="SemiBold">B:</TextBlock>
+ <mahapps:NumericUpDown BorderBrush="{StaticResource BorderBrush}" MinWidth="120" HorizontalContentAlignment="Left" Value="{Binding MeasureB,UpdateSourceTrigger=PropertyChanged}" Minimum="-127" Maximum="128" Margin="5 0 0 0" HasDecimals="True" HideUpDownButtons="True" Background="{StaticResource LightBackground}" FontSize="16" Foreground="{StaticResource Accent}" BorderThickness="1" />
+ </DockPanel>
+ </UniformGrid>
+ </DockPanel>
+ </Grid>
+ </Grid>
+ </Grid>
+
+ <Grid Grid.Row="1" Margin="0 40 0 0">
+ <Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="800"/>
+ <ColumnDefinition Width="1*"/>
+ </Grid.ColumnDefinitions>
+ <DockPanel>
+ <DockPanel DockPanel.Dock="Top" LastChildFill="False">
+ <TextBlock VerticalAlignment="Center" DockPanel.Dock="Left" Foreground="{StaticResource AccentColorBrush}" FontWeight="SemiBold" FontSize="16">Snapshots</TextBlock>
+ <Button Command="{Binding CreateSnapshotCommand}" Height="35" DockPanel.Dock="Right" Style="{StaticResource MaterialDesignFlatButton}" BorderBrush="{StaticResource Accent}" BorderThickness="1">
+ <StackPanel Orientation="Horizontal">
+ <materialDesign:PackIcon Kind="ChevronDoubleDown" VerticalAlignment="Center" />
+ <TextBlock Margin="10 0 0 0">Create Snapshot</TextBlock>
+ </StackPanel>
+ </Button>
+ </DockPanel>
+ <sharedControls:DoubleClickDataGrid DoubleClickCommand="{Binding OpenCaptureItemCommand}" Style="{StaticResource {x:Type DataGrid}}" ItemsSource="{Binding CaptureItems}" GridLinesVisibility="None" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserSortColumns="False" IsReadOnly="True" Margin="0 10 0 0" Background="{StaticResource LightBackground}" Grid.ColumnSpan="2" TextElement.Foreground="Gainsboro" BorderBrush="{StaticResource Accent}" BorderThickness="1">
+ <DataGrid.RowStyle>
+ <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
+ <Setter Property="Foreground" Value="{StaticResource Foreground}"></Setter>
+ <Setter Property="BorderBrush" Value="#202020"></Setter>
+ <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
+ <Setter Property="BorderThickness" Value="0 0 0 1"></Setter>
<Style.Triggers>
- <DataTrigger Binding="{Binding SelectedVideoDevice.IsStarted}" Value="True">
- <Setter Property="Kind" Value="Stop"></Setter>
- </DataTrigger>
- <DataTrigger Binding="{Binding SelectedVideoDevice.IsStarted}" Value="False">
- <Setter Property="Kind" Value="Play"></Setter>
- </DataTrigger>
+ <Trigger Property="IsMouseOver" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" />
+ <Setter Property="Cursor" Value="Hand"></Setter>
+ </Trigger>
+ <Trigger Property="IsSelected" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" />
+ </Trigger>
+ <Trigger Property="IsFocused" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" />
+ </Trigger>
</Style.Triggers>
</Style>
- </materialDesign:PackIcon.Style>
- </materialDesign:PackIcon>
- </Button>
- <ComboBox FontWeight="SemiBold" Margin="20 0 20 0" ItemsSource="{Binding VideoProvider.AvailableCaptureDevices}" SelectedItem="{Binding SelectedVideoDevice}" DisplayMemberPath="Device"></ComboBox>
- </DockPanel>
+ </DataGrid.RowStyle>
+ <DataGrid.CellStyle>
+ <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
+ <Setter Property="Foreground" Value="{StaticResource Foreground}"></Setter>
+ <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
+ <Style.Triggers>
+ <Trigger Property="IsSelected" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" />
+ </Trigger>
+ </Style.Triggers>
+ </Style>
+ </DataGrid.CellStyle>
+ <DataGrid.ColumnHeaderStyle>
+ <Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
+ <Setter Property="Foreground" Value="{StaticResource Foreground}"></Setter>
+ </Style>
+ </DataGrid.ColumnHeaderStyle>
+ <DataGrid.Columns>
+ <DataGridTemplateColumn Header="#" Width="50">
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <Image Width="30" Height="30" Source="{Binding Image}"></Image>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+ <DataGridTextColumn Header="TIME" Binding="{Binding Time,StringFormat='HH:mm:ss.fff'}" />
+ <DataGridTemplateColumn Header="REF" Width="80">
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <Rectangle Width="60">
+ <Rectangle.Fill>
+ <SolidColorBrush Color="{Binding RefColor}"></SolidColorBrush>
+ </Rectangle.Fill>
+ </Rectangle>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+ <DataGridTemplateColumn Header="CAPTURED" Width="90">
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <Rectangle Width="60">
+ <Rectangle.Fill>
+ <SolidColorBrush Color="{Binding CapturedColor}"></SolidColorBrush>
+ </Rectangle.Fill>
+ </Rectangle>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+ <DataGridTemplateColumn Header="PROCESSED" Width="90">
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <Rectangle Width="60">
+ <Rectangle.Fill>
+ <SolidColorBrush Color="{Binding ProcessedColor}"></SolidColorBrush>
+ </Rectangle.Fill>
+ </Rectangle>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+
+ <DataGridTextColumn Header="REF L" Width="70" Binding="{Binding RefL}" />
+ <DataGridTextColumn Header="REF A" Width="70" Binding="{Binding RefA}" />
+ <DataGridTextColumn Header="REF B" Width="70" Binding="{Binding RefB}" />
+ <DataGridTextColumn Header="DELTA E" Binding="{Binding DeltaE}" />
+ </DataGrid.Columns>
+ </sharedControls:DoubleClickDataGrid>
+ </DockPanel>
+
+ <DockPanel Grid.Column="1" Margin="120 0 60 0">
+ <TextBlock HorizontalAlignment="Center" Margin="0 0 0 0" DockPanel.Dock="Top" Foreground="{StaticResource AccentColorBrush}" FontWeight="SemiBold" FontSize="16">Delta E Distance</TextBlock>
+ <Grid>
+ <Border Margin="0 10 0 0" Padding="20 0 20 0" BorderThickness="1" BorderBrush="#202020">
+ <Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="55"/>
+ <ColumnDefinition Width="438*"/>
+ </Grid.ColumnDefinitions>
- <Border BorderThickness="3" BorderBrush="#202020" Margin="40">
- <Image Source="{Binding SelectedVideoDevice.VideoSource,Mode=OneWay,IsAsync=True}" Stretch="Fill">
- <Image.Style>
- <Style TargetType="Image">
- <Setter Property="Visibility" Value="Hidden"></Setter>
+ <Border Margin="0 1 0 2">
+ <componentsX:GraphAxisControl Orientation="Vertical" Foreground="{StaticResource Accent}" FontSize="12" Surface="{Binding ElementName=Graph}" StringFormat="Δ 0.00;-#" />
+ </Border>
+ <Border Grid.Column="1" BorderThickness="1" BorderBrush="{StaticResource Accent}" Margin="1 0 0 0" Background="{StaticResource LightBackground}">
+ <Grid>
+
+ <componentsX:GraphGridLines Foreground="#3E3E3E" />
+
+ <graphX:WpfGraphSurface x:Name="Graph"></graphX:WpfGraphSurface>
+ </Grid>
+ </Border>
+ </Grid>
+ </Border>
+ </Grid>
+ </DockPanel>
+ </Grid>
+ </Grid>
+ </Grid>
+ </TabItem>
+ <TabItem Header="BENCHMARKS" Foreground="{StaticResource Foreground}">
+ <TabItem.HeaderTemplate>
+ <DataTemplate>
+ <TextBlock Text="{Binding}" FontSize="25" VerticalAlignment="Center">
+ <TextBlock.Style>
+ <Style TargetType="TextBlock">
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TabItem},Path=IsSelected}" Value="True">
+ <Setter Property="Foreground" Value="{StaticResource Accent}"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </TextBlock.Style>
+ </TextBlock>
+ </DataTemplate>
+ </TabItem.HeaderTemplate>
+
+ <Grid Margin="0 20 20 20">
+ <DockPanel>
+ <StackPanel Margin="0 10 0 0" HorizontalAlignment="Right" Orientation="Horizontal" DockPanel.Dock="Bottom">
+ <Button Command="{Binding ImportBenchmarksCommand}" Style="{StaticResource MaterialDesignFlatButton}" BorderBrush="{StaticResource Accent}" BorderThickness="1" Height="45" MinWidth="150">IMPORT</Button>
+ <Button Command="{Binding ExportBenchmarksCommand}" Margin="10 0 0 0" Style="{StaticResource MaterialDesignFlatButton}" BorderBrush="{StaticResource Accent}" BorderThickness="1" Height="45" MinWidth="150">EXPORT</Button>
+ </StackPanel>
+
+ <Grid>
+ <DataGrid BorderBrush="{StaticResource Accent}" BorderThickness="1" AlternationCount="1000" SelectionMode="Single" SelectionUnit="FullRow" AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="False" CanUserSortColumns="False" IsReadOnly="True" GridLinesVisibility="None" ItemsSource="{Binding Benchmarks}" Background="{StaticResource LightBackground}">
+ <DataGrid.RowStyle>
+ <Style TargetType="DataGridRow" BasedOn="{StaticResource {x:Type DataGridRow}}">
+ <Setter Property="Foreground" Value="{StaticResource Foreground}"></Setter>
+ <Setter Property="BorderBrush" Value="#202020"></Setter>
+ <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
+ <Setter Property="BorderThickness" Value="0 0 0 1"></Setter>
<Style.Triggers>
- <DataTrigger Binding="{Binding SelectedVideoDevice.IsStarted}" Value="True">
- <Setter Property="Visibility" Value="Visible"></Setter>
- </DataTrigger>
- <DataTrigger Binding="{Binding SelectedVideoDevice.IsStarted}" Value="False">
- <Setter Property="Visibility" Value="Hidden"></Setter>
- </DataTrigger>
+ <Trigger Property="IsMouseOver" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" />
+ <Setter Property="Cursor" Value="Hand"></Setter>
+ </Trigger>
+ <Trigger Property="IsSelected" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" />
+ </Trigger>
+ <Trigger Property="IsFocused" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" />
+ </Trigger>
</Style.Triggers>
</Style>
- </Image.Style>
- </Image>
- </Border>
- </DockPanel>
- </Grid>
- </Border>
+ </DataGrid.RowStyle>
+ <DataGrid.CellStyle>
+ <Style TargetType="DataGridCell" BasedOn="{StaticResource {x:Type DataGridCell}}">
+ <Setter Property="BorderThickness" Value="0"/>
+ <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
+ <Setter Property="Foreground" Value="{StaticResource Foreground}"></Setter>
+ <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
+ <Style.Triggers>
+ <Trigger Property="IsSelected" Value="True">
+ <Setter Property="Background" Value="Transparent"></Setter>
+ <Setter Property="Foreground" Value="{StaticResource AccentColorBrush}" />
+ </Trigger>
+ </Style.Triggers>
+ </Style>
+ </DataGrid.CellStyle>
+ <DataGrid.ColumnHeaderStyle>
+ <Style TargetType="DataGridColumnHeader" BasedOn="{StaticResource {x:Type DataGridColumnHeader}}">
+ <Setter Property="Foreground" Value="{StaticResource Foreground}"></Setter>
+ </Style>
+ </DataGrid.ColumnHeaderStyle>
+ <DataGrid.Columns>
- <Grid Grid.Column="1">
- <Grid.RowDefinitions>
- <RowDefinition Height="180*"/>
- <RowDefinition Height="130*"/>
- </Grid.RowDefinitions>
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="1*"/>
- <ColumnDefinition Width="1*"/>
- </Grid.ColumnDefinitions>
+ <DataGridTextColumn Width="100" Header="#" Binding="{Binding Index}"></DataGridTextColumn>
+ <DataGridTextColumn Header="RED" Binding="{Binding Red}"></DataGridTextColumn>
+ <DataGridTextColumn Header="GREEN" Binding="{Binding Green}"></DataGridTextColumn>
+ <DataGridTextColumn Header="BLUE" Binding="{Binding Blue}"></DataGridTextColumn>
- <Border Margin="0 40 0 0" VerticalAlignment="Top" Width="300" Height="310" BorderThickness="3" BorderBrush="#202020">
- <Image Source="{Binding DetectedSource,Mode=OneWay,IsAsync=True}" Stretch="Fill"></Image>
- </Border>
+ <DataGridTextColumn Header="L" Binding="{Binding L}"></DataGridTextColumn>
+ <DataGridTextColumn Header="A" Binding="{Binding A}"></DataGridTextColumn>
+ <DataGridTextColumn Header="B" Binding="{Binding B}"></DataGridTextColumn>
- <Border Margin="0 40 0 0" VerticalAlignment="Top" Width="300" Height="310" BorderThickness="3" BorderBrush="#202020" Grid.Column="1">
- <controls:ColorMatrixControl Colors="{Binding Colors,Mode=OneWay}" Columns="10" Rows="11" />
- </Border>
+ <DataGridTemplateColumn Header="#" Width="1*">
+ <DataGridTemplateColumn.CellTemplate>
+ <DataTemplate>
+ <Rectangle Width="200" HorizontalAlignment="Right">
+ <Rectangle.Fill>
+ <SolidColorBrush Color="{Binding Color}"></SolidColorBrush>
+ </Rectangle.Fill>
+ </Rectangle>
+ </DataTemplate>
+ </DataGridTemplateColumn.CellTemplate>
+ </DataGridTemplateColumn>
+ </DataGrid.Columns>
+ </DataGrid>
+ </Grid>
+ </DockPanel>
</Grid>
+ </TabItem>
+ <TabItem Header="CONFIGURATION" Foreground="{StaticResource Foreground}">
+ <TabItem.HeaderTemplate>
+ <DataTemplate>
+ <TextBlock Text="{Binding}" FontSize="25" VerticalAlignment="Center">
+ <TextBlock.Style>
+ <Style TargetType="TextBlock">
+ <Style.Triggers>
+ <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType=TabItem},Path=IsSelected}" Value="True">
+ <Setter Property="Foreground" Value="{StaticResource Accent}"></Setter>
+ </DataTrigger>
+ </Style.Triggers>
+ </Style>
+ </TextBlock.Style>
+ </TextBlock>
+ </DataTemplate>
+ </TabItem.HeaderTemplate>
- <Grid Grid.Row="1">
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="1*"/>
- <ColumnDefinition Width="1*"/>
- </Grid.ColumnDefinitions>
+ <Border Width="700" Margin="0 100 0 0" VerticalAlignment="Center" TextElement.FontSize="20" Background="{StaticResource LightBackground}" Padding="20" CornerRadius="10">
+ <Grid>
+ <Grid.ColumnDefinitions>
+ <ColumnDefinition Width="144*"/>
+ <ColumnDefinition Width="293*"/>
+ <ColumnDefinition Width="163*"/>
+ </Grid.ColumnDefinitions>
+ <Grid.RowDefinitions>
+ <RowDefinition Height="50"/>
+ <RowDefinition Height="50"/>
+ <RowDefinition Height="50"/>
+ <RowDefinition Height="50"/>
+ <RowDefinition Height="50"/>
+ <RowDefinition Height="50"/>
+ <RowDefinition Height="50"/>
+ <RowDefinition Height="200"/>
+ <RowDefinition Height="705*"/>
+ </Grid.RowDefinitions>
- <Grid Width="300" Height="190" VerticalAlignment="Top">
- <DockPanel>
- <TextBlock DockPanel.Dock="Top" FontSize="20">Captured Color</TextBlock>
- <DockPanel Margin="0 10 0 0" TextElement.FontSize="20">
- <UniformGrid DockPanel.Dock="Right" Rows="3" Margin="10 0 0 0" Width="55">
- <TextBlock><Run Text="R:"></Run> <Run FontWeight="SemiBold" FontStyle="Italic" Text="{Binding CapturedColor.R,Mode=OneWay}"></Run></TextBlock>
- <TextBlock><Run Text="G:"></Run> <Run FontWeight="SemiBold" FontStyle="Italic" Text="{Binding CapturedColor.G,Mode=OneWay}"></Run></TextBlock>
- <TextBlock><Run Text="B:"></Run> <Run FontWeight="SemiBold" FontStyle="Italic" Text="{Binding CapturedColor.B,Mode=OneWay}"></Run></TextBlock>
- </UniformGrid>
- <Border BorderThickness="1" BorderBrush="#202020">
- <Border.Background>
- <SolidColorBrush Color="{Binding CapturedColor,Mode=OneWay}" />
- </Border.Background>
- </Border>
- </DockPanel>
- </DockPanel>
- </Grid>
+ <TextBlock VerticalAlignment="Bottom" Height="27">Columns</TextBlock>
+ <TextBox Grid.Column="1" Text="{Binding Config.Columns}"></TextBox>
- <Grid Width="300" Height="190" VerticalAlignment="Top" Grid.Column="1">
- <DockPanel>
- <TextBlock DockPanel.Dock="Top" FontSize="20">Processed Color</TextBlock>
- <DockPanel Margin="0 10 0 0" TextElement.FontSize="20">
- <UniformGrid DockPanel.Dock="Right" Rows="3" Margin="10 0 0 0" Width="55">
- <TextBlock><Run Text="R:"></Run> <Run FontWeight="SemiBold" FontStyle="Italic" Text="{Binding ProcessedColor.R,Mode=OneWay}"></Run></TextBlock>
- <TextBlock><Run Text="G:"></Run> <Run FontWeight="SemiBold" FontStyle="Italic" Text="{Binding ProcessedColor.G,Mode=OneWay}"></Run></TextBlock>
- <TextBlock><Run Text="B:"></Run> <Run FontWeight="SemiBold" FontStyle="Italic" Text="{Binding ProcessedColor.B,Mode=OneWay}"></Run></TextBlock>
- </UniformGrid>
- <Border BorderThickness="1" BorderBrush="#202020">
- <Border.Background>
- <SolidColorBrush Color="{Binding ProcessedColor,Mode=OneWay}" />
- </Border.Background>
- </Border>
- </DockPanel>
- </DockPanel>
- </Grid>
- </Grid>
- </Grid>
- </Grid>
+ <TextBlock Grid.Row="1" Grid.Column="0" VerticalAlignment="Bottom" Height="27">Rows</TextBlock>
+ <TextBox Grid.Row="1" Grid.Column="1" Text="{Binding Config.Rows}"></TextBox>
- <Grid Grid.Row="1" Margin="0 10 0 0">
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="1*"/>
- <ColumnDefinition Width="1*"/>
- </Grid.ColumnDefinitions>
- <DockPanel>
- <TextBlock DockPanel.Dock="Top">HISTORY</TextBlock>
- <DataGrid Margin="0 10 0 0" Background="Transparent" Grid.ColumnSpan="2">
- <DataGrid.Columns>
- <DataGridTextColumn Header="TIME" />
- <DataGridTextColumn Header="CAPTURED COLOR" />
- <DataGridTextColumn Header="PROCESSED COLOR" />
- </DataGrid.Columns>
- </DataGrid>
- </DockPanel>
+ <TextBlock Grid.Row="2" Grid.Column="0" VerticalAlignment="Bottom" Height="27">Target Index</TextBlock>
+ <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Config.TargetIndex}"></TextBox>
- <DockPanel Grid.Column="1" Margin="75 0 110 0">
- <Grid DockPanel.Dock="Top" TextElement.FontSize="20" Margin="0 0 0 10">
- <DockPanel>
- <TextBlock HorizontalAlignment="Center">Delta E Reference Point</TextBlock>
- <StackPanel Orientation="Horizontal" Margin="20 0 0 0">
- <TextBlock FontWeight="SemiBold">L:</TextBlock>
- <mahapps:NumericUpDown MinWidth="120" HorizontalContentAlignment="Left" Value="{Binding MeasureL,UpdateSourceTrigger=PropertyChanged}" Minimum="0" Maximum="100" Margin="5 0 0 0" HasDecimals="True" HideUpDownButtons="True" Background="Transparent" BorderThickness="1" />
+ <TextBlock Grid.Row="3" Grid.Column="0" VerticalAlignment="Bottom" Height="27">Sample Width</TextBlock>
+ <TextBox Grid.Row="3" Grid.Column="1" Text="{Binding Config.SampleWidth}"></TextBox>
- <TextBlock Margin="20 0 0 0" FontWeight="SemiBold">A:</TextBlock>
- <mahapps:NumericUpDown MinWidth="120" HorizontalContentAlignment="Left" Value="{Binding MeasureA,UpdateSourceTrigger=PropertyChanged}" Minimum="-127" Maximum="128" Margin="5 0 0 0" HasDecimals="True" HideUpDownButtons="True" Background="Transparent" BorderThickness="1" />
+ <TextBlock Grid.Row="4" Grid.Column="0" VerticalAlignment="Bottom" Height="27">Sample Height</TextBlock>
+ <TextBox Grid.Row="4" Grid.Column="1" Text="{Binding Config.SampleHeight}"></TextBox>
- <TextBlock Margin="20 0 0 0" FontWeight="SemiBold">B:</TextBlock>
- <mahapps:NumericUpDown MinWidth="120" HorizontalContentAlignment="Left" Value="{Binding MeasureB,UpdateSourceTrigger=PropertyChanged}" Minimum="-127" Maximum="128" Margin="5 0 0 0" HasDecimals="True" HideUpDownButtons="True" Background="Transparent" BorderThickness="1" />
- </StackPanel>
- </DockPanel>
- </Grid>
- <Grid>
- <Border Padding="20" BorderThickness="1" BorderBrush="#202020">
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition Width="55"/>
- <ColumnDefinition Width="438*"/>
- </Grid.ColumnDefinitions>
+ <TextBlock Grid.Row="5" Grid.Column="0" VerticalAlignment="Bottom" Height="27">Samples Folder</TextBlock>
+ <TextBox Grid.Row="5" Grid.Column="1" Text="{Binding Config.SamplesFolder}" IsReadOnly="True" FontSize="10"></TextBox>
+ <Button Command="{Binding SelectSamplesFolderCommand}" Width="120" HorizontalAlignment="Right" VerticalAlignment="Bottom" Grid.Row="5" Grid.Column="2" Style="{StaticResource MaterialDesignFlatButton}" BorderBrush="{StaticResource Accent}" BorderThickness="1">SELECT</Button>
- <Border Margin="0 1 0 2">
- <componentsX:GraphAxisControl Orientation="Vertical" FontSize="10" Surface="{Binding ElementName=Graph}" StringFormat="Δ 0.00;-#" />
- </Border>
- <Border Grid.Column="1" BorderThickness="1" BorderBrush="Silver" Margin="1 0 0 0">
- <Grid>
+ <TextBlock Grid.Row="6" Grid.Column="0" VerticalAlignment="Bottom" Height="27">Benchmarks</TextBlock>
+ <TextBox Grid.Row="6" Grid.Column="1" Text="{Binding Config.BenchmarksFile}" IsReadOnly="True" FontSize="10"></TextBox>
+ <Button Command="{Binding SelectBenchmarksFileCommand}" Width="120" HorizontalAlignment="Right" VerticalAlignment="Bottom" Grid.Row="6" Grid.Column="2" Style="{StaticResource MaterialDesignFlatButton}" BorderBrush="{StaticResource Accent}" BorderThickness="1">SELECT</Button>
- <componentsX:GraphGridLines Foreground="Silver" />
+ <TextBlock Grid.Row="7" Grid.Column="0" VerticalAlignment="Bottom" Height="27">Template</TextBlock>
- <graphX:WpfGraphSurface x:Name="Graph"></graphX:WpfGraphSurface>
- </Grid>
- </Border>
- </Grid>
- </Border>
+ <DockPanel Grid.Row="7" Grid.Column="1">
+ <TextBox Margin="0 10 0 0" DockPanel.Dock="Bottom" Text="{Binding Config.TemplateFile}" IsReadOnly="True" FontSize="10"></TextBox>
+ <Image Width="150" Height="150" Source="{Binding Config.TemplateFile}" Stretch="Fill"></Image>
+ </DockPanel>
+ <Button Command="{Binding SelectTemplateFileCommand}" Width="120" HorizontalAlignment="Right" VerticalAlignment="Bottom" Grid.Row="7" Grid.Column="2" Style="{StaticResource MaterialDesignFlatButton}" BorderBrush="{StaticResource Accent}" BorderThickness="1">SELECT</Button>
</Grid>
- </DockPanel>
- </Grid>
- </Grid>
+ </Border>
+ </TabItem>
+ </TabControl>
</Grid>
</UserControl>
diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/packages.config b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/packages.config
index 37e4dd902..cf3d21396 100644
--- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/packages.config
+++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorCapture/packages.config
@@ -7,4 +7,6 @@
<package id="MahApps.Metro" version="1.5.0" targetFramework="net461" />
<package id="MaterialDesignColors" version="1.1.2" targetFramework="net461" />
<package id="MaterialDesignThemes" version="2.3.1.953" targetFramework="net461" />
+ <package id="Microsoft.WindowsAPICodePack-Shell" version="1.1.0.0" targetFramework="net461" />
+ <package id="Newtonsoft.Json" version="9.0.1" targetFramework="net461" />
</packages> \ No newline at end of file