/// <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); }
/// <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); }