76 lines
No EOL
1.8 KiB
C#
76 lines
No EOL
1.8 KiB
C#
using System;
|
|
using MatterControl.Printing;
|
|
using MatterHackers.VectorMath;
|
|
|
|
namespace MatterHackers.MatterControl
|
|
{
|
|
public class PrintLevelingPlane
|
|
{
|
|
private Matrix4X4 bedLevelMatrix = Matrix4X4.Identity;
|
|
|
|
// private constructor
|
|
private PrintLevelingPlane()
|
|
{
|
|
}
|
|
|
|
static private PrintLevelingPlane instance;
|
|
|
|
static public PrintLevelingPlane Instance
|
|
{
|
|
get
|
|
{
|
|
if (instance == null)
|
|
{
|
|
instance = new PrintLevelingPlane();
|
|
}
|
|
|
|
return instance;
|
|
}
|
|
}
|
|
|
|
public Vector3 ApplyLeveling(Vector3 inPosition)
|
|
{
|
|
return Vector3Ex.TransformPosition(inPosition, bedLevelMatrix);
|
|
}
|
|
|
|
public Vector3 ApplyLevelingRotation(Vector3 inPosition)
|
|
{
|
|
return Vector3Ex.TransformVector(inPosition, bedLevelMatrix);
|
|
}
|
|
|
|
public string ApplyLeveling(Vector3 currentDestination, string lineBeingSent)
|
|
{
|
|
if ((lineBeingSent.StartsWith("G0") || lineBeingSent.StartsWith("G1"))
|
|
&& lineBeingSent.Length > 2
|
|
&& lineBeingSent[2] == ' ')
|
|
{
|
|
double extruderDelta = 0;
|
|
GCodeFile.GetFirstNumberAfter("E", lineBeingSent, ref extruderDelta);
|
|
double feedRate = 0;
|
|
GCodeFile.GetFirstNumberAfter("F", lineBeingSent, ref feedRate);
|
|
|
|
string newLine = "G1 ";
|
|
|
|
if (lineBeingSent.Contains("X") || lineBeingSent.Contains("Y") || lineBeingSent.Contains("Z"))
|
|
{
|
|
Vector3 outPosition = PrintLevelingPlane.Instance.ApplyLeveling(currentDestination);
|
|
|
|
newLine = newLine + String.Format("X{0:0.##} Y{1:0.##} Z{2:0.###}", outPosition.X, outPosition.Y, outPosition.Z);
|
|
}
|
|
|
|
if (extruderDelta != 0)
|
|
{
|
|
newLine = newLine + String.Format(" E{0:0.###}", extruderDelta);
|
|
}
|
|
if (feedRate != 0)
|
|
{
|
|
newLine = newLine + String.Format(" F{0:0.##}", feedRate);
|
|
}
|
|
|
|
lineBeingSent = newLine;
|
|
}
|
|
|
|
return lineBeingSent;
|
|
}
|
|
}
|
|
} |