From 71d2b13830cfc48c8b3df88f6b5de1a3c07b54ab Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Tue, 9 Feb 2021 16:54:31 -0800 Subject: [PATCH] Cancel correctly during leveling validation issue: MatterHackers/MCCentral#6259 If cancel while heating the bed w' leveling validation does not stop imediately --- .../Settings/SliceSettingsFields.cs | 2 +- .../ApplicationView/Config/PrinterConfig.cs | 4 ++-- .../ApplicationView/SettingsValidation.cs | 19 +++++++++++++++++++ .../CustomWidgets/XyCalibrationSelectPage.cs | 4 ++-- .../Io/ValidatePrintLevelingStream.cs | 8 ++------ .../PrinterCommunication/PrinterConnection.cs | 7 +++++-- 6 files changed, 31 insertions(+), 13 deletions(-) diff --git a/MatterControl.Printing/Settings/SliceSettingsFields.cs b/MatterControl.Printing/Settings/SliceSettingsFields.cs index c210eab1d..0cc554dc2 100644 --- a/MatterControl.Printing/Settings/SliceSettingsFields.cs +++ b/MatterControl.Printing/Settings/SliceSettingsFields.cs @@ -454,7 +454,7 @@ namespace MatterHackers.MatterControl.SlicerConfiguration DataEditType = DataEditTypes.OFFSET3, RequiredDisplayDetail = DisplayDetailRequired.Advanced, Units = "mm".Localize(), - ShowIfSet = "!sla_printer", + ShowIfSet = "!sla_printer&extruder_count>1", DefaultValue = "0x0,0x0,0x0,0x0" }, new SliceSettingData() diff --git a/MatterControlLib/ApplicationView/Config/PrinterConfig.cs b/MatterControlLib/ApplicationView/Config/PrinterConfig.cs index 0e36a452c..833a69925 100644 --- a/MatterControlLib/ApplicationView/Config/PrinterConfig.cs +++ b/MatterControlLib/ApplicationView/Config/PrinterConfig.cs @@ -70,7 +70,7 @@ namespace MatterHackers.MatterControl this.Connection.TemporarilyHoldingTemp += ApplicationController.Instance.Connection_TemporarilyHoldingTemp; this.Connection.PrintStarted += ApplicationController.Instance.Connection_PrintStarted; this.Connection.PrintFinished += ApplicationController.Instance.Connection_PrintFinished; - this.Connection.PrintCanceled += ApplicationController.Instance.Connection_PrintCanceled; + this.Connection.CancelCompleted += ApplicationController.Instance.Connection_PrintCanceled; this.Connection.ErrorReported += ApplicationController.Instance.Connection_ErrorReported; this.Connection.CommunicationStateChanged += Connection_CommunicationStateChanged; this.Connection.DetailedPrintingStateChanged += Connection_CommunicationStateChanged; @@ -353,7 +353,7 @@ namespace MatterHackers.MatterControl this.Connection.PrintFinished -= Connection_PrintFinished; this.Connection.TemporarilyHoldingTemp -= ApplicationController.Instance.Connection_TemporarilyHoldingTemp; this.Connection.PrintFinished -= ApplicationController.Instance.Connection_PrintFinished; - this.Connection.PrintCanceled -= ApplicationController.Instance.Connection_PrintCanceled; + this.Connection.CancelCompleted -= ApplicationController.Instance.Connection_PrintCanceled; this.Connection.ErrorReported -= ApplicationController.Instance.Connection_ErrorReported; // Dispose children diff --git a/MatterControlLib/ApplicationView/SettingsValidation.cs b/MatterControlLib/ApplicationView/SettingsValidation.cs index 17d96ec30..97bf4a694 100644 --- a/MatterControlLib/ApplicationView/SettingsValidation.cs +++ b/MatterControlLib/ApplicationView/SettingsValidation.cs @@ -36,6 +36,7 @@ using MatterHackers.Localizations; using MatterHackers.MatterControl.ConfigurationPage.PrintLeveling; using MatterHackers.MatterControl.DesignTools; using MatterHackers.MatterControl.SlicerConfiguration; +using MatterHackers.VectorMath; namespace MatterHackers.MatterControl { @@ -86,6 +87,24 @@ namespace MatterHackers.MatterControl } } + if (!settings.GetValue(SettingsKey.extruder_offset)) + { + var t0Offset = printer.Settings.Helpers.ExtruderOffset(0); + if (t0Offset != Vector3.Zero) + { + errors.Add( + new SettingsValidationError(SettingsKey.extruder_offset) + { + Error = "Nozzle 1 should have offsets set to 0.".Localize(), + ValueDetails = "{0} = {1}\n{2} = {3}".FormatWith( + GetSettingsName(SettingsKey.extruder_offset), + settings.GetValue(SettingsKey.extruder_offset), + GetSettingsName(SettingsKey.extruder_offset), + settings.GetValue(SettingsKey.extruder_offset)), + }); + } + } + // Check to see if current OEM layer matches downloaded OEM layer { if (printer.Settings.GetValue(SettingsKey.make) != "Other" diff --git a/MatterControlLib/CustomWidgets/XyCalibrationSelectPage.cs b/MatterControlLib/CustomWidgets/XyCalibrationSelectPage.cs index d3a6feb29..18798636e 100644 --- a/MatterControlLib/CustomWidgets/XyCalibrationSelectPage.cs +++ b/MatterControlLib/CustomWidgets/XyCalibrationSelectPage.cs @@ -164,7 +164,7 @@ namespace MatterHackers.MatterControl // register callbacks for print completion printer.Connection.Disposed += this.Connection_Disposed; - printer.Connection.PrintCanceled += this.Connection_PrintCanceled; + printer.Connection.CancelCompleted += this.Connection_PrintCanceled; printer.Connection.CommunicationStateChanged += this.Connection_CommunicationStateChanged; // hide this window @@ -206,7 +206,7 @@ namespace MatterHackers.MatterControl { printer.Connection.Disposed -= this.Connection_Disposed; printer.Connection.CommunicationStateChanged -= this.Connection_CommunicationStateChanged; - printer.Connection.PrintCanceled -= this.Connection_PrintCanceled; + printer.Connection.CancelCompleted -= this.Connection_PrintCanceled; } private void Connection_CommunicationStateChanged(object sender, EventArgs e) diff --git a/MatterControlLib/PrinterCommunication/Io/ValidatePrintLevelingStream.cs b/MatterControlLib/PrinterCommunication/Io/ValidatePrintLevelingStream.cs index 69fa19a55..7ab8c0dcb 100644 --- a/MatterControlLib/PrinterCommunication/Io/ValidatePrintLevelingStream.cs +++ b/MatterControlLib/PrinterCommunication/Io/ValidatePrintLevelingStream.cs @@ -63,7 +63,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io public ValidatePrintLevelingStream(PrinterConfig printer, GCodeStream internalStream) : base(printer, internalStream) { - printer.Connection.PrintCanceled += Connection_PrintCanceled; + printer.Connection.CanceleRequested += Connection_PrintCanceled; } private void Connection_PrintCanceled(object sender, EventArgs e) @@ -76,7 +76,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io public override void Dispose() { CancelValidation(); - printer.Connection.PrintCanceled -= Connection_PrintCanceled; + printer.Connection.CanceleRequested -= Connection_PrintCanceled; base.Dispose(); } @@ -145,10 +145,6 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io gcodeAlreadyLeveled = true; } - if (validationRunning && printer.Connection.PrintWasCanceled) - { - CancelValidation(); - } if (lineToSend != null) { diff --git a/MatterControlLib/PrinterCommunication/PrinterConnection.cs b/MatterControlLib/PrinterCommunication/PrinterConnection.cs index c3ecb1d08..8bbfbf562 100644 --- a/MatterControlLib/PrinterCommunication/PrinterConnection.cs +++ b/MatterControlLib/PrinterCommunication/PrinterConnection.cs @@ -156,7 +156,9 @@ namespace MatterHackers.MatterControl.PrinterCommunication public event EventHandler PrintStarted; - public event EventHandler PrintCanceled; + public event EventHandler CanceleRequested; + + public event EventHandler CancelCompleted; public event EventHandler PauseOnLayer; @@ -2263,6 +2265,7 @@ Make sure that your printer is turned on. Some printers will appear to be connec // let the process know we canceled not ended normally. this.printMarkedCanceled = true; + CanceleRequested?.Invoke(this, null); if (markPrintCanceled && ActivePrintTask != null) { @@ -2697,7 +2700,7 @@ Make sure that your printer is turned on. Some printers will appear to be connec this.PrintWasCanceled = true; this.printMarkedCanceled = false; // and finally notify anyone that wants to know - PrintCanceled?.Invoke(this, null); + CancelCompleted?.Invoke(this, null); } else if (CommunicationState == CommunicationStates.Printing) // we finished printing normally {