Merge pull request #1488 from larsbrubaker/master
Make it possible to have the print leveling go negative
This commit is contained in:
commit
fd0b232deb
19 changed files with 265 additions and 631 deletions
|
|
@ -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], true));
|
||||
printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} 2 - {2}", GetStepString(), positionLabelTwo, highPrecisionTwoLabel), probePositions[0], true));
|
||||
|
||||
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], true));
|
||||
printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} 3 - {2}", GetStepString(), positionLabelThree, highPrecisionLabelThree), probePositions[2], true));
|
||||
|
||||
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<bool>(SettingsKey.print_leveling_enabled) == true
|
||||
&& (lineBeingSent.StartsWith("G0 ") || lineBeingSent.StartsWith("G1 ")))
|
||||
{
|
||||
lineBeingSent = PrintLevelingPlane.Instance.ApplyLeveling(currentDestination, movementMode, lineBeingSent);
|
||||
}
|
||||
|
||||
return lineBeingSent;
|
||||
}
|
||||
|
||||
public static List<string> ProcessCommand(string lineBeingSent)
|
||||
{
|
||||
int commentIndex = lineBeingSent.IndexOf(';');
|
||||
if (commentIndex > 0) // there is content in front of the ;
|
||||
{
|
||||
lineBeingSent = lineBeingSent.Substring(0, commentIndex).Trim();
|
||||
}
|
||||
List<string> lines = new List<string>();
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -51,14 +51,13 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
|||
public LevelWizard3Point(LevelWizardBase.RuningState runningState)
|
||||
: base(500, 370, 9)
|
||||
{
|
||||
bool allowLessThanZero = ActiveSliceSettings.Instance.GetValue("z_can_be_negative") == "1";
|
||||
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<ProbePosition> probePositions = new List<ProbePosition>(3);
|
||||
probePositions.Add(new ProbePosition());
|
||||
probePositions.Add(new ProbePosition());
|
||||
probePositions.Add(new ProbePosition());
|
||||
|
||||
printLevelWizard = new WizardControl();
|
||||
AddChild(printLevelWizard);
|
||||
|
|
@ -81,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], allowLessThanZero));
|
||||
printLevelWizard.AddPage(new GetFineBedHeight(string.Format("{0} {1} 1 - {2}", GetStepString(), positionLabel, medPrecisionLabel), probePositions[0], allowLessThanZero));
|
||||
printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} 1 - {2}", GetStepString(), positionLabel, highPrecisionLabel), probePositions[0], allowLessThanZero));
|
||||
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], allowLessThanZero));
|
||||
printLevelWizard.AddPage(new GetFineBedHeight(string.Format("{0} {1} 2 - {2}", GetStepString(), positionLabel, medPrecisionLabel), probePositions[1], allowLessThanZero));
|
||||
printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} 2 - {2}", GetStepString(), positionLabel, highPrecisionLabel), probePositions[1], allowLessThanZero));
|
||||
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], allowLessThanZero));
|
||||
printLevelWizard.AddPage(new GetFineBedHeight(string.Format("{0} {1} 3 - {2}", GetStepString(), positionLabel, medPrecisionLabel), probePositions[2], allowLessThanZero));
|
||||
printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} 3 - {2}", GetStepString(), positionLabel, highPrecisionLabel), probePositions[2], allowLessThanZero));
|
||||
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));
|
||||
|
|
|
|||
|
|
@ -182,14 +182,13 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
|||
{
|
||||
pageOneInstructionsTextThree = pageOneInstructionsTextThree.FormatWith(numberOfRadialSamples+1);
|
||||
|
||||
bool allowLessThanZero = ActiveSliceSettings.Instance.GetValue("z_can_be_negative") == "1";
|
||||
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<ProbePosition> probePositions = new List<ProbePosition>(numberOfRadialSamples + 1);
|
||||
for (int i = 0; i < numberOfRadialSamples+1; i++)
|
||||
{
|
||||
probePositions[i] = new ProbePosition();
|
||||
probePositions.Add(new ProbePosition());
|
||||
}
|
||||
|
||||
printLevelWizard = new WizardControl();
|
||||
|
|
@ -218,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], allowLessThanZero));
|
||||
printLevelWizard.AddPage(new GetFineBedHeight(string.Format("{0} {1} {2} - {3}", GetStepString(), positionLabel, i + 1, medPrecisionLabel), probePositions[i], allowLessThanZero));
|
||||
printLevelWizard.AddPage(new GetUltraFineBedHeight(string.Format("{0} {1} {2} - {3}", GetStepString(), positionLabel, i + 1, highPrecisionLabel), probePositions[i], allowLessThanZero));
|
||||
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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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<ProbePosition> probePositions = new List<ProbePosition>(3)
|
||||
{
|
||||
new ProbePosition(),new ProbePosition(),new ProbePosition()
|
||||
};
|
||||
|
||||
public LastPage3PointInstructions(string pageDescription, string instructionsText, ProbePosition[] probePositions)
|
||||
public LastPage3PointInstructions(string pageDescription, string instructionsText, List<ProbePosition> 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<double>("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<ProbePosition> probePositions;
|
||||
|
||||
public LastPageRadialInstructions(string pageDescription, string instructionsText, ProbePosition[] probePositions)
|
||||
public LastPageRadialInstructions(string pageDescription, string instructionsText, List<ProbePosition> 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<double>("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<double>("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,20 +184,20 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
|||
public class FindBedHeight : InstructionsPage
|
||||
{
|
||||
private Vector3 lastReportedPosition;
|
||||
private ProbePosition probePosition;
|
||||
private List<ProbePosition> probePositions;
|
||||
int probePositionsBeingEditedIndex;
|
||||
private double moveAmount;
|
||||
private bool allowLessThan0;
|
||||
|
||||
protected JogControls.MoveButton zPlusControl;
|
||||
protected JogControls.MoveButton zMinusControl;
|
||||
|
||||
public FindBedHeight(string pageDescription, string setZHeightCoarseInstruction1, string setZHeightCoarseInstruction2, double moveDistance, ProbePosition whereToWriteProbePosition, bool allowLessThan0)
|
||||
public FindBedHeight(string pageDescription, string setZHeightCoarseInstruction1, string setZHeightCoarseInstruction2, double moveDistance, List<ProbePosition> probePositions, int probePositionsBeingEditedIndex)
|
||||
: base(pageDescription, setZHeightCoarseInstruction1)
|
||||
{
|
||||
this.allowLessThan0 = allowLessThan0;
|
||||
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);
|
||||
|
|
@ -285,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();
|
||||
}
|
||||
|
||||
|
|
@ -300,21 +254,26 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
|||
return zButtons;
|
||||
}
|
||||
|
||||
private static string zIsTooLowMessage = "You cannot move any lower. This position on your bed is too low for the extruder to reach. You need to raise your bed, or adjust your limits to allow the extruder to go lower.".Localize();
|
||||
private static string zTooLowTitle = "Warning - Moving Too Low".Localize();
|
||||
|
||||
private void zMinusControl_Click(object sender, EventArgs mouseEvent)
|
||||
{
|
||||
if (!allowLessThan0
|
||||
&& PrinterConnectionAndCommunication.Instance.LastReportedPosition.z - moveAmount < 0)
|
||||
double newPosition = PrinterConnectionAndCommunication.Instance.LastReportedPosition.z - moveAmount;
|
||||
bool moveBelow0 = newPosition < 0;
|
||||
if (moveBelow0)
|
||||
{
|
||||
UiThread.RunOnIdle(() =>
|
||||
// increment the z_offset_after_home
|
||||
double zOffset = ActiveSliceSettings.Instance.GetValue<double>(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++)
|
||||
{
|
||||
StyledMessageBox.ShowMessageBox(null, zIsTooLowMessage, zTooLowTitle, StyledMessageBox.MessageType.OK);
|
||||
});
|
||||
// don't move the bed lower it will not work when we print.
|
||||
return;
|
||||
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);
|
||||
PrinterConnectionAndCommunication.Instance.ReadPosition();
|
||||
}
|
||||
|
|
@ -340,8 +299,8 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
|||
protected Vector3 probeStartPosition;
|
||||
protected WizardControl container;
|
||||
|
||||
public GetCoarseBedHeight(WizardControl container, Vector3 probeStartPosition, string pageDescription, ProbePosition whereToWriteProbePosition, bool allowLessThan0)
|
||||
: base(pageDescription, setZHeightCoarseInstruction1, setZHeightCoarseInstruction2, 1, whereToWriteProbePosition, allowLessThan0)
|
||||
public GetCoarseBedHeight(WizardControl container, Vector3 probeStartPosition, string pageDescription, List<ProbePosition> probePositions, int probePositionsBeingEditedIndex)
|
||||
: base(pageDescription, setZHeightCoarseInstruction1, setZHeightCoarseInstruction2, 1, probePositions, probePositionsBeingEditedIndex)
|
||||
{
|
||||
this.container = container;
|
||||
this.probeStartPosition = probeStartPosition;
|
||||
|
|
@ -376,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, allowLessThan0)
|
||||
{
|
||||
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.");
|
||||
|
|
@ -446,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, bool allowLessThan0)
|
||||
: base(pageDescription, setZHeightFineInstruction1, setZHeightFineInstruction2, .1, whereToWriteProbePosition, allowLessThan0)
|
||||
public GetFineBedHeight(string pageDescription, List<ProbePosition> probePositions, int probePositionsBeingEditedIndex)
|
||||
: base(pageDescription, setZHeightFineInstruction1, setZHeightFineInstruction2, .1, probePositions, probePositionsBeingEditedIndex)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
@ -459,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, bool allowLessThan0)
|
||||
: base(pageDescription, setZHeightFineInstruction1, setZHeightFineInstruction2, .02, whereToWriteProbePosition, allowLessThan0)
|
||||
public GetUltraFineBedHeight(string pageDescription, List<ProbePosition> probePositions, int probePositionsBeingEditedIndex)
|
||||
: base(pageDescription, setZHeightFineInstruction1, setZHeightFineInstruction2, .02, probePositions, probePositionsBeingEditedIndex)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,20 +12,13 @@ namespace MatterHackers.MatterControl.ConfigurationPage.PrintLeveling
|
|||
{
|
||||
private PrinterSettings printerProfile;
|
||||
|
||||
public List<Vector3> SampledPositions = new List<Vector3>();
|
||||
|
||||
private Vector3 probeOffset0Private;
|
||||
|
||||
private Vector3 probeOffset1Private;
|
||||
|
||||
private Vector3 sampledPosition0Private;
|
||||
|
||||
private Vector3 sampledPosition1Private;
|
||||
|
||||
private Vector3 sampledPosition2Private;
|
||||
public List<Vector3> SampledPositions = new List<Vector3>()
|
||||
{
|
||||
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
|
|||
/// <returns></returns>
|
||||
private void ParseDepricatedPrintLevelingMeasuredPositions(string depricatedPositionsCsv3ByXYZ)
|
||||
{
|
||||
SampledPositions = new List<Vector3>(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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -148,7 +148,6 @@
|
|||
<Compile Include="ConfigurationPage\LanguageSelector.cs" />
|
||||
<Compile Include="ConfigurationPage\CalibrationSettings\CalibrationSettingsView.cs" />
|
||||
<Compile Include="ConfigurationPage\PrinterSettings\PrinterSettingsView.cs" />
|
||||
<Compile Include="ConfigurationPage\PrintLeveling\LevelWizard2Point.cs" />
|
||||
<Compile Include="ConfigurationPage\PrintLeveling\InstructionsPage.cs" />
|
||||
<Compile Include="ConfigurationPage\PrintLeveling\LevelWizard7PointRadial.cs" />
|
||||
<Compile Include="ConfigurationPage\PrintLeveling\LevelWizard13PointRadial.cs" />
|
||||
|
|
|
|||
|
|
@ -38,18 +38,18 @@ using MatterHackers.MatterControl.SlicerConfiguration;
|
|||
|
||||
namespace MatterHackers.MatterControl.PrinterCommunication.Io
|
||||
{
|
||||
public abstract class GCodeStream : IDisposable
|
||||
{
|
||||
#region Abstract Functions
|
||||
/// <summary>
|
||||
/// returns null when there are no more lines
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public abstract string ReadLine();
|
||||
public abstract void SetPrinterPosition(PrinterMove position);
|
||||
#endregion
|
||||
public abstract class GCodeStream : IDisposable
|
||||
{
|
||||
#region Abstract Functions
|
||||
/// <summary>
|
||||
/// returns null when there are no more lines
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<double>(SettingsKey.z_offset_after_home);
|
||||
if (zOffset != 0)
|
||||
{
|
||||
double newHomePosition = ActiveSliceSettings.Instance.GetValue<double>(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<bool>(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;
|
||||
|
|
|
|||
|
|
@ -1836,6 +1836,26 @@ namespace MatterHackers.MatterControl.PrinterCommunication
|
|||
|
||||
waitingForPosition.Stop();
|
||||
waitingForPosition.Reset();
|
||||
|
||||
if(storePositionToPrinterZAfterHome)
|
||||
{
|
||||
storePositionToPrinterZAfterHome = false;
|
||||
double storedHomePosition = ActiveSliceSettings.Instance.GetValue<double>(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<double>(SettingsKey.z_offset_after_home);
|
||||
if (zOffset != 0)
|
||||
{
|
||||
double newHomePosition = ActiveSliceSettings.Instance.GetValue<double>(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)
|
||||
|
|
@ -2911,6 +2931,11 @@ namespace MatterHackers.MatterControl.PrinterCommunication
|
|||
|| (lineWithoutChecksum.StartsWith("T") && !lineWithoutChecksum.StartsWith("T:"))) // is a switch extruder (verify this is the right time to ask this)
|
||||
{
|
||||
SendLineToPrinterNow("M114");
|
||||
|
||||
if (GCodeStream.LineIsZHoming(lineWithoutChecksum))
|
||||
{
|
||||
storePositionToPrinterZAfterHome = true;
|
||||
}
|
||||
}
|
||||
|
||||
// write data to communication
|
||||
|
|
@ -2988,6 +3013,7 @@ namespace MatterHackers.MatterControl.PrinterCommunication
|
|||
}
|
||||
|
||||
bool haveHookedDrawing = false;
|
||||
private bool storePositionToPrinterZAfterHome = false;
|
||||
|
||||
public class ReadThread
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -132,12 +123,7 @@ namespace MatterHackers.MatterControl
|
|||
|
||||
int linkCompatibleRow = row;
|
||||
int linkCompatibleAxis = axis;
|
||||
double minValue = double.MinValue;
|
||||
if (axis == 2 && ActiveSliceSettings.Instance.GetValue("z_can_be_negative") == "0")
|
||||
{
|
||||
minValue = 0;
|
||||
}
|
||||
MHNumberEdit valueEdit = new MHNumberEdit(positions[linkCompatibleRow][linkCompatibleAxis], allowNegatives: true, allowDecimals: true, minValue: minValue, pixelWidth: 60, tabIndex: tab_index++);
|
||||
MHNumberEdit valueEdit = new MHNumberEdit(positions[linkCompatibleRow][linkCompatibleAxis], allowNegatives: true, allowDecimals: true, pixelWidth: 60, tabIndex: tab_index++);
|
||||
valueEdit.ActuallNumberEdit.InternalTextEditWidget.EditComplete += (sender, e) =>
|
||||
{
|
||||
Vector3 position = positions[linkCompatibleRow];
|
||||
|
|
@ -189,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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -104,6 +104,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
public const string temperature = nameof(temperature);
|
||||
public const string windows_driver = nameof(windows_driver);
|
||||
public const string z_homes_to_max = nameof(z_homes_to_max);
|
||||
public const string printer_z_after_home = nameof(printer_z_after_home);
|
||||
public const string z_offset_after_home = nameof(z_offset_after_home);
|
||||
}
|
||||
|
||||
public class SettingsHelpers
|
||||
|
|
@ -256,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<Vector2>(SettingsKey.print_center));
|
||||
if (printLevelingData.SampledPositions.Count == 3)
|
||||
{
|
||||
PrintLevelingPlane.Instance.SetPrintLevelingEquation(
|
||||
printLevelingData.SampledPositions[0],
|
||||
printLevelingData.SampledPositions[1],
|
||||
printLevelingData.SampledPositions[2],
|
||||
ActiveSliceSettings.Instance.GetValue<Vector2>(SettingsKey.print_center));
|
||||
}
|
||||
}
|
||||
|
||||
return printLevelingData;
|
||||
|
|
@ -288,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<Vector2>(SettingsKey.print_center));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,7 +69,8 @@ namespace MatterHackers.MatterControl.SlicerConfiguration
|
|||
SettingsKey.recover_position_before_z_home,
|
||||
SettingsKey.resume_gcode,
|
||||
SettingsKey.temperature,
|
||||
"z_can_be_negative",
|
||||
SettingsKey.printer_z_after_home,
|
||||
SettingsKey.z_offset_after_home,
|
||||
"z_homes_to_max",
|
||||
|
||||
// TODO: merge the items below into the list above after some validation - setting that weren't previously mapped to Cura but probably should be.
|
||||
|
|
|
|||
|
|
@ -305,7 +305,6 @@ Advanced
|
|||
has_power_control
|
||||
Behavior
|
||||
z_homes_to_max
|
||||
z_can_be_negative
|
||||
heat_extruder_before_homing
|
||||
extruders_share_temperature
|
||||
Firmware
|
||||
|
|
@ -321,6 +320,9 @@ Advanced
|
|||
print_leveling_required_to_print
|
||||
Probe Settings
|
||||
manual_probe_paper_width
|
||||
Leveling Calibration
|
||||
printer_z_after_home
|
||||
z_offset_after_home
|
||||
Options
|
||||
Print Recovery
|
||||
Recover Settings
|
||||
|
|
|
|||
|
|
@ -2528,13 +2528,27 @@
|
|||
{
|
||||
"QuickMenuSettings": [ ],
|
||||
"SetSettingsOnChange": [ ],
|
||||
"SlicerConfigName": "z_can_be_negative",
|
||||
"PresentationName": "Z Can Be Negative",
|
||||
"HelpText": "Allows the printer to attempt going below 0 along the Z axis during the Software Print Leveling wizard, and disables related warnings. Does not override actual endstops, physical or software.",
|
||||
"DataEditType": "CHECK_BOX",
|
||||
"ExtraSettings": "",
|
||||
"ShowAsOverride": true,
|
||||
"ShowIfSet": "!has_hardware_leveling",
|
||||
"SlicerConfigName": "printer_z_after_home",
|
||||
"PresentationName": "Z Home Position",
|
||||
"HelpText": "This is automatically set by MatterControl. You do not need to adjust it.",
|
||||
"DataEditType": "POSITIVE_DOUBLE",
|
||||
"ExtraSettings": "mm",
|
||||
"ShowAsOverride": false,
|
||||
"ShowIfSet": null,
|
||||
"ResetAtEndOfPrint": false,
|
||||
"DefaultValue": "0",
|
||||
"RebuildGCodeOnChange": false
|
||||
},
|
||||
{
|
||||
"QuickMenuSettings": [ ],
|
||||
"SetSettingsOnChange": [ ],
|
||||
"SlicerConfigName": "z_offset_after_home",
|
||||
"PresentationName": "Offset After Homing",
|
||||
"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": false,
|
||||
"ShowIfSet": null,
|
||||
"ResetAtEndOfPrint": false,
|
||||
"DefaultValue": "0",
|
||||
"RebuildGCodeOnChange": false
|
||||
|
|
|
|||
|
|
@ -5503,3 +5503,24 @@ Translated:Oops! Please select a folder to search
|
|||
English:The bed is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting bed temperature in SETTINGS -> Filament -> Temperatures.\n\n{1}
|
||||
Translated:The bed is currently heating and its target temperature cannot be changed until it reaches {0}°C.\n\nYou can set the starting bed temperature in SETTINGS -> Filament -> Temperatures.\n\n{1}
|
||||
|
||||
English:This is automatically set by MatterControl. You do not need to adjust it.
|
||||
Translated:This is automatically set by MatterControl. You do not need to adjust it.
|
||||
|
||||
English: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.
|
||||
Translated: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.
|
||||
|
||||
English:Z Home Position
|
||||
Translated:Z Home Position
|
||||
|
||||
English:Offset After Homing
|
||||
Translated:Offset After Homing
|
||||
|
||||
English:Leveling Calibration
|
||||
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'
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit cfc9353557434141b83f66d3a65387e5c4120aa5
|
||||
Subproject commit aa22252a8c10fe10e3d3e98ddbe846cf495545ac
|
||||
Loading…
Add table
Add a link
Reference in a new issue