예제 #1
0
        /// <summary>
        /// Находим точки разбиения.
        /// </summary>
        /// <param name="PartitionX"> Шаг разбиения. </param>
        /// <param name="Massive"> В каком массиве искать (0 - опорные линии, 1 - BSpline, 2 - CSpline). </param>
        /// <param name="Number"> Номер минерала. </param>
        /// <returns> Выполнил или нет. </returns>
        public bool MakePartition(double PartitionX, int Massive, int Number)
        {
            List <PointSpline> Point;

            switch (Massive)
            {
            case 0: Point = Points; break;

            case 1: Point = BSplinePoints; break;

            case 2: Point = CSplinePoints; break;

            default: Point = Points; break;
            }
            Point.Add(Point[0]);
            try
            {
                if (PartitionX != 0)
                {
                    int      i;
                    double   X = 0;
                    PointMKE tmp;
                    Partition.Clear();
                    /*Идем по всем отрезкам BSpline*/
                    for (i = 0; i < Point.Count - 1; i++)
                    {
                        /*Если идем вперед*/
                        if (Point[i].X < Point[i + 1].X)
                        {
                            X = Math.Ceiling(Point[i].X / PartitionX) * PartitionX;
                            /*Пока точка лежит внутри*/
                            while (Point[i].X <= X && X <= Point[i + 1].X)
                            {
                                tmp = new PointMKE(new PointSpline(X, ReturnY(X, Point[i], Point[i + 1])), Number, false);
                                Partition.Add(tmp);
                                X += PartitionX;
                            }
                        }
                        else
                        /*Если идем вперед*/
                        if (Point[i].X > Point[i + 1].X)
                        {
                            X = Math.Floor(Point[i].X / PartitionX) * PartitionX;
                            /*Пока точка лежит внутри*/
                            while (Point[i].X >= X && X >= Point[i + 1].X)
                            {
                                tmp = new PointMKE(new PointSpline(X, ReturnY(X, Point[i], Point[i + 1])), Number, false);
                                Partition.Add(tmp);
                                X -= PartitionX;
                            }
                        }
                    }
                }
            }
            catch { Point.RemoveAt(Point.Count - 1); return(false); }
            Point.RemoveAt(Point.Count - 1);
            return(true);
        }
예제 #2
0
파일: Layer.cs 프로젝트: Anarchist42/MyWork
        /// <summary>
        /// Находим точки разбиения.
        /// </summary>
        /// <param name="PartitionX"> Шаг разбиения. </param>
        /// <param name="Massive"> В каком массиве искать (0 - опорные линии, 1 - BSpline, 2 - CSpline). </param>
        /// <param name="Number"> Номер слоя. </param>
        /// <returns> Выполнил или нет. </returns>
        public bool MakePartition(double PartitionX, int Massive, int Number)
        {
            List <PointSpline> Point;

            switch (Massive)
            {
            case 0: Point = Points; break;

            case 1: Point = BSplinePoints; break;

            case 2: Point = CSplinePoints; break;

            default: Point = Points; break;
            }
            try
            {
                if (PartitionX != 0)
                {
                    int      i;
                    double   X = 0;
                    PointMKE tmp;
                    Partition.Clear();
                    /*Идем по всем отрезкам*/
                    for (i = 0; i < Point.Count - 1; i++)
                    {
                        /*Если идем вперед*/
                        if (Point[i].X < Point[i + 1].X)
                        {
                            /*Пока точка лежит внутри*/
                            while (Point[i].X <= X && X <= Point[i + 1].X)
                            {
                                tmp = new PointMKE(new PointSpline(X, ReturnY(X, Point[i], Point[i + 1])), Number, true);
                                Partition.Add(tmp);
                                X += PartitionX;
                            }
                        }
                        /*Если идем назад*/
                        if (Point[i].X > Point[i + 1].X)
                        {
                            X -= PartitionX;
                            /*Пока точка лежит внутри*/
                            while (Point[i].X >= X && X >= Point[i + 1].X)
                            {
                                tmp = new PointMKE(new PointSpline(X, ReturnY(X, Point[i], Point[i + 1])), Number, true);
                                Partition.Add(tmp);
                                X -= PartitionX;
                            }
                            X += PartitionX;
                        }
                    }
                    /*Если в конце есть еще кусок - добавляем*/
                    if (X - PartitionX < Point[Point.Count - 1].X)
                    {
                        tmp = new PointMKE(new PointSpline(Point[Point.Count - 1].X, Point[Point.Count - 1].Y), Number, true);
                        Partition.Add(tmp);
                    }
                }
            }
            catch { return(false); }
            return(true);
        }