Пример #1
0
        public override void ToMachining(double AssociatedDist, Entities.ToolFile toolFile)
        {
            List <Point3d> points = new List <Point3d>()
            {
                new Point3d(lowX / 2 + highX / 2, lowY / 2 + highY / 2, Depth),
                new Point3d(lowX, lowY / 2 + highY / 2, Depth),
                new Point3d(lowX, highY, Depth),
                new Point3d(highX, highY, Depth),
                new Point3d(highX, lowY, Depth),
                new Point3d(lowX, lowY, Depth),
                new Point3d(lowX, lowY + highY / 4 - lowY / 4, Depth),
            };
            List <double> bulges = new List <double>()
            {
                0, 0, 0, 0, 0, 0, 0
            };

            Machinings.Routing route = new Machinings.Routing();
            route.Bulges   = bulges;
            route.Points   = points;
            route.ToolComp = ToolComp.Left;
            route.Part     = this.Part;
            route.OnFace5  = this.OnFace5;
            route.ToolName = this.ToolName;

            Part.Routings.Add(route);

            //TODO:不知道刀的大小,如何生成Pocket的路径?
            //可能需要在分析时再来生成路径,晕死
            if (IsPocket)
            {
                PocketMachining(toolFile);
            }
        }
        public override void ToMachining(double AssociatedDist, Entities.ToolFile toolFile)
        {
            List<Point3d> points = new List<Point3d>()
                {
                    new Point3d(lowX/2+highX/2,lowY/2+highY/2,Depth),
                    new Point3d(lowX,lowY/2+highY/2,Depth),
                    new Point3d(lowX,highY,Depth),
                    new Point3d(highX,highY,Depth),
                    new Point3d(highX,lowY,Depth),
                    new Point3d(lowX,lowY,Depth),
                    new Point3d(lowX,lowY+highY/4-lowY/4,Depth),
                };
            List<double> bulges = new List<double>() { 0, 0, 0, 0, 0, 0, 0 };
            Machinings.Routing route = new Machinings.Routing();
            route.Bulges = bulges;
            route.Points = points;
            route.ToolComp = ToolComp.Left;
            route.Part = this.Part;
            route.OnFace5 = this.OnFace5;
            route.ToolName = this.ToolName;

            Part.Routings.Add(route);

            //TODO:不知道刀的大小,如何生成Pocket的路径?
            //可能需要在分析时再来生成路径,晕死
            if (IsPocket)
            {
                PocketMachining(toolFile);
            }
        }
Пример #3
0
        private void PocketMachining(Entities.ToolFile toolFile)
        {
            List <Point3d> points = new List <Point3d>();
            List <double>  bulges = new List <double>();

            double diameter = toolFile.GetRouteToolByName(this.ToolName).Diameter;
            int    row      = (int)System.Math.Ceiling(System.Math.Abs(StartX - EndX) / diameter) - 1;

            double mod = System.Math.Abs(StartX - EndX) % diameter;

            for (int i = 0; i < row; i++)
            {
                if (i != row - 1)
                {
                    AddLineToPocket(points, bulges, diameter, i);
                }
                else
                {
                    if (mod == 0)//如果是整数行
                    {
                        AddLineToPocket(points, bulges, diameter, i);
                    }
                    else
                    {
                        if (i % 2 == 0)//整除2,表明为基数列
                        {
                            points.Add(new Point3d(lowX + diameter * (i - 1) + diameter * mod / diameter, lowY + diameter, Depth));
                            points.Add(new Point3d(lowX + diameter * (i - 1) + diameter * mod / diameter, highY - diameter, Depth));
                            bulges.Add(0);
                            bulges.Add(0);
                        }
                        else
                        {
                            points.Add(new Point3d(lowX + diameter * (i - 1) + diameter * mod / diameter, highY - diameter, Depth));
                            points.Add(new Point3d(lowX + diameter * (i - 1) + diameter * mod / diameter, lowY + diameter, Depth));
                            bulges.Add(0);
                            bulges.Add(0);
                        }
                    }
                }
            }

            Machinings.Routing route = new Machinings.Routing();
            route.Bulges   = bulges;
            route.Points   = points;
            route.ToolComp = ToolComp.Left;
            route.Part     = this.Part;
            route.OnFace5  = this.OnFace5;
            route.ToolName = this.ToolName;

            Part.Routings.Add(route);
        }
Пример #4
0
        public override void ToMachining(double AssociatedDist, ToolFile toolFile)
        {
            //得到当前面的关联面
            AssociatedPartFaceList = base.FindAssociatedFacesOneTime(AssociatedDist, Penetration);

            //当前的face
            var currentFace = this.Part.GetPartFaceByNumber(this.FaceNumber);

            foreach (var f in AssociatedPartFaceList)
            {
                //得到一个转换矩阵,将
                var matrix = Matrix3d.AlignCoordinateSystem(f.Part.MovedMPPoint,
                                                            f.Part.MovedMPXAxis,
                                                            f.Part.MovedMPYAxis,
                                                            f.Part.MovedMPZAxis,
                                                            Point3d.Origin,
                                                            Vector3d.XAxis,
                                                            Vector3d.YAxis,
                                                            Vector3d.ZAxis);

                //将关联面的两个点作为铣型的起始
                var pt1 = currentFace.Point1.TransformBy(matrix);
                var pt2 = currentFace.Point4.TransformBy(matrix);


                //TODO:需要考虑的事情
                //1、LeadIn和LeadOut
                //2、铣型的方向
                //3、double/triple pass
                //4、刀补的方向如何偏移
                //5、宽度的方向如何偏移


                List <Point3d> points = new List <Point3d>()
                {
                    pt1, pt2
                };
                List <double> bulges = new List <double>()
                {
                    0, 0
                };
                Machinings.Routing route = new Machinings.Routing();
                route.Bulges   = bulges;
                route.Points   = points;
                route.ToolComp = ToolComp.None;
                route.Part     = f.Part;
                route.OnFace5  = (f.FaceNumber == 5) ? true : false;
                route.ToolName = this.ToolName;

                f.Part.Routings.Add(route);
            }
        }
        public override void ToMachining(double AssociatedDist, Entities.ToolFile toolFile)
        {
            Point3d pt1 = new Point3d(PosStartX, PosStartY, StartDepth);
            Point3d pt2 = new Point3d(PosEndX, PosEndY, EndDepth);
            List<Point3d> points = new List<Point3d>() { pt1, pt2 };
            List<double> bulges = new List<double>() { 0, 0 };
            Machinings.Routing route = new Machinings.Routing();
            route.Bulges = bulges;
            route.Points = points;
            route.ToolComp = this.ToolComp;
            route.Part = this.Part;
            route.OnFace5 = (this.FaceNumber == 5) ? true : false;
            route.ToolName = this.ToolName;

            Part.Routings.Add(route);
        }
        public override void ToMachining(double AssociatedDist, ToolFile toolFile)
        {
            //得到当前面的关联面
            AssociatedPartFaceList = base.FindAssociatedFacesOneTime(AssociatedDist, Penetration);

            //当前的face
            var currentFace = this.Part.GetPartFaceByNumber(this.FaceNumber);

            foreach (var f in AssociatedPartFaceList)
            {
                //得到一个转换矩阵,将
                var matrix = Matrix3d.AlignCoordinateSystem(f.Part.MovedMPPoint,
                                                            f.Part.MovedMPXAxis,
                                                            f.Part.MovedMPYAxis,
                                                            f.Part.MovedMPZAxis,
                                                            Point3d.Origin,
                                                            Vector3d.XAxis,
                                                            Vector3d.YAxis,
                                                            Vector3d.ZAxis);

                //将关联面的两个点作为铣型的起始
                var pt1 = currentFace.Point1.TransformBy(matrix);
                var pt2 = currentFace.Point4.TransformBy(matrix);


                //TODO:需要考虑的事情
                //1、LeadIn和LeadOut
                //2、铣型的方向
                //3、double/triple pass
                //4、刀补的方向如何偏移
                //5、宽度的方向如何偏移


                List<Point3d> points = new List<Point3d>() { pt1, pt2 };
                List<double> bulges = new List<double>() { 0, 0 };
                Machinings.Routing route = new Machinings.Routing();
                route.Bulges = bulges;
                route.Points = points;
                route.ToolComp = ToolComp.None;
                route.Part = f.Part;
                route.OnFace5 = (f.FaceNumber == 5) ? true : false;
                route.ToolName = this.ToolName;

                f.Part.Routings.Add(route);
            }
        }
Пример #7
0
        public override void ToMachining(double AssociatedDist, ToolFile toolFile)
        {
            //if (!toolFile.Tools.Any(it => it.ToolName == this.ToolName))
            //{
            //    this.writeError("未在刀具文件中找到铣刀:" + this.ToolName, false);
            //    return;
            //}

            Machinings.Routing route = new Machinings.Routing();
            route.ToolName = this.ToolName;
            route.ToolComp = this.ToolComp;
            route.Points   = this.Points;
            route.Bulges   = this.Bulges;
            //route.FeedSpeeds;
            route.OnFace5 = this.OnFace5;
            route.Part    = this.Part;

            Part.Routings.Add(route);
        }
Пример #8
0
        public override void ToMachining(double AssociatedDist, ToolFile toolFile)
        {
            double diameter = toolFile.GetRouteToolByName(this.ToolName).Diameter;

            if (diameter >= Radius)
            {
                throw new Exception("不支持加工圆半径小于铣刀半径的情况");
            }

            double smallRadius = (Radius < 12.7) ? Radius : 12.7;//TODO:MV里这是一个定制,如果大于大员的半径,就用大圆的半径

            List <Point3d> points = new List <Point3d>();
            List <double>  bulges = new List <double>();

            points.Add(new Point3d(StartX - Radius + smallRadius, StartY + smallRadius, 0));//下刀深度为0
            points.Add(new Point3d(StartX - Radius, StartY, Depth));
            points.Add(new Point3d(StartX, StartY - Radius, Depth));
            points.Add(new Point3d(StartX + Radius, StartY, Depth));
            points.Add(new Point3d(StartX, StartY + Radius, Depth));
            points.Add(new Point3d(StartX - Radius, StartY, Depth));
            points.Add(new Point3d(StartX - Radius + smallRadius, StartY - smallRadius, 0));
            bulges.AddRange(new double[] { -0.414214, -0.414214, -0.414214, -0.414214, -0.414214, -0.414214, -0.414214 });

            Machinings.Routing route = new Machinings.Routing();
            route.Bulges   = bulges;
            route.Points   = points;
            route.ToolComp = ToolComp.Left;
            route.Part     = this.Part;
            route.OnFace5  = this.OnFace5;
            route.ToolName = this.ToolName;

            Part.Routings.Add(route);

            if (IsPocket)
            {
                //TODO:这个未完成
                PocketMachining(diameter);
            }
        }
Пример #9
0
        public override void ToMachining(double AssociatedDist, Entities.ToolFile toolFile)
        {
            Point3d        pt1    = new Point3d(PosStartX, PosStartY, StartDepth);
            Point3d        pt2    = new Point3d(PosEndX, PosEndY, EndDepth);
            List <Point3d> points = new List <Point3d>()
            {
                pt1, pt2
            };
            List <double> bulges = new List <double>()
            {
                0, 0
            };

            Machinings.Routing route = new Machinings.Routing();
            route.Bulges   = bulges;
            route.Points   = points;
            route.ToolComp = this.ToolComp;
            route.Part     = this.Part;
            route.OnFace5  = (this.FaceNumber == 5) ? true : false;
            route.ToolName = this.ToolName;

            Part.Routings.Add(route);
        }
        public override void ToMachining(double AssociatedDist, ToolFile toolFile)
        {
            double diameter = toolFile.GetRouteToolByName(this.ToolName).Diameter;
            if (diameter >= Radius)
                throw new Exception("不支持加工圆半径小于铣刀半径的情况");

            double smallRadius = (Radius < 12.7) ? Radius : 12.7;//TODO:MV里这是一个定制,如果大于大员的半径,就用大圆的半径

            List<Point3d> points = new List<Point3d>();
            List<double> bulges = new List<double>();

            points.Add(new Point3d(StartX - Radius + smallRadius, StartY + smallRadius, 0));//下刀深度为0
            points.Add(new Point3d(StartX - Radius, StartY, Depth));
            points.Add(new Point3d(StartX, StartY - Radius, Depth));
            points.Add(new Point3d(StartX + Radius, StartY, Depth));
            points.Add(new Point3d(StartX, StartY + Radius, Depth));
            points.Add(new Point3d(StartX - Radius, StartY, Depth));
            points.Add(new Point3d(StartX - Radius + smallRadius, StartY - smallRadius, 0));
            bulges.AddRange(new double[] { -0.414214, -0.414214, -0.414214, -0.414214, -0.414214, -0.414214, -0.414214 });

            Machinings.Routing route = new Machinings.Routing();
            route.Bulges = bulges;
            route.Points = points;
            route.ToolComp = ToolComp.Left;
            route.Part = this.Part;
            route.OnFace5 = this.OnFace5;
            route.ToolName = this.ToolName;

            Part.Routings.Add(route);

            if (IsPocket)
            {
                //TODO:这个未完成
                PocketMachining(diameter);
            }
        }
Пример #11
0
        public override void ToMachining(double AssociatedDist, Entities.ToolFile toolFile)
        {
            //先以当前点为坐标系,建立两点坐标
            double  xydist   = System.Math.Sqrt(DistX * DistX + DistY * DistY);
            double  cos      = DistX / xydist;
            double  sin      = DistY / xydist;
            Point3d firstPt  = new Point3d(DistX + LeadIn * cos, -LeadIn * sin, Depth);
            Point3d secondPt = new Point3d(-LeadIn * cos, DistY + LeadIn * sin, Depth);

            //把两点坐标,转换为世界坐标,再转为MP坐标系
            Point3d  pt      = Part.GetPartPointByNumber(EdgeNumber.ToString());
            Matrix3d matrix1 = Matrix3d.AlignCoordinateSystem(
                Point3d.Origin,
                Vector3d.XAxis,
                Vector3d.YAxis,
                Vector3d.ZAxis,
                pt,
                (Part.MachinePoint.IsRotated) ? this.GetPointYAxis(EdgeNumber) : this.GetPointXAxis(EdgeNumber),
                (Part.MachinePoint.IsRotated) ? this.GetPointXAxis(EdgeNumber) : this.GetPointYAxis(EdgeNumber),
                Vector3d.ZAxis);
            Matrix3d matrix2 = Matrix3d.AlignCoordinateSystem(
                Part.MPPoint,
                Part.MPXAxis,
                Part.MPYAxis,
                Part.MPZAxis,
                Point3d.Origin,
                Vector3d.XAxis,
                Vector3d.YAxis,
                Vector3d.ZAxis);

            firstPt  = firstPt.TransformBy(matrix1).TransformBy(matrix2);
            secondPt = secondPt.TransformBy(matrix1).TransformBy(matrix2);

            ToolComp comp = ToolComp.None;

            if (firstPt.X >= secondPt.X && firstPt.Y >= secondPt.Y)
            {
                comp = ToolComp.Left;
            }
            else if (firstPt.X >= secondPt.X && firstPt.Y < secondPt.Y)
            {
                comp = ToolComp.Right;
            }
            else if (firstPt.X < secondPt.X && firstPt.Y < secondPt.Y)
            {
                comp = ToolComp.Left;
            }
            else if (firstPt.X < secondPt.X && firstPt.Y >= secondPt.Y)
            {
                comp = ToolComp.Right;
            }

            List <Point3d> points = new List <Point3d>()
            {
                firstPt, secondPt
            };

            Machinings.Routing route = new Machinings.Routing();
            route.ToolName = ToolName;
            route.Points   = points;
            route.Part     = Part;
            route.ToolComp = comp;
            route.Bulges   = (new double[] { 0, 0 }).ToList();
            if (FaceNumber == 5)
            {
                route.OnFace5 = true;
            }
            else
            {
                route.OnFace5 = false;
            }

            Part.Routings.Add(route);
        }
Пример #12
0
        public override void ToMachining(double AssociatedDist, Entities.ToolFile toolFile)
        {
            //指令根据板件的1-4个边进行定位
            //需要根据面的方位来生成加工的位置
            //幸运的是,不需要经过太多的坐标转换

            List <Point3d> Points = new List <Point3d>();
            ToolComp       comp   = ToolComp.None;

            if (EdgeNumber == 1)
            {
                Point3d firstPt  = new Point3d(StartX, -LeadIn, Depth);
                Point3d secondPt = new Point3d(StartX, StartY, Depth);
                Point3d thirdPt  = new Point3d(EndX, EndY, Depth);
                Point3d forthPt  = new Point3d(EndX, -LeadIn, Depth);
                Points.Add(firstPt);
                Points.Add(secondPt);
                Points.Add(thirdPt);
                Points.Add(forthPt);

                comp = ToolComp.Left;

                Machinings.Routing route = new Machinings.Routing();
                route.ToolName = ToolName;
                route.Points   = Points;
                route.Part     = Part;
                route.ToolComp = comp;
                route.Bulges   = (new double[] { 0, 0, 0, 0 }).ToList();
                if (FaceNumber == 5)
                {
                    route.OnFace5 = true;
                }
                else
                {
                    route.OnFace5 = false;
                }

                Part.Routings.Add(route);
            }
            else if (EdgeNumber == 2)
            {
                //double pl = (Part.MachinePoint.IsRotated) ? Part.Width : Part.Length;
                double  pw       = (!Part.MachinePoint.IsRotated) ? Part.Width : Part.Length;
                Point3d firstPt  = new Point3d(StartX, pw + LeadIn, Depth);
                Point3d secondPt = new Point3d(StartX, pw - StartY, Depth);
                Point3d thirdPt  = new Point3d(EndX, pw - EndY, Depth);
                Point3d forthPt  = new Point3d(EndX, pw + LeadIn, Depth);
                Points.Add(firstPt);
                Points.Add(secondPt);
                Points.Add(thirdPt);
                Points.Add(forthPt);

                comp = ToolComp.Right;

                Machinings.Routing route = new Machinings.Routing();
                route.ToolName = ToolName;
                route.Points   = Points;
                route.Part     = Part;
                route.ToolComp = comp;
                route.Bulges   = (new double[] { 0, 0, 0, 0 }).ToList();
                if (FaceNumber == 5)
                {
                    route.OnFace5 = true;
                }
                else
                {
                    route.OnFace5 = false;
                }

                Part.Routings.Add(route);
            }
            else if (EdgeNumber == 3)
            {
                //double pl = (Part.MachinePoint.IsRotated) ? Part.Width : Part.Length;
                //double pw = (!Part.MachinePoint.IsRotated) ? Part.Width : Part.Length;
                Point3d firstPt  = new Point3d(-LeadIn, StartY, Depth);
                Point3d secondPt = new Point3d(StartX, StartY, Depth);
                Point3d thirdPt  = new Point3d(EndX, EndY, Depth);
                Point3d forthPt  = new Point3d(-LeadIn, EndY, Depth);
                Points.Add(firstPt);
                Points.Add(secondPt);
                Points.Add(thirdPt);
                Points.Add(forthPt);

                comp = ToolComp.Right;

                Machinings.Routing route = new Machinings.Routing();
                route.ToolName = ToolName;
                route.Points   = Points;
                route.Part     = Part;
                route.ToolComp = comp;
                route.Bulges   = (new double[] { 0, 0, 0, 0 }).ToList();
                if (FaceNumber == 5)
                {
                    route.OnFace5 = true;
                }
                else
                {
                    route.OnFace5 = false;
                }

                Part.Routings.Add(route);
            }
            else if (EdgeNumber == 4)
            {
                double pl = (Part.MachinePoint.IsRotated) ? Part.Width : Part.Length;
                //double pw = (!Part.MachinePoint.IsRotated) ? Part.Width : Part.Length;
                Point3d firstPt  = new Point3d(pl + LeadIn, StartY, Depth);
                Point3d secondPt = new Point3d(pl - StartX, StartY, Depth);
                Point3d thirdPt  = new Point3d(pl - EndX, EndY, Depth);
                Point3d forthPt  = new Point3d(pl + LeadIn, EndY, Depth);
                Points.Add(firstPt);
                Points.Add(secondPt);
                Points.Add(thirdPt);
                Points.Add(forthPt);

                comp = ToolComp.Left;

                Machinings.Routing route = new Machinings.Routing();
                route.ToolName = ToolName;
                route.Points   = Points;
                route.Part     = Part;
                route.ToolComp = comp;
                route.Bulges   = (new double[] { 0, 0, 0, 0 }).ToList();
                if (FaceNumber == 5)
                {
                    route.OnFace5 = true;
                }
                else
                {
                    route.OnFace5 = false;
                }

                Part.Routings.Add(route);
            }
        }
        public override void ToMachining(double AssociatedDist, Entities.ToolFile toolFile)
        {
            //先以当前点为坐标系,建立两点坐标
            double xydist = System.Math.Sqrt(DistX * DistX + DistY * DistY);
            double cos = DistX / xydist;
            double sin = DistY / xydist;
            Point3d firstPt = new Point3d(DistX + LeadIn * cos, -LeadIn * sin, Depth);
            Point3d secondPt = new Point3d(-LeadIn * cos, DistY + LeadIn * sin, Depth);

            //把两点坐标,转换为世界坐标,再转为MP坐标系
            Point3d pt = Part.GetPartPointByNumber(EdgeNumber.ToString());
            Matrix3d matrix1 = Matrix3d.AlignCoordinateSystem(
                Point3d.Origin,
                Vector3d.XAxis,
                Vector3d.YAxis,
                Vector3d.ZAxis,
                pt,
                (Part.MachinePoint.IsRotated) ? this.GetPointYAxis(EdgeNumber) : this.GetPointXAxis(EdgeNumber),
                (Part.MachinePoint.IsRotated) ? this.GetPointXAxis(EdgeNumber) : this.GetPointYAxis(EdgeNumber),
                Vector3d.ZAxis);
            Matrix3d matrix2 = Matrix3d.AlignCoordinateSystem(
                Part.MPPoint,
                Part.MPXAxis,
                Part.MPYAxis,
                Part.MPZAxis,
                Point3d.Origin,
                Vector3d.XAxis,
                Vector3d.YAxis,
                Vector3d.ZAxis);

            firstPt = firstPt.TransformBy(matrix1).TransformBy(matrix2);
            secondPt = secondPt.TransformBy(matrix1).TransformBy(matrix2);

            ToolComp comp = ToolComp.None;

            if (firstPt.X >= secondPt.X && firstPt.Y >= secondPt.Y)
                comp = ToolComp.Left;
            else if (firstPt.X >= secondPt.X && firstPt.Y < secondPt.Y)
                comp = ToolComp.Right;
            else if (firstPt.X < secondPt.X && firstPt.Y < secondPt.Y)
                comp = ToolComp.Left;
            else if (firstPt.X < secondPt.X && firstPt.Y >= secondPt.Y)
                comp = ToolComp.Right;

            List<Point3d> points = new List<Point3d>() { firstPt, secondPt };

            Machinings.Routing route = new Machinings.Routing();
            route.ToolName = ToolName;
            route.Points = points;
            route.Part = Part;
            route.ToolComp = comp;
            route.Bulges = (new double[] { 0, 0 }).ToList();
            if (FaceNumber == 5) route.OnFace5 = true;
            else route.OnFace5 = false;

            Part.Routings.Add(route);
        }
Пример #14
0
        public override void ToMachining(double AssociatedDist, Entities.ToolFile toolFile)
        {
            //由于这个指令是指定了板件的1-8个点进行定位的,所以要把空间的绝对坐标换算回机加工原点的相对坐标
            //matrix1负责把所在点的坐标转换为板件中心的坐标
            //matrix2负责把板件中心的坐标,再转换为MP中心的坐标
            Point3d  pt      = Part.GetPartPointByNumber(EdgeNumber.ToString());
            Matrix3d matrix1 = Matrix3d.AlignCoordinateSystem(
                Point3d.Origin,
                Vector3d.XAxis,
                Vector3d.YAxis,
                Vector3d.ZAxis,
                pt,
                (Part.MachinePoint.IsRotated) ? this.GetPointYAxis(EdgeNumber) : this.GetPointXAxis(EdgeNumber),
                (Part.MachinePoint.IsRotated) ? this.GetPointXAxis(EdgeNumber) : this.GetPointYAxis(EdgeNumber),
                Vector3d.ZAxis);
            Matrix3d matrix2 = Matrix3d.AlignCoordinateSystem(
                Part.MPPoint,
                Part.MPXAxis,
                Part.MPYAxis,
                Part.MPZAxis,
                Point3d.Origin,
                Vector3d.XAxis,
                Vector3d.YAxis,
                Vector3d.ZAxis);

            //板件如果旋转,则生成的坐标点是不一样的
            List <Point3d> Points   = new List <Point3d>();
            Point3d        firstPt  = new Point3d(XDist, -LeadIn, Depth);
            Point3d        secondPt = new Point3d(XDist, YDist, Depth);
            Point3d        thirdPt  = new Point3d(-LeadIn, YDist, Depth);

            firstPt  = firstPt.TransformBy(matrix1).TransformBy(matrix2);
            secondPt = secondPt.TransformBy(matrix1).TransformBy(matrix2);
            thirdPt  = thirdPt.TransformBy(matrix1).TransformBy(matrix2);
            Points.Add(new Point3d(firstPt.X, firstPt.Y, Depth));
            Points.Add(new Point3d(secondPt.X, secondPt.Y, Depth));
            Points.Add(new Point3d(thirdPt.X, thirdPt.Y, Depth));

            //判断刀补的方向
            ToolComp comp = ToolComp.None;

            if (firstPt.X >= thirdPt.X && firstPt.Y >= thirdPt.Y)
            {
                comp = ToolComp.Left;
            }
            else if (firstPt.X >= thirdPt.X && firstPt.Y < thirdPt.Y)
            {
                comp = ToolComp.Right;
            }
            else if (firstPt.X < thirdPt.X && firstPt.Y < thirdPt.Y)
            {
                comp = ToolComp.Left;
            }
            else if (firstPt.X < thirdPt.X && firstPt.Y >= thirdPt.Y)
            {
                comp = ToolComp.Right;
            }

            Machinings.Routing route = new Machinings.Routing();
            route.ToolName = ToolName;
            route.Points   = Points;
            route.Part     = Part;
            route.ToolComp = comp;
            route.Bulges   = (new double[] { 0, 0, 0 }).ToList();
            if (FaceNumber == 5)
            {
                route.OnFace5 = true;
            }
            else
            {
                route.OnFace5 = false;
            }

            Part.Routings.Add(route);
        }
        public override void ToMachining(double AssociatedDist, Entities.ToolFile toolFile)
        {
            //由于这个指令是指定了板件的1-8个点进行定位的,所以要把空间的绝对坐标换算回机加工原点的相对坐标 
            //matrix1负责把所在点的坐标转换为板件中心的坐标
            //matrix2负责把板件中心的坐标,再转换为MP中心的坐标
            Point3d pt = Part.GetPartPointByNumber(EdgeNumber.ToString());
            Matrix3d matrix1 = Matrix3d.AlignCoordinateSystem(
                Point3d.Origin,
                Vector3d.XAxis,
                Vector3d.YAxis,
                Vector3d.ZAxis,
                pt,
                (Part.MachinePoint.IsRotated) ? this.GetPointYAxis(EdgeNumber) : this.GetPointXAxis(EdgeNumber),
                (Part.MachinePoint.IsRotated) ? this.GetPointXAxis(EdgeNumber) : this.GetPointYAxis(EdgeNumber),
                Vector3d.ZAxis);
            Matrix3d matrix2 = Matrix3d.AlignCoordinateSystem(
                Part.MPPoint,
                Part.MPXAxis,
                Part.MPYAxis,
                Part.MPZAxis,
                Point3d.Origin,
                Vector3d.XAxis,
                Vector3d.YAxis,
                Vector3d.ZAxis);

            if (LeadIn > 0)
            {
                double rRadius = LeadIn;
                Point3d firstPt = new Point3d(Radius + rRadius, -rRadius, Depth);
                Point3d secondPt = new Point3d(Radius, 0, Depth);
                Point3d thirdPt = new Point3d(0, Radius, Depth);
                Point3d forthPt = new Point3d(-rRadius, Radius + rRadius, Depth);

                firstPt = firstPt.TransformBy(matrix1).TransformBy(matrix2);
                secondPt = secondPt.TransformBy(matrix1).TransformBy(matrix2);
                thirdPt = thirdPt.TransformBy(matrix1).TransformBy(matrix2);
                forthPt = forthPt.TransformBy(matrix1).TransformBy(matrix2);

                double firstBulge = -0.414214;
                ToolComp comp = ToolComp.None;

                if (firstPt.X >= thirdPt.X && firstPt.Y >= thirdPt.Y)
                {
                    comp = ToolComp.Left;
                    firstBulge *= -1;
                }
                else if (firstPt.X >= thirdPt.X && firstPt.Y < thirdPt.Y)
                {
                    comp = ToolComp.Right;
                }
                else if (firstPt.X < thirdPt.X && firstPt.Y < thirdPt.Y)
                {
                    comp = ToolComp.Left;
                    firstBulge *= -1;
                }
                else if (firstPt.X < thirdPt.X && firstPt.Y >= thirdPt.Y)
                {
                    comp = ToolComp.Right;
                }

                Machinings.Routing route = new Machinings.Routing();
                route.ToolName = ToolName;
                route.Points = new List<Point3d>() { firstPt, secondPt, thirdPt, forthPt };
                route.Part = Part;
                route.ToolComp = comp;
                route.Bulges = (new double[] { firstBulge, -firstBulge, firstBulge, 0 }).ToList();
                if (FaceNumber == 5) route.OnFace5 = true;
                else route.OnFace5 = false;

                Part.Routings.Add(route);
            }
        }
        private void PocketMachining(Entities.ToolFile toolFile)
        {
            List<Point3d> points = new List<Point3d>();
            List<double> bulges = new List<double>();

            double diameter = toolFile.GetRouteToolByName(this.ToolName).Diameter;
            int row = (int)System.Math.Ceiling(System.Math.Abs(StartX - EndX) / diameter) - 1;

            double mod = System.Math.Abs(StartX - EndX) % diameter;

            for (int i = 0; i < row; i++)
            {
                if (i != row - 1)
                {
                    AddLineToPocket(points, bulges, diameter, i);
                }
                else
                {
                    if (mod == 0)//如果是整数行
                        AddLineToPocket(points, bulges, diameter, i);
                    else
                    {
                        if (i % 2 == 0)//整除2,表明为基数列
                        {
                            points.Add(new Point3d(lowX + diameter * (i - 1) + diameter * mod / diameter, lowY + diameter, Depth));
                            points.Add(new Point3d(lowX + diameter * (i - 1) + diameter * mod / diameter, highY - diameter, Depth));
                            bulges.Add(0);
                            bulges.Add(0);
                        }
                        else
                        {
                            points.Add(new Point3d(lowX + diameter * (i - 1) + diameter * mod / diameter, highY - diameter, Depth));
                            points.Add(new Point3d(lowX + diameter * (i - 1) + diameter * mod / diameter, lowY + diameter, Depth));
                            bulges.Add(0);
                            bulges.Add(0);
                        }
                    }
                }
            }

            Machinings.Routing route = new Machinings.Routing();
            route.Bulges = bulges;
            route.Points = points;
            route.ToolComp = ToolComp.Left;
            route.Part = this.Part;
            route.OnFace5 = this.OnFace5;
            route.ToolName = this.ToolName;

            Part.Routings.Add(route);
        }
Пример #17
0
        public override void ToMachining(double AssociatedDist, ToolFile toolFile)
        {
            //由于这个指令是指定了板件的1-8个点进行定位的,所以要把空间的绝对坐标换算回机加工原点的相对坐标
            //matrix1负责把所在点的坐标转换为板件中心的坐标
            //matrix2负责把板件中心的坐标,再转换为MP中心的坐标
            Point3d  pt      = Part.GetPartPointByNumber(EdgeNumber.ToString());
            Matrix3d matrix1 = Matrix3d.AlignCoordinateSystem(
                Point3d.Origin,
                Vector3d.XAxis,
                Vector3d.YAxis,
                Vector3d.ZAxis,
                pt,
                (Part.MachinePoint.IsRotated) ? this.GetPointYAxis(EdgeNumber) : this.GetPointXAxis(EdgeNumber),
                (Part.MachinePoint.IsRotated) ? this.GetPointXAxis(EdgeNumber) : this.GetPointYAxis(EdgeNumber),
                Vector3d.ZAxis);
            Matrix3d matrix2 = Matrix3d.AlignCoordinateSystem(
                Part.MPPoint,
                Part.MPXAxis,
                Part.MPYAxis,
                Part.MPZAxis,
                Point3d.Origin,
                Vector3d.XAxis,
                Vector3d.YAxis,
                Vector3d.ZAxis);

            if (LeadIn > 0)
            {
                double  rRadius  = LeadIn;
                Point3d firstPt  = new Point3d(Radius + rRadius, -rRadius, Depth);
                Point3d secondPt = new Point3d(Radius, 0, Depth);
                Point3d thirdPt  = new Point3d(0, Radius, Depth);
                Point3d forthPt  = new Point3d(-rRadius, Radius + rRadius, Depth);

                firstPt  = firstPt.TransformBy(matrix1).TransformBy(matrix2);
                secondPt = secondPt.TransformBy(matrix1).TransformBy(matrix2);
                thirdPt  = thirdPt.TransformBy(matrix1).TransformBy(matrix2);
                forthPt  = forthPt.TransformBy(matrix1).TransformBy(matrix2);

                double   firstBulge = -0.414214;
                ToolComp comp       = ToolComp.None;

                if (firstPt.X >= thirdPt.X && firstPt.Y >= thirdPt.Y)
                {
                    comp        = ToolComp.Left;
                    firstBulge *= -1;
                }
                else if (firstPt.X >= thirdPt.X && firstPt.Y < thirdPt.Y)
                {
                    comp = ToolComp.Right;
                }
                else if (firstPt.X < thirdPt.X && firstPt.Y < thirdPt.Y)
                {
                    comp        = ToolComp.Left;
                    firstBulge *= -1;
                }
                else if (firstPt.X < thirdPt.X && firstPt.Y >= thirdPt.Y)
                {
                    comp = ToolComp.Right;
                }

                Machinings.Routing route = new Machinings.Routing();
                route.ToolName = ToolName;
                route.Points   = new List <Point3d>()
                {
                    firstPt, secondPt, thirdPt, forthPt
                };
                route.Part     = Part;
                route.ToolComp = comp;
                route.Bulges   = (new double[] { 0, firstBulge, 0, 0 }).ToList();
                if (FaceNumber == 5)
                {
                    route.OnFace5 = true;
                }
                else
                {
                    route.OnFace5 = false;
                }

                Part.Routings.Add(route);
            }
        }
        public override void ToMachining(double AssociatedDist, ToolFile toolFile)
        {
            //if (!toolFile.Tools.Any(it => it.ToolName == this.ToolName))
            //{
            //    this.writeError("未在刀具文件中找到铣刀:" + this.ToolName, false);
            //    return;
            //}

            Machinings.Routing route = new Machinings.Routing();
            route.ToolName = this.ToolName;
            route.ToolComp = this.ToolComp;
            route.Points = this.Points;
            route.Bulges = this.Bulges;
            //route.FeedSpeeds;
            route.OnFace5 = this.OnFace5;
            route.Part = this.Part;

            Part.Routings.Add(route);
        }
Пример #19
0
        public override void ToMachining(double AssociatedDist, Entities.ToolFile toolFile)
        {
            //指令根据板件的1-4个边进行定位
            //需要根据面的方位来生成加工的位置
            //幸运的是,不需要经过太多的坐标转换

            List<Point3d> Points = new List<Point3d>();
            ToolComp comp = ToolComp.None;

            if (EdgeNumber == 1)
            {
                Point3d firstPt = new Point3d(StartX, -LeadIn, Depth);
                Point3d secondPt = new Point3d(StartX, StartY, Depth);
                Point3d thirdPt = new Point3d(EndX, EndY, Depth);
                Point3d forthPt = new Point3d(EndX, -LeadIn, Depth);
                Points.Add(firstPt);
                Points.Add(secondPt);
                Points.Add(thirdPt);
                Points.Add(forthPt);

                comp = ToolComp.Left;

                Machinings.Routing route = new Machinings.Routing();
                route.ToolName = ToolName;
                route.Points = Points;
                route.Part = Part;
                route.ToolComp = comp;
                route.Bulges = (new double[] { 0, 0, 0, 0 }).ToList();
                if (FaceNumber == 5) route.OnFace5 = true;
                else route.OnFace5 = false;

                Part.Routings.Add(route);
            }
            else if (EdgeNumber == 2)
            {
                //double pl = (Part.MachinePoint.IsRotated) ? Part.Width : Part.Length;
                double pw = (!Part.MachinePoint.IsRotated) ? Part.Width : Part.Length;
                Point3d firstPt = new Point3d(StartX, pw + LeadIn, Depth);
                Point3d secondPt = new Point3d(StartX, pw - StartY, Depth);
                Point3d thirdPt = new Point3d(EndX, pw - EndY, Depth);
                Point3d forthPt = new Point3d(EndX, pw + LeadIn, Depth);
                Points.Add(firstPt);
                Points.Add(secondPt);
                Points.Add(thirdPt);
                Points.Add(forthPt);

                comp = ToolComp.Right;

                Machinings.Routing route = new Machinings.Routing();
                route.ToolName = ToolName;
                route.Points = Points;
                route.Part = Part;
                route.ToolComp = comp;
                route.Bulges = (new double[] { 0, 0, 0, 0 }).ToList();
                if (FaceNumber == 5) route.OnFace5 = true;
                else route.OnFace5 = false;

                Part.Routings.Add(route);
            }
            else if (EdgeNumber == 3)
            {
                //double pl = (Part.MachinePoint.IsRotated) ? Part.Width : Part.Length;
                //double pw = (!Part.MachinePoint.IsRotated) ? Part.Width : Part.Length;
                Point3d firstPt = new Point3d(-LeadIn, StartY, Depth);
                Point3d secondPt = new Point3d(StartX, StartY, Depth);
                Point3d thirdPt = new Point3d(EndX, EndY, Depth);
                Point3d forthPt = new Point3d(-LeadIn, EndY, Depth);
                Points.Add(firstPt);
                Points.Add(secondPt);
                Points.Add(thirdPt);
                Points.Add(forthPt);

                comp = ToolComp.Right;

                Machinings.Routing route = new Machinings.Routing();
                route.ToolName = ToolName;
                route.Points = Points;
                route.Part = Part;
                route.ToolComp = comp;
                route.Bulges = (new double[] { 0, 0, 0, 0 }).ToList();
                if (FaceNumber == 5) route.OnFace5 = true;
                else route.OnFace5 = false;

                Part.Routings.Add(route);
            }
            else if (EdgeNumber == 4)
            {
                double pl = (Part.MachinePoint.IsRotated) ? Part.Width : Part.Length;
                //double pw = (!Part.MachinePoint.IsRotated) ? Part.Width : Part.Length;
                Point3d firstPt = new Point3d(pl + LeadIn, StartY, Depth);
                Point3d secondPt = new Point3d(pl - StartX, StartY, Depth);
                Point3d thirdPt = new Point3d(pl - EndX, EndY, Depth);
                Point3d forthPt = new Point3d(pl + LeadIn, EndY, Depth);
                Points.Add(firstPt);
                Points.Add(secondPt);
                Points.Add(thirdPt);
                Points.Add(forthPt);

                comp = ToolComp.Left;

                Machinings.Routing route = new Machinings.Routing();
                route.ToolName = ToolName;
                route.Points = Points;
                route.Part = Part;
                route.ToolComp = comp;
                route.Bulges = (new double[] { 0, 0, 0, 0 }).ToList();
                if (FaceNumber == 5) route.OnFace5 = true;
                else route.OnFace5 = false;

                Part.Routings.Add(route);
            }
        }