From b0d84a0a362cde15831f823e8dadc6d9cfa0aeec Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Wed, 27 Apr 2022 11:58:19 -0700 Subject: [PATCH] Make sure we put the leveling steam in after the max length stream Fixes bug with leveling long lines --- .../Settings/SliceSettingsFields.cs | 1 + .../Library/Export/GCodeExport.cs | 14 +++---- .../Io/MaxLengthStream.cs | 15 +++++++ .../Io/PrintLevelingStream.cs | 11 +++++ .../PrinterCommunication/PrinterConnection.cs | 6 +-- .../MatterControl/GCodeStreamTests.cs | 40 +++++++++---------- 6 files changed, 57 insertions(+), 30 deletions(-) diff --git a/MatterControl.Printing/Settings/SliceSettingsFields.cs b/MatterControl.Printing/Settings/SliceSettingsFields.cs index bf7380d8e..0cb6f21e9 100644 --- a/MatterControl.Printing/Settings/SliceSettingsFields.cs +++ b/MatterControl.Printing/Settings/SliceSettingsFields.cs @@ -2765,6 +2765,7 @@ To Create: ShowAsOverride = false, Show = (settings) => !settings.GetBool(SettingsKey.enable_network_printing), RequiredDisplayDetail = DisplayDetailRequired.Simple, + UiUpdate = UiUpdateRequired.SliceSettings, DefaultValue = "", RebuildGCodeOnChange = false }, diff --git a/MatterControlLib/Library/Export/GCodeExport.cs b/MatterControlLib/Library/Export/GCodeExport.cs index 126f3654e..039192934 100644 --- a/MatterControlLib/Library/Export/GCodeExport.cs +++ b/MatterControlLib/Library/Export/GCodeExport.cs @@ -307,8 +307,6 @@ namespace MatterHackers.MatterControl.Library.Export bool levelingEnabled = printer.Settings.GetValue(SettingsKey.print_leveling_enabled) && applyLeveling; - accumulatedStream = new BabyStepsStream(printer, accumulatedStream); - if (levelingEnabled && printer.Settings.GetValue(SettingsKey.enable_line_splitting)) { @@ -319,17 +317,19 @@ namespace MatterHackers.MatterControl.Library.Export accumulatedStream = new MaxLengthStream(printer, accumulatedStream, 1000); } + if (printer.Settings.GetValue(SettingsKey.emulate_endstops)) + { + var softwareEndstopsExStream12 = new SoftwareEndstopsStream(printer, accumulatedStream); + accumulatedStream = softwareEndstopsExStream12; + } + if (levelingEnabled && !LevelingPlan.NeedsToBeRun(printer)) { accumulatedStream = new PrintLevelingStream(printer, accumulatedStream); } - if (printer.Settings.GetValue(SettingsKey.emulate_endstops)) - { - var softwareEndstopsExStream12 = new SoftwareEndstopsStream(printer, accumulatedStream); - accumulatedStream = softwareEndstopsExStream12; - } + accumulatedStream = new BabyStepsStream(printer, accumulatedStream); accumulatedStream = new RemoveNOPsStream(printer, accumulatedStream); diff --git a/MatterControlLib/PrinterCommunication/Io/MaxLengthStream.cs b/MatterControlLib/PrinterCommunication/Io/MaxLengthStream.cs index a8639536c..a5263504b 100644 --- a/MatterControlLib/PrinterCommunication/Io/MaxLengthStream.cs +++ b/MatterControlLib/PrinterCommunication/Io/MaxLengthStream.cs @@ -43,6 +43,21 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io public MaxLengthStream(PrinterConfig printer, GCodeStream internalStream, double maxSegmentLength) : base(printer, internalStream) { + // make sure there is no BabyStepStream already (it must come after max length) +#if DEBUG + foreach(var subStream in this.InternalStreams()) + { + if (subStream is BabyStepsStream) + { + throw new Exception("MaxLengthStream must come before BabyStepsSteam (we need the max length points to be baby stepped)."); + } + + if (subStream is PrintLevelingStream) + { + throw new Exception("MaxLengthStream must come before PrintLevelingStream (we need the max length points to be leveled)."); + } + } +#endif this.MaxSegmentLength = maxSegmentLength; } diff --git a/MatterControlLib/PrinterCommunication/Io/PrintLevelingStream.cs b/MatterControlLib/PrinterCommunication/Io/PrintLevelingStream.cs index ace081a2e..fba3f6fdb 100644 --- a/MatterControlLib/PrinterCommunication/Io/PrintLevelingStream.cs +++ b/MatterControlLib/PrinterCommunication/Io/PrintLevelingStream.cs @@ -31,6 +31,7 @@ using MatterControl.Printing; using MatterHackers.MatterControl.ConfigurationPage.PrintLeveling; using MatterHackers.MatterControl.SlicerConfiguration; using MatterHackers.VectorMath; +using System; namespace MatterHackers.MatterControl.PrinterCommunication.Io { @@ -44,6 +45,16 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io public PrintLevelingStream(PrinterConfig printer, GCodeStream internalStream) : base(printer, internalStream) { +#if DEBUG + foreach (var subStream in this.InternalStreams()) + { + if (subStream is BabyStepsStream) + { + throw new Exception("PrintLevelingStream must come before BabyStepsSteam (we need the max length points to be baby stepped)."); + } + } +#endif + // always reset this when we construct AllowLeveling = true; } diff --git a/MatterControlLib/PrinterCommunication/PrinterConnection.cs b/MatterControlLib/PrinterCommunication/PrinterConnection.cs index 3898c7df7..915d90483 100644 --- a/MatterControlLib/PrinterCommunication/PrinterConnection.cs +++ b/MatterControlLib/PrinterCommunication/PrinterConnection.cs @@ -2464,6 +2464,9 @@ Make sure that your printer is turned on. Some printers will appear to be connec accumulatedStream = new ToolSpeedMultiplierStream(Printer, accumulatedStream); } + bool enableLineSplitting = gcodeStream != null && Printer.Settings.GetValue(SettingsKey.enable_line_splitting); + accumulatedStream = maxLengthStream = new MaxLengthStream(Printer, accumulatedStream, enableLineSplitting ? 1 : 2000); + var doValidateLeveling = Printer.Settings.Helpers.ValidateLevelingWithProbe; if (!LevelingPlan.NeedsToBeRun(Printer) || doValidateLeveling) @@ -2480,9 +2483,6 @@ Make sure that your printer is turned on. Some printers will appear to be connec accumulatedStream = new BabyStepsStream(Printer, accumulatedStream); - bool enableLineSplitting = gcodeStream != null && Printer.Settings.GetValue(SettingsKey.enable_line_splitting); - accumulatedStream = maxLengthStream = new MaxLengthStream(Printer, accumulatedStream, enableLineSplitting ? 1 : 2000); - accumulatedStream = waitForTempStream = new WaitForTempStream(Printer, accumulatedStream); accumulatedStream = ExtrusionMultiplierStream = new ExtrusionMultiplierStream(Printer, accumulatedStream); accumulatedStream = FeedRateMultiplierStream = new FeedRateMultiplierStream(Printer, accumulatedStream); diff --git a/Tests/MatterControl.Tests/MatterControl/GCodeStreamTests.cs b/Tests/MatterControl.Tests/MatterControl/GCodeStreamTests.cs index 8c67ef92f..492a7c0da 100644 --- a/Tests/MatterControl.Tests/MatterControl/GCodeStreamTests.cs +++ b/Tests/MatterControl.Tests/MatterControl/GCodeStreamTests.cs @@ -201,16 +201,16 @@ namespace MatterControl.Tests.MatterControl PrintLevelingStream.SoftwareLevelingAppliedMessage, "G1 X0 Y0 Z-0.1 E0 F1000", "G1 E1", - "G1 X1 Y0 Z-0.1", - "G1 X2 Y0 Z-0.1", - "G1 X3 Y0 Z-0.1", - "G1 X4 Y0 Z-0.1", - "G1 X5 Y0 Z-0.1", - "G1 X6 Y0 Z-0.1", - "G1 X7 Y0 Z-0.1", - "G1 X8 Y0 Z-0.1", - "G1 X9 Y0 Z-0.1", - "G1 X10 Y0 Z-0.1", + "G1 X1", + "G1 X2", + "G1 X3", + "G1 X4", + "G1 X5", + "G1 X6", + "G1 X7", + "G1 X8", + "G1 X9", + "G1 X10", }; var printer = new PrinterConfig(new PrinterSettings()); @@ -250,16 +250,16 @@ namespace MatterControl.Tests.MatterControl PrintLevelingStream.SoftwareLevelingAppliedMessage, "G1 X0 Y0 Z-0.1 E0 F1000", "G1 E1", - "G1 X1 Y0 Z-0.1", - "G1 X2 Y0 Z-0.1", - "G1 X3 Y0 Z-0.1", - "G1 X4 Y0 Z-0.1", - "G1 X5 Y0 Z-0.1", - "G1 X6 Y0 Z-0.1", - "G1 X7 Y0 Z-0.1", - "G1 X8 Y0 Z-0.1", - "G1 X9 Y0 Z-0.1", - "G1 X10 Y0 Z-0.1", + "G1 X1", + "G1 X2", + "G1 X3", + "G1 X4", + "G1 X5", + "G1 X6", + "G1 X7", + "G1 X8", + "G1 X9", + "G1 X10", }; var printer = new PrinterConfig(new PrinterSettings());