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)
        {
            V2GPrintPosition prevP = printer.Position;

            printer.F = this.speed;
            printer.SetPosition(this.p);
            double length          = printer.Position.DistanceTo(prevP);
            double extrusionHeight = this.Height();

            if (printer.Position.Z < 0)
            {
                printer.Position.Z = 0;                         // todo: this safes inside the PrintState class
            }
            if (printer.Position.Z < 0.7 && this.AllowsGroundOverride)
            {
                if (this.thickness < 700)
                {
                    this.speed = 400;
                }
                extrusionHeight = 0.25;
            }

            // Locate Z in its place
            s.Append("\nG1");
            s.Append(" Z" + Math.Round((printer.Position.Z + extrusionHeight), 4));

            printer.EPerMM = this.EUnitIncrease();

            // Calculate E increase
            double EUnitIncrease = printer.EPerMM;
            double EIncrease     = EUnitIncrease * length;

            printer.E += EIncrease;

            // Extrude
            // - todo: check if coordinates are equal than previous ones
            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 + extrusionHeight), 4));
            s.Append(" E" + Math.Round(printer.E, 4));
            s.Append(" F" + Math.Round(printer.F, 4));
            if (printer.settings.IsVerbose)
            {
                s.Append(" (EUnitIncrease " + EUnitIncrease + ", thickness " + this.thickness + ", height " + extrusionHeight + ")");
            }
            if (printer.settings.IsVerbose)
            {
                s.Append(" (PrintSegment)");
            }
        }
Beispiel #3
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)
        {
            V2GPrintPosition prevPrinterPosition = printer.Position;
            bool             speedChanged        = false;

            if (printer.F != this.PrintPosition.Speed)
            {
                printer.F    = this.PrintPosition.Speed;
                speedChanged = true;
            }
            printer.SetPosition(this.PrintPosition, s);
            double length = printer.Position.DistanceTo(prevPrinterPosition);

            // Switch Extruder Head if Needed
            printer.SetHead(s, this.PrintPosition.Head);

            // Move to Start Point
            //s.Append("\nG1");
            //s.Append(" Z" + Math.Round(printer.Position.Z, 4));

            // Move and Extrude
            s.Append("\nG1");
            if (prevPrinterPosition.X != printer.Position.X)
            {
                s.Append(" X" + Math.Round(printer.Position.X, 4));
            }
            if (prevPrinterPosition.Y != printer.Position.Y)
            {
                s.Append(" Y" + Math.Round(printer.Position.Y, 4));
            }
            if (Math.Abs(prevPrinterPosition.Z - printer.Position.Z) > 0.0001)
            {
                s.Append(" Z" + Math.Round(printer.Position.Z, 4));
            }
            printer.IncreaseE(s, this.PrintPosition.MaterialAmount, length, this.PrintPosition.MixPercentage);
            if (speedChanged)
            {
                s.Append(" F" + Math.Round(printer.F, 4));
            }
        }
Beispiel #4
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)");
                }
            }
        }