mirror of
https://github.com/riegera2412/UVtools.git
synced 2026-07-11 19:12:31 +02:00
ada646f92d
- **(Add) PrusaSlicer printers:** - Creality HALOT-MAX CL-133 - Nova3D Elfin2 - Nova3D Elfin2 Mono SE - Nova3D Elfin3 Mini - Nova3D Bene4 - Nova3D Bene5 - Nova3D Whale - Nova3D Whale2 - **About box:** - (Add) Runtime information - (Fix) Limit panels width and height to not overgrow - **(Fix) macOS:** - macOS version auto-upgrade (Will only work on future releases and if running v2.16.0 or greater) - Demo file not loading - Auto disable windows scaling factor when on Monjave or greater on new instalations - (Add) Tool: Raise platform on print finish - (Add) CXDLP: Support for Halot MAX CL-133 - (Improvement) Tools: Better handling/validation of tools that are unable to run with abstraction - (Improvement) CWS: Simplify filenames inside the archive - (Upgrade) EmguCV from 4.5.2 to 4.5.3 - (Change) Allow to set layer `LightPWM` to 0 - (Fix) Arrange dropdown arrow from layer image save icon to be at center
134 lines
4.5 KiB
C#
134 lines
4.5 KiB
C#
/*
|
|
* GNU AFFERO GENERAL PUBLIC LICENSE
|
|
* Version 3, 19 November 2007
|
|
* Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
|
* Everyone is permitted to copy and distribute verbatim copies
|
|
* of this license document, but changing it is not allowed.
|
|
*/
|
|
|
|
using System;
|
|
using UVtools.Core.FileFormats;
|
|
using UVtools.Core.Operations;
|
|
|
|
namespace UVtools.Core.GCode
|
|
{
|
|
public class GCodeLayer
|
|
{
|
|
private float? _waitTimeBeforeCure;
|
|
private float? _exposureTime;
|
|
private float? _waitTimeAfterCure;
|
|
private float? _liftHeight;
|
|
private float? _liftSpeed;
|
|
private float? _waitTimeAfterLift;
|
|
private float? _retractSpeed;
|
|
|
|
public enum GCodeLastParsedLine : byte
|
|
{
|
|
LayerIndex,
|
|
}
|
|
|
|
public bool IsValid => LayerIndex.HasValue;
|
|
|
|
public FileFormat SlicerFile { get; }
|
|
public uint? LayerIndex { get; set; }
|
|
public float? PositionZ { get; set; }
|
|
|
|
public float? WaitTimeBeforeCure
|
|
{
|
|
get => _waitTimeBeforeCure;
|
|
set => _waitTimeBeforeCure = value is null ? null : (float)Math.Round(value.Value, 2);
|
|
}
|
|
|
|
public float? ExposureTime
|
|
{
|
|
get => _exposureTime;
|
|
set => _exposureTime = value is null ? null : (float)Math.Round(value.Value, 2);
|
|
}
|
|
|
|
public float? WaitTimeAfterCure
|
|
{
|
|
get => _waitTimeAfterCure;
|
|
set => _waitTimeAfterCure = value is null ? null : (float)Math.Round(value.Value, 2);
|
|
}
|
|
|
|
public float? LiftHeight
|
|
{
|
|
get => _liftHeight;
|
|
set => _liftHeight = value is null ? null : (float)Math.Round(value.Value, 2);
|
|
}
|
|
|
|
public float? LiftSpeed
|
|
{
|
|
get => _liftSpeed;
|
|
set => _liftSpeed = value is null ? null : (float)Math.Round(value.Value, 2);
|
|
}
|
|
|
|
public float? WaitTimeAfterLift
|
|
{
|
|
get => _waitTimeAfterLift;
|
|
set => _waitTimeAfterLift = value is null ? null : (float)Math.Round(value.Value, 2);
|
|
}
|
|
|
|
public float? RetractSpeed
|
|
{
|
|
get => _retractSpeed;
|
|
set => _retractSpeed = value is null ? null : (float)Math.Round(value.Value, 2);
|
|
}
|
|
|
|
public byte? LightPWM { get; set; }
|
|
|
|
public bool IsExposing => LightPWM.HasValue && !IsAfterLightOff;
|
|
|
|
public bool IsAfterLightOff { get; set; }
|
|
|
|
public GCodeLayer(FileFormat slicerFile)
|
|
{
|
|
SlicerFile = slicerFile;
|
|
}
|
|
|
|
public void Init()
|
|
{
|
|
LayerIndex = null;
|
|
PositionZ = null;
|
|
WaitTimeBeforeCure = null;
|
|
ExposureTime = null;
|
|
WaitTimeAfterCure = null;
|
|
LiftHeight = null;
|
|
LiftSpeed = null;
|
|
WaitTimeAfterLift = null;
|
|
RetractSpeed = null;
|
|
LightPWM = null;
|
|
IsAfterLightOff = false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Set gathered data to the layer
|
|
/// </summary>
|
|
public void SetLayer()
|
|
{
|
|
if (!IsValid) return;
|
|
uint layerIndex = LayerIndex.Value;
|
|
var layer = SlicerFile[layerIndex];
|
|
|
|
if(PositionZ.HasValue) layer.PositionZ = PositionZ.Value;
|
|
layer.WaitTimeBeforeCure = WaitTimeBeforeCure ?? 0;
|
|
layer.ExposureTime = ExposureTime ?? SlicerFile.GetInitialLayerValueOrNormal(layerIndex, SlicerFile.BottomExposureTime, SlicerFile.ExposureTime);
|
|
layer.WaitTimeAfterCure = WaitTimeAfterCure ?? 0;
|
|
layer.LiftHeight = LiftHeight ?? 0;
|
|
layer.LiftSpeed = LiftSpeed ?? SlicerFile.GetInitialLayerValueOrNormal(layerIndex, SlicerFile.BottomLiftSpeed, SlicerFile.LiftSpeed);
|
|
layer.WaitTimeAfterLift = WaitTimeAfterLift ?? 0;
|
|
layer.RetractSpeed = RetractSpeed ?? SlicerFile.RetractSpeed;
|
|
layer.LightPWM = LightPWM ?? 0;//SlicerFile.GetInitialLayerValueOrNormal(layerIndex, SlicerFile.BottomLightPWM, SlicerFile.LightPWM);
|
|
|
|
if (SlicerFile.GCode.SyncMovementsWithDelay) // Dirty fix of the value
|
|
{
|
|
var syncTime = OperationCalculator.LightOffDelayC.CalculateSeconds(layer.LiftHeight, layer.LiftSpeed, layer.RetractSpeed, 1.5f);
|
|
if (syncTime < layer.WaitTimeBeforeCure)
|
|
{
|
|
layer.WaitTimeBeforeCure = (float) Math.Round(layer.WaitTimeBeforeCure - syncTime, 2);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|