mirror of
https://github.com/riegera2412/UVtools.git
synced 2026-07-08 17:42:31 +02:00
2c7ad09dc0
- (Change) `Layer.IsBottomLayer` no longer calculate the value using the position of the layer, a new property `IsBottomLayerByHeight` is now used to get that result - (Improvement) Tool - Double exposure: Increase the bottom layer count per cloned bottom layer - (Improvement) Calibration - Exposure time finder: Set the absolute bottom layer count accordingly when also testing for bottom time - (Improvement) Goo: Enforce Wait times or Light-off-delay flag based on property set - (Fix) AnyCubic and Goo: `PerLayerSetting` flag was set inverted causing printer not to follow layer settings when it should and also the otherwise (#689) - (Fix) Tool - Scripting: Prevent from reload UI multiple times when using profiles (#694)
73 lines
1.8 KiB
C#
73 lines
1.8 KiB
C#
using Avalonia.Markup.Xaml;
|
|
using Avalonia.Media.Imaging;
|
|
using Avalonia.Threading;
|
|
using System.Timers;
|
|
using UVtools.Core.Operations;
|
|
using UVtools.WPF.Controls.Tools;
|
|
using UVtools.WPF.Extensions;
|
|
using UVtools.WPF.Windows;
|
|
|
|
namespace UVtools.WPF.Controls.Calibrators;
|
|
|
|
public class CalibrateLiftHeightControl : ToolControl
|
|
{
|
|
public OperationCalibrateLiftHeight Operation => BaseOperation as OperationCalibrateLiftHeight;
|
|
|
|
private readonly Timer _timer;
|
|
|
|
private Bitmap _previewImage;
|
|
public Bitmap PreviewImage
|
|
{
|
|
get => _previewImage;
|
|
set => RaiseAndSetIfChanged(ref _previewImage, value);
|
|
}
|
|
|
|
public CalibrateLiftHeightControl()
|
|
{
|
|
BaseOperation = new OperationCalibrateLiftHeight(SlicerFile);
|
|
if (!ValidateSpawn()) return;
|
|
|
|
InitializeComponent();
|
|
|
|
|
|
_timer = new Timer(20)
|
|
{
|
|
AutoReset = false
|
|
};
|
|
_timer.Elapsed += (sender, e) => Dispatcher.UIThread.InvokeAsync(UpdatePreview);
|
|
}
|
|
|
|
private void InitializeComponent()
|
|
{
|
|
AvaloniaXamlLoader.Load(this);
|
|
}
|
|
|
|
public override void Callback(ToolWindow.Callbacks callback)
|
|
{
|
|
if (App.SlicerFile is null) return;
|
|
switch (callback)
|
|
{
|
|
case ToolWindow.Callbacks.Init:
|
|
case ToolWindow.Callbacks.AfterLoadProfile:
|
|
Operation.PropertyChanged += (sender, e) =>
|
|
{
|
|
_timer.Stop();
|
|
_timer.Start();
|
|
};
|
|
_timer.Stop();
|
|
_timer.Start();
|
|
break;
|
|
}
|
|
}
|
|
|
|
public void UpdatePreview()
|
|
{
|
|
var layers = Operation.GetLayers();
|
|
_previewImage?.Dispose();
|
|
PreviewImage = layers[0].ToBitmapParallel();
|
|
foreach (var layer in layers)
|
|
{
|
|
layer.Dispose();
|
|
}
|
|
}
|
|
} |