/// <summary> /// Создание Фигуры /// </summary> /// <returns></returns> public Path MakeFigure() { //TODO //Реализовать рисовалку Tochka LeftTop = this.LeftTop3D.To2D; Tochka LeftBottom = this.LeftBot3D.To2D; Tochka RightBottom = this.RightBot3D.To2D; Tochka RightTop = this.RightTop3D.To2D; //Создаем коллекцию для хранения геометрии PathGeometry myPathG = new PathGeometry(); Path mypath = new Path(); mypath.Stroke = Brushes.White; mypath.StrokeThickness = 1; //Рисуем две опорные линии myPathG.AddGeometry(DrowLine(LeftTop, RightTop)); myPathG.AddGeometry(DrowLine(LeftBottom, RightBottom)); //Создаем списки точек на линиях List <Tochka> top = Grid(LeftTop, RightTop, 20); List <Tochka> bot = Grid(RightBottom, LeftBottom, 20); //Рисуем опорные линии for (int i = 0; i < top.Count; i++) { myPathG.AddGeometry(DrowLine(top[i], bot[i])); } mypath.Data = myPathG; return(mypath); }
/// <summary> /// Создает список точек между начальной точкой и конечной включительно на равном расстоянии друг от друга в заданном количестве /// </summary> /// <param name="start">Начальная точка</param> /// <param name="finish">Конечная точка</param> /// <param name="count">Кол-во точек между начальной и конечной</param> /// <returns></returns> private List <Tochka> Grid(Tochka start, Tochka finish, int count) { List <Tochka> result = new List <Tochka>(); //Добавляем начальную точку result.Add(start); //Создаем вектор из старта в финиш Tochka vector = finish - start; //Нормируем, теперь длина равна 1 if (vector.Length != 0) { vector = vector / (vector.Length); } //Делаем длину вектора такой, чтоб он отложился между стартом и финишем Count+1 раз vector = vector * ((finish - start).Length) / (count + 1); //Формируем список точек между стартом и финишем на одинаковом расстоянии for (int i = 1; i < count + 1; i++) { result.Add(result[i - 1] + vector); } //Добавляем конечную точку в список result.Add(finish); return(result); }
/// <summary> /// Рисуем линию /// </summary> /// <returns></returns> public LineGeometry DrowLine(Tochka p1, Tochka p2) { LineGeometry myLine = new LineGeometry(); myLine.StartPoint = new System.Windows.Point(p1.X, 500 - p1.Y); myLine.EndPoint = new System.Windows.Point(p2.X, 500 - p2.Y); return(myLine); }