From 3bb439d1983fe340e1535e020595adfa113c4600 Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Tue, 11 Oct 2016 14:56:36 -0700 Subject: [PATCH] Make it possible to have the print leveling go negative Took out the 2 point leveling solution MatterHackers/MatterControl#804 --- .../PrintLeveling/LevelWizard2Point.cs | 262 ------------------ .../PrintLeveling/LevelWizard3Point.cs | 26 +- .../PrintLeveling/LevelWizard7PointRadial.cs | 12 +- .../PrintLeveling/LevelWizardBase.cs | 10 +- .../PrintLeveling/PrintLevelPages.cs | 168 +++-------- .../PrintLeveling/PrintLevelingData.cs | 97 +------ CustomWidgets/ExportPrintItemWindow.cs | 2 +- MatterControl.csproj | 1 - PrinterCommunication/Io/GCodeStream.cs | 113 ++++---- .../Io/PrintLevelingStream.cs | 31 ++- .../PrinterConnectionAndCommunication.cs | 33 ++- PrinterControls/EditLevelingSettingsWindow.cs | 37 +-- Queue/OptionsMenu/ExportToFolderProcess.cs | 4 - .../Settings/SettingsHelpers.cs | 19 +- StaticData/SliceSettings/Properties.json | 4 +- StaticData/Translations/Master.txt | 3 + 16 files changed, 212 insertions(+), 610 deletions(-) delete mode 100644 ConfigurationPage/PrintLeveling/LevelWizard2Point.cs diff --git a/ConfigurationPage/PrintLeveling/LevelWizard2Point.cs b/ConfigurationPage/PrintLeveling/LevelWizard2Point.cs deleted file mode 100644 index a302b5593..000000000 --- a/ConfigurationPage/PrintLeveling/LevelWizard2Point.cs +++ /dev/null @@ -1,262 +0,0 @@ -/* -Copyright (c) 2014, Lars Brubaker -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 MatterHackers.Agg; -using MatterHackers.Agg.UI; -using MatterHackers.GCodeVisualizer; -using MatterHackers.Localizations; -using MatterHackers.MatterControl.PrinterCommunication; -using MatterHackers.MatterControl.SlicerConfiguration; -using MatterHackers.VectorMath; -using System; -using System.Collections.Generic; -using System.Text; - -namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling -{ - public class LevelWizard2Point : LevelWizardBase - { - private static Vector2 probeFrontLeft = new Vector2(0, 0); - private static Vector2 probeFrontRight = new Vector2(220, 0); - private static Vector2 probeBackLeft = new Vector2(0, 210); - private static double probeStartZHeight = 10; - - private string pageOneStepText = "Print Leveling Overview".Localize(); - private string pageOneInstructionsTextOne = LocalizedString.Get("Welcome to the print leveling wizard. Here is a quick overview on what we are going to do."); - private string pageOneInstructionsTextTwo = LocalizedString.Get("'Home' the printer"); - private string pageOneInstructionsTextThree = LocalizedString.Get("Sample the bed at two points"); - private string pageOneInstructionsTextFour = LocalizedString.Get("Turn auto leveling on"); - private string pageOneInstructionsText5 = LocalizedString.Get("You should be done in about 2 minutes."); - private string pageOneInstructionsText6 = LocalizedString.Get("Note: Be sure the tip of the extrude is clean."); - private string pageOneInstructionsText7 = LocalizedString.Get("Click 'Next' to continue."); - - public LevelWizard2Point(LevelWizardBase.RuningState runningState) - : base(500, 370, 6) - { - string printLevelWizardTitle = LocalizedString.Get("MatterControl"); - string printLevelWizardTitleFull = LocalizedString.Get("Print Leveling Wizard"); - Title = string.Format("{0} - {1}", printLevelWizardTitle, printLevelWizardTitleFull); - ProbePosition[] probePositions = new ProbePosition[5]; - probePositions[0] = new ProbePosition(); - probePositions[1] = new ProbePosition(); - probePositions[2] = new ProbePosition(); - probePositions[3] = new ProbePosition(); - probePositions[4] = new ProbePosition(); - - printLevelWizard = new WizardControl(); - AddChild(printLevelWizard); - - if (runningState == LevelWizardBase.RuningState.InitialStartupCalibration) - { - string requiredPageInstructions = "{0}\n\n{1}".FormatWith(requiredPageInstructions1, requiredPageInstructions2); - printLevelWizard.AddPage(new FirstPageInstructions(initialPrinterSetupStepText, requiredPageInstructions)); - } - - string pageOneInstructions = string.Format("{0}\n\n\t• {1}\n\t• {2}\n\t• {3}\n\n{4}\n\n{5}\n\n{6}", pageOneInstructionsTextOne, pageOneInstructionsTextTwo, pageOneInstructionsTextThree, pageOneInstructionsTextFour, pageOneInstructionsText5, pageOneInstructionsText6, pageOneInstructionsText7); - printLevelWizard.AddPage(new FirstPageInstructions(pageOneStepText, pageOneInstructions)); - - string homingPageInstructions = string.Format("{0}:\n\n\t• {1}\n\n{2}", homingPageInstructionsTextOne, homingPageInstructionsTextTwo, homingPageInstructionsTextThree); - printLevelWizard.AddPage(new HomePrinterPage(homingPageStepText, homingPageInstructions)); - - string positionLabelTwo = LocalizedString.Get("Position"); - string lowPrecisionTwoLabel = LocalizedString.Get("Low Precision"); - string medPrecisionTwoLabel = LocalizedString.Get("Medium Precision"); - string highPrecisionTwoLabel = LocalizedString.Get("High Precision"); - printLevelWizard.AddPage(new GetCoarseBedHeightProbeFirst(printLevelWizard, new Vector3(probeFrontLeft, probeStartZHeight), string.Format("{0} {1} 2 - {2}", GetStepString(), positionLabelTwo, lowPrecisionTwoLabel), probePositions[0], probePositions[1], true)); - printLevelWizard.AddPage(new GetFineBedHeight(string.Format("{0} {1} 2 - {2}", GetStepString(), positionLabelTwo, medPrecisionTwoLabel), probePositions[0])); - printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} 2 - {2}", GetStepString(), positionLabelTwo, highPrecisionTwoLabel), probePositions[0])); - - string positionLabelThree = LocalizedString.Get("Position"); - string lowPrecisionLabelThree = LocalizedString.Get("Low Precision"); - string medPrecisionLabelThree = LocalizedString.Get("Medium Precision"); - string highPrecisionLabelThree = LocalizedString.Get("High Precision"); - printLevelWizard.AddPage(new GetCoarseBedHeightProbeFirst(printLevelWizard, new Vector3(probeFrontRight, probeStartZHeight), string.Format("{0} {1} 3 - {2}", GetStepString(), positionLabelThree, lowPrecisionLabelThree), probePositions[2], probePositions[3], true)); - printLevelWizard.AddPage(new GetFineBedHeight(string.Format("{0} {1} 3 - {2}", GetStepString(), positionLabelThree, medPrecisionLabelThree), probePositions[2])); - printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} 3 - {2}", GetStepString(), positionLabelThree, highPrecisionLabelThree), probePositions[2])); - - string retrievingFinalPosition = "Getting the third point."; - printLevelWizard.AddPage(new GettingThirdPointFor2PointCalibration(printLevelWizard, "Collecting Data", new Vector3(probeBackLeft, probeStartZHeight), retrievingFinalPosition, probePositions[4])); - - string doneInstructions = string.Format("{0}\n\n\t• {1}\n\n{2}", doneInstructionsText, doneInstructionsTextTwo, doneInstructionsTextThree); - printLevelWizard.AddPage(new LastPage2PointInstructions("Done".Localize(), doneInstructions, probePositions)); - } - - private static event EventHandler unregisterEvents; - - private static int probeIndex = 0; - private static Vector3 probeRead0; - private static Vector3 probeRead1; - private static Vector3 probeRead2; - - public static string ApplyLeveling(string lineBeingSent, Vector3 currentDestination, PrinterMachineInstruction.MovementTypes movementMode) - { - var settings = ActiveSliceSettings.Instance; - if (settings?.GetValue(SettingsKey.print_leveling_enabled) == true - && (lineBeingSent.StartsWith("G0 ") || lineBeingSent.StartsWith("G1 "))) - { - lineBeingSent = PrintLevelingPlane.Instance.ApplyLeveling(currentDestination, movementMode, lineBeingSent); - } - - return lineBeingSent; - } - - public static List ProcessCommand(string lineBeingSent) - { - int commentIndex = lineBeingSent.IndexOf(';'); - if (commentIndex > 0) // there is content in front of the ; - { - lineBeingSent = lineBeingSent.Substring(0, commentIndex).Trim(); - } - List lines = new List(); - if (lineBeingSent == "G28") - { - lines.Add("G28 X0"); - lines.Add("G1 X1"); - lines.Add("G28 Y0"); - lines.Add("G1 Y1"); - lines.Add("G28 Z0"); - lines.Add("M114"); - } - else if (lineBeingSent == "G29") - { - // first make sure we don't have any leftover reading. - PrinterConnectionAndCommunication.Instance.ReadLine.UnregisterEvent(FinishedProbe, ref unregisterEvents); - - if (unregisterEvents != null) - { - unregisterEvents(null, null); - } - if (PrinterConnectionAndCommunication.Instance.CommunicationState == PrinterConnectionAndCommunication.CommunicationStates.Printing) - { - ActiveSliceSettings.Instance.Helpers.DoPrintLeveling(false); - } - - probeIndex = 0; - PrinterConnectionAndCommunication.Instance.ReadLine.RegisterEvent(FinishedProbe, ref unregisterEvents); - - StringBuilder commands = new StringBuilder(); - - var feedRates = ActiveSliceSettings.Instance.Helpers.ManualMovementSpeeds(); - - // make sure the probe offset is set to 0 - lines.Add("M565 Z0"); - - // probe position 0 - probeRead0 = new Vector3(probeFrontLeft, probeStartZHeight); - // up in z - lines.Add("G1 F{0}".FormatWith(feedRates.z)); - lines.Add("G1 {0}{1}".FormatWith("Z", probeStartZHeight)); - // move to xy - lines.Add("G1 F{0}".FormatWith(feedRates.x)); - lines.Add("G1 X{0}Y{1}Z{2}".FormatWith(probeFrontLeft.x, probeFrontLeft.y, probeStartZHeight)); - // probe - lines.Add("G30"); - - // probe position 1 - probeRead1 = new Vector3(probeFrontRight, probeStartZHeight); - // up in z - lines.Add("G1 F{0}".FormatWith(feedRates.z)); - lines.Add("G1 {0}{1}".FormatWith("Z", probeStartZHeight)); - // move to xy - lines.Add("G1 F{0}".FormatWith(feedRates.x)); - lines.Add("G1 X{0}Y{1}Z{2}".FormatWith(probeFrontRight.x, probeFrontRight.y, probeStartZHeight)); - // probe - lines.Add("G30"); - - // probe position 2 - probeRead2 = new Vector3(probeBackLeft, probeStartZHeight); - // up in z - lines.Add("G1 F{0}".FormatWith(feedRates.z)); - lines.Add("G1 {0}{1}".FormatWith("Z", probeStartZHeight)); - // move to xy - lines.Add("G1 F{0}".FormatWith(feedRates.x)); - lines.Add("G1 X{0}Y{1}Z{2}".FormatWith(probeBackLeft.x, probeBackLeft.y, probeStartZHeight)); - // probe - lines.Add("G30"); - lines.Add("M114"); - lines.Add("G1 Z1 F300"); - } - else - { - lines.Add(lineBeingSent); - } - - return lines; - } - - private static void FinishedProbe(object sender, EventArgs e) - { - StringEventArgs currentEvent = e as StringEventArgs; - if (currentEvent != null) - { - if (currentEvent.Data.Contains("endstops hit")) - { - int zStringPos = currentEvent.Data.LastIndexOf("Z:"); - if (zStringPos != -1) - { - string zProbeHeight = currentEvent.Data.Substring(zStringPos + 2); - // store the position that the limit swich fires - switch (probeIndex++) - { - case 0: - probeRead0.z = double.Parse(zProbeHeight); - break; - - case 1: - probeRead1.z = double.Parse(zProbeHeight); - break; - - case 2: - probeRead2.z = double.Parse(zProbeHeight); - if (unregisterEvents != null) - { - unregisterEvents(null, null); - } - SetEquations(); - break; - } - } - } - } - } - - private static void SetEquations() - { - PrintLevelingData levelingData = ActiveSliceSettings.Instance.Helpers.GetPrintLevelingData(); - - // position 0 does not change as it is the distance from the switch trigger to the extruder tip. - //levelingData.sampledPosition0 = levelingData.sampledPosition0; - levelingData.SampledPosition1 = levelingData.SampledPosition0 + probeRead1; - levelingData.SampledPosition2 = levelingData.SampledPosition0 + probeRead2; - - ActiveSliceSettings.Instance.Helpers.SetPrintLevelingData(levelingData); - ActiveSliceSettings.Instance.Helpers.DoPrintLeveling(true); - } - } -} \ No newline at end of file diff --git a/ConfigurationPage/PrintLeveling/LevelWizard3Point.cs b/ConfigurationPage/PrintLeveling/LevelWizard3Point.cs index 2b49396dd..f3352b268 100644 --- a/ConfigurationPage/PrintLeveling/LevelWizard3Point.cs +++ b/ConfigurationPage/PrintLeveling/LevelWizard3Point.cs @@ -54,10 +54,10 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling string printLevelWizardTitle = LocalizedString.Get("MatterControl"); string printLevelWizardTitleFull = LocalizedString.Get("Print Leveling Wizard"); Title = string.Format("{0} - {1}", printLevelWizardTitle, printLevelWizardTitleFull); - ProbePosition[] probePositions = new ProbePosition[3]; - probePositions[0] = new ProbePosition(); - probePositions[1] = new ProbePosition(); - probePositions[2] = new ProbePosition(); + List probePositions = new List(3); + probePositions.Add(new ProbePosition()); + probePositions.Add(new ProbePosition()); + probePositions.Add(new ProbePosition()); printLevelWizard = new WizardControl(); AddChild(printLevelWizard); @@ -80,19 +80,19 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling string highPrecisionLabel = LocalizedString.Get("High Precision"); Vector2 probeBackCenter = LevelWizardBase.GetPrintLevelPositionToSample(0); - printLevelWizard.AddPage(new GetCoarseBedHeight(printLevelWizard, new Vector3(probeBackCenter, 10), string.Format("{0} {1} 1 - {2}", GetStepString(), positionLabel, lowPrecisionLabel), probePositions[0])); - printLevelWizard.AddPage(new GetFineBedHeight(string.Format("{0} {1} 1 - {2}", GetStepString(), positionLabel, medPrecisionLabel), probePositions[0])); - printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} 1 - {2}", GetStepString(), positionLabel, highPrecisionLabel), probePositions[0])); + printLevelWizard.AddPage(new GetCoarseBedHeight(printLevelWizard, new Vector3(probeBackCenter, 10), string.Format("{0} {1} 1 - {2}", GetStepString(), positionLabel, lowPrecisionLabel), probePositions, 0)); + printLevelWizard.AddPage(new GetFineBedHeight(string.Format("{0} {1} 1 - {2}", GetStepString(), positionLabel, medPrecisionLabel), probePositions, 0)); + printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} 1 - {2}", GetStepString(), positionLabel, highPrecisionLabel), probePositions, 0)); Vector2 probeFrontLeft = LevelWizardBase.GetPrintLevelPositionToSample(1); - printLevelWizard.AddPage(new GetCoarseBedHeight(printLevelWizard, new Vector3(probeFrontLeft, 10), string.Format("{0} {1} 2 - {2}", GetStepString(), positionLabel, lowPrecisionLabel), probePositions[1])); - printLevelWizard.AddPage(new GetFineBedHeight(string.Format("{0} {1} 2 - {2}", GetStepString(), positionLabel, medPrecisionLabel), probePositions[1])); - printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} 2 - {2}", GetStepString(), positionLabel, highPrecisionLabel), probePositions[1])); + printLevelWizard.AddPage(new GetCoarseBedHeight(printLevelWizard, new Vector3(probeFrontLeft, 10), string.Format("{0} {1} 2 - {2}", GetStepString(), positionLabel, lowPrecisionLabel), probePositions,1)); + printLevelWizard.AddPage(new GetFineBedHeight(string.Format("{0} {1} 2 - {2}", GetStepString(), positionLabel, medPrecisionLabel), probePositions,1)); + printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} 2 - {2}", GetStepString(), positionLabel, highPrecisionLabel), probePositions,1)); Vector2 probeFrontRight = LevelWizardBase.GetPrintLevelPositionToSample(2); - printLevelWizard.AddPage(new GetCoarseBedHeight(printLevelWizard, new Vector3(probeFrontRight, 10), string.Format("{0} {1} 3 - {2}", GetStepString(), positionLabel, lowPrecisionLabel), probePositions[2])); - printLevelWizard.AddPage(new GetFineBedHeight(string.Format("{0} {1} 3 - {2}", GetStepString(), positionLabel, medPrecisionLabel), probePositions[2])); - printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} 3 - {2}", GetStepString(), positionLabel, highPrecisionLabel), probePositions[2])); + printLevelWizard.AddPage(new GetCoarseBedHeight(printLevelWizard, new Vector3(probeFrontRight, 10), string.Format("{0} {1} 3 - {2}", GetStepString(), positionLabel, lowPrecisionLabel), probePositions,2)); + printLevelWizard.AddPage(new GetFineBedHeight(string.Format("{0} {1} 3 - {2}", GetStepString(), positionLabel, medPrecisionLabel), probePositions,2)); + printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} 3 - {2}", GetStepString(), positionLabel, highPrecisionLabel), probePositions,2)); string doneInstructions = string.Format("{0}\n\n\t• {1}\n\n{2}", doneInstructionsText, doneInstructionsTextTwo, doneInstructionsTextThree); printLevelWizard.AddPage(new LastPage3PointInstructions("Done".Localize(), doneInstructions, probePositions)); diff --git a/ConfigurationPage/PrintLeveling/LevelWizard7PointRadial.cs b/ConfigurationPage/PrintLeveling/LevelWizard7PointRadial.cs index cd8b7b20b..22f692f3a 100644 --- a/ConfigurationPage/PrintLeveling/LevelWizard7PointRadial.cs +++ b/ConfigurationPage/PrintLeveling/LevelWizard7PointRadial.cs @@ -185,10 +185,10 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling string printLevelWizardTitle = "MatterControl"; string printLevelWizardTitleFull = "Print Leveling Wizard".Localize(); Title = string.Format("{0} - {1}", printLevelWizardTitle, printLevelWizardTitleFull); - ProbePosition[] probePositions = new ProbePosition[numberOfRadialSamples + 1]; - for (int i = 0; i < probePositions.Length; i++) + List probePositions = new List(numberOfRadialSamples + 1); + for (int i = 0; i < numberOfRadialSamples+1; i++) { - probePositions[i] = new ProbePosition(); + probePositions.Add(new ProbePosition()); } printLevelWizard = new WizardControl(); @@ -217,9 +217,9 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling for (int i = 0; i < numberOfRadialSamples + 1; i++) { Vector2 probePosition = GetPrintLevelPositionToSample(i, bedRadius); - printLevelWizard.AddPage(new GetCoarseBedHeight(printLevelWizard, new Vector3(probePosition, startProbeHeight), string.Format("{0} {1} {2} - {3}", GetStepString(), positionLabel, i + 1, lowPrecisionLabel), probePositions[i])); - printLevelWizard.AddPage(new GetFineBedHeight(string.Format("{0} {1} {2} - {3}", GetStepString(), positionLabel, i + 1, medPrecisionLabel), probePositions[i])); - printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} {2} - {3}", GetStepString(), positionLabel, i + 1, highPrecisionLabel), probePositions[i])); + printLevelWizard.AddPage(new GetCoarseBedHeight(printLevelWizard, new Vector3(probePosition, startProbeHeight), string.Format("{0} {1} {2} - {3}", GetStepString(), positionLabel, i + 1, lowPrecisionLabel), probePositions, i)); + printLevelWizard.AddPage(new GetFineBedHeight(string.Format("{0} {1} {2} - {3}", GetStepString(), positionLabel, i + 1, medPrecisionLabel), probePositions, i)); + printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} {2} - {3}", GetStepString(), positionLabel, i + 1, highPrecisionLabel), probePositions, i)); } string doneInstructions = string.Format("{0}\n\n\t• {1}\n\n{2}", doneInstructionsText, doneInstructionsTextTwo, doneInstructionsTextThree); diff --git a/ConfigurationPage/PrintLeveling/LevelWizardBase.cs b/ConfigurationPage/PrintLeveling/LevelWizardBase.cs index 91f7d31aa..19d4c7248 100644 --- a/ConfigurationPage/PrintLeveling/LevelWizardBase.cs +++ b/ConfigurationPage/PrintLeveling/LevelWizardBase.cs @@ -154,15 +154,17 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling private static LevelWizardBase CreateAndShowWizard(LevelWizardBase.RuningState runningState) { + // turn off print leveling + ActiveSliceSettings.Instance.Helpers.DoPrintLeveling(false); + // clear any data that we are going to be acquiring (sampled positions, after z home offset) PrintLevelingData levelingData = ActiveSliceSettings.Instance.Helpers.GetPrintLevelingData(); + levelingData.SampledPositions.Clear(); + ActiveSliceSettings.Instance.SetValue(SettingsKey.z_offset_after_home, 0.ToString()); + ApplicationController.Instance.ReloadAdvancedControlsPanel(); LevelWizardBase printLevelWizardWindow; switch (levelingData.CurrentPrinterLevelingSystem) { - case PrintLevelingData.LevelingSystem.Probe2Points: - printLevelWizardWindow = new LevelWizard2Point(runningState); - break; - case PrintLevelingData.LevelingSystem.Probe3Points: printLevelWizardWindow = new LevelWizard3Point(runningState); break; diff --git a/ConfigurationPage/PrintLeveling/PrintLevelPages.cs b/ConfigurationPage/PrintLeveling/PrintLevelPages.cs index ed5732a30..0d9b4e18f 100644 --- a/ConfigurationPage/PrintLeveling/PrintLevelPages.cs +++ b/ConfigurationPage/PrintLeveling/PrintLevelPages.cs @@ -34,6 +34,7 @@ using MatterHackers.MatterControl.PrinterCommunication; using MatterHackers.MatterControl.SlicerConfiguration; using MatterHackers.VectorMath; using System; +using System.Collections.Generic; namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling { @@ -43,19 +44,16 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling : base(pageDescription, instructionsText) { } - - public override void PageIsBecomingActive() - { - ActiveSliceSettings.Instance.Helpers.DoPrintLeveling (false); - base.PageIsBecomingActive(); - } } public class LastPage3PointInstructions : InstructionsPage { - private ProbePosition[] probePositions = new ProbePosition[3]; + private List probePositions = new List(3) + { + new ProbePosition(),new ProbePosition(),new ProbePosition() + }; - public LastPage3PointInstructions(string pageDescription, string instructionsText, ProbePosition[] probePositions) + public LastPage3PointInstructions(string pageDescription, string instructionsText, List probePositions) : base(pageDescription, instructionsText) { this.probePositions = probePositions; @@ -66,9 +64,10 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling Vector3 paperWidth = new Vector3(0, 0, ActiveSliceSettings.Instance.GetValue("manual_probe_paper_width")); PrintLevelingData levelingData = ActiveSliceSettings.Instance.Helpers.GetPrintLevelingData(); - levelingData.SampledPosition0 = probePositions[0].position - paperWidth; - levelingData.SampledPosition1 = probePositions[1].position - paperWidth; - levelingData.SampledPosition2 = probePositions[2].position - paperWidth; + levelingData.SampledPositions.Clear(); + levelingData.SampledPositions.Add(probePositions[0].position - paperWidth); + levelingData.SampledPositions.Add(probePositions[1].position - paperWidth); + levelingData.SampledPositions.Add(probePositions[2].position - paperWidth); // Invoke setter forcing persistence of leveling data ActiveSliceSettings.Instance.Helpers.SetPrintLevelingData(levelingData); @@ -81,9 +80,9 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling public class LastPageRadialInstructions : InstructionsPage { - private ProbePosition[] probePositions; + private List probePositions; - public LastPageRadialInstructions(string pageDescription, string instructionsText, ProbePosition[] probePositions) + public LastPageRadialInstructions(string pageDescription, string instructionsText, List probePositions) : base(pageDescription, instructionsText) { this.probePositions = probePositions; @@ -92,9 +91,9 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling public override void PageIsBecomingActive() { PrintLevelingData levelingData = ActiveSliceSettings.Instance.Helpers.GetPrintLevelingData(); - levelingData.SampledPositions.Clear(); + Vector3 paperWidth = new Vector3(0, 0, ActiveSliceSettings.Instance.GetValue("manual_probe_paper_width")); - for (int i = 0; i < probePositions.Length; i++) + for (int i = 0; i < probePositions.Count; i++) { levelingData.SampledPositions.Add(probePositions[i].position - paperWidth); } @@ -168,51 +167,6 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling } } - public class LastPage2PointInstructions : InstructionsPage - { - private ProbePosition[] probePositions = new ProbePosition[5]; - - public LastPage2PointInstructions(string pageDescription, string instructionsText, ProbePosition[] probePositions) - : base(pageDescription, instructionsText) - { - this.probePositions = probePositions; - } - - public override void PageIsBecomingActive() - { - // This data is currently the offset from the probe to the extruder tip. We need to translate them - // into bed offsets and store them. - - // The first point is the user assisted offset to the bed - Vector3 userBedSample0 = probePositions[0].position; - // The first point sample offset at the limit switch - Vector3 probeOffset0 = probePositions[1].position; // this z should be 0 - - // right side of printer - Vector3 userBedSample1 = probePositions[2].position; - Vector3 probeOffset1 = probePositions[3].position; - - // auto back probe - Vector3 probeOffset2 = probePositions[4].position; - - Vector3 paperWidth = new Vector3(0, 0, ActiveSliceSettings.Instance.GetValue("manual_probe_paper_width")); - - PrintLevelingData levelingData = ActiveSliceSettings.Instance.Helpers.GetPrintLevelingData(); - levelingData.SampledPosition0 = userBedSample0 - paperWidth; - levelingData.SampledPosition1 = userBedSample1 - paperWidth; - levelingData.SampledPosition2 = probeOffset2 - probeOffset0 + userBedSample0 - paperWidth; - - levelingData.ProbeOffset0 = probeOffset0 - paperWidth; - levelingData.ProbeOffset1 = probeOffset1 - paperWidth; - - // Invoke setter forcing persistence of leveling data - ActiveSliceSettings.Instance.Helpers.SetPrintLevelingData(levelingData); - - ActiveSliceSettings.Instance.Helpers.DoPrintLeveling ( true); - base.PageIsBecomingActive(); - } - } - public class HomePrinterPage : InstructionsPage { public HomePrinterPage(string pageDescription, string instructionsText) @@ -230,18 +184,20 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling public class FindBedHeight : InstructionsPage { private Vector3 lastReportedPosition; - private ProbePosition probePosition; + private List probePositions; + int probePositionsBeingEditedIndex; private double moveAmount; protected JogControls.MoveButton zPlusControl; protected JogControls.MoveButton zMinusControl; - public FindBedHeight(string pageDescription, string setZHeightCoarseInstruction1, string setZHeightCoarseInstruction2, double moveDistance, ProbePosition whereToWriteProbePosition) + public FindBedHeight(string pageDescription, string setZHeightCoarseInstruction1, string setZHeightCoarseInstruction2, double moveDistance, List probePositions, int probePositionsBeingEditedIndex) : base(pageDescription, setZHeightCoarseInstruction1) { + this.probePositions = probePositions; this.moveAmount = moveDistance; this.lastReportedPosition = PrinterConnectionAndCommunication.Instance.LastReportedPosition; - this.probePosition = whereToWriteProbePosition; + this.probePositionsBeingEditedIndex = probePositionsBeingEditedIndex; GuiWidget spacer = new GuiWidget(15, 15); topToBottomControls.AddChild(spacer); @@ -283,7 +239,7 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling public override void PageIsBecomingInactive() { - probePosition.position = PrinterConnectionAndCommunication.Instance.LastReportedPosition; + probePositions[probePositionsBeingEditedIndex].position = PrinterConnectionAndCommunication.Instance.LastReportedPosition; base.PageIsBecomingInactive(); } @@ -304,10 +260,18 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling bool moveBelow0 = newPosition < 0; if (moveBelow0) { - throw new NotImplementedException("If we are going to go below 0"); // increment the z_offset_after_home + double zOffset = ActiveSliceSettings.Instance.GetValue(SettingsKey.z_offset_after_home); + zOffset += 1; + ActiveSliceSettings.Instance.SetValue(SettingsKey.z_offset_after_home, zOffset.ToString()); // adjust all previously sampled points + for(int i=0; i< probePositions.Count; i++) + { + probePositions[i].position = probePositions[i].position + new Vector3(0, 0, 1); + } + // send a G92 z position to the printer to adjust the current z height + PrinterConnectionAndCommunication.Instance.SendLineToPrinterNow($"G92 Z{PrinterConnectionAndCommunication.Instance.CurrentDestination.z + 1}"); } PrinterConnectionAndCommunication.Instance.MoveRelative(PrinterConnectionAndCommunication.Axis.Z, -moveAmount, ActiveSliceSettings.Instance.Helpers.ManualMovementSpeeds().z); @@ -335,8 +299,8 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling protected Vector3 probeStartPosition; protected WizardControl container; - public GetCoarseBedHeight(WizardControl container, Vector3 probeStartPosition, string pageDescription, ProbePosition whereToWriteProbePosition) - : base(pageDescription, setZHeightCoarseInstruction1, setZHeightCoarseInstruction2, 1, whereToWriteProbePosition) + public GetCoarseBedHeight(WizardControl container, Vector3 probeStartPosition, string pageDescription, List probePositions, int probePositionsBeingEditedIndex) + : base(pageDescription, setZHeightCoarseInstruction1, setZHeightCoarseInstruction2, 1, probePositions, probePositionsBeingEditedIndex) { this.container = container; this.probeStartPosition = probeStartPosition; @@ -371,68 +335,6 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling } } - public class GetCoarseBedHeightProbeFirst : GetCoarseBedHeight - { - private event EventHandler unregisterEvents; - - private ProbePosition whereToWriteSamplePosition; - - public GetCoarseBedHeightProbeFirst(WizardControl container, Vector3 probeStartPosition, string pageDescription, ProbePosition whereToWriteProbePosition, ProbePosition whereToWriteSamplePosition, bool allowLessThan0) - : base(container, probeStartPosition, pageDescription, whereToWriteProbePosition) - { - this.whereToWriteSamplePosition = whereToWriteSamplePosition; - } - - public override void PageIsBecomingActive() - { - // first make sure there is no leftover FinishedProbe event - PrinterConnectionAndCommunication.Instance.ReadLine.UnregisterEvent(FinishedProbe, ref unregisterEvents); - - var feedRates = ActiveSliceSettings.Instance.Helpers.ManualMovementSpeeds(); - - PrinterConnectionAndCommunication.Instance.MoveAbsolute(PrinterConnectionAndCommunication.Axis.Z, probeStartPosition.z, feedRates.z); - PrinterConnectionAndCommunication.Instance.MoveAbsolute(probeStartPosition, feedRates.x); - PrinterConnectionAndCommunication.Instance.SendLineToPrinterNow("G30"); - PrinterConnectionAndCommunication.Instance.ReadLine.RegisterEvent(FinishedProbe, ref unregisterEvents); - - base.PageIsBecomingActive(); - - container.nextButton.Enabled = false; - - zPlusControl.Click += new EventHandler(zControl_Click); - zMinusControl.Click += new EventHandler(zControl_Click); - } - - private void FinishedProbe(object sender, EventArgs e) - { - StringEventArgs currentEvent = e as StringEventArgs; - if (currentEvent != null) - { - if (currentEvent.Data.Contains("endstops hit")) - { - PrinterConnectionAndCommunication.Instance.ReadLine.UnregisterEvent(FinishedProbe, ref unregisterEvents); - int zStringPos = currentEvent.Data.LastIndexOf("Z:"); - string zProbeHeight = currentEvent.Data.Substring(zStringPos + 2); - // store the position that the limit swich fires - whereToWriteSamplePosition.position = new Vector3(probeStartPosition.x, probeStartPosition.y, double.Parse(zProbeHeight)); - - // now move to the probe start position - PrinterConnectionAndCommunication.Instance.MoveAbsolute(probeStartPosition, ActiveSliceSettings.Instance.Helpers.ManualMovementSpeeds().z); - PrinterConnectionAndCommunication.Instance.ReadPosition(); - } - } - } - - public override void OnClosed(EventArgs e) - { - if (unregisterEvents != null) - { - unregisterEvents(this, null); - } - base.OnClosed(e); - } - } - public class GetFineBedHeight : FindBedHeight { private static string setZHeightFineInstruction1 = LocalizedString.Get("We will now refine our measurement of the extruder height at this position."); @@ -441,8 +343,8 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling private static string setZHeightFineInstructionTextThree = LocalizedString.Get("Finally click 'Next' to continue."); private static string setZHeightFineInstruction2 = string.Format("\t• {0}\n\t• {1}\n\n{2}", setZHeightFineInstructionTextOne, setZHeightFineInstructionTextTwo, setZHeightFineInstructionTextThree); - public GetFineBedHeight(string pageDescription, ProbePosition whereToWriteProbePosition) - : base(pageDescription, setZHeightFineInstruction1, setZHeightFineInstruction2, .1, whereToWriteProbePosition) + public GetFineBedHeight(string pageDescription, List probePositions, int probePositionsBeingEditedIndex) + : base(pageDescription, setZHeightFineInstruction1, setZHeightFineInstruction2, .1, probePositions, probePositionsBeingEditedIndex) { } } @@ -454,8 +356,8 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling private static string setHeightFineInstructionTextTwo = LocalizedString.Get("Finally click 'Next' to continue."); private static string setZHeightFineInstruction2 = string.Format("\t• {0}\n\n\n{1}", setHeightFineInstructionTextOne, setHeightFineInstructionTextTwo); - public GetUltraFineBedHeight(string pageDescription, ProbePosition whereToWriteProbePosition) - : base(pageDescription, setZHeightFineInstruction1, setZHeightFineInstruction2, .02, whereToWriteProbePosition) + public GetUltraFineBedHeight(string pageDescription, List probePositions, int probePositionsBeingEditedIndex) + : base(pageDescription, setZHeightFineInstruction1, setZHeightFineInstruction2, .02, probePositions, probePositionsBeingEditedIndex) { } diff --git a/ConfigurationPage/PrintLeveling/PrintLevelingData.cs b/ConfigurationPage/PrintLeveling/PrintLevelingData.cs index 96e91d400..7faf2614f 100644 --- a/ConfigurationPage/PrintLeveling/PrintLevelingData.cs +++ b/ConfigurationPage/PrintLeveling/PrintLevelingData.cs @@ -12,20 +12,13 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling { private PrinterSettings printerProfile; - public List SampledPositions = new List(); - - private Vector3 probeOffset0Private; - - private Vector3 probeOffset1Private; - - private Vector3 sampledPosition0Private; - - private Vector3 sampledPosition1Private; - - private Vector3 sampledPosition2Private; + public List SampledPositions = new List() + { + new Vector3(),new Vector3(),new Vector3() + }; [JsonConverter(typeof(StringEnumConverter))] - public enum LevelingSystem { Probe3Points, Probe2Points, Probe7PointRadial, Probe13PointRadial } + public enum LevelingSystem { Probe3Points, Probe7PointRadial, Probe13PointRadial } public PrintLevelingData(PrinterSettings printerProfile) { @@ -38,9 +31,6 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling { switch (printerProfile.GetValue("print_leveling_solution")) { - case "2 Point Plane": - return LevelingSystem.Probe2Points; - case "7 Point Disk": return LevelingSystem.Probe7PointRadial; @@ -54,66 +44,6 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling } } - public Vector3 ProbeOffset0 - { - get { return probeOffset0Private; } - set - { - if (probeOffset0Private != value) - { - probeOffset0Private = value; - } - } - } - - public Vector3 ProbeOffset1 - { - get { return probeOffset1Private; } - set - { - if (probeOffset1Private != value) - { - probeOffset1Private = value; - } - } - } - - public Vector3 SampledPosition0 - { - get { return sampledPosition0Private; } - set - { - if (sampledPosition0Private != value) - { - sampledPosition0Private = value; - } - } - } - - public Vector3 SampledPosition1 - { - get { return sampledPosition1Private; } - set - { - if (sampledPosition1Private != value) - { - sampledPosition1Private = value; - } - } - } - - public Vector3 SampledPosition2 - { - get { return sampledPosition2Private; } - set - { - if (sampledPosition2Private != value) - { - sampledPosition2Private = value; - } - } - } - internal static PrintLevelingData Create(PrinterSettings printerProfile, string jsonData, string depricatedPositionsCsv3ByXYZ) { if (!string.IsNullOrEmpty(jsonData)) @@ -146,6 +76,8 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling /// private void ParseDepricatedPrintLevelingMeasuredPositions(string depricatedPositionsCsv3ByXYZ) { + SampledPositions = new List(3); + if (depricatedPositionsCsv3ByXYZ != null) { string[] lines = depricatedPositionsCsv3ByXYZ.Split(','); @@ -153,9 +85,13 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling { for (int i = 0; i < 3; i++) { - sampledPosition0Private[i] = double.Parse(lines[0 * 3 + i]); - sampledPosition1Private[i] = double.Parse(lines[1 * 3 + i]); - sampledPosition2Private[i] = double.Parse(lines[2 * 3 + i]); + Vector3 position = new Vector3(); + + position.x = double.Parse(lines[0 * 3 + i]); + position.y = double.Parse(lines[1 * 3 + i]); + position.z = double.Parse(lines[2 * 3 + i]); + + SampledPositions.Add(position); } } } @@ -170,11 +106,8 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling switch (CurrentPrinterLevelingSystem) { - case PrintLevelingData.LevelingSystem.Probe2Points: case PrintLevelingData.LevelingSystem.Probe3Points: - if (SampledPosition0.z == 0 - && SampledPosition1.z == 0 - && SampledPosition2.z == 0) + if (SampledPositions.Count != 3) // different criteria for what is not initialized { return false; } diff --git a/CustomWidgets/ExportPrintItemWindow.cs b/CustomWidgets/ExportPrintItemWindow.cs index 2890f2cc5..6c120f627 100644 --- a/CustomWidgets/ExportPrintItemWindow.cs +++ b/CustomWidgets/ExportPrintItemWindow.cs @@ -313,7 +313,7 @@ namespace MatterHackers.MatterControl { GCodeFile loadedGCode = GCodeFile.Load(gcodeFilename); GCodeFileStream gCodeFileStream0 = new GCodeFileStream(loadedGCode); - PrintLevelingStream printLevelingStream4 = new PrintLevelingStream(gCodeFileStream0); + PrintLevelingStream printLevelingStream4 = new PrintLevelingStream(gCodeFileStream0, false); // this is added to ensure we are rewriting the G0 G1 commands as needed FeedRateMultiplyerStream extrusionMultiplyerStream = new FeedRateMultiplyerStream(printLevelingStream4); diff --git a/MatterControl.csproj b/MatterControl.csproj index 8d9c89549..2aacd18bf 100644 --- a/MatterControl.csproj +++ b/MatterControl.csproj @@ -148,7 +148,6 @@ - diff --git a/PrinterCommunication/Io/GCodeStream.cs b/PrinterCommunication/Io/GCodeStream.cs index 273525ba9..e651263ec 100644 --- a/PrinterCommunication/Io/GCodeStream.cs +++ b/PrinterCommunication/Io/GCodeStream.cs @@ -38,18 +38,18 @@ using MatterHackers.MatterControl.SlicerConfiguration; namespace MatterHackers.MatterControl.PrinterCommunication.Io { - public abstract class GCodeStream : IDisposable - { - #region Abstract Functions - /// - /// returns null when there are no more lines - /// - /// - public abstract string ReadLine(); - public abstract void SetPrinterPosition(PrinterMove position); - #endregion + public abstract class GCodeStream : IDisposable + { + #region Abstract Functions + /// + /// returns null when there are no more lines + /// + /// + public abstract string ReadLine(); + public abstract void SetPrinterPosition(PrinterMove position); + #endregion - public abstract void Dispose(); + public abstract void Dispose(); bool useG0ForMovement = false; @@ -59,14 +59,14 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io } public string CreateMovementLine(PrinterMove currentDestination) - { - return CreateMovementLine(currentDestination, PrinterMove.Nowhere); - } + { + return CreateMovementLine(currentDestination, PrinterMove.Nowhere); + } - public string CreateMovementLine(PrinterMove destination, PrinterMove start) - { - string lineBeingSent; - StringBuilder newLine = new StringBuilder("G1 "); + public string CreateMovementLine(PrinterMove destination, PrinterMove start) + { + string lineBeingSent; + StringBuilder newLine = new StringBuilder("G1 "); bool moveHasExtrusion = destination.extrusion != start.extrusion; if (useG0ForMovement && !moveHasExtrusion) @@ -87,40 +87,55 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io newLine = newLine.Append(String.Format("Z{0:0.###} ", destination.position.z)); } - if (moveHasExtrusion) - { - newLine = newLine.Append(String.Format("E{0:0.###} ", destination.extrusion)); - } + if (moveHasExtrusion) + { + newLine = newLine.Append(String.Format("E{0:0.###} ", destination.extrusion)); + } - if (destination.feedRate != start.feedRate) - { - newLine = newLine.Append(String.Format("F{0:0.##}", destination.feedRate)); - } + if (destination.feedRate != start.feedRate) + { + newLine = newLine.Append(String.Format("F{0:0.##}", destination.feedRate)); + } - lineBeingSent = newLine.ToString(); - return lineBeingSent.Trim(); - } + lineBeingSent = newLine.ToString(); + return lineBeingSent.Trim(); + } - public static PrinterMove GetPosition(string lineBeingSent, PrinterMove startPositionPosition) - { - PrinterMove currentDestination = startPositionPosition; - GCodeFile.GetFirstNumberAfter("X", lineBeingSent, ref currentDestination.position.x); - GCodeFile.GetFirstNumberAfter("Y", lineBeingSent, ref currentDestination.position.y); - GCodeFile.GetFirstNumberAfter("Z", lineBeingSent, ref currentDestination.position.z); - GCodeFile.GetFirstNumberAfter("E", lineBeingSent, ref currentDestination.extrusion); - GCodeFile.GetFirstNumberAfter("F", lineBeingSent, ref currentDestination.feedRate); - return currentDestination; - } + public static PrinterMove GetPosition(string lineBeingSent, PrinterMove startPositionPosition) + { + PrinterMove currentDestination = startPositionPosition; + GCodeFile.GetFirstNumberAfter("X", lineBeingSent, ref currentDestination.position.x); + GCodeFile.GetFirstNumberAfter("Y", lineBeingSent, ref currentDestination.position.y); + GCodeFile.GetFirstNumberAfter("Z", lineBeingSent, ref currentDestination.position.z); + GCodeFile.GetFirstNumberAfter("E", lineBeingSent, ref currentDestination.extrusion); + GCodeFile.GetFirstNumberAfter("F", lineBeingSent, ref currentDestination.feedRate); + return currentDestination; + } - public static bool LineIsMovement(string lineBeingSent) - { - if (lineBeingSent.StartsWith("G0 ") - || lineBeingSent.StartsWith("G1 ")) - { - return true; - } + public static bool LineIsZHoming(string lineBeingSent) + { + if (!string.IsNullOrEmpty(lineBeingSent)) + { + bool isAZHome = lineBeingSent.StartsWith("G28") && lineBeingSent.Contains("Z"); + bool isANakedHome = lineBeingSent.Trim() == "G28"; + if (isAZHome || isANakedHome) + { + return true; + } + } - return false; - } - } + return false; + } + + public static bool LineIsMovement(string lineBeingSent) + { + if (lineBeingSent.StartsWith("G0 ") + || lineBeingSent.StartsWith("G1 ")) + { + return true; + } + + return false; + } + } } \ No newline at end of file diff --git a/PrinterCommunication/Io/PrintLevelingStream.cs b/PrinterCommunication/Io/PrintLevelingStream.cs index e328f412e..c96ececaa 100644 --- a/PrinterCommunication/Io/PrintLevelingStream.cs +++ b/PrinterCommunication/Io/PrintLevelingStream.cs @@ -40,17 +40,42 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io { public class PrintLevelingStream : GCodeStreamProxy { + bool activePrinting; + bool hadZHome = false; protected PrinterMove lastDestination = new PrinterMove(); - public PrintLevelingStream(GCodeStream internalStream) + public PrintLevelingStream(GCodeStream internalStream, bool activePrinting) : base(internalStream) { + this.activePrinting = activePrinting; } public PrinterMove LastDestination { get { return lastDestination; } } public override string ReadLine() { + if (hadZHome) + { + hadZHome = false; + // only add this when exporting to gcode + if (!activePrinting) + { + // return the correct G92 + double zOffset = ActiveSliceSettings.Instance.GetValue(SettingsKey.z_offset_after_home); + if (zOffset != 0) + { + double newHomePosition = ActiveSliceSettings.Instance.GetValue(SettingsKey.printer_z_after_home) + zOffset; + return $"G92 Z{newHomePosition}"; + } + } + } + string lineFromChild = base.ReadLine(); + if (lineFromChild != null + && LineIsZHoming(lineFromChild)) + { + hadZHome = true; + } + if (lineFromChild != null && PrinterConnectionAndCommunication.Instance.ActivePrinter.GetValue(SettingsKey.print_leveling_enabled)) { @@ -96,10 +121,6 @@ namespace MatterHackers.MatterControl.PrinterCommunication.Io { switch (levelingData.CurrentPrinterLevelingSystem) { - case PrintLevelingData.LevelingSystem.Probe2Points: - lineBeingSent = LevelWizard2Point.ApplyLeveling(lineBeingSent, currentDestination.position, PrinterMachineInstruction.MovementTypes.Absolute); - break; - case PrintLevelingData.LevelingSystem.Probe3Points: lineBeingSent = LevelWizard3Point.ApplyLeveling(lineBeingSent, currentDestination.position, PrinterMachineInstruction.MovementTypes.Absolute); break; diff --git a/PrinterCommunication/PrinterConnectionAndCommunication.cs b/PrinterCommunication/PrinterConnectionAndCommunication.cs index 2ce8134a4..b96aba45e 100644 --- a/PrinterCommunication/PrinterConnectionAndCommunication.cs +++ b/PrinterCommunication/PrinterConnectionAndCommunication.cs @@ -1836,6 +1836,26 @@ namespace MatterHackers.MatterControl.PrinterCommunication waitingForPosition.Stop(); waitingForPosition.Reset(); + + if(storePositionToPrinterZAfterHome) + { + storePositionToPrinterZAfterHome = false; + double storedHomePosition = ActiveSliceSettings.Instance.GetValue(SettingsKey.printer_z_after_home); + // if printer_z_after_home != current z position + if (storedHomePosition != LastReportedPosition.z) + { + ActiveSliceSettings.Instance.SetValue(SettingsKey.printer_z_after_home, LastReportedPosition.z.ToString()); + ApplicationController.Instance.ReloadAdvancedControlsPanel(); + } + + // now send a G92 to set the position that we want to think is home + double zOffset = ActiveSliceSettings.Instance.GetValue(SettingsKey.z_offset_after_home); + if (zOffset != 0) + { + double newHomePosition = ActiveSliceSettings.Instance.GetValue(SettingsKey.printer_z_after_home) + zOffset; + SendLineToPrinterNow($"G92 Z{newHomePosition}"); + } + } } public void ReadTemperatures(object sender, EventArgs e) @@ -2499,7 +2519,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication } queuedCommandStream2 = new QueuedCommandsStream(pauseHandlingStream1); relativeToAbsoluteStream3 = new RelativeToAbsoluteStream(queuedCommandStream2); - printLevelingStream4 = new PrintLevelingStream(relativeToAbsoluteStream3); + printLevelingStream4 = new PrintLevelingStream(relativeToAbsoluteStream3, true); waitForTempStream5 = new WaitForTempStream(printLevelingStream4); babyStepsStream6 = new BabyStepsStream(waitForTempStream5); if(activePrintTask != null) @@ -2912,12 +2932,10 @@ namespace MatterHackers.MatterControl.PrinterCommunication { SendLineToPrinterNow("M114"); - // create a stream processor that does this so it can be applied to exported GCode - // check if this is a naked G28 or a G28 Z command - // if printer_z_after_home != current z position - throw new NotImplementedException("Check and write printer_z_after_home"); - // if z_offset_after_home > 0 - // send a G92 with the printer_z_after_home + z_offset_after_home + if (GCodeStream.LineIsZHoming(lineWithoutChecksum)) + { + storePositionToPrinterZAfterHome = true; + } } // write data to communication @@ -2995,6 +3013,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication } bool haveHookedDrawing = false; + private bool storePositionToPrinterZAfterHome = false; public class ReadThread { diff --git a/PrinterControls/EditLevelingSettingsWindow.cs b/PrinterControls/EditLevelingSettingsWindow.cs index 939cb3954..17713e8e3 100644 --- a/PrinterControls/EditLevelingSettingsWindow.cs +++ b/PrinterControls/EditLevelingSettingsWindow.cs @@ -90,18 +90,9 @@ namespace MatterHackers.MatterControl // put in the movement edit controls PrintLevelingData levelingData = ActiveSliceSettings.Instance.Helpers.GetPrintLevelingData(); - if (EditSamplePositionList(levelingData)) + for (int i = 0; i < levelingData.SampledPositions.Count; i++) { - for (int i = 0; i < levelingData.SampledPositions.Count; i++) - { - positions.Add(levelingData.SampledPositions[i]); - } - } - else - { - positions.Add(levelingData.SampledPosition0); - positions.Add(levelingData.SampledPosition1); - positions.Add(levelingData.SampledPosition2); + positions.Add(levelingData.SampledPositions[i]); } int tab_index = 0; @@ -184,33 +175,13 @@ namespace MatterHackers.MatterControl UiThread.RunOnIdle(DoSave_Click); } - bool EditSamplePositionList(PrintLevelingData levelingData) - { - if (levelingData.CurrentPrinterLevelingSystem == PrintLevelingData.LevelingSystem.Probe7PointRadial - || levelingData.CurrentPrinterLevelingSystem == PrintLevelingData.LevelingSystem.Probe13PointRadial) - { - return true; - } - - return false; - } - private void DoSave_Click() { PrintLevelingData levelingData = ActiveSliceSettings.Instance.Helpers.GetPrintLevelingData(); - if (EditSamplePositionList(levelingData)) + for (int i = 0; i < levelingData.SampledPositions.Count; i++) { - for (int i = 0; i < levelingData.SampledPositions.Count; i++) - { - levelingData.SampledPositions[i] = positions[i]; - } - } - else - { - levelingData.SampledPosition0 = positions[0]; - levelingData.SampledPosition1 = positions[1]; - levelingData.SampledPosition2 = positions[2]; + levelingData.SampledPositions[i] = positions[i]; } ActiveSliceSettings.Instance.Helpers.SetPrintLevelingData(levelingData); diff --git a/Queue/OptionsMenu/ExportToFolderProcess.cs b/Queue/OptionsMenu/ExportToFolderProcess.cs index 8b73810b3..d468c5b6e 100644 --- a/Queue/OptionsMenu/ExportToFolderProcess.cs +++ b/Queue/OptionsMenu/ExportToFolderProcess.cs @@ -202,10 +202,6 @@ namespace MatterHackers.MatterControl.PrintQueue switch (levelingData.CurrentPrinterLevelingSystem) { - case PrintLevelingData.LevelingSystem.Probe2Points: - instruction.Line = LevelWizard2Point.ApplyLeveling(instruction.Line, currentDestination, instruction.movementType); - break; - case PrintLevelingData.LevelingSystem.Probe3Points: instruction.Line = LevelWizard3Point.ApplyLeveling(instruction.Line, currentDestination, instruction.movementType); break; diff --git a/SlicerConfiguration/Settings/SettingsHelpers.cs b/SlicerConfiguration/Settings/SettingsHelpers.cs index b08dd11b9..c4c89a49d 100644 --- a/SlicerConfiguration/Settings/SettingsHelpers.cs +++ b/SlicerConfiguration/Settings/SettingsHelpers.cs @@ -258,11 +258,14 @@ namespace MatterHackers.MatterControl.SlicerConfiguration printerSettings.GetValue(SettingsKey.print_leveling_data), printerSettings.GetValue("MatterControl.PrintLevelingProbePositions")); - PrintLevelingPlane.Instance.SetPrintLevelingEquation( - printLevelingData.SampledPosition0, - printLevelingData.SampledPosition1, - printLevelingData.SampledPosition2, - ActiveSliceSettings.Instance.GetValue(SettingsKey.print_center)); + if (printLevelingData.SampledPositions.Count == 3) + { + PrintLevelingPlane.Instance.SetPrintLevelingEquation( + printLevelingData.SampledPositions[0], + printLevelingData.SampledPositions[1], + printLevelingData.SampledPositions[2], + ActiveSliceSettings.Instance.GetValue(SettingsKey.print_center)); + } } return printLevelingData; @@ -290,9 +293,9 @@ namespace MatterHackers.MatterControl.SlicerConfiguration { PrintLevelingData levelingData = ActiveSliceSettings.Instance.Helpers.GetPrintLevelingData(); PrintLevelingPlane.Instance.SetPrintLevelingEquation( - levelingData.SampledPosition0, - levelingData.SampledPosition1, - levelingData.SampledPosition2, + levelingData.SampledPositions[0], + levelingData.SampledPositions[1], + levelingData.SampledPositions[2], ActiveSliceSettings.Instance.GetValue(SettingsKey.print_center)); } } diff --git a/StaticData/SliceSettings/Properties.json b/StaticData/SliceSettings/Properties.json index a77ebb1ab..44c2f612c 100644 --- a/StaticData/SliceSettings/Properties.json +++ b/StaticData/SliceSettings/Properties.json @@ -2533,7 +2533,7 @@ "HelpText": "This is automatically set by MatterControl. You do not need to adjust it.", "DataEditType": "POSITIVE_DOUBLE", "ExtraSettings": "mm", - "ShowAsOverride": true, + "ShowAsOverride": false, "ShowIfSet": null, "ResetAtEndOfPrint": false, "DefaultValue": "0", @@ -2547,7 +2547,7 @@ "HelpText": "The amount to change the printers home position after a z home has occured. This is used by print leveling and recovery. This should not be manualy edited.", "DataEditType": "POSITIVE_DOUBLE", "ExtraSettings": "mm", - "ShowAsOverride": true, + "ShowAsOverride": false, "ShowIfSet": null, "ResetAtEndOfPrint": false, "DefaultValue": "0", diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index 39ee0aa58..9e899f482 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -5521,3 +5521,6 @@ Translated:Leveling Calibration English:It's time to copy your existing printer settings to your MatterHackers account. Once copied, these printers will be available whenever you sign in to MatterControl. Printers that are not copied will only be available when not signed in. Translated:It's time to copy your existing printer settings to your MatterHackers account. Once copied, these printers will be available whenever you sign in to MatterControl. Printers that are not copied will only be available when not signed in. +English:Location: 'Settings & Controls' -> 'Settings' -> 'Printer' -> 'Custom G-Code' -> 'Start G-Code' +Translated:Location: 'Settings & Controls' -> 'Settings' -> 'Printer' -> 'Custom G-Code' -> 'Start G-Code' +