Beispiel #1
0
        public override void ToMachining(double AssociatedDist, Entities.ToolFile toolFile)
        {
            int    number = 1;
            double dist   = System.Math.Sqrt(
                System.Math.Abs(PosStartX - PosEndX) * System.Math.Abs(PosStartX - PosEndX) +
                System.Math.Abs(PosStartY - PosEndY) * System.Math.Abs(PosStartY - PosEndY)
                );

            if (HoleGap < 1)//避免太小的间距
            {
                HoleGap = 1;
            }

            number = (int)System.Math.Floor(dist / HoleGap) + 1;
            double xfactor = (PosStartX > PosEndX) ? -1 : 1;
            double yfactor = (PosStartY > PosEndY) ? -1 : 1;
            double cos     = (dist != 0) ? System.Math.Abs(PosStartX - PosEndX) / dist : 0;
            double sin     = (dist != 0) ? System.Math.Abs(PosStartY - PosEndY) / dist : 0;

            //如果是水平孔
            if (IsHorizontalDrill)
            {
                if (FaceNumber == 3)
                {
                    for (int i = 0; i < number; i++)
                    {
                        Machinings.HDrilling hdrill = new Machinings.HDrilling(
                            FaceNumber,
                            Diameter,
                            PosStartX,
                            PosStartY + dist / number * i * yfactor * sin,
                            PosStartZ,
                            Part);
                        Part.HDrillings.Add(hdrill);
                    }
                }
                else if (FaceNumber == 4)
                {
                    for (int i = 0; i < number; i++)
                    {
                        double depth = (Part.MachinePoint.IsRotated) ? Part.Width - PosStartX : Part.Length - PosStartX;
                        if (depth < 0)
                        {
                            throw new Exception("指令的深度不能为小于0的数值");
                        }

                        Machinings.HDrilling hdrill = new Machinings.HDrilling(
                            FaceNumber,
                            Diameter,
                            depth,
                            PosStartY + dist / number * i * yfactor * sin,
                            PosStartZ,
                            Part);
                        Part.HDrillings.Add(hdrill);
                    }
                }
                else if (FaceNumber == 1)
                {
                    for (int i = 0; i < number; i++)
                    {
                        Machinings.HDrilling hdrill = new Machinings.HDrilling(
                            FaceNumber,
                            Diameter,
                            PosStartY,
                            PosStartX + dist / number * i * xfactor * cos,
                            PosStartZ,
                            Part);
                        Part.HDrillings.Add(hdrill);
                    }
                }
                else if (FaceNumber == 2)
                {
                    for (int i = 0; i < number; i++)
                    {
                        double depth = (Part.MachinePoint.IsRotated) ? Part.Length - PosStartY : Part.Width - PosStartY;
                        Machinings.HDrilling hdrill = new Machinings.HDrilling(
                            FaceNumber,
                            Diameter,
                            depth,
                            PosStartX + dist / number * i * xfactor * cos,
                            PosStartZ,
                            Part);
                        Part.HDrillings.Add(hdrill);
                    }
                }
                else
                {
                    throw new Exception("未知的Facenumber:" + FaceNumber);
                }
            }
            else//如果是面孔
            {
                if (IsLineHoles)
                {
                    for (int i = 0; i < number; i++)
                    {
                        Machinings.VDrilling vdrill = new Machinings.VDrilling(
                            FaceNumber,
                            PosStartX + dist / number * i * xfactor * cos,
                            PosStartY + dist / number * i * yfactor * sin,
                            Diameter,
                            PosStartZ,
                            Part);

                        Part.VDrillings.Add(vdrill);
                    }
                }

                Part.VDrillings.Add(new Machinings.VDrilling(this.FaceNumber, PosStartX, PosStartY, Diameter, PosStartZ, Part));
            }
        }
        public override void ToMachining(double AssociatedDist, Entities.ToolFile toolFile)
        {
            int number = 1;
            double dist = System.Math.Sqrt(
                        System.Math.Abs(PosStartX - PosEndX) * System.Math.Abs(PosStartX - PosEndX) +
                        System.Math.Abs(PosStartY - PosEndY) * System.Math.Abs(PosStartY - PosEndY)
                        );
            if (HoleGap < 1)//避免太小的间距
                HoleGap = 1;

            number = (int)System.Math.Floor(dist / HoleGap) + 1;
            double xfactor = (PosStartX > PosEndX) ? -1 : 1;
            double yfactor = (PosStartY > PosEndY) ? -1 : 1;
            double cos = (dist != 0) ? System.Math.Abs(PosStartX - PosEndX) / dist : 0;
            double sin = (dist != 0) ? System.Math.Abs(PosStartY - PosEndY) / dist : 0;

            //如果是水平孔
            if (IsHorizontalDrill)
            {
                if (FaceNumber == 3)
                {
                    for (int i = 0; i < number; i++)
                    {
                        Machinings.HDrilling hdrill = new Machinings.HDrilling(
                            FaceNumber,
                            Diameter,
                            PosStartX,
                            PosStartY + dist / number * i * yfactor * sin,
                            PosStartZ,
                            Part);
                        Part.HDrillings.Add(hdrill);
                    }
                }
                else if (FaceNumber == 4)
                {
                    for (int i = 0; i < number; i++)
                    {
                        double depth = (Part.MachinePoint.IsRotated) ? Part.Width - PosStartX : Part.Length - PosStartX;
                        if (depth < 0)
                            throw new Exception("指令的深度不能为小于0的数值");

                        Machinings.HDrilling hdrill = new Machinings.HDrilling(
                            FaceNumber,
                            Diameter,
                            depth,
                            PosStartY + dist / number * i * yfactor * sin,
                            PosStartZ,
                            Part);
                        Part.HDrillings.Add(hdrill);
                    }
                }
                else if (FaceNumber == 1)
                {
                    for (int i = 0; i < number; i++)
                    {
                        Machinings.HDrilling hdrill = new Machinings.HDrilling(
                            FaceNumber,
                            Diameter,
                            PosStartY,
                            PosStartX + dist / number * i * xfactor * cos,
                            PosStartZ,
                            Part);
                        Part.HDrillings.Add(hdrill);
                    }
                }
                else if (FaceNumber == 2)
                {
                    for (int i = 0; i < number; i++)
                    {
                        double depth = (Part.MachinePoint.IsRotated) ? Part.Length - PosStartY : Part.Width - PosStartY;
                        Machinings.HDrilling hdrill = new Machinings.HDrilling(
                            FaceNumber,
                            Diameter,
                            depth,
                            PosStartX + dist / number * i * xfactor * cos,
                            PosStartZ,
                            Part);
                        Part.HDrillings.Add(hdrill);
                    }
                }
                else
                {
                    throw new Exception("未知的Facenumber:" + FaceNumber);
                }
            }
            else//如果是面孔
            {
                if (IsLineHoles)
                {
                    for (int i = 0; i < number; i++)
                    {
                        Machinings.VDrilling vdrill = new Machinings.VDrilling(
                            FaceNumber,
                            PosStartX + dist / number * i * xfactor * cos,
                            PosStartY + dist / number * i * yfactor * sin,
                            Diameter,
                            PosStartZ,
                            Part);

                        Part.VDrillings.Add(vdrill);
                    }
                }

                Part.VDrillings.Add(new Machinings.VDrilling(this.FaceNumber, PosStartX, PosStartY, Diameter, PosStartZ, Part));
            }
        }