Beispiel #1
0
        /// <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)");
                }
            }
        }
Beispiel #2
0
        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)");
                }
            }
        }