Пример #1
0
        string AsRelativeMovePosition(INcMachine ncMachine, IMachinePosition previousPosition)
        {
            string line = "";

            switch (ncMachine.MachineGeometry)
            {
            case MachineGeometry.XA:
                line = "X" + (X - previousPosition.X).ToString(linearFormat) + " "
                       + "A" + (Adeg - previousPosition.Adeg).ToString(rotaryFormat);
                break;

            case MachineGeometry.XYZ:
                line = line = "X" + (X - previousPosition.X).ToString(linearFormat) + " "
                              + "Y" + (Y - previousPosition.Y).ToString(linearFormat) + " "
                              + "Z" + (Z - previousPosition.Z).ToString(linearFormat);
                break;

            case MachineGeometry.XYZBC:
                line = line = "X" + (X - previousPosition.X).ToString(linearFormat) + " "
                              + "Y" + (Y - previousPosition.Y).ToString(linearFormat) + " "
                              + "Z" + (Z - previousPosition.Z).ToString(linearFormat) + " "
                              + "B" + (Bdeg - previousPosition.Bdeg).ToString(rotaryFormat) + " "
                              + "C" + (Cdeg - previousPosition.Cdeg).ToString(rotaryFormat);
                break;
            }

            return(line);
        }
Пример #2
0
        public double DistanceTo(IMachinePosition pos)
        {
            var    v1 = new Vector3(X, Y, Z);
            var    v2 = new Vector3(pos.X, pos.Y, pos.Z);
            double d  = v1.DistanceTo(v2);

            return(d);
        }
Пример #3
0
 public NcPositionCommand(int lineNumber, IMachinePosition machinePosition,
                          IFeedrate feedrate, BlockType blockType)
 {
     MachinePosition = machinePosition;
     this.blockType  = blockType;
     moveType        = MoveType.ABSOLUTE;
     Feedrate        = feedrate;
     LineNumber      = lineNumber;
 }
Пример #4
0
 public MachinePosition(IMachinePosition p)
 {
     Adeg = p.Adeg;
     Bdeg = p.Bdeg;
     Cdeg = p.Cdeg;
     X    = p.X;
     Y    = p.Y;
     Z    = p.Z;
 }
Пример #5
0
 public NcPositionCommand(int lineNumber, IMachinePosition machinePosition, NcPositionCommand previousPositionCommand,
                          IFeedrate feedrate, BlockType blockType)
 {
     MachinePosition = machinePosition;
     this.blockType  = blockType;
     moveType        = MoveType.RELATIVE;
     Feedrate        = feedrate;
     LineNumber      = lineNumber;
     prevPosition    = previousPositionCommand.MachinePosition;
 }
Пример #6
0
 public string AsNcString(INcMachine ncMachine, IMachinePosition prevPosition, BlockType blockType, MoveType moveType)
 {
     rotaryFormat   = ncMachine.MachineCode.RotaryAxisFormat;
     linearFormat   = ncMachine.MachineCode.LinearAxisFormat;
     this.blockType = blockType;
     if (moveType == MoveType.RELATIVE)
     {
         return(AsRelativeMovePosition(ncMachine, prevPosition));
     }
     else
     {
         return(AsAbsoluteMovePosition(ncMachine));
     }
 }
Пример #7
0
        public List <string> AsNcTextFile(INcMachine ncMachine)
        {
            var file = new List <string>();
            IMachinePosition prevPosition = ncMachine.ProgStartPosition;

            file.AddRange(GetHeader(ncMachine));
            foreach (var ent in data)
            {
                file.Add(ent.AsNcString(ncMachine));
            }
            file.AddRange(GetFooter(ncMachine));
            file.AddRange(GetEndOfFile(ncMachine));

            return(file);
        }
Пример #8
0
        /// <summary>
        /// return true and blocktype if line is a g-code line
        /// </summary>
        /// <param name="ncLine">line from program</param>
        /// <param name="blockT">block type</param>
        /// <returns>true if line is part of path</returns>

        private void CalcSweepAngle(ref ArcPathEntity arc, IMachinePosition startPoint)
        {
            Vector3 vRadius    = new Vector3();
            double  startAngle = 0;
            double  endAngle   = 0;
            double  radius     = 0;
            double  sweep      = 0;

            double dxprev = 0;
            double dyprev = 0;
            double dzprev = 0;

            Vector3 vEnd   = new GeometryLib.Vector3(arc.Position.X, arc.Position.Y, arc.Position.Z);
            Vector3 vStart = new Vector3(startPoint.X, startPoint.Y, startPoint.Z);

            switch (arc.ArcType)
            {
            case ArcSpecType.IJKAbsolute:

                arc.CenterPoint = new GeometryLib.Vector3(arc.Position.X - arc.Icoordinate, arc.Position.Y - arc.Jcoordinate, arc.Position.Z - arc.Kcoordinate);
                arc.Radius      = vEnd.Length;
                radius          = arc.Radius;
                dxprev          = startPoint.X - arc.Icoordinate;
                dyprev          = startPoint.Y - arc.Jcoordinate;
                dzprev          = startPoint.Z - arc.Kcoordinate;

                break;

            case ArcSpecType.Radius:

                break;

            case ArcSpecType.NCI:
                vRadius    = new Vector3(arc.Position.X - arc.CenterPoint.X, arc.Position.Y - arc.CenterPoint.Y, arc.Position.Z - arc.CenterPoint.Z);
                arc.Radius = vRadius.Length;
                break;

            default:
            case ArcSpecType.IJKRelative:
                vRadius         = new GeometryLib.Vector3(arc.Icoordinate, arc.Jcoordinate, arc.Kcoordinate);
                arc.Radius      = vRadius.Length;
                arc.CenterPoint = new Vector3(startPoint.X + arc.Icoordinate, startPoint.Y + arc.Jcoordinate, startPoint.Z + arc.Kcoordinate);
                break;
            }
            switch (arc.ArcPlane)
            {
            case ArcPlane.XY:
                startAngle = Math.Atan2(vStart.Y - arc.CenterPoint.Y, vStart.X - arc.CenterPoint.X);
                endAngle   = Math.Atan2(vEnd.Y - arc.CenterPoint.Y, vEnd.X - arc.CenterPoint.X);
                break;

            case ArcPlane.XZ:
                startAngle = Math.Atan2(vStart.Z - arc.CenterPoint.Z, vStart.X - arc.CenterPoint.X);
                endAngle   = Math.Atan2(vEnd.Z - arc.CenterPoint.Z, vEnd.X - arc.CenterPoint.X);
                break;

            case ArcPlane.YZ:
                startAngle = Math.Atan2(vStart.Z - arc.CenterPoint.Z, vStart.Y - arc.CenterPoint.Y);
                endAngle   = Math.Atan2(vEnd.Z - arc.CenterPoint.Z, vEnd.Y - arc.CenterPoint.Y);
                break;
            }
            sweep = endAngle - startAngle;

            if (arc.Type == BlockType.CWARC)
            {
                sweep = 2 * Math.PI - sweep;
                if (sweep > 0)
                {
                    sweep = -1 * sweep;
                }
            }
            else
            {
                if (sweep < 0)
                {
                    sweep = Math.Abs(sweep);
                }
            }

            if (arc.FullArcFlag)
            {
                sweep = 2 * Math.PI;
            }

            arc.SweepAngle    = sweep;
            arc.StartAngleRad = startAngle;
        }