Esempio n. 1
0
        internal static Position FromCommand(GCode code, Position current)
        {
            if (code.Command != GCodeCommand.G1)
            {
                throw new ApplicationException("Only valid for G1 commands");
            }
            Position newPos = (Position)current.Clone();

            foreach (GCodeParameter parm in code.Parameters)
            {
                switch (parm.Type)
                {
                case GCodeParameterType.X:
                    newPos.X = Convert.ToDouble(parm.Value);
                    break;

                case GCodeParameterType.Y:
                    newPos.Y = Convert.ToDouble(parm.Value);
                    break;

                case GCodeParameterType.Z:
                    newPos.Z = Convert.ToDouble(parm.Value);
                    break;

                case GCodeParameterType.E:
                    newPos.E = Convert.ToDouble(parm.Value);
                    break;

                default:
                    throw new ApplicationException("Unexpected parameter");
                }
            }
            return(newPos);
        }
Esempio n. 2
0
        internal void Translate(GCode code)
        {
            switch (code.Command)
            {
            case GCodeCommand.G1:
                DeltaProcessG1(code);
                break;

            case GCodeCommand.G28:
                current.X = current.Y = current.Z = 0;
                break;

            default:
                return;
            }
        }
Esempio n. 3
0
        private List <GCode> DeltaProcessG1(GCode code)
        {
            Position destination = (Position)current.Clone();

            foreach (GCodeParameter parm in code.Parameters)
            {
                switch (parm.Type)
                {
                case GCodeParameterType.F:
                    feedrate = Convert.ToDouble(parm.Value);
                    break;

                case GCodeParameterType.X:
                    destination.X = Convert.ToDouble(parm.Value);
                    break;

                case GCodeParameterType.Y:
                    destination.X = Convert.ToDouble(parm.Value);
                    break;

                case GCodeParameterType.Z:
                    destination.X = Convert.ToDouble(parm.Value);
                    break;

                case GCodeParameterType.E:
                    destination.E = Convert.ToDouble(parm.Value);
                    break;

                default:
                    throw new ApplicationException("Unknown parameter in G1");
                }
            }
            double precision = Math.Pow(0.05, 2); //mm squared

//            double precision = 0.001; //mm

            deltaCalculations = 0;
            List <Position> candidate      = PartitionInSegments(current, destination, precision, 1);
            int             candidateCalcs = deltaCalculations;

            deltaCalculations = 0;
            List <Position> johann = JohannPartitionInSegments(current, destination);

            CandidateDeltaSurplus += candidateCalcs - deltaCalculations;
            JohanTotalSteps       += johann.Count;
            CandidateTotalSteps   += candidate.Count;

            double maxdist = TestPartitionAccuracy(candidate);

            if (maxdist > MaxCandidateError)
            {
                MaxCandidateError = maxdist;
            }
            maxdist = TestPartitionAccuracy(johann);
            if (maxdist > MaxJohannError)
            {
                MaxJohannError = maxdist;
            }
            current = destination;
            return(null);
        }