/// <summary> /// Generate G-code instructions for the segment. /// </summary> /// <param name="s">StringBuilder to store the G-code.</param> /// <param name="printer">Printer state.</param> public override void GenerateGCode(StringBuilder s, V2GState printer) { double MovementLength = printer.Position.DistanceTo(printer.PrintPointOnBase(this.PrintPosition)); if (MovementLength > MovementThreshold) { if (printer.settings.IsVerbose) { s.Append("\n(A. PrintMovement) (Printer has to move)"); } printer.F = this.PrintPosition.Speed; printer.SetPosition(this.PrintPosition, s); // Move s.Append("\nG1"); s.Append(" X" + Math.Round(printer.Position.X, 4)); s.Append(" Y" + Math.Round(printer.Position.Y, 4)); s.Append(" Z" + Math.Round(printer.Position.Z, 4)); s.Append(" F" + Math.Round(printer.F, 4)); } else { if (printer.settings.IsVerbose) { s.Append("\n (A. PrintMovement) (Printer is already here)"); } } }
public override void GenerateGCode(StringBuilder s, V2GState printer) { double MovementLength = printer.Position.DistanceTo(printer.PrintPointOnBase(this.p)); if (MovementLength > 0.001) { if (this.IsRelative) { this.SetRelativePoint(printer); } if (printer.settings.IsVerbose) { s.Append("\n(A. PrintMovement) (Printer has to move)"); } printer.F = this.speed; // Filament retract if (this.FilamentRetract > 0.0 && (MovementLength > 2.0 || ForceFilamentOperations)) { printer.E += -this.FilamentRetract; s.Append("\nG1 E" + Math.Round(printer.E, 4)); } // Add zDelta if (zDelta != 0) { printer.Position.Z += zDelta; s.Append("\nG1 Z" + Math.Round(printer.Position.Z, 4)); if (printer.settings.IsVerbose) { s.Append(" (B. PrintMovement) (move zDelta " + zDelta + ")"); } } // Move // todo: rollback and forth printer.SetPosition(this.p + new V2GPrintPosition(0, 0, zDelta)); s.Append("\nG1"); s.Append(" X" + Math.Round(printer.Position.X, 4)); s.Append(" Y" + Math.Round(printer.Position.Y, 4)); s.Append(" Z" + Math.Round(printer.Position.Z, 4)); s.Append(" F" + Math.Round(printer.F, 4)); if (printer.settings.IsVerbose) { s.Append(" (C. PrintMovement) (move towards point with zDelta " + zDelta + ")"); } // Substract zDelta if (zDelta != 0) { printer.Position.Z -= zDelta; if (printer.Position.Z < 0) { printer.Position.Z = 0.0; } s.Append("\nG1 Z" + Math.Round(printer.Position.Z, 4)); //if (printer.IsVerbose) s.Append(" (D. PrintMovement) (move zDelta " + zDelta + ")"); } // Filament feed (while moving) if (this.FilamentFeed > 0.0 && (MovementLength > 2.0 || ForceFilamentOperations)) // todo: check if this makes PLA behavior worse (length restriction wasn't here, just testing for NinjaFlex not to go out of the extruder) { if (zDelta == 0) { s.Append("\nG1"); } printer.E += this.FilamentFeed; s.Append(" E" + Math.Round(printer.E, 4)); } } else { if (printer.settings.IsVerbose) { s.Append("\n (A. PrintMovement) (Printer is already here)"); } } }