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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml.cs b/UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml.cs
new file mode 100644
index 0000000..f8acf19
--- /dev/null
+++ b/UVtools.WPF/Controls/Tools/ToolCalculatorControl.axaml.cs
@@ -0,0 +1,51 @@
+using Avalonia.Markup.Xaml;
+using UVtools.Core.FileFormats;
+using UVtools.Core.Operations;
+
+namespace UVtools.WPF.Controls.Tools
+{
+ public class ToolCalculatorControl : ToolControl
+ {
+ public OperationCalculator Operation { get; }
+
+ public FileFormat SlicerFile => App.SlicerFile;
+
+ public ToolCalculatorControl()
+ {
+ InitializeComponent();
+ BaseOperation = Operation = new OperationCalculator
+ {
+ CalcMillimetersToPixels = new OperationCalculator.MillimetersToPixels(SlicerFile.Resolution, SlicerFile.Display),
+ CalcLightOffDelay = new OperationCalculator.LightOffDelayC(
+ (decimal)SlicerFile.LiftHeight, (decimal)SlicerFile.BottomLiftHeight,
+ (decimal)SlicerFile.LiftSpeed, (decimal)SlicerFile.BottomLiftSpeed,
+ (decimal)SlicerFile.RetractSpeed, (decimal)SlicerFile.RetractSpeed)
+ };
+ }
+
+ private void InitializeComponent()
+ {
+ AvaloniaXamlLoader.Load(this);
+ }
+
+ public void LightOffDelaySetParameters(byte side)
+ {
+ if (side == 0) // Bottom layers
+ {
+ SlicerFile.BottomLiftHeight = (float)Operation.CalcLightOffDelay.BottomLiftHeight;
+ SlicerFile.BottomLiftSpeed = (float)Operation.CalcLightOffDelay.BottomLiftSpeed;
+ SlicerFile.RetractSpeed = (float)Operation.CalcLightOffDelay.RetractSpeed;
+ SlicerFile.BottomLayerOffTime = (float)Operation.CalcLightOffDelay.BottomLightOffDelay;
+ }
+ else // Normal layers
+ {
+ SlicerFile.LiftHeight = (float)Operation.CalcLightOffDelay.LiftHeight;
+ SlicerFile.LiftSpeed = (float)Operation.CalcLightOffDelay.LiftSpeed;
+ SlicerFile.RetractSpeed = (float)Operation.CalcLightOffDelay.RetractSpeed;
+ SlicerFile.LayerOffTime = (float)Operation.CalcLightOffDelay.LightOffDelay;
+ }
+
+ App.MainWindow.CanSave = true;
+ }
+ }
+}
diff --git a/UVtools.WPF/MainWindow.LayerPreview.cs b/UVtools.WPF/MainWindow.LayerPreview.cs
index bc55b2f..a3e8a7d 100644
--- a/UVtools.WPF/MainWindow.LayerPreview.cs
+++ b/UVtools.WPF/MainWindow.LayerPreview.cs
@@ -426,6 +426,13 @@ namespace UVtools.WPF
{
if (!IsFileLoaded) return;
+ var sanitizedLayerIndex = Math.Min(_actualLayer, SlicerFile.LastLayerIndex);
+ if (sanitizedLayerIndex != _actualLayer)
+ {
+ _actualLayer = sanitizedLayerIndex;
+ InvalidateLayerNavigation();
+ }
+
Stopwatch watch = Stopwatch.StartNew();
LayerCache.Layer = SlicerFile[_actualLayer];
diff --git a/UVtools.WPF/MainWindow.axaml.cs b/UVtools.WPF/MainWindow.axaml.cs
index add99a9..01316c7 100644
--- a/UVtools.WPF/MainWindow.axaml.cs
+++ b/UVtools.WPF/MainWindow.axaml.cs
@@ -36,7 +36,6 @@ using UVtools.WPF.Extensions;
using UVtools.WPF.Structures;
using UVtools.WPF.Windows;
using Bitmap = Avalonia.Media.Imaging.Bitmap;
-using Ellipse = Avalonia.Controls.Shapes.Ellipse;
using Helpers = UVtools.WPF.Controls.Helpers;
using Path = System.IO.Path;
@@ -185,6 +184,14 @@ namespace UVtools.WPF
Source = new Bitmap(App.GetAsset("/Assets/Icons/resize-16x16.png"))
}
},
+ new MenuItem
+ {
+ Tag = new OperationCalculator(),
+ Icon = new Avalonia.Controls.Image
+ {
+ Source = new Bitmap(App.GetAsset("/Assets/Icons/calculator-16x16.png"))
+ }
+ },
};
public static MenuItem[] LayerActionsMenu { get; } =
@@ -387,8 +394,11 @@ namespace UVtools.WPF
{
ProcessFiles(e.Data.GetFileNames().ToArray());
});
+ }
-
+ protected override void OnOpened(EventArgs e)
+ {
+ base.OnOpened(e);
AddLog($"{About.Software} start");
if (Settings.General.CheckForUpdatesOnStartup)
@@ -397,6 +407,10 @@ namespace UVtools.WPF
}
ProcessFiles(Program.Args);
+ if (!IsFileLoaded && Settings.General.LoadDemoFileOnStartup)
+ {
+ ProcessFile(About.DemoFile);
+ }
}
private void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
diff --git a/UVtools.WPF/UVtools.WPF.csproj b/UVtools.WPF/UVtools.WPF.csproj
index 249e72b..c5ef92c 100644
--- a/UVtools.WPF/UVtools.WPF.csproj
+++ b/UVtools.WPF/UVtools.WPF.csproj
@@ -86,6 +86,9 @@
+
+ PreserveNewest
+
diff --git a/UVtools.WPF/UserSettings.cs b/UVtools.WPF/UserSettings.cs
index a5e5ca3..4c1ac0d 100644
--- a/UVtools.WPF/UserSettings.cs
+++ b/UVtools.WPF/UserSettings.cs
@@ -32,6 +32,7 @@ namespace UVtools.WPF
{
private bool _startMaximized = true;
private bool _checkForUpdatesOnStartup = true;
+ private bool _loadDemoFileOnStartup = true;
private byte _defaultOpenFileExtensionIndex;
private string _defaultDirectoryOpenFile;
private string _defaultDirectorySaveFile;
@@ -54,6 +55,12 @@ namespace UVtools.WPF
set => this.RaiseAndSetIfChanged(ref _checkForUpdatesOnStartup, value);
}
+ public bool LoadDemoFileOnStartup
+ {
+ get => _loadDemoFileOnStartup;
+ set => this.RaiseAndSetIfChanged(ref _loadDemoFileOnStartup, value);
+ }
+
public byte DefaultOpenFileExtensionIndex
{
get => _defaultOpenFileExtensionIndex;
@@ -670,6 +677,7 @@ namespace UVtools.WPF
}
#endregion
+ #region Pixel Editor
[Serializable]
public sealed class PixelEditorUserSettings : ReactiveObject
{
@@ -837,7 +845,9 @@ namespace UVtools.WPF
return MemberwiseClone() as PixelEditorUserSettings;
}
}
+ #endregion
+ #region Layer Repair
[Serializable]
public sealed class LayerRepairUserSettings : ReactiveObject
{
@@ -896,6 +906,7 @@ namespace UVtools.WPF
return MemberwiseClone() as LayerRepairUserSettings;
}
}
+ #endregion
#endregion
diff --git a/UVtools.WPF/Windows/ToolWindow.axaml b/UVtools.WPF/Windows/ToolWindow.axaml
index fde3de4..57247c4 100644
--- a/UVtools.WPF/Windows/ToolWindow.axaml
+++ b/UVtools.WPF/Windows/ToolWindow.axaml
@@ -234,6 +234,7 @@