From 5cc29e8d51dfdf7801ad03a58d83aec6f7138b6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tiago=20Concei=C3=A7=C3=A3o?= Date: Thu, 15 Oct 2020 02:42:23 +0100 Subject: [PATCH] WPF Calculator --- UVtools.Core/About.cs | 2 + UVtools.Core/FileFormats/CWSFile.cs | 81 ++- UVtools.Core/FileFormats/ChituboxFile.cs | 103 +++- UVtools.Core/FileFormats/ChituboxZipFile.cs | 103 +++- UVtools.Core/FileFormats/FileFormat.cs | 5 +- UVtools.Core/FileFormats/ImageFile.cs | 13 +- UVtools.Core/FileFormats/LGSFile.cs | 72 ++- UVtools.Core/FileFormats/PHZFile.cs | 102 +++- UVtools.Core/FileFormats/PWSFile.cs | 66 ++- UVtools.Core/FileFormats/SL1File.cs | 50 +- UVtools.Core/FileFormats/UVJFile.cs | 104 +++- UVtools.Core/FileFormats/ZCodexFile.cs | 43 +- UVtools.Core/Operations/Operation.cs | 2 + .../Operations/OperationCalculator.cs | 8 +- .../Controls/Tools/CtrlToolCalculator.cs | 1 + UVtools.GUI/FrmMain.cs | 2 +- UVtools.InstallerMM/UVtools.InstallerMM.wxs | 4 +- UVtools.WPF/Controls/AdvancedImageBox.cs | 6 +- .../Tools/ToolCalculatorControl.axaml | 507 ++++++++++++++++++ .../Tools/ToolCalculatorControl.axaml.cs | 51 ++ UVtools.WPF/MainWindow.LayerPreview.cs | 7 + UVtools.WPF/MainWindow.axaml.cs | 18 +- UVtools.WPF/UVtools.WPF.csproj | 3 + UVtools.WPF/UserSettings.cs | 11 + UVtools.WPF/Windows/ToolWindow.axaml | 1 + UVtools.WPF/Windows/ToolWindow.axaml.cs | 8 + 26 files changed, 1238 insertions(+), 135 deletions(-) create mode 100644 UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml create mode 100644 UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml.cs diff --git a/UVtools.Core/About.cs b/UVtools.Core/About.cs index 3821fdb..b6c740d 100644 --- a/UVtools.Core/About.cs +++ b/UVtools.Core/About.cs @@ -6,6 +6,8 @@ * of this license document, but changing it is not allowed. */ +using System.IO; + namespace UVtools.Core { public static class About diff --git a/UVtools.Core/FileFormats/CWSFile.cs b/UVtools.Core/FileFormats/CWSFile.cs index 77828ca..95f639d 100644 --- a/UVtools.Core/FileFormats/CWSFile.cs +++ b/UVtools.Core/FileFormats/CWSFile.cs @@ -155,24 +155,41 @@ namespace UVtools.Core.FileFormats public override uint ResolutionX { get => SliceSettings.Xres; - set => OutputSettings.XResolution = SliceSettings.Xres = (ushort) value; + set + { + OutputSettings.XResolution = SliceSettings.Xres = (ushort) value; + RaisePropertyChanged(); + } } public override uint ResolutionY { get => SliceSettings.Yres; - set => OutputSettings.YResolution = SliceSettings.Yres = (ushort) value; + set + { + OutputSettings.YResolution = SliceSettings.Yres = (ushort) value; + RaisePropertyChanged(); + } } public override float DisplayWidth { get => OutputSettings.PlatformXSize; - set => OutputSettings.PlatformXSize = value; + set + { + OutputSettings.PlatformXSize = value; + RaisePropertyChanged(); + } } + public override float DisplayHeight { get => OutputSettings.PlatformYSize; - set => OutputSettings.PlatformYSize = value; + set + { + OutputSettings.PlatformYSize = value; + RaisePropertyChanged(); + } } public override byte AntiAliasing => (byte) OutputSettings.AntiAliasingValue; @@ -180,7 +197,11 @@ namespace UVtools.Core.FileFormats public override float LayerHeight { get => SliceSettings.Thickness; - set => OutputSettings.LayerThickness = SliceSettings.Thickness = value; + set + { + OutputSettings.LayerThickness = SliceSettings.Thickness = value; + RaisePropertyChanged(); + } } public override uint LayerCount @@ -196,49 +217,81 @@ namespace UVtools.Core.FileFormats public override ushort BottomLayerCount { get => SliceSettings.HeadLayersNum; - set => SliceSettings.HeadLayersNum = value; + set + { + SliceSettings.HeadLayersNum = value; + RaisePropertyChanged(); + } } public override float BottomExposureTime { get => (float) Math.Round(SliceSettings.HeadLayersExpoMs / 1000f, 2); - set => SliceSettings.HeadLayersExpoMs = (uint) (value * 1000f); + set + { + SliceSettings.HeadLayersExpoMs = (uint) (value * 1000f); + RaisePropertyChanged(); + } } public override float ExposureTime { get => (float) Math.Round(SliceSettings.LayersExpoMs / 1000f, 2); - set => SliceSettings.LayersExpoMs = (uint) (value * 1000f); + set + { + SliceSettings.LayersExpoMs = (uint) (value * 1000f); + RaisePropertyChanged(); + } } - + public override float LiftHeight { get => SliceSettings.LiftDistance; - set => SliceSettings.LiftDistance = value; + set + { + SliceSettings.LiftDistance = value; + RaisePropertyChanged(); + } } public override float LiftSpeed { get => SliceSettings.LiftDownSpeed; - set => SliceSettings.LiftDownSpeed = value; + set + { + SliceSettings.LiftDownSpeed = value; + RaisePropertyChanged(); + } } public override float RetractSpeed { get => OutputSettings.ZLiftRetractRate; - set => OutputSettings.ZLiftRetractRate = value; + set + { + OutputSettings.ZLiftRetractRate = value; + RaisePropertyChanged(); + } } public override byte BottomLightPWM { get => OutputSettings.BottomLightPWM; - set => OutputSettings.BottomLightPWM = value; + set + { + OutputSettings.BottomLightPWM = value; + RaisePropertyChanged(); + } } public override byte LightPWM { get => OutputSettings.LightPWM; - set => OutputSettings.LightPWM = value; + set + { + OutputSettings.LightPWM = value; + RaisePropertyChanged(); + } } diff --git a/UVtools.Core/FileFormats/ChituboxFile.cs b/UVtools.Core/FileFormats/ChituboxFile.cs index 2a931b8..e2542e7 100644 --- a/UVtools.Core/FileFormats/ChituboxFile.cs +++ b/UVtools.Core/FileFormats/ChituboxFile.cs @@ -999,24 +999,41 @@ namespace UVtools.Core.FileFormats public override uint ResolutionX { get => HeaderSettings.ResolutionX; - set => HeaderSettings.ResolutionX = value; + set + { + HeaderSettings.ResolutionX = value; + RaisePropertyChanged(); + } } public override uint ResolutionY { get => HeaderSettings.ResolutionY; - set => HeaderSettings.ResolutionY = value; + set + { + HeaderSettings.ResolutionY = value; + RaisePropertyChanged(); + } } public override float DisplayWidth { get => HeaderSettings.BedSizeX; - set => HeaderSettings.BedSizeX = value; + set + { + HeaderSettings.BedSizeX = value; + RaisePropertyChanged(); + } } + public override float DisplayHeight { get => HeaderSettings.BedSizeY; - set => HeaderSettings.BedSizeY = value; + set + { + HeaderSettings.BedSizeY = value; + RaisePropertyChanged(); + } } public override byte AntiAliasing => (byte) (IsCbtFile ? SlicerInfoSettings.AntiAliasLevel : HeaderSettings.AntiAliasLevel); @@ -1024,7 +1041,11 @@ namespace UVtools.Core.FileFormats public override float LayerHeight { get => HeaderSettings.LayerHeightMilimeter; - set => HeaderSettings.LayerHeightMilimeter = value; + set + { + HeaderSettings.LayerHeightMilimeter = value; + RaisePropertyChanged(); + } } public override uint LayerCount @@ -1039,73 +1060,121 @@ namespace UVtools.Core.FileFormats public override ushort BottomLayerCount { get => (ushort) HeaderSettings.BottomLayersCount; - set => HeaderSettings.BottomLayersCount = value; + set + { + HeaderSettings.BottomLayersCount = value; + RaisePropertyChanged(); + } } public override float BottomExposureTime { get => HeaderSettings.BottomExposureSeconds; - set => HeaderSettings.BottomExposureSeconds = value; + set + { + HeaderSettings.BottomExposureSeconds = value; + RaisePropertyChanged(); + } } public override float ExposureTime { get => HeaderSettings.LayerExposureSeconds; - set => HeaderSettings.LayerExposureSeconds = value; + set + { + HeaderSettings.LayerExposureSeconds = value; + RaisePropertyChanged(); + } } public override float BottomLayerOffTime { get => PrintParametersSettings.BottomLightOffDelay; - set => PrintParametersSettings.BottomLightOffDelay = value; + set + { + PrintParametersSettings.BottomLightOffDelay = value; + RaisePropertyChanged(); + } } public override float LayerOffTime { get => PrintParametersSettings.LightOffDelay; - set => HeaderSettings.LayerOffTime = PrintParametersSettings.LightOffDelay = value; + set + { + HeaderSettings.LayerOffTime = PrintParametersSettings.LightOffDelay = value; + RaisePropertyChanged(); + } } public override float BottomLiftHeight { get => PrintParametersSettings.BottomLiftHeight; - set => PrintParametersSettings.BottomLiftHeight = value; + set + { + PrintParametersSettings.BottomLiftHeight = value; + RaisePropertyChanged(); + } } public override float LiftHeight { get => PrintParametersSettings.LiftHeight; - set => PrintParametersSettings.LiftHeight = value; + set + { + PrintParametersSettings.LiftHeight = value; + RaisePropertyChanged(); + } } public override float BottomLiftSpeed { get => PrintParametersSettings.BottomLiftSpeed; - set => PrintParametersSettings.BottomLiftSpeed = value; + set + { + PrintParametersSettings.BottomLiftSpeed = value; + RaisePropertyChanged(); + } } public override float LiftSpeed { get => PrintParametersSettings.LiftSpeed; - set => PrintParametersSettings.LiftSpeed = value; + set + { + PrintParametersSettings.LiftSpeed = value; + RaisePropertyChanged(); + } } public override float RetractSpeed { get => PrintParametersSettings.RetractSpeed; - set => PrintParametersSettings.RetractSpeed = value; + set + { + PrintParametersSettings.RetractSpeed = value; + RaisePropertyChanged(); + } } public override byte BottomLightPWM { get => (byte) HeaderSettings.BottomLightPWM; - set => HeaderSettings.BottomLightPWM = value; + set + { + HeaderSettings.BottomLightPWM = value; + RaisePropertyChanged(); + } } public override byte LightPWM { get => (byte) HeaderSettings.BottomLightPWM; - set => HeaderSettings.BottomLightPWM = value; + set + { + HeaderSettings.BottomLightPWM = value; + RaisePropertyChanged(); + } } public override float PrintTime => HeaderSettings.PrintTime; diff --git a/UVtools.Core/FileFormats/ChituboxZipFile.cs b/UVtools.Core/FileFormats/ChituboxZipFile.cs index ff9aace..70f69d3 100644 --- a/UVtools.Core/FileFormats/ChituboxZipFile.cs +++ b/UVtools.Core/FileFormats/ChituboxZipFile.cs @@ -130,24 +130,41 @@ namespace UVtools.Core.FileFormats public override uint ResolutionX { get => HeaderSettings.ResolutionX; - set => HeaderSettings.ResolutionX = value; + set + { + HeaderSettings.ResolutionX = value; + RaisePropertyChanged(); + } } public override uint ResolutionY { get => HeaderSettings.ResolutionY; - set => HeaderSettings.ResolutionY = value; + set + { + HeaderSettings.ResolutionY = value; + RaisePropertyChanged(); + } } public override float DisplayWidth { get => HeaderSettings.MachineX; - set => HeaderSettings.MachineX = value; + set + { + HeaderSettings.MachineX = value; + RaisePropertyChanged(); + } } + public override float DisplayHeight { get => HeaderSettings.MachineY; - set => HeaderSettings.MachineX = value; + set + { + HeaderSettings.MachineX = value; + RaisePropertyChanged(); + } } public override byte AntiAliasing => HeaderSettings.AntiAliasing; @@ -155,7 +172,11 @@ namespace UVtools.Core.FileFormats public override float LayerHeight { get => HeaderSettings.LayerHeight; - set => HeaderSettings.LayerHeight = value; + set + { + HeaderSettings.LayerHeight = value; + RaisePropertyChanged(); + } } public override uint LayerCount @@ -170,73 +191,121 @@ namespace UVtools.Core.FileFormats public override ushort BottomLayerCount { get => HeaderSettings.BottomLayerCount; - set => HeaderSettings.BottomLayerCount = HeaderSettings.BottomLayCount = value; + set + { + HeaderSettings.BottomLayerCount = HeaderSettings.BottomLayCount = value; + RaisePropertyChanged(); + } } public override float BottomExposureTime { get => HeaderSettings.BottomLayerExposureTime; - set => HeaderSettings.BottomLayerExposureTime = HeaderSettings.BottomLayExposureTime = value; + set + { + HeaderSettings.BottomLayerExposureTime = HeaderSettings.BottomLayExposureTime = value; + RaisePropertyChanged(); + } } public override float ExposureTime { get => HeaderSettings.LayerExposureTime; - set => HeaderSettings.LayerExposureTime = value; + set + { + HeaderSettings.LayerExposureTime = value; + RaisePropertyChanged(); + } } public override float BottomLayerOffTime { get => HeaderSettings.BottomLightOffTime; - set => HeaderSettings.BottomLightOffTime = value; + set + { + HeaderSettings.BottomLightOffTime = value; + RaisePropertyChanged(); + } } public override float LayerOffTime { get => HeaderSettings.LightOffTime; - set => HeaderSettings.LightOffTime = value; + set + { + HeaderSettings.LightOffTime = value; + RaisePropertyChanged(); + } } public override float BottomLiftHeight { get => HeaderSettings.BottomLiftHeight; - set => HeaderSettings.BottomLiftHeight = value; + set + { + HeaderSettings.BottomLiftHeight = value; + RaisePropertyChanged(); + } } public override float LiftHeight { get => HeaderSettings.LiftHeight; - set => HeaderSettings.LiftHeight = value; + set + { + HeaderSettings.LiftHeight = value; + RaisePropertyChanged(); + } } public override float BottomLiftSpeed { get => HeaderSettings.BottomLiftSpeed; - set => HeaderSettings.BottomLiftSpeed = value; + set + { + HeaderSettings.BottomLiftSpeed = value; + RaisePropertyChanged(); + } } public override float LiftSpeed { get => HeaderSettings.LiftSpeed; - set => HeaderSettings.LiftSpeed = value; + set + { + HeaderSettings.LiftSpeed = value; + RaisePropertyChanged(); + } } public override float RetractSpeed { get => HeaderSettings.RetractSpeed; - set => HeaderSettings.RetractSpeed = value; + set + { + HeaderSettings.RetractSpeed = value; + RaisePropertyChanged(); + } } public override byte BottomLightPWM { get => HeaderSettings.BottomLightPWM; - set => HeaderSettings.BottomLightPWM = value; + set + { + HeaderSettings.BottomLightPWM = value; + RaisePropertyChanged(); + } } public override byte LightPWM { get => HeaderSettings.LightPWM; - set => HeaderSettings.LightPWM = value; + set + { + HeaderSettings.LightPWM = value; + RaisePropertyChanged(); + } } public override float PrintTime => HeaderSettings.EstimatedPrintTime; diff --git a/UVtools.Core/FileFormats/FileFormat.cs b/UVtools.Core/FileFormats/FileFormat.cs index d3359d2..61ac81b 100644 --- a/UVtools.Core/FileFormats/FileFormat.cs +++ b/UVtools.Core/FileFormats/FileFormat.cs @@ -18,6 +18,7 @@ using System.Threading.Tasks; using Emgu.CV; using Emgu.CV.CvEnum; using UVtools.Core.Extensions; +using UVtools.Core.Objects; using UVtools.Core.Operations; namespace UVtools.Core.FileFormats @@ -25,7 +26,7 @@ namespace UVtools.Core.FileFormats /// /// Slicer representation /// - public abstract class FileFormat : IFileFormat, IDisposable, IEquatable, IEnumerable + public abstract class FileFormat : BindableBase, IFileFormat, IDisposable, IEquatable, IEnumerable { public const string TemporaryFileAppend = ".tmp"; #region Enums @@ -357,6 +358,7 @@ namespace UVtools.Core.FileFormats { ResolutionX = (uint) value.Width; ResolutionY = (uint) value.Height; + RaisePropertyChanged(); } } @@ -371,6 +373,7 @@ namespace UVtools.Core.FileFormats { DisplayWidth = value.Width; DisplayHeight = value.Height; + RaisePropertyChanged(); } } diff --git a/UVtools.Core/FileFormats/ImageFile.cs b/UVtools.Core/FileFormats/ImageFile.cs index 2f2777b..7158897 100644 --- a/UVtools.Core/FileFormats/ImageFile.cs +++ b/UVtools.Core/FileFormats/ImageFile.cs @@ -40,12 +40,21 @@ namespace UVtools.Core.FileFormats public override float DisplayWidth { get => ResolutionX; - set => ResolutionX = (uint) value; + set + { + ResolutionX = (uint) value; + RaisePropertyChanged(); + } } + public override float DisplayHeight { get => ResolutionY; - set => ResolutionY = (uint)value; + set + { + ResolutionY = (uint) value; + RaisePropertyChanged(); + } } public override byte AntiAliasing { get; } = 1; diff --git a/UVtools.Core/FileFormats/LGSFile.cs b/UVtools.Core/FileFormats/LGSFile.cs index 6847cdf..a98ccee 100644 --- a/UVtools.Core/FileFormats/LGSFile.cs +++ b/UVtools.Core/FileFormats/LGSFile.cs @@ -237,13 +237,21 @@ namespace UVtools.Core.FileFormats public override uint ResolutionX { get => (uint) HeaderSettings.ResolutionX; - set => HeaderSettings.ResolutionX = value; + set + { + HeaderSettings.ResolutionX = value; + RaisePropertyChanged(); + } } public override uint ResolutionY { get => (uint)HeaderSettings.ResolutionY; - set => HeaderSettings.ResolutionY = value; + set + { + HeaderSettings.ResolutionY = value; + RaisePropertyChanged(); + } } public override float DisplayWidth @@ -263,7 +271,11 @@ namespace UVtools.Core.FileFormats public override float LayerHeight { get => HeaderSettings.LayerHeight; - set => HeaderSettings.LayerHeight = value; + set + { + HeaderSettings.LayerHeight = value; + RaisePropertyChanged(); + } } public override uint LayerCount @@ -274,55 +286,91 @@ namespace UVtools.Core.FileFormats public override ushort BottomLayerCount { get => (ushort)(HeaderSettings.BottomHeight / LayerHeight); - set => HeaderSettings.BottomHeight = value * LayerHeight; + set + { + HeaderSettings.BottomHeight = value * LayerHeight; + RaisePropertyChanged(); + } } public override float BottomExposureTime { get => (float)Math.Round(HeaderSettings.BottomExposureTimeMs / 1000, 2); - set => HeaderSettings.BottomExposureTimeMs = value * 1000; + set + { + HeaderSettings.BottomExposureTimeMs = value * 1000; + RaisePropertyChanged(); + } } public override float ExposureTime { get => (float)Math.Round(HeaderSettings.ExposureTimeMs / 1000, 2); - set => HeaderSettings.ExposureTimeMs = value * 1000; + set + { + HeaderSettings.ExposureTimeMs = value * 1000; + RaisePropertyChanged(); + } } public override float BottomLayerOffTime { get => HeaderSettings.BottomLightOffDelayMs; - set => HeaderSettings.BottomLightOffDelayMs = value; + set + { + HeaderSettings.BottomLightOffDelayMs = value; + RaisePropertyChanged(); + } } public override float LayerOffTime { get => HeaderSettings.LightOffDelayMs; - set => HeaderSettings.LightOffDelayMs = value; + set + { + HeaderSettings.LightOffDelayMs = value; + RaisePropertyChanged(); + } } public override float BottomLiftHeight { get => HeaderSettings.BottomLiftHeight; - set => HeaderSettings.BottomLiftHeight = value; + set + { + HeaderSettings.BottomLiftHeight = value; + RaisePropertyChanged(); + } } public override float LiftHeight { get => HeaderSettings.LiftHeight; - set => HeaderSettings.LiftHeight = value; + set + { + HeaderSettings.LiftHeight = value; + RaisePropertyChanged(); + } } public override float BottomLiftSpeed { get => HeaderSettings.BottomLiftSpeed; - set => HeaderSettings.BottomLiftSpeed = HeaderSettings.BottomLiftSpeed_ = value; + set + { + HeaderSettings.BottomLiftSpeed = HeaderSettings.BottomLiftSpeed_ = value; + RaisePropertyChanged(); + } } public override float LiftSpeed { get => HeaderSettings.LiftSpeed; - set => HeaderSettings.LiftSpeed = HeaderSettings.LiftSpeed_ = value; + set + { + HeaderSettings.LiftSpeed = HeaderSettings.LiftSpeed_ = value; + RaisePropertyChanged(); + } } public override float PrintTime => 0; diff --git a/UVtools.Core/FileFormats/PHZFile.cs b/UVtools.Core/FileFormats/PHZFile.cs index 54bb5f9..f4bfcc1 100644 --- a/UVtools.Core/FileFormats/PHZFile.cs +++ b/UVtools.Core/FileFormats/PHZFile.cs @@ -715,26 +715,42 @@ namespace UVtools.Core.FileFormats public override uint ResolutionX { get => HeaderSettings.ResolutionX; - set => HeaderSettings.ResolutionX = value; + set + { + HeaderSettings.ResolutionX = value; + RaisePropertyChanged(); + } } public override uint ResolutionY { get => HeaderSettings.ResolutionY; - set => HeaderSettings.ResolutionY = value; + set + { + HeaderSettings.ResolutionY = value; + RaisePropertyChanged(); + } } public override float DisplayWidth { get => HeaderSettings.BedSizeX; - set => HeaderSettings.BedSizeX = value; + set + { + HeaderSettings.BedSizeX = value; + RaisePropertyChanged(); + } } public override float DisplayHeight { get => HeaderSettings.BedSizeY; - set => HeaderSettings.BedSizeY = value; + set + { + HeaderSettings.BedSizeY = value; + RaisePropertyChanged(); + } } public override byte AntiAliasing => (byte) HeaderSettings.AntiAliasLevelInfo; @@ -742,7 +758,11 @@ namespace UVtools.Core.FileFormats public override float LayerHeight { get => HeaderSettings.LayerHeightMilimeter; - set => HeaderSettings.LayerHeightMilimeter = value; + set + { + HeaderSettings.LayerHeightMilimeter = value; + RaisePropertyChanged(); + } } public override uint LayerCount @@ -757,73 +777,121 @@ namespace UVtools.Core.FileFormats public override ushort BottomLayerCount { get => (ushort)HeaderSettings.BottomLayersCount; - set => HeaderSettings.BottomLayersCount = value; + set + { + HeaderSettings.BottomLayersCount = value; + RaisePropertyChanged(); + } } public override float BottomExposureTime { get => HeaderSettings.BottomExposureSeconds; - set => HeaderSettings.BottomExposureSeconds = value; + set + { + HeaderSettings.BottomExposureSeconds = value; + RaisePropertyChanged(); + } } public override float ExposureTime { get => HeaderSettings.LayerExposureSeconds; - set => HeaderSettings.LayerExposureSeconds = value; + set + { + HeaderSettings.LayerExposureSeconds = value; + RaisePropertyChanged(); + } } public override float BottomLayerOffTime { get => HeaderSettings.BottomLightOffDelay; - set => HeaderSettings.BottomLightOffDelay = value; + set + { + HeaderSettings.BottomLightOffDelay = value; + RaisePropertyChanged(); + } } public override float LayerOffTime { get => HeaderSettings.LayerOffTime; - set => HeaderSettings.LayerOffTime = value; + set + { + HeaderSettings.LayerOffTime = value; + RaisePropertyChanged(); + } } public override float BottomLiftHeight { get => HeaderSettings.BottomLiftHeight; - set => HeaderSettings.BottomLiftHeight = value; + set + { + HeaderSettings.BottomLiftHeight = value; + RaisePropertyChanged(); + } } public override float LiftHeight { get => HeaderSettings.LiftHeight; - set => HeaderSettings.LiftHeight = value; + set + { + HeaderSettings.LiftHeight = value; + RaisePropertyChanged(); + } } public override float BottomLiftSpeed { get => HeaderSettings.BottomLiftSpeed; - set => HeaderSettings.BottomLiftSpeed = value; + set + { + HeaderSettings.BottomLiftSpeed = value; + RaisePropertyChanged(); + } } public override float LiftSpeed { get => HeaderSettings.LiftSpeed; - set => HeaderSettings.LiftSpeed = value; + set + { + HeaderSettings.LiftSpeed = value; + RaisePropertyChanged(); + } } public override float RetractSpeed { get => HeaderSettings.RetractSpeed; - set => HeaderSettings.RetractSpeed = value; + set + { + HeaderSettings.RetractSpeed = value; + RaisePropertyChanged(); + } } public override byte BottomLightPWM { get => (byte)HeaderSettings.BottomLightPWM; - set => HeaderSettings.BottomLightPWM = value; + set + { + HeaderSettings.BottomLightPWM = value; + RaisePropertyChanged(); + } } public override byte LightPWM { get => (byte)HeaderSettings.BottomLightPWM; - set => HeaderSettings.BottomLightPWM = value; + set + { + HeaderSettings.BottomLightPWM = value; + RaisePropertyChanged(); + } } public override float PrintTime => HeaderSettings.PrintTime; diff --git a/UVtools.Core/FileFormats/PWSFile.cs b/UVtools.Core/FileFormats/PWSFile.cs index c66ad07..c44ce3e 100644 --- a/UVtools.Core/FileFormats/PWSFile.cs +++ b/UVtools.Core/FileFormats/PWSFile.cs @@ -806,13 +806,21 @@ namespace UVtools.Core.FileFormats public override uint ResolutionX { get => HeaderSettings.ResolutionX; - set => HeaderSettings.ResolutionX = value; + set + { + HeaderSettings.ResolutionX = value; + RaisePropertyChanged(); + } } public override uint ResolutionY { get => HeaderSettings.ResolutionY; - set => HeaderSettings.ResolutionY = value; + set + { + HeaderSettings.ResolutionY = value; + RaisePropertyChanged(); + } } public override float DisplayWidth @@ -831,54 +839,90 @@ namespace UVtools.Core.FileFormats public override float LayerHeight { get => HeaderSettings.LayerHeight; - set => HeaderSettings.LayerHeight = value; + set + { + HeaderSettings.LayerHeight = value; + RaisePropertyChanged(); + } } public override uint LayerCount { - set => LayersDefinition.LayersCount = LayerCount; + set + { + LayersDefinition.LayersCount = LayerCount; + RaisePropertyChanged(); + } } public override ushort BottomLayerCount { get => (ushort)HeaderSettings.BottomLayersCount; - set => HeaderSettings.BottomLayersCount = value; + set + { + HeaderSettings.BottomLayersCount = value; + RaisePropertyChanged(); + } } public override float BottomExposureTime { get => HeaderSettings.BottomExposureSeconds; - set => HeaderSettings.BottomExposureSeconds = value; + set + { + HeaderSettings.BottomExposureSeconds = value; + RaisePropertyChanged(); + } } public override float ExposureTime { get => HeaderSettings.LayerExposureTime; - set => HeaderSettings.LayerExposureTime = value; + set + { + HeaderSettings.LayerExposureTime = value; + RaisePropertyChanged(); + } } public override float LayerOffTime { get => HeaderSettings.LayerOffTime; - set => HeaderSettings.LayerOffTime = value; + set + { + HeaderSettings.LayerOffTime = value; + RaisePropertyChanged(); + } } public override float LiftHeight { get => HeaderSettings.LiftHeight; - set => HeaderSettings.LiftHeight = value; + set + { + HeaderSettings.LiftHeight = value; + RaisePropertyChanged(); + } } public override float LiftSpeed { get => (float) Math.Round(HeaderSettings.LiftSpeed * 60, 2); - set => HeaderSettings.LiftSpeed = (float) Math.Round(value / 60, 2); + set + { + HeaderSettings.LiftSpeed = (float) Math.Round(value / 60, 2); + RaisePropertyChanged(); + } } public override float RetractSpeed { get => (float)Math.Round(HeaderSettings.RetractSpeed * 60, 2); - set => HeaderSettings.RetractSpeed = (float)Math.Round(value / 60, 2); + set + { + HeaderSettings.RetractSpeed = (float) Math.Round(value / 60, 2); + RaisePropertyChanged(); + } } public override float PrintTime => 0; diff --git a/UVtools.Core/FileFormats/SL1File.cs b/UVtools.Core/FileFormats/SL1File.cs index a568252..6871842 100644 --- a/UVtools.Core/FileFormats/SL1File.cs +++ b/UVtools.Core/FileFormats/SL1File.cs @@ -318,24 +318,41 @@ namespace UVtools.Core.FileFormats public override uint ResolutionX { get => PrinterSettings.DisplayPixelsX; - set => PrinterSettings.DisplayPixelsX = value; + set + { + PrinterSettings.DisplayPixelsX = value; + RaisePropertyChanged(); + } } public override uint ResolutionY { get => PrinterSettings.DisplayPixelsY; - set => PrinterSettings.DisplayPixelsY = value; + set + { + PrinterSettings.DisplayPixelsY = value; + RaisePropertyChanged(); + } } public override float DisplayWidth { get => PrinterSettings.DisplayWidth; - set => PrinterSettings.DisplayWidth = value; + set + { + PrinterSettings.DisplayWidth = value; + RaisePropertyChanged(); + } } + public override float DisplayHeight { get => PrinterSettings.DisplayHeight; - set => PrinterSettings.DisplayHeight = value; + set + { + PrinterSettings.DisplayHeight = value; + RaisePropertyChanged(); + } } public override byte AntiAliasing => (byte) (PrinterSettings.GammaCorrection > 0 ? LookupCustomValue(Keyword_AntiAliasing, 4) : 1); @@ -343,7 +360,11 @@ namespace UVtools.Core.FileFormats public override float LayerHeight { get => OutputConfigSettings.LayerHeight; - set => OutputConfigSettings.LayerHeight = value; + set + { + OutputConfigSettings.LayerHeight = value; + RaisePropertyChanged(); + } } public override uint LayerCount @@ -352,25 +373,38 @@ namespace UVtools.Core.FileFormats { OutputConfigSettings.NumSlow = 0; OutputConfigSettings.NumFast = (ushort) LayerCount; + RaisePropertyChanged(); } } public override ushort BottomLayerCount { get => OutputConfigSettings.NumFade; - set => OutputConfigSettings.NumFade = value; + set + { + OutputConfigSettings.NumFade = value; + RaisePropertyChanged(); + } } public override float BottomExposureTime { get => OutputConfigSettings.ExpTimeFirst; - set => OutputConfigSettings.ExpTimeFirst = value; + set + { + OutputConfigSettings.ExpTimeFirst = value; + RaisePropertyChanged(); + } } public override float ExposureTime { get => OutputConfigSettings.ExpTime; - set => OutputConfigSettings.ExpTime = value; + set + { + OutputConfigSettings.ExpTime = value; + RaisePropertyChanged(); + } } public override float PrintTime => OutputConfigSettings.PrintTime; diff --git a/UVtools.Core/FileFormats/UVJFile.cs b/UVtools.Core/FileFormats/UVJFile.cs index 9071ec3..fab9d98 100644 --- a/UVtools.Core/FileFormats/UVJFile.cs +++ b/UVtools.Core/FileFormats/UVJFile.cs @@ -159,24 +159,41 @@ namespace UVtools.Core.FileFormats public override uint ResolutionX { get => JsonSettings.Properties.Size.X; - set => JsonSettings.Properties.Size.X = (ushort) value; + set + { + JsonSettings.Properties.Size.X = (ushort) value; + RaisePropertyChanged(); + } } public override uint ResolutionY { get => JsonSettings.Properties.Size.Y; - set => JsonSettings.Properties.Size.Y = (ushort) value; + set + { + JsonSettings.Properties.Size.Y = (ushort) value; + RaisePropertyChanged(); + } } public override float DisplayWidth { get => JsonSettings.Properties.Size.Millimeter.X; - set => JsonSettings.Properties.Size.Millimeter.X = value; + set + { + JsonSettings.Properties.Size.Millimeter.X = value; + RaisePropertyChanged(); + } } + public override float DisplayHeight { get => JsonSettings.Properties.Size.Millimeter.Y; - set => JsonSettings.Properties.Size.Millimeter.Y = value; + set + { + JsonSettings.Properties.Size.Millimeter.Y = value; + RaisePropertyChanged(); + } } public override byte AntiAliasing => JsonSettings.Properties.AntiAliasLevel; @@ -184,7 +201,11 @@ namespace UVtools.Core.FileFormats public override float LayerHeight { get => JsonSettings.Properties.Size.LayerHeight; - set => JsonSettings.Properties.Size.LayerHeight = value; + set + { + JsonSettings.Properties.Size.LayerHeight = value; + RaisePropertyChanged(); + } } public override uint LayerCount @@ -193,79 +214,128 @@ namespace UVtools.Core.FileFormats { JsonSettings.Properties.Size.Layers = LayerCount; JsonSettings.Layers.Clear(); + RaisePropertyChanged(); } } public override ushort BottomLayerCount { get => JsonSettings.Properties.Bottom.Count; - set => JsonSettings.Properties.Bottom.Count = value; + set + { + JsonSettings.Properties.Bottom.Count = value; + RaisePropertyChanged(); + } } public override float BottomExposureTime { get => JsonSettings.Properties.Bottom.LightOnTime; - set => JsonSettings.Properties.Bottom.LightOnTime = value; + set + { + JsonSettings.Properties.Bottom.LightOnTime = value; + RaisePropertyChanged(); + } } public override float ExposureTime { get => JsonSettings.Properties.Exposure.LightOnTime; - set => JsonSettings.Properties.Exposure.LightOnTime = value; + set + { + JsonSettings.Properties.Exposure.LightOnTime = value; + RaisePropertyChanged(); + } } public override float BottomLayerOffTime { get => JsonSettings.Properties.Bottom.LightOffTime; - set => JsonSettings.Properties.Bottom.LightOffTime = value; + set + { + JsonSettings.Properties.Bottom.LightOffTime = value; + RaisePropertyChanged(); + } } public override float LayerOffTime { get => JsonSettings.Properties.Exposure.LightOffTime; - set => JsonSettings.Properties.Exposure.LightOffTime = value; + set + { + JsonSettings.Properties.Exposure.LightOffTime = value; + RaisePropertyChanged(); + } } public override float BottomLiftHeight { get => JsonSettings.Properties.Bottom.LiftHeight; - set => JsonSettings.Properties.Bottom.LiftHeight = value; + set + { + JsonSettings.Properties.Bottom.LiftHeight = value; + RaisePropertyChanged(); + } } public override float LiftHeight { get => JsonSettings.Properties.Exposure.LiftHeight; - set => JsonSettings.Properties.Exposure.LiftHeight = value; + set + { + JsonSettings.Properties.Exposure.LiftHeight = value; + RaisePropertyChanged(); + } } public override float BottomLiftSpeed { get => JsonSettings.Properties.Bottom.LiftSpeed; - set => JsonSettings.Properties.Bottom.LiftSpeed = value; + set + { + JsonSettings.Properties.Bottom.LiftSpeed = value; + RaisePropertyChanged(); + } } public override float LiftSpeed { get => JsonSettings.Properties.Exposure.LiftSpeed; - set => JsonSettings.Properties.Exposure.LiftSpeed = value; + set + { + JsonSettings.Properties.Exposure.LiftSpeed = value; + RaisePropertyChanged(); + } } public override float RetractSpeed { get => JsonSettings.Properties.Exposure.RetractSpeed; - set => JsonSettings.Properties.Exposure.RetractSpeed = value; + set + { + JsonSettings.Properties.Exposure.RetractSpeed = value; + RaisePropertyChanged(); + } } public override byte BottomLightPWM { get => JsonSettings.Properties.Bottom.LightPWM; - set => JsonSettings.Properties.Bottom.LightPWM = value; + set + { + JsonSettings.Properties.Bottom.LightPWM = value; + RaisePropertyChanged(); + } } public override byte LightPWM { get => JsonSettings.Properties.Exposure.LightPWM; - set => JsonSettings.Properties.Exposure.LightPWM = value; + set + { + JsonSettings.Properties.Exposure.LightPWM = value; + RaisePropertyChanged(); + } } public override float PrintTime => 0; diff --git a/UVtools.Core/FileFormats/ZCodexFile.cs b/UVtools.Core/FileFormats/ZCodexFile.cs index 6612d4c..35eec6d 100644 --- a/UVtools.Core/FileFormats/ZCodexFile.cs +++ b/UVtools.Core/FileFormats/ZCodexFile.cs @@ -195,7 +195,11 @@ namespace UVtools.Core.FileFormats public override float LayerHeight { get => ResinMetadataSettings.LayerThickness; - set => ResinMetadataSettings.LayerThickness = value; + set + { + ResinMetadataSettings.LayerThickness = value; + RaisePropertyChanged(); + } } public override uint LayerCount @@ -205,43 +209,68 @@ namespace UVtools.Core.FileFormats UserSettings.MaxLayer = LayerCount - 1; ResinMetadataSettings.TotalLayersCount = LayerCount; RebuildGCode(); + RaisePropertyChanged(); } } public override ushort BottomLayerCount { get => ResinMetadataSettings.BottomLayersNumber; - set => ResinMetadataSettings.BottomLayersNumber = value; + set + { + ResinMetadataSettings.BottomLayersNumber = value; + RaisePropertyChanged(); + } } public override float BottomExposureTime { get => (float) Math.Round(UserSettings.BottomLayerExposureTime / 1000f, 2); - set => UserSettings.BottomLayerExposureTime = (uint) (value * 1000f); + set + { + UserSettings.BottomLayerExposureTime = (uint) (value * 1000f); + RaisePropertyChanged(); + } } public override float ExposureTime { get => (float) Math.Round(UserSettings.LayerExposureTime / 1000f, 2); - set => UserSettings.LayerExposureTime = (uint) (value * 1000f); + set + { + UserSettings.LayerExposureTime = (uint) (value * 1000f); + RaisePropertyChanged(); + } } public override float LiftHeight { get => UserSettings.ZLiftDistance; - set => UserSettings.ZLiftDistance = value; + set + { + UserSettings.ZLiftDistance = value; + RaisePropertyChanged(); + } } public override float LiftSpeed { get => UserSettings.ZLiftFeedRate; - set => UserSettings.ZLiftFeedRate = value; + set + { + UserSettings.ZLiftFeedRate = value; + RaisePropertyChanged(); + } } public override float RetractSpeed { get => UserSettings.ZLiftRetractRate; - set => UserSettings.ZLiftRetractRate = value; + set + { + UserSettings.ZLiftRetractRate = value; + RaisePropertyChanged(); + } } public override float PrintTime => ResinMetadataSettings.PrintTime; diff --git a/UVtools.Core/Operations/Operation.cs b/UVtools.Core/Operations/Operation.cs index fae625b..b9d374c 100644 --- a/UVtools.Core/Operations/Operation.cs +++ b/UVtools.Core/Operations/Operation.cs @@ -71,6 +71,8 @@ namespace UVtools.Core.Operations /// public virtual string ProgressAction => Id; + public bool HaveAction => !string.IsNullOrEmpty(ProgressAction); + /// /// Validates the operation /// diff --git a/UVtools.Core/Operations/OperationCalculator.cs b/UVtools.Core/Operations/OperationCalculator.cs index 2e85d33..0a92b14 100644 --- a/UVtools.Core/Operations/OperationCalculator.cs +++ b/UVtools.Core/Operations/OperationCalculator.cs @@ -116,11 +116,11 @@ namespace UVtools.Core.Operations } } - public decimal PixelsPerMillimeterX => DisplayWidth > 0 ? Math.Round(ResolutionX / DisplayWidth, 3) : 0; - public decimal PixelsPerMillimeterY => DisplayHeight > 0 ? Math.Round(ResolutionY / DisplayHeight, 3) : 0; + public decimal PixelsPerMillimeterX => DisplayWidth > 0 ? Math.Round(ResolutionX / DisplayWidth, 2) : 0; + public decimal PixelsPerMillimeterY => DisplayHeight > 0 ? Math.Round(ResolutionY / DisplayHeight, 2) : 0; - public decimal PixelsX => PixelsPerMillimeterX * Millimeters; - public decimal PixelsY => PixelsPerMillimeterY * Millimeters; + public decimal PixelsX => Math.Round(PixelsPerMillimeterX * Millimeters, 2); + public decimal PixelsY => Math.Round(PixelsPerMillimeterY * Millimeters, 2); } diff --git a/UVtools.GUI/Controls/Tools/CtrlToolCalculator.cs b/UVtools.GUI/Controls/Tools/CtrlToolCalculator.cs index 5b9f050..a98ae7a 100644 --- a/UVtools.GUI/Controls/Tools/CtrlToolCalculator.cs +++ b/UVtools.GUI/Controls/Tools/CtrlToolCalculator.cs @@ -191,6 +191,7 @@ namespace UVtools.GUI.Controls.Tools { Program.SlicerFile.BottomLiftHeight = (float)Operation.CalcLightOffDelay.BottomLiftHeight; Program.SlicerFile.BottomLiftSpeed = (float)Operation.CalcLightOffDelay.BottomLiftSpeed; + Program.SlicerFile.RetractSpeed = (float)Operation.CalcLightOffDelay.RetractSpeed; Program.SlicerFile.BottomLayerOffTime = (float)Operation.CalcLightOffDelay.BottomLightOffDelay; Program.FrmMain.CanSave = true; lbLightOffDelayCurrentBottomValue.Text = $"Current value: {Program.SlicerFile.BottomLayerOffTime}"; diff --git a/UVtools.GUI/FrmMain.cs b/UVtools.GUI/FrmMain.cs index dba1c02..056cfb5 100644 --- a/UVtools.GUI/FrmMain.cs +++ b/UVtools.GUI/FrmMain.cs @@ -2296,7 +2296,7 @@ namespace UVtools.GUI /// /// Reshow current layer /// - void ShowLayer() => ShowLayer(Math.Min(ActualLayer, SlicerFile.LayerCount - 1)); + void ShowLayer() => ShowLayer(Math.Min(ActualLayer, SlicerFile.LastLayerIndex)); void ShowLayer(bool direction) { diff --git a/UVtools.InstallerMM/UVtools.InstallerMM.wxs b/UVtools.InstallerMM/UVtools.InstallerMM.wxs index 80e8abf..360f50e 100644 --- a/UVtools.InstallerMM/UVtools.InstallerMM.wxs +++ b/UVtools.InstallerMM/UVtools.InstallerMM.wxs @@ -94,8 +94,8 @@ - - + + diff --git a/UVtools.WPF/Controls/AdvancedImageBox.cs b/UVtools.WPF/Controls/AdvancedImageBox.cs index 1e68063..01948ac 100644 --- a/UVtools.WPF/Controls/AdvancedImageBox.cs +++ b/UVtools.WPF/Controls/AdvancedImageBox.cs @@ -992,7 +992,7 @@ namespace UVtools.WPF.Controls var x = imageLocation.X * ZoomFactor - relativeDisplayPoint.X; var y = imageLocation.Y * ZoomFactor - relativeDisplayPoint.Y; - //Offset = new Vector(x, y); + Offset = new Vector(x, y); _canRender = true; @@ -1022,7 +1022,7 @@ namespace UVtools.WPF.Controls timer.Start();*/ - /*Debug.WriteLine( + Debug.WriteLine( $"X/Y: {x},{y} | \n" + $"Offset: {Offset} | \n" + $"ZoomFactor: {ZoomFactor} | \n" + @@ -1030,7 +1030,7 @@ namespace UVtools.WPF.Controls $"MAX: {HorizontalScrollBarMaximum},{VerticalScrollBarMaximum} \n" + $"ViewPort: {Viewport.Width},{Viewport.Height} \n" + $"Container: {SizedContainer.Width},{SizedContainer.Height} \n" + - $"Relative: {relativeDisplayPoint}");*/ + $"Relative: {relativeDisplayPoint}"); } /// diff --git a/UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml b/UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml new file mode 100644 index 0000000..c9fa7fd --- /dev/null +++ b/UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml @@ -0,0 +1,507 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +