Add WriteSpeedLine for consistent speed handling

This commit is contained in:
jlewin 2019-02-26 13:37:57 -08:00
parent 9a0fb87a30
commit fd9e014a26

View file

@ -45,6 +45,7 @@ namespace MatterHackers.MatterControl
private StringWriter writer; private StringWriter writer;
private double currentE = 0; private double currentE = 0;
private bool retracted = false; private bool retracted = false;
private double currentSpeed = 0;
public GCodeSketch() public GCodeSketch()
{ {
@ -86,7 +87,13 @@ namespace MatterHackers.MatterControl
position = Transform.Transform(position); position = Transform.Transform(position);
writer.WriteLine("G1 X{0:0.###} Y{1:0.###}", position.X, position.Y); this.WriteSpeedLine(
string.Format(
"G1 X{0:0.###} Y{1:0.###}",
position.X,
position.Y),
this.TravelSpeed);
this.CurrentPosition = position; this.CurrentPosition = position;
} }
@ -94,7 +101,10 @@ namespace MatterHackers.MatterControl
{ {
currentE -= this.RetractLength; currentE -= this.RetractLength;
retracted = true; retracted = true;
writer.WriteLine("G1 E{0:0.###} F{1:0.###}", currentE, this.RetractSpeed);
this.WriteSpeedLine(
string.Format("G1 E{0:0.###}", currentE),
this.RetractSpeed);
} }
private void Unretract() private void Unretract()
@ -102,7 +112,10 @@ namespace MatterHackers.MatterControl
// Unretract // Unretract
currentE += RetractLength; currentE += RetractLength;
retracted = false; retracted = false;
writer.WriteLine("G1 E{0:0.###} F{1:0.###}", currentE, this.RetractSpeed);
this.WriteSpeedLine(
string.Format("G1 E{0:0.###}", currentE),
this.RetractSpeed);
} }
public void PenUp() public void PenUp()
@ -124,7 +137,6 @@ namespace MatterHackers.MatterControl
public void LineTo(Vector2 position) public void LineTo(Vector2 position)
{ {
bool hadRetract = retracted;
if (retracted) if (retracted)
{ {
this.Unretract(); this.Unretract();
@ -135,11 +147,35 @@ namespace MatterHackers.MatterControl
var delta = this.CurrentPosition - position; var delta = this.CurrentPosition - position;
currentE += delta.Length * 0.06; currentE += delta.Length * 0.06;
writer.WriteLine("G1 X{0} Y{1} E{2:0.###}", position.X, position.Y, currentE); this.WriteSpeedLine(
string.Format(
"G1 X{0} Y{1} E{2:0.###}",
position.X,
position.Y,
currentE),
this.Speed);
this.CurrentPosition = position; this.CurrentPosition = position;
} }
/// <summary>
/// Write the given line, optionally pushing speeds if needed
/// </summary>
/// <param name="line">The line to write</param>
/// <param name="targetSpeed">The target movement speed</param>
public void WriteSpeedLine(string line, double targetSpeed)
{
if (currentSpeed == targetSpeed)
{
writer.WriteLine(line);
}
else
{
currentSpeed = targetSpeed;
writer.WriteLine("{0} F{1:0.###}", line, targetSpeed);
}
}
public string ToGCode() public string ToGCode()
{ {
return sb.ToString(); return sb.ToString();