From a4d41acfd033efb39f8b0ecbfb4dfc0a469baeca Mon Sep 17 00:00:00 2001 From: larsbrubaker Date: Fri, 7 Mar 2014 16:09:07 -0800 Subject: [PATCH] Fixed a terrible problem with the gcode parsing that resulted in print leveling not working. Made the not printing commands also go through bed leveling when enabled. --- PrinterCommunication.cs | 29 ++++++++++++++++------------- PrinterControls/PrintLeveling.cs | 10 +++++----- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/PrinterCommunication.cs b/PrinterCommunication.cs index c32762163..d79a50fc1 100644 --- a/PrinterCommunication.cs +++ b/PrinterCommunication.cs @@ -665,6 +665,8 @@ namespace MatterHackers.MatterControl { string lineToWrite = LinesToWriteQueue[0]; + lineToWrite = ApplyPrintLeveling(lineToWrite, false, false); + WriteToPrinter(lineToWrite + "\r\n", lineToWrite); LinesToWriteQueue.RemoveAt(0); System.Threading.Thread.Sleep(1); @@ -830,18 +832,18 @@ namespace MatterHackers.MatterControl string lineToParse = foundStringEventArgs.LineToCheck; Vector3 positionRead = Vector3.Zero; - GCodeFile.GetFirstNumberAfter('X', lineToParse, ref positionRead.x); - GCodeFile.GetFirstNumberAfter('Y', lineToParse, ref positionRead.y); - GCodeFile.GetFirstNumberAfter('Z', lineToParse, ref positionRead.z); + GCodeFile.GetFirstNumberAfter("X:", lineToParse, ref positionRead.x); + GCodeFile.GetFirstNumberAfter("Y:", lineToParse, ref positionRead.y); + GCodeFile.GetFirstNumberAfter("Z:", lineToParse, ref positionRead.z); int xPosition = lineToParse.IndexOf('X'); int secondXPosition = lineToParse.IndexOf("Count", xPosition); if (secondXPosition != -1) { Vector3 currentPositionRead = Vector3.Zero; - GCodeFile.GetFirstNumberAfter('X', lineToParse, ref currentPositionRead.x, secondXPosition - 1); - GCodeFile.GetFirstNumberAfter('Y', lineToParse, ref currentPositionRead.y, secondXPosition - 1); - GCodeFile.GetFirstNumberAfter('Z', lineToParse, ref currentPositionRead.z, secondXPosition - 1); + GCodeFile.GetFirstNumberAfter("X:", lineToParse, ref currentPositionRead.x, secondXPosition - 1); + GCodeFile.GetFirstNumberAfter("Y:", lineToParse, ref currentPositionRead.y, secondXPosition - 1); + GCodeFile.GetFirstNumberAfter("Z:", lineToParse, ref currentPositionRead.z, secondXPosition - 1); lastReportedPosition = currentPositionRead; } @@ -1312,9 +1314,9 @@ namespace MatterHackers.MatterControl newDestination = Vector3.Zero; } - GCodeFile.GetFirstNumberAfter('X', lineBeingSent, ref newDestination.x); - GCodeFile.GetFirstNumberAfter('Y', lineBeingSent, ref newDestination.y); - GCodeFile.GetFirstNumberAfter('Z', lineBeingSent, ref newDestination.z); + GCodeFile.GetFirstNumberAfter("X", lineBeingSent, ref newDestination.x); + GCodeFile.GetFirstNumberAfter("Y", lineBeingSent, ref newDestination.y); + GCodeFile.GetFirstNumberAfter("Z", lineBeingSent, ref newDestination.z); if (movementMode == PrinterMachineInstruction.MovementTypes.Relative) { @@ -1329,7 +1331,8 @@ namespace MatterHackers.MatterControl if (ActivePrinter.DoPrintLeveling) { - lineBeingSent = PrintLeveling.Instance.ApplyLeveling(currentDestination, movementMode, lineBeingSent, addLFCR, includeSpaces); + string inputLine = lineBeingSent; + lineBeingSent = PrintLeveling.Instance.ApplyLeveling(currentDestination, movementMode, inputLine, addLFCR, includeSpaces); } } @@ -1341,7 +1344,7 @@ namespace MatterHackers.MatterControl lineBeingSent = lineBeingSent.ToUpper().Trim(); if (lineBeingSent.StartsWith("G0") || lineBeingSent.StartsWith("G1")) { - if (GCodeFile.GetFirstNumberAfter('E', lineBeingSent, ref gcodeRequestedExtrusionPosition)) + if (GCodeFile.GetFirstNumberAfter("E", lineBeingSent, ref gcodeRequestedExtrusionPosition)) { double delta = gcodeRequestedExtrusionPosition - previousGcodeRequestedExtrusionPosition; if (extruderMode == PrinterMachineInstruction.MovementTypes.Relative) @@ -1356,7 +1359,7 @@ namespace MatterHackers.MatterControl } else if (lineBeingSent.StartsWith("G92")) { - if (GCodeFile.GetFirstNumberAfter('E', lineBeingSent, ref gcodeRequestedExtrusionPosition)) + if (GCodeFile.GetFirstNumberAfter("E", lineBeingSent, ref gcodeRequestedExtrusionPosition)) { previousGcodeRequestedExtrusionPosition = gcodeRequestedExtrusionPosition; currentActualExtrusionPosition = gcodeRequestedExtrusionPosition; @@ -1374,7 +1377,7 @@ namespace MatterHackers.MatterControl if (lineBeingSent.StartsWith("G0") || lineBeingSent.StartsWith("G1")) { double feedRate = 0; - if (GCodeFile.GetFirstNumberAfter('F', lineBeingSent, ref feedRate)) + if (GCodeFile.GetFirstNumberAfter("F", lineBeingSent, ref feedRate)) { lineBeingSent = GCodeFile.ReplaceNumberAfter('F', lineBeingSent, feedRate * FeedRateRatio); } diff --git a/PrinterControls/PrintLeveling.cs b/PrinterControls/PrintLeveling.cs index 5c7de53bb..1e118182b 100644 --- a/PrinterControls/PrintLeveling.cs +++ b/PrinterControls/PrintLeveling.cs @@ -85,9 +85,9 @@ namespace MatterHackers.MatterControl && lineBeingSent[2] == ' ') { double extruderDelta = 0; - GCodeFile.GetFirstNumberAfter('E', lineBeingSent, ref extruderDelta); + GCodeFile.GetFirstNumberAfter("E", lineBeingSent, ref extruderDelta); double feedRate = 0; - GCodeFile.GetFirstNumberAfter('F', lineBeingSent, ref feedRate); + GCodeFile.GetFirstNumberAfter("F", lineBeingSent, ref feedRate); string newLine = "G1 "; @@ -97,9 +97,9 @@ namespace MatterHackers.MatterControl if (movementMode == PrinterMachineInstruction.MovementTypes.Relative) { Vector3 relativeMove = Vector3.Zero; - GCodeFile.GetFirstNumberAfter('X', lineBeingSent, ref relativeMove.x); - GCodeFile.GetFirstNumberAfter('Y', lineBeingSent, ref relativeMove.y); - GCodeFile.GetFirstNumberAfter('Z', lineBeingSent, ref relativeMove.z); + GCodeFile.GetFirstNumberAfter("X", lineBeingSent, ref relativeMove.x); + GCodeFile.GetFirstNumberAfter("Y", lineBeingSent, ref relativeMove.y); + GCodeFile.GetFirstNumberAfter("Z", lineBeingSent, ref relativeMove.z); outPosition = PrintLeveling.Instance.ApplyLevelingRotation(relativeMove); }