diff options
19 files changed, 247 insertions, 73 deletions
diff --git a/Software/DB/PPC/Tango.mdf b/Software/DB/PPC/Tango.mdf Binary files differindex 198fdf37c..8d1f6e034 100644 --- a/Software/DB/PPC/Tango.mdf +++ b/Software/DB/PPC/Tango.mdf diff --git a/Software/DB/PPC/Tango_log.ldf b/Software/DB/PPC/Tango_log.ldf Binary files differindex e6f724f8b..d548e8875 100644 --- a/Software/DB/PPC/Tango_log.ldf +++ b/Software/DB/PPC/Tango_log.ldf diff --git a/Software/DB/Tango.mdf b/Software/DB/Tango.mdf Binary files differindex dc1bf2460..909948ec3 100644 --- a/Software/DB/Tango.mdf +++ b/Software/DB/Tango.mdf diff --git a/Software/DB/Tango_log.ldf b/Software/DB/Tango_log.ldf Binary files differindex fbffee0bd..964b699b5 100644 --- a/Software/DB/Tango_log.ldf +++ b/Software/DB/Tango_log.ldf diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataPointVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataPointVM.cs index 33110d50e..7d3dfdd0e 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataPointVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataPointVM.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.Core; +using Tango.PMR.ColorLab; using Tango.SharedUI; namespace Tango.MachineStudio.ColorLab.ViewModels @@ -45,5 +46,19 @@ namespace Tango.MachineStudio.ColorLab.ViewModels X = x; Y = y; } + + public CalibrationDataPointVM(CalibrationPoint calibrationPoint) : this(calibrationPoint.X, calibrationPoint.Y) + { + + } + + public CalibrationPoint ToPMR() + { + return new CalibrationPoint() + { + X = X, + Y = Y, + }; + } } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataVM.cs index 8fe8ec4ac..2d332bec2 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataVM.cs @@ -20,23 +20,6 @@ namespace Tango.MachineStudio.ColorLab.ViewModels set { _liquidType = value; RaisePropertyChangedAuto(); } } - - private String _name; - - public String Name - { - get { return _name; } - set { _name = value; RaisePropertyChangedAuto(); } - } - - private int _color; - - public int Color - { - get { return _color; } - set { _color = value; RaisePropertyChangedAuto(); } - } - private IdsPack _idsPack; public IdsPack IdsPack @@ -81,9 +64,20 @@ namespace Tango.MachineStudio.ColorLab.ViewModels } } - public CalibrationDataVM() + private CalibrationDataVM() { CalibrationPoints = new ObservableCollection<CalibrationDataPointVM>(); } + + public CalibrationDataVM(IdsPack pack) : this() + { + IdsPack = pack; + LiquidType = pack.LiquidType; + } + + public CalibrationDataVM(LiquidType liquidType) : this() + { + LiquidType = liquidType; + } } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataViewVM.cs index c9c83dde0..106013b51 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/CalibrationDataViewVM.cs @@ -1,16 +1,22 @@ -using System; +using Microsoft.Win32; +using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; +using Tango.BL.Calibration; +using Tango.Core.Commands; using Tango.MachineStudio.Common; +using Tango.MachineStudio.Common.Notifications; using Tango.SharedUI; namespace Tango.MachineStudio.ColorLab.ViewModels { public class CalibrationDataViewVM : ViewModel { + private INotificationProvider _notification; + private ObservableCollection<CalibrationDataVM> _liquidsCalibrationData; /// <summary> /// Gets or sets the liquids calibration data. @@ -22,20 +28,83 @@ namespace Tango.MachineStudio.ColorLab.ViewModels } /// <summary> + /// Gets or sets the import excel command. + /// </summary> + public RelayCommand<CalibrationDataVM> ImportExcelCommand { get; set; } + + /// <summary> + /// Gets or sets the export excel command. + /// </summary> + public RelayCommand<CalibrationDataVM> ExportExcelCommand { get; set; } + + /// <summary> /// Initializes a new instance of the <see cref="CalibrationDataViewVM"/> class. /// </summary> - public CalibrationDataViewVM() + public CalibrationDataViewVM(INotificationProvider notificationProvider) { + _notification = notificationProvider; + LiquidsCalibrationData = new ObservableCollection<CalibrationDataVM>(); + + ImportExcelCommand = new RelayCommand<CalibrationDataVM>(ImportExcel); + ExportExcelCommand = new RelayCommand<CalibrationDataVM>(ExportExcel); } /// <summary> /// Initializes a new instance of the <see cref="CalibrationDataViewVM"/> class. /// </summary> /// <param name="liquidsCalibrationData">The liquids calibration data.</param> - public CalibrationDataViewVM(ObservableCollection<CalibrationDataVM> liquidsCalibrationData) + public CalibrationDataViewVM(INotificationProvider notificationProvider, ObservableCollection<CalibrationDataVM> liquidsCalibrationData) : this(notificationProvider) { LiquidsCalibrationData = liquidsCalibrationData; } + + private void ImportExcel(CalibrationDataVM vm) + { + OpenFileDialog dlg = new OpenFileDialog(); + + try + { + dlg.Title = $"Import excel calibration file for {vm.LiquidType.Name}"; + dlg.Filter = "Excel Files|*.xlsx"; + if (dlg.ShowDialog().Value) + { + vm.CalibrationPoints.Clear(); + var points = CalibrationHelper.ImportCalibrationDataFromExcel(dlg.FileName); + + foreach (var p in points) + { + vm.CalibrationPoints.Add(new CalibrationDataPointVM(p)); + } + } + } + catch (Exception ex) + { + LogManager.Log(ex, "Error importing excel file " + dlg.FileName); + _notification.ShowError("An error occurred while trying to import the selected excel file. Please check the file format if valid and is available to read."); + } + } + + private void ExportExcel(CalibrationDataVM vm) + { + SaveFileDialog dlg = new SaveFileDialog(); + try + { + dlg.Title = $"Export excel calibration file for {vm.LiquidType.Name}"; + dlg.Filter = "Excel Files|*.xlsx"; + dlg.DefaultExt = ".xlsx"; + dlg.FileName = $"CData_{vm.LiquidType.Name}_v{vm.LiquidType.Version}.xlsx"; + if (dlg.ShowDialog().Value) + { + var points = vm.CalibrationPoints.Select(x => x.ToPMR()).ToList(); + CalibrationHelper.ExportCalibrationDataToExcel(points, dlg.FileName); + } + } + catch (Exception ex) + { + LogManager.Log(ex, "Error exporting excel file " + dlg.FileName); + _notification.ShowError("An error occurred while trying to export the calibration data."); + } + } } } diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs index d0fa80a20..33090a640 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/ViewModels/MainViewVM.cs @@ -329,10 +329,10 @@ namespace Tango.MachineStudio.ColorLab.ViewModels //calData.LiquidType = (PMR.ColorLab.LiquidType)vm.IdsPack.LiquidType.Code; //calData.CalibrationPoints.AddRange(vm.CalibrationPoints.Select(x => new CalibrationPoint() { X = x.X, Y = x.Y })); - inputLiquid.CalibrationData = Cat.CreateDemoCalibrationData((PMR.ColorLab.LiquidType)vm.IdsPack.LiquidType.Code); + inputLiquid.CalibrationData = Cat.CreateDemoCalibrationData((PMR.ColorLab.LiquidType)vm.LiquidType.Code); - inputLiquid.LiquidType = (PMR.ColorLab.LiquidType)vm.IdsPack.LiquidType.Code; - inputLiquid.MaxNanoliterPerCentimeter = LiquidTypesRmls.SingleOrDefault(x => x.LiquidType.Code == vm.IdsPack.LiquidType.Code).MaxNlPerCm; + inputLiquid.LiquidType = (PMR.ColorLab.LiquidType)vm.LiquidType.Code; + inputLiquid.MaxNanoliterPerCentimeter = LiquidTypesRmls.SingleOrDefault(x => x.LiquidType.Code == vm.LiquidType.Code).MaxNlPerCm; input.InputCoordinates.InputLiquids.Add(inputLiquid); } @@ -525,10 +525,10 @@ namespace Tango.MachineStudio.ColorLab.ViewModels //calData.LiquidType = (PMR.ColorLab.LiquidType)vm.IdsPack.LiquidType.Code; //calData.CalibrationPoints.AddRange(vm.CalibrationPoints.Select(x => new CalibrationPoint() { X = x.X, Y = x.Y })); - inputLiquid.CalibrationData = Cat.CreateDemoCalibrationData((PMR.ColorLab.LiquidType)vm.IdsPack.LiquidType.Code); + inputLiquid.CalibrationData = Cat.CreateDemoCalibrationData((PMR.ColorLab.LiquidType)vm.LiquidType.Code); - inputLiquid.LiquidType = (PMR.ColorLab.LiquidType)vm.IdsPack.LiquidType.Code; - inputLiquid.MaxNanoliterPerCentimeter = LiquidTypesRmls.SingleOrDefault(x => x.LiquidType.Code == vm.IdsPack.LiquidType.Code).MaxNlPerCm; + inputLiquid.LiquidType = (PMR.ColorLab.LiquidType)vm.LiquidType.Code; + inputLiquid.MaxNanoliterPerCentimeter = LiquidTypesRmls.SingleOrDefault(x => x.LiquidType.Code == vm.LiquidType.Code).MaxNlPerCm; inputLiquid.Volume = LiquidVolumes.SingleOrDefault(x => x.IdsPack == vm.IdsPack).Volume; input.InputCoordinates.InputLiquids.Add(inputLiquid); @@ -573,22 +573,19 @@ namespace Tango.MachineStudio.ColorLab.ViewModels //RmlProcessParametersTableGroup = SelectedRML.ProcessParametersTablesGroups.ToList().SingleOrDefault(x => x.Active); LiquidsCalibrationData = new ObservableCollection<CalibrationDataVM>(); - CalibrationDataViewVM = new CalibrationDataViewVM(LiquidsCalibrationData); + CalibrationDataViewVM = new CalibrationDataViewVM(_notification, LiquidsCalibrationData); LiquidsCalibrationData.EnableCrossThreadOperations(); foreach (var idsPack in SelectedMachine.Configuration.NoneEmptyIdsPacks.OrderBy(x => x.PackIndex)) { - CalibrationDataVM vm = new CalibrationDataVM(); - vm.Name = idsPack.LiquidType.Name; - vm.Color = idsPack.LiquidType.Color; - vm.IdsPack = idsPack; + CalibrationDataVM vm = new CalibrationDataVM(idsPack); var cat = idsPack.LiquidType.Cats.FirstOrDefault(x => x.Machine == SelectedMachine && x.Rml == SelectedRML); if (cat != null) { var calData = cat.GetCalibrationData(); - vm.CalibrationPoints = calData.CalibrationPoints.Select(x => new CalibrationDataPointVM(x.X, x.Y)).ToObservableCollection(); + vm.CalibrationPoints = calData.CalibrationPoints.Select(x => new CalibrationDataPointVM(x)).ToObservableCollection(); } InvokeUINow(() => diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/CalibrationDataView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/CalibrationDataView.xaml index 28279bd50..3c9723b30 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/CalibrationDataView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.ColorLab/Views/CalibrationDataView.xaml @@ -28,23 +28,23 @@ <ItemsControl.ItemTemplate> <DataTemplate> - <DockPanel Width="220"> + <DockPanel Width="240"> <StackPanel DockPanel.Dock="Top"> <StackPanel DockPanel.Dock="Right" VerticalAlignment="Bottom" HorizontalAlignment="Right" Orientation="Horizontal" Margin="0 0 5 0"> - <Button Style="{StaticResource MaterialDesignFlatButton}" Padding="0" ToolTip="Import from excel" Width="30"> + <Button Style="{StaticResource MaterialDesignFlatButton}" Padding="0" ToolTip="Import from excel" Width="30" Command="{Binding RelativeSource={RelativeSource AncestorType=local:CalibrationDataView},Path=DataContext.ImportExcelCommand}" CommandParameter="{Binding}"> <materialDesign:PackIcon Kind="Download" Foreground="Black" /> </Button> - <Button Style="{StaticResource MaterialDesignFlatButton}" Padding="0" ToolTip="Export to excel" Width="30"> + <Button Style="{StaticResource MaterialDesignFlatButton}" Padding="0" ToolTip="Export to excel" Width="30" Command="{Binding RelativeSource={RelativeSource AncestorType=local:CalibrationDataView},Path=DataContext.ExportExcelCommand}" CommandParameter="{Binding}"> <materialDesign:PackIcon Kind="Upload" Foreground="Black" /> </Button> </StackPanel> <Border Padding="2" Margin="5" CornerRadius="3"> <Border.Background> - <SolidColorBrush Opacity="0.4" Color="{Binding Color,Converter={StaticResource ColorToIntegerConverter}}"></SolidColorBrush> + <SolidColorBrush Opacity="0.4" Color="{Binding LiquidType.Color,Converter={StaticResource ColorToIntegerConverter}}"></SolidColorBrush> </Border.Background> - <TextBlock Text="{Binding Name}" HorizontalAlignment="Center" Foreground="Black"></TextBlock> + <TextBlock Text="{Binding LiquidType.Name}" HorizontalAlignment="Center" Foreground="Black"></TextBlock> </Border> </StackPanel> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml index 3f1f3b486..b9c2b816f 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.Developer/Views/JobView.xaml @@ -963,7 +963,7 @@ <Run FontFamily="{StaticResource digital-7}" Text="{Binding OffsetPercent,StringFormat={}{0:F1}%}"></Run> <Run Foreground="Gray" Text="{Binding OffsetMeters,Mode=OneWay,StringFormat={} ( {0:F1}m )}"></Run> </TextBlock> - <Slider ValueChanged="Offset_Slider_ValueChanged" Style="{StaticResource GradientOffsetSlider}" SmallChange="0.1" IsSnapToTickEnabled="True" TickFrequency="0.1" Margin="0 20 0 0" HorizontalAlignment="Center" Width="500" Value="{Binding OffsetPercent}" IsEnabled="{Binding IsMiddle}"> + <Slider ValueChanged="Offset_Slider_ValueChanged" Style="{StaticResource GradientOffsetSlider}" SmallChange="0.1" IsSnapToTickEnabled="True" TickFrequency="0.1" Margin="0 20 0 0" HorizontalAlignment="Center" Width="300" Value="{Binding OffsetPercent}" IsEnabled="{Binding IsMiddle}"> <Slider.Foreground> <SolidColorBrush Color="{Binding Color}"></SolidColorBrush> </Slider.Foreground> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/MainViewVM.cs index be46e2148..9e8286fa5 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/ViewModels/MainViewVM.cs @@ -210,15 +210,12 @@ namespace Tango.MachineStudio.RML.ViewModels ActiveProcessParametersTableView = CollectionViewSource.GetDefaultView(ActiveProcessParametersGroup.ProcessParametersTables); ActiveProcessParametersTableView.SortDescriptions.Add(new SortDescription(nameof(ProcessParametersTable.TableIndex), ListSortDirection.Ascending)); - CalibrationDataViewVM = new CalibrationDataViewVM(); + CalibrationDataViewVM = new CalibrationDataViewVM(_notification); LiquidTypesRmls = ActiveRML.LiquidTypesRmls; foreach (var liquidTypeRml in LiquidTypesRmls) { - CalibrationDataVM catVM = new CalibrationDataVM(); - catVM.Name = liquidTypeRml.LiquidType.Name; - catVM.Color = liquidTypeRml.LiquidType.Color; - catVM.LiquidType = liquidTypeRml.LiquidType; + CalibrationDataVM catVM = new CalibrationDataVM(liquidTypeRml.LiquidType); if (liquidTypeRml.DefaultCatData != null) { @@ -359,9 +356,7 @@ namespace Tango.MachineStudio.RML.ViewModels _active_context.LiquidTypesRmls.Add(liquidFactor); - CalibrationDataVM catVM = new CalibrationDataVM(); - catVM.Name = liquidFactor.LiquidType.Name; - catVM.Color = liquidFactor.LiquidType.Color; + CalibrationDataVM catVM = new CalibrationDataVM(liquidFactor.LiquidType); CalibrationDataViewVM.LiquidsCalibrationData.Add(catVM); diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml index aa6f39d9e..2ddd060f8 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml @@ -196,7 +196,7 @@ </ItemsControl> </StackPanel> - <dragAndDrop:DraggingSurface x:Name="draggingSurface" /> + <dragAndDrop:DraggingSurface x:Name="draggingSurface" ClipToBounds="True" /> </Grid> </DockPanel> </Grid> @@ -206,7 +206,6 @@ <DockPanel> - <ScrollViewer VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="120"/> @@ -226,7 +225,9 @@ </Button> </Grid> </Border> - <ItemsControl ItemsSource="{Binding LiquidTypesRmls}" Margin="0 10 0 0"> + + <ScrollViewer x:Name="liquidsFactorsScrollViewer" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Hidden" Margin="15 0 20 0"> + <ItemsControl Width="{Binding ElementName=calibrationDataView,Path=ActualWidth}" ItemsSource="{Binding LiquidTypesRmls}" Margin="0 10 0 0"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <UniformGrid IsItemsHost="True" Rows="1"></UniformGrid> @@ -259,7 +260,8 @@ </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> - </DockPanel> + </ScrollViewer> + </DockPanel> </Grid> <Grid Grid.Row="2"> @@ -270,18 +272,22 @@ <DropShadowEffect Opacity="0.4" /> </Border.Effect> <Grid> - <TextBlock HorizontalAlignment="Left" Margin="20 0 0 0" FontSize="16">CALIBRATION DATA</TextBlock> - <Button ToolTip="Create excel file template" HorizontalAlignment="Right" Style="{StaticResource MaterialDesignFlatButton}" Height="Auto" VerticalAlignment="Bottom" Width="30" Padding="0" Command="{Binding CreateCalibrationDataExcelTemplateCommand}"> - <materialDesign:PackIcon Kind="FileExcel" Foreground="DimGray" Width="16" Height="20" /> - </Button> + <TextBlock HorizontalAlignment="Left" Margin="20 0 0 0" FontSize="16">CALIBRATION DATA</TextBlock> + <Button ToolTip="Create excel file template" FontSize="11" Foreground="#202020" HorizontalAlignment="Right" Style="{StaticResource MaterialDesignFlatButton}" Height="Auto" VerticalAlignment="Bottom" Padding="0" Command="{Binding CreateCalibrationDataExcelTemplateCommand}" Margin="0 0 5 0"> + <StackPanel Orientation="Horizontal"> + <materialDesign:PackIcon Kind="FileExcel" Foreground="DimGray" Width="16" Height="26" /> + <TextBlock VerticalAlignment="Center" Margin="5 0 0 0">Create Empty Excel Template</TextBlock> + </StackPanel> + </Button> </Grid> </Border> - <colorLabViews:CalibrationDataView Margin="0 10 0 0" DataContext="{Binding CalibrationDataViewVM}" /> - </DockPanel> + <ScrollViewer x:Name="calibrationDataScrollViewer" ScrollChanged="calibrationDataScrollViewer_ScrollChanged" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Auto" Margin="15 0 20 0"> + <colorLabViews:CalibrationDataView x:Name="calibrationDataView" Margin="0 10 0 0" DataContext="{Binding CalibrationDataViewVM}" /> + </ScrollViewer> + </DockPanel> </Grid> </Grid> - </ScrollViewer> </DockPanel> </Grid> </Grid> diff --git a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml.cs b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml.cs index c1bc9ad4a..2a5d317c6 100644 --- a/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml.cs +++ b/Software/Visual_Studio/MachineStudio/Modules/Tango.MachineStudio.RML/Views/RmlView.xaml.cs @@ -47,5 +47,10 @@ namespace Tango.MachineStudio.RML.Views ProcessParametersTable dropped = e.Droppable.DataContext as ProcessParametersTable; _vm.OnProcessParametersTableDropped(dragged, dropped); } + + private void calibrationDataScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e) + { + liquidsFactorsScrollViewer.ScrollToHorizontalOffset(e.HorizontalOffset); + } } } diff --git a/Software/Visual_Studio/Resources/Calibration Data Template.xlsx b/Software/Visual_Studio/Resources/CalibrationDataTemplate.xlsx Binary files differindex cd6b52fba..cd6b52fba 100644 --- a/Software/Visual_Studio/Resources/Calibration Data Template.xlsx +++ b/Software/Visual_Studio/Resources/CalibrationDataTemplate.xlsx diff --git a/Software/Visual_Studio/Tango.BL/Calibration/CalibrationHelper.cs b/Software/Visual_Studio/Tango.BL/Calibration/CalibrationHelper.cs new file mode 100644 index 000000000..64658ebee --- /dev/null +++ b/Software/Visual_Studio/Tango.BL/Calibration/CalibrationHelper.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.Core.Helpers; +using Tango.Documents; +using Tango.PMR.ColorLab; + +namespace Tango.BL.Calibration +{ + /// <summary> + /// Represents a machine calibration helper. + /// </summary> + public static class CalibrationHelper + { + /// <summary> + /// Imports the calibration data from excel. + /// </summary> + /// <param name="fileName">Name of the file.</param> + /// <returns></returns> + public static List<CalibrationPoint> ImportCalibrationDataFromExcel(String fileName) + { + using (ExcelReader reader = new ExcelReader(fileName)) + { + return reader.GetDataByIndex<CalibrationPoint>("CalibrationData", 2); + } + } + + /// <summary> + /// Exports the calibration data to excel. + /// </summary> + /// <param name="calibrationPoints">The calibration points.</param> + /// <param name="fileName">Name of the file.</param> + public static void ExportCalibrationDataToExcel(List<CalibrationPoint> calibrationPoints, String fileName) + { + CreateCalibrationDataExcelTemplate(fileName); + + using (ExcelWriter writer = new ExcelWriter(fileName)) + { + writer.WriteData(calibrationPoints, "CalibrationData"); + } + } + + /// <summary> + /// Creates the calibration data excel template. + /// </summary> + /// <param name="fileName">Name of the file.</param> + public static void CreateCalibrationDataExcelTemplate(String fileName) + { + var stream = EmbeddedResourceHelper.GetEmbeddedResourceStream("Tango.BL.Calibration.CalibrationDataTemplate.xlsx"); + + using (FileStream fs = new FileStream(fileName, FileMode.Create)) + { + stream.Seek(0, SeekOrigin.Begin); + stream.CopyTo(fs); + } + } + } +} diff --git a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj index c2d368160..78df751de 100644 --- a/Software/Visual_Studio/Tango.BL/Tango.BL.csproj +++ b/Software/Visual_Studio/Tango.BL/Tango.BL.csproj @@ -94,6 +94,7 @@ <Compile Include="Builders\RmlBuilder.cs" /> <Compile Include="Builders\RmlsCollectionBuilder.cs" /> <Compile Include="Builders\UserBuilder.cs" /> + <Compile Include="Calibration\CalibrationHelper.cs" /> <Compile Include="Catalogs\Catalog.cs" /> <Compile Include="Catalogs\CatalogGroup.cs" /> <Compile Include="Catalogs\CatalogItem.cs" /> @@ -289,6 +290,9 @@ <Generator>ResXFileCodeGenerator</Generator> <LastGenOutput>Resources.Designer.cs</LastGenOutput> </EmbeddedResource> + <EmbeddedResource Include="..\Resources\CalibrationDataTemplate.xlsx"> + <Link>Calibration\CalibrationDataTemplate.xlsx</Link> + </EmbeddedResource> <None Include="app.config" /> <None Include="packages.config" /> <None Include="Properties\Settings.settings"> @@ -309,6 +313,10 @@ <Project>{38197109-8610-4d3f-92b9-16d48df94d7c}</Project> <Name>Tango.DAL.Remote</Name> </ProjectReference> + <ProjectReference Include="..\Tango.Documents\Tango.Documents.csproj"> + <Project>{CA87A608-7B17-4C98-88F2-42ABEE10F4C1}</Project> + <Name>Tango.Documents</Name> + </ProjectReference> <ProjectReference Include="..\Tango.Logging\Tango.Logging.csproj"> <Project>{BC932DBD-7CDB-488C-99E4-F02CF441F55E}</Project> <Name>Tango.Logging</Name> @@ -336,7 +344,7 @@ </Target> <ProjectExtensions> <VisualStudio> - <UserProperties BuildVersion_StartDate="2000/1/1" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" /> + <UserProperties BuildVersion_AssemblyInfoFilename="Properties\AssemblyInfo.cs" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.None.Increment.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2000/1/1" /> </VisualStudio> </ProjectExtensions> </Project>
\ No newline at end of file diff --git a/Software/Visual_Studio/Tango.Documents/ExcelReader.cs b/Software/Visual_Studio/Tango.Documents/ExcelReader.cs index b212678ae..3d6b37445 100644 --- a/Software/Visual_Studio/Tango.Documents/ExcelReader.cs +++ b/Software/Visual_Studio/Tango.Documents/ExcelReader.cs @@ -67,7 +67,7 @@ namespace Tango.Documents PropertyInfo[] properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance); - for (int rowIndex = firstRowIndex; rowIndex < rowCount; rowIndex++) + for (int rowIndex = firstRowIndex; rowIndex < rowCount + 1; rowIndex++) { Row row = GetRow(currWorksheet, rowIndex); if (row == null) @@ -82,7 +82,7 @@ namespace Tango.Documents Cell cell = cells[cellIndex] as Cell; String value = CellValue(cell); - properties[cellIndex].SetValue(newObj, value); + properties[cellIndex].SetValue(newObj, Convert.ChangeType(value, properties[cellIndex].PropertyType)); } results.Add(newObj); @@ -330,8 +330,9 @@ namespace Tango.Documents /// <returns></returns> private Row GetRow(Worksheet worksheet, int rowIndex) { - var row = worksheet.GetFirstChild<SheetData>(). - Elements<Row>().Where(r => r.RowIndex == rowIndex).FirstOrDefault(); + var sheetData = worksheet.GetFirstChild<SheetData>(); + var elements = sheetData.Elements<Row>(); + var row = elements.Where(r => r.RowIndex == rowIndex).FirstOrDefault(); return row; } diff --git a/Software/Visual_Studio/Tango.Documents/ExcelWriter.cs b/Software/Visual_Studio/Tango.Documents/ExcelWriter.cs index 613bbd90f..63c04bce9 100644 --- a/Software/Visual_Studio/Tango.Documents/ExcelWriter.cs +++ b/Software/Visual_Studio/Tango.Documents/ExcelWriter.cs @@ -52,9 +52,12 @@ namespace Tango.Documents { var item = list[i]; + var last_row = sheetData.Elements<Row>().Last(); + Row newRow = new Row(); + newRow.RowIndex = last_row.RowIndex + 1; - sheetData.InsertAfter(newRow, sheetData.Elements<Row>().Last()); + sheetData.InsertAfter(newRow, last_row); foreach (var prop in props) { @@ -77,7 +80,22 @@ namespace Tango.Documents cell.CellReference = cellReference; } cell.CellValue = new CellValue(value.ToString()); - cell.DataType = CellValues.String; + + cell.DataType = CellValues.Number; + + if (value is String) + { + cell.DataType = CellValues.String; + } + else if (value is DateTime) + { + cell.DataType = CellValues.Date; + } + else if (value is Boolean) + { + cell.DataType = CellValues.Boolean; + } + row.Append(cell); } diff --git a/Software/Visual_Studio/Tango.UnitTesting/ColorLib_TST.cs b/Software/Visual_Studio/Tango.UnitTesting/ColorLib_TST.cs index dc19c77dd..b2e32afce 100644 --- a/Software/Visual_Studio/Tango.UnitTesting/ColorLib_TST.cs +++ b/Software/Visual_Studio/Tango.UnitTesting/ColorLib_TST.cs @@ -14,6 +14,7 @@ using System.Diagnostics; using Tango.Documents; using Tango.Core.IO; using Tango.MachineStudio.ColorLab.ViewModels; +using Tango.BL.Calibration; namespace Tango.UnitTesting { @@ -167,25 +168,29 @@ namespace Tango.UnitTesting } [TestMethod] - public void Write_Calibration_Data_Excel_File() + public void Read_Write_Calibration_Data_Excel_File() { String temp_file = Helper.GetTempFolderPath() + "\\CalibrationData.xlsx"; - File.Copy(Helper.GetResourcePath("Calibration Data Template.xlsx"), temp_file); - CalibrationDataVM vm = new CalibrationDataVM(); + List<CalibrationPoint> w_calibration_points = new List<CalibrationPoint>(); for (int i = 0; i < 10; i++) { - vm.CalibrationPoints.Add(new CalibrationDataPointVM() + w_calibration_points.Add(new CalibrationPoint() { - X = i + 1, - Y = (i + 1) * 10, + X = i + 1, + Y = (i + 1) * 10, }); } - using (ExcelWriter writer = new ExcelWriter(temp_file)) + CalibrationHelper.ExportCalibrationDataToExcel(w_calibration_points, temp_file); + var r_calibration_points = CalibrationHelper.ImportCalibrationDataFromExcel(temp_file); + + Assert.AreEqual(w_calibration_points.Count, r_calibration_points.Count, "Read calibration points count does not match the written calibration points count."); + + for (int i = 0; i < w_calibration_points.Count; i++) { - writer.WriteData(vm.CalibrationPoints, "CalibrationData"); + Assert.AreEqual(w_calibration_points[i].X + w_calibration_points[i].Y, r_calibration_points[i].X + r_calibration_points[i].Y, $"Calibration points at index {i} are not equal."); } Helper.ShowInExplorer(temp_file); |
