don't validate the leveling while recovering a print
This commit is contained in:
parent
d31bc57304
commit
d8c47419f5
9 changed files with 162 additions and 195 deletions
|
|
@ -186,7 +186,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
}
|
||||
}
|
||||
|
||||
public bool HasProbeWithLevelingValidation
|
||||
public bool ValidateLevelingWithProbe
|
||||
{
|
||||
get
|
||||
{
|
||||
|
|
|
|||
|
|
@ -237,7 +237,7 @@ namespace MatterHackers.MatterControl
|
|||
&& printer.Settings.Helpers.PrintLevelingData is PrintLevelingData levelingData
|
||||
&& !levelingData.IssuedLevelingTempWarning
|
||||
&& Math.Abs(bedTemperature - levelingData.BedTemperature) > 10
|
||||
&& !printer.Settings.Helpers.HasProbeWithLevelingValidation)
|
||||
&& !printer.Settings.Helpers.ValidateLevelingWithProbe)
|
||||
{
|
||||
errors.Add(
|
||||
new ValidationError(ValidationErrors.BedLevelingTemperature)
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@ either expressed or implied, of the FreeBSD Project.
|
|||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MatterHackers.MatterControl.SlicerConfiguration;
|
||||
using MatterHackers.VectorMath;
|
||||
|
||||
|
|
@ -72,5 +73,151 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
|||
yield return position;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool NeedsToBeRun(PrinterConfig printer)
|
||||
{
|
||||
PrintLevelingData levelingData = printer.Settings.Helpers.PrintLevelingData;
|
||||
|
||||
var required = printer.Settings.GetValue<bool>(SettingsKey.print_leveling_required_to_print);
|
||||
if (required && levelingData == null)
|
||||
{
|
||||
// need but don't have data
|
||||
return true;
|
||||
}
|
||||
|
||||
if (printer.Settings.GetValue<bool>(SettingsKey.has_hardware_leveling))
|
||||
{
|
||||
// If printer has hardware leveling, software leveling is disabled
|
||||
return false;
|
||||
}
|
||||
|
||||
var enabled = printer.Settings.GetValue<bool>(SettingsKey.print_leveling_enabled);
|
||||
|
||||
if (enabled
|
||||
&& printer.Settings.GetValue<bool>(SettingsKey.has_z_probe)
|
||||
&& printer.Settings.GetValue<bool>(SettingsKey.use_z_probe)
|
||||
&& printer.Settings.GetValue<bool>(SettingsKey.validate_leveling))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (printer.Settings.Helpers.ValidateLevelingWithProbe)
|
||||
{
|
||||
// If we are going to validate the leveling before printing we do not need to
|
||||
// make the user do it as part of printer calibration.
|
||||
return false;
|
||||
}
|
||||
|
||||
// check if leveling is turned on
|
||||
if (required && !enabled)
|
||||
{
|
||||
// need but not turned on
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!required && !enabled)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// check that there are no duplicate points
|
||||
var positionCounts = from x in levelingData.SampledPositions
|
||||
group x by x into g
|
||||
let count = g.Count()
|
||||
orderby count descending
|
||||
select new { Value = g.Key, Count = count };
|
||||
|
||||
foreach (var x in positionCounts)
|
||||
{
|
||||
if (x.Count > 1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// check that the solution last measured is the currently selected solution
|
||||
if (printer.Settings.GetValue<LevelingSystem>(SettingsKey.print_leveling_solution) != levelingData.LevelingSystem)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// check that the bed temperature at probe time was close enough to the current print bed temp
|
||||
double requiredLevelingTemp = printer.Settings.GetValue<bool>(SettingsKey.has_heated_bed) ?
|
||||
printer.Settings.GetValue<double>(SettingsKey.bed_temperature)
|
||||
: 0;
|
||||
|
||||
// check that the number of points sampled is correct for the solution
|
||||
switch (levelingData.LevelingSystem)
|
||||
{
|
||||
case LevelingSystem.Probe3Points:
|
||||
if (levelingData.SampledPositions.Count != 3) // different criteria for what is not initialized
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LevelingSystem.Probe7PointRadial:
|
||||
if (levelingData.SampledPositions.Count != 7) // different criteria for what is not initialized
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LevelingSystem.Probe13PointRadial:
|
||||
if (levelingData.SampledPositions.Count != 13) // different criteria for what is not initialized
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LevelingSystem.Probe100PointRadial:
|
||||
if (levelingData.SampledPositions.Count != 100) // different criteria for what is not initialized
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LevelingSystem.Probe3x3Mesh:
|
||||
if (levelingData.SampledPositions.Count != 9) // different criteria for what is not initialized
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LevelingSystem.Probe5x5Mesh:
|
||||
if (levelingData.SampledPositions.Count != 25) // different criteria for what is not initialized
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LevelingSystem.Probe10x10Mesh:
|
||||
if (levelingData.SampledPositions.Count != 100) // different criteria for what is not initialized
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LevelingSystem.ProbeCustom:
|
||||
if (levelingData.SampledPositions.Count != LevelWizardCustom.ParseLevelingSamplePoints(printer).Count)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,182 +0,0 @@
|
|||
/*
|
||||
Copyright (c) 2018, Lars Brubaker, John Lewin
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
The views and conclusions contained in the software and documentation are those
|
||||
of the authors and should not be interpreted as representing official policies,
|
||||
either expressed or implied, of the FreeBSD Project.
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using MatterHackers.MatterControl.SlicerConfiguration;
|
||||
|
||||
namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
||||
{
|
||||
public static class LevelingValidation
|
||||
{
|
||||
public static bool NeedsToBeRun(PrinterConfig printer)
|
||||
{
|
||||
PrintLevelingData levelingData = printer.Settings.Helpers.PrintLevelingData;
|
||||
|
||||
var required = printer.Settings.GetValue<bool>(SettingsKey.print_leveling_required_to_print);
|
||||
if (required && levelingData == null)
|
||||
{
|
||||
// need but don't have data
|
||||
return true;
|
||||
}
|
||||
|
||||
if (printer.Settings.GetValue<bool>(SettingsKey.has_hardware_leveling))
|
||||
{
|
||||
// If printer has hardware leveling, software leveling is disabled
|
||||
return false;
|
||||
}
|
||||
|
||||
var enabled = printer.Settings.GetValue<bool>(SettingsKey.print_leveling_enabled);
|
||||
|
||||
if (enabled
|
||||
&& printer.Settings.GetValue<bool>(SettingsKey.has_z_probe)
|
||||
&& printer.Settings.GetValue<bool>(SettingsKey.use_z_probe)
|
||||
&& printer.Settings.GetValue<bool>(SettingsKey.validate_leveling))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (printer.Settings.Helpers.HasProbeWithLevelingValidation)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// check if leveling is turned on
|
||||
if (required && !enabled)
|
||||
{
|
||||
// need but not turned on
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!required && !enabled)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// check that there are no duplicate points
|
||||
var positionCounts = from x in levelingData.SampledPositions
|
||||
group x by x into g
|
||||
let count = g.Count()
|
||||
orderby count descending
|
||||
select new { Value = g.Key, Count = count };
|
||||
|
||||
foreach (var x in positionCounts)
|
||||
{
|
||||
if (x.Count > 1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// check that the solution last measured is the currently selected solution
|
||||
if (printer.Settings.GetValue<LevelingSystem>(SettingsKey.print_leveling_solution) != levelingData.LevelingSystem)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// check that the bed temperature at probe time was close enough to the current print bed temp
|
||||
double requiredLevelingTemp = printer.Settings.GetValue<bool>(SettingsKey.has_heated_bed) ?
|
||||
printer.Settings.GetValue<double>(SettingsKey.bed_temperature)
|
||||
: 0;
|
||||
|
||||
// check that the number of points sampled is correct for the solution
|
||||
switch (levelingData.LevelingSystem)
|
||||
{
|
||||
case LevelingSystem.Probe3Points:
|
||||
if (levelingData.SampledPositions.Count != 3) // different criteria for what is not initialized
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LevelingSystem.Probe7PointRadial:
|
||||
if (levelingData.SampledPositions.Count != 7) // different criteria for what is not initialized
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LevelingSystem.Probe13PointRadial:
|
||||
if (levelingData.SampledPositions.Count != 13) // different criteria for what is not initialized
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LevelingSystem.Probe100PointRadial:
|
||||
if (levelingData.SampledPositions.Count != 100) // different criteria for what is not initialized
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LevelingSystem.Probe3x3Mesh:
|
||||
if (levelingData.SampledPositions.Count != 9) // different criteria for what is not initialized
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LevelingSystem.Probe5x5Mesh:
|
||||
if (levelingData.SampledPositions.Count != 25) // different criteria for what is not initialized
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LevelingSystem.Probe10x10Mesh:
|
||||
if (levelingData.SampledPositions.Count != 100) // different criteria for what is not initialized
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case LevelingSystem.ProbeCustom:
|
||||
if (levelingData.SampledPositions.Count != LevelWizardCustom.ParseLevelingSamplePoints(printer).Count)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -65,9 +65,9 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
|||
|
||||
public override bool Enabled => !hasHardwareLeveling && Visible && printer.Connection.IsConnected && !printer.Connection.Printing && !printer.Connection.Paused;
|
||||
|
||||
public override bool Completed => !hasHardwareLeveling && !LevelingValidation.NeedsToBeRun(printer);
|
||||
public override bool Completed => !hasHardwareLeveling && !LevelingPlan.NeedsToBeRun(printer);
|
||||
|
||||
public override bool SetupRequired => LevelingValidation.NeedsToBeRun(printer);
|
||||
public override bool SetupRequired => LevelingPlan.NeedsToBeRun(printer);
|
||||
|
||||
private void Initialize()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -150,7 +150,7 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
|||
this,
|
||||
levelingStrings.HomingPageInstructions(true, false));
|
||||
|
||||
if (LevelingValidation.NeedsToBeRun(printer))
|
||||
if (LevelingPlan.NeedsToBeRun(printer))
|
||||
{
|
||||
// start heating up the bed as that will be needed next
|
||||
var bedTemperature = printer.Settings.GetValue<bool>(SettingsKey.has_heated_bed) ?
|
||||
|
|
|
|||
|
|
@ -319,7 +319,7 @@ namespace MatterHackers.MatterControl.Library.Export
|
|||
}
|
||||
|
||||
if (levelingEnabled
|
||||
&& !LevelingValidation.NeedsToBeRun(printer))
|
||||
&& !LevelingPlan.NeedsToBeRun(printer))
|
||||
{
|
||||
accumulatedStream = new PrintLevelingStream(printer, accumulatedStream);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2360,12 +2360,12 @@ Make sure that your printer is turned on. Some printers will appear to be connec
|
|||
totalGCodeStream?.Dispose();
|
||||
totalGCodeStream = null;
|
||||
GCodeStream accumulatedStream;
|
||||
var doingPrintRecovery = this.RecoveryIsEnabled && ActivePrintTask != null;
|
||||
if (gcodeStream != null)
|
||||
{
|
||||
gCodeFileSwitcher = new GCodeSwitcher(gcodeStream, Printer);
|
||||
|
||||
if (this.RecoveryIsEnabled
|
||||
&& ActivePrintTask != null) // We are resuming a failed print (do lots of interesting stuff).
|
||||
if (doingPrintRecovery) // We are resuming a failed print (do lots of interesting stuff).
|
||||
{
|
||||
accumulatedStream = new SendProgressStream(new PrintRecoveryStream(gCodeFileSwitcher, Printer, ActivePrintTask.PercentDone), Printer);
|
||||
// And increment the recovery count
|
||||
|
|
@ -2403,12 +2403,14 @@ Make sure that your printer is turned on. Some printers will appear to be connec
|
|||
bool enableLineSplitting = gcodeStream != null && Printer.Settings.GetValue<bool>(SettingsKey.enable_line_splitting);
|
||||
accumulatedStream = maxLengthStream = new MaxLengthStream(Printer, accumulatedStream, enableLineSplitting ? 1 : 2000);
|
||||
|
||||
var hasProbeWithLevelingValidation = Printer.Settings.Helpers.HasProbeWithLevelingValidation;
|
||||
if (!LevelingValidation.NeedsToBeRun(Printer)
|
||||
|| hasProbeWithLevelingValidation)
|
||||
var doValidateLeveling = Printer.Settings.Helpers.ValidateLevelingWithProbe;
|
||||
if (!LevelingPlan.NeedsToBeRun(Printer)
|
||||
|| doValidateLeveling)
|
||||
{
|
||||
if (hasProbeWithLevelingValidation)
|
||||
if (!doingPrintRecovery
|
||||
&& doValidateLeveling)
|
||||
{
|
||||
// make sure we don't validate the leveling while recovering a print
|
||||
accumulatedStream = new ValidatePrintLevelingStream(Printer, accumulatedStream);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -380,7 +380,7 @@ namespace MatterHackers.MatterControl
|
|||
public static bool SetupRequired(PrinterConfig printer, bool requiresLoadedFilament)
|
||||
{
|
||||
return printer == null
|
||||
|| LevelingValidation.NeedsToBeRun(printer) // PrintLevelingWizard
|
||||
|| LevelingPlan.NeedsToBeRun(printer) // PrintLevelingWizard
|
||||
|| ZCalibrationWizard.NeedsToBeRun(printer)
|
||||
|| (requiresLoadedFilament && LoadFilamentWizard.NeedsToBeRun0(printer))
|
||||
|| (requiresLoadedFilament && LoadFilamentWizard.NeedsToBeRun1(printer))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue