public VEllipse(float thickness, Color thicknessColor, Color Сolor, Point[] Points) { this.thickness = thickness; //Толщина линии this.thicknessColor = thicknessColor; //Цвет линии this.color = Сolor; //Цвет заливки PointsIDs = new int[9]; //У эллипса будет храниться 4 точки + 4 точки выделения + центр for (int i = 0; i < PointsIDs.Length - 4; i++) //Перебираем список точек, -4 т.к. мы точки эллипса будем высчитывать сами { MyPoint mypoint = new MyPoint(Points[i].X, Points[i].Y, Vector.IDS++, this); //Конвертируем Point в мою структуру MyPoint Vector.AddP(mypoint); //Добавляем точку в общий список PointsIDs[i + 4] = mypoint.ID; //Записываем ID точки в массив точек, записываются точки выделения и точка центра } //Вычисляем точки самого эллипса //Верхние точки прямоугольника выделителя MyPoint point = new MyPoint((Points[0].X + Points[3].X) / 2, (Points[0].Y + Points[3].Y) / 2, Vector.IDS++, this); //Конвертируем Point в мою структуру MyPoint Vector.AddP(point); //Добавляем точку в общий список PointsIDs[0] = point.ID; //Записываем ID точки в массив точек //Правые точки прямоугольника выделителя point = new MyPoint((Points[3].X + Points[1].X) / 2, (Points[3].Y + Points[1].Y) / 2, Vector.IDS++, this); //Конвертируем Point в мою структуру MyPoint Vector.AddP(point); //Добавляем точку в общий список PointsIDs[1] = point.ID; //Записываем ID точки в массив точек //Нижние точки прямоугольника выделителя point = new MyPoint((Points[1].X + Points[2].X) / 2, (Points[1].Y + Points[2].Y) / 2, Vector.IDS++, this); //Конвертируем Point в мою структуру MyPoint Vector.AddP(point); //Добавляем точку в общий список PointsIDs[2] = point.ID; //Записываем ID точки в массив точек //Левые точки прямоугольника выделителя point = new MyPoint((Points[2].X + Points[0].X) / 2, (Points[2].Y + Points[0].Y) / 2, Vector.IDS++, this); //Конвертируем Point в мою структуру MyPoint Vector.AddP(point); //Добавляем точку в общий список PointsIDs[3] = point.ID; //Записываем ID точки в массив точек }
//Конструктор линии, передаем толщину, цвет и список точек, составляющие данную ограниченную линию public Line(float thickness, Color color, Point[] Points) { this.thickness = thickness; //Толщина линии this.thicknessColor = color; //Цвет линии PointsIDs = new int[3]; //Мы храним 3 точки, первую, центр и последнюю for (int i = 0; i < PointsIDs.Length; i++) //Перебираем список точек { MyPoint mypoint = new MyPoint(Points[i].X, Points[i].Y, Vector.IDS++, this); //Конвертируем Point в мою структуру MyPoint Vector.AddP(mypoint); //Добавляем точку в общий список PointsIDs[i] = mypoint.ID; //Записываем ID точки в массив точек линии } }
public VRectangle(float thickness, Color thicknessColor, Color Сolor, Point[] Points) { this.thickness = thickness; //Толщина линии this.thicknessColor = thicknessColor; //Цвет линии this.color = Сolor; //Цвет заливки PointsIDs = new int[5]; //У прямоугольника(квадрата) будет храниться 4 точки + центр for (int i = 0; i < PointsIDs.Length; i++) //Перебираем список точек { MyPoint mypoint = new MyPoint(Points[i].X, Points[i].Y, Vector.IDS++, this); //Конвертируем Point в мою структуру MyPoint Vector.AddP(mypoint); //Добавляем точку в общий список PointsIDs[i] = mypoint.ID; //Записываем ID точки в массив точек } }
public VTriangle(float thickness, Color thicknessColor, Color Сolor, Point[] Points) { this.thickness = thickness; //Толщина линии this.thicknessColor = thicknessColor; //Цвет линии this.color = Сolor; //Цвет заливки PointsIDs = new int[8]; //У треугольника будет храниться 3 точки + центр и точки выделения Point max = Points[0], min = Points[0]; for (int i = 0; i < PointsIDs.Length - 5; i++) //Перебираем список точек, от 0 до 3, т.к. центр и точки выделения нужно вычислить { //Ищем максимальную позицию и минимальную if (Points[i].X < min.X) { min.X = Points[i].X; //Если у данной точки X меньше, назначаем в переменную } if (Points[i].Y < min.Y) { min.Y = Points[i].Y; //Если у данной точки Y меньше, назначаем в переменную } if (Points[i].X > max.X) { max.X = Points[i].X; //Если у данной точки X больше, назначаем в переменную } if (Points[i].Y > max.Y) { max.Y = Points[i].Y; //Если у данной точки Y больше, назначаем в переменную } MyPoint mypoint = new MyPoint(Points[i].X, Points[i].Y, Vector.IDS++, this); //Конвертируем Point в мою структуру MyPoint Vector.AddP(mypoint); //Добавляем точку в общий список PointsIDs[i] = mypoint.ID; //Записываем ID точки в массив точек } //Первая точка выделения MyPoint select1 = new MyPoint(min.X, min.Y, Vector.IDS++, this); //Конвертируем Point в мою структуру MyPoint Vector.AddP(select1); //Добавляем точку в общий список PointsIDs[PointsIDs.Length - 5] = select1.ID; //Записываем ID //Вторая точка выделения MyPoint select2 = new MyPoint(max.X, max.Y, Vector.IDS++, this); //Конвертируем Point в мою структуру MyPoint Vector.AddP(select2); //Добавляем точку в общий список PointsIDs[PointsIDs.Length - 4] = select2.ID; //Записываем ID //Третья точка выделения MyPoint select3 = new MyPoint(min.X, max.Y, Vector.IDS++, this); //Конвертируем Point в мою структуру MyPoint Vector.AddP(select3); //Добавляем точку в общий список PointsIDs[PointsIDs.Length - 3] = select3.ID; //Записываем ID //Четвертая точка выделения MyPoint select4 = new MyPoint(max.X, min.Y, Vector.IDS++, this); //Конвертируем Point в мою структуру MyPoint Vector.AddP(select4); //Добавляем точку в общий список PointsIDs[PointsIDs.Length - 2] = select4.ID; //Записываем ID //Центр MyPoint center = new MyPoint(((min.X + max.X) / 2), ((min.Y + max.Y) / 2), Vector.IDS++, this); //Конвертируем Point в мою структуру MyPoint Vector.AddP(center); //Добавляем точку в общий список PointsIDs[PointsIDs.Length - 1] = center.ID; //Записываем ID центра последним в массив }