diff --git a/AIStudio.Wpf.DiagramApp/ViewModels/DrawingViewModel.cs b/AIStudio.Wpf.DiagramApp/ViewModels/DrawingViewModel.cs index 0cdcd76..6fa3cd1 100644 --- a/AIStudio.Wpf.DiagramApp/ViewModels/DrawingViewModel.cs +++ b/AIStudio.Wpf.DiagramApp/ViewModels/DrawingViewModel.cs @@ -1,14 +1,9 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows; using AIStudio.Wpf.DiagramApp.Models; using AIStudio.Wpf.DiagramDesigner; -using AIStudio.Wpf.DiagramDesigner.Additionals; -using AIStudio.Wpf.Mind.Models; namespace AIStudio.Wpf.DiagramApp.ViewModels { @@ -96,16 +91,28 @@ namespace AIStudio.Wpf.DiagramApp.ViewModels DiagramViewModel.Add(close); DesignerItemViewModelBase heart = new SharpDrawingDesignerItemViewModel(DiagramViewModel, DrawMode.ErasableHeart, new List { new Point(138, 238), new Point(218, 318) }, true); - DiagramViewModel.Add(heart); + DiagramViewModel.Add(heart); - DesignerItemViewModelBase directLine = new DirectLineDrawingDesignerItemViewModel(DiagramViewModel, new List { new Point(238, 238), new Point(298, 258), new Point(258, 298), new Point(318, 318) }, true); - DiagramViewModel.Add(directLine); - - DesignerItemViewModelBase polyline = new PolylineDrawingDesignerItemViewModel(DiagramViewModel, new List { new Point(338, 238), new Point(398, 258), new Point(358, 298), new Point(418, 318) }, true); + DesignerItemViewModelBase polyline = new PolylineDrawingDesignerItemViewModel(DiagramViewModel, new List { new Point(238, 238), new Point(298, 258), new Point(258, 298), new Point(318, 318) }, true); DiagramViewModel.Add(polyline); - DesignerItemViewModelBase polygon = new PolygonDrawingDesignerItemViewModel(DiagramViewModel, new List { new Point(438, 238), new Point(498, 258), new Point(458, 298), new Point(518, 318) }, true); + DesignerItemViewModelBase polygon = new PolygonDrawingDesignerItemViewModel(DiagramViewModel, new List { new Point(338, 238), new Point(398, 258), new Point(358, 298), new Point(418, 318) }, true); DiagramViewModel.Add(polygon); + + //画正方形 + var drawingPoint1 = DrawingHelper.GetPoints(new Point(38, 338), 0, Enumerable.Repeat(new System.Tuple(80, 90), 4).ToList()); + DesignerItemViewModelBase directLine1 = new DirectLineDrawingDesignerItemViewModel(DiagramViewModel, drawingPoint1, true); + DiagramViewModel.Add(directLine1); + + //画三角形 + var drawingPoint2 = DrawingHelper.GetPoints(new Point(138, 338), 0, Enumerable.Repeat(new System.Tuple(80, 120), 3).ToList()); + DesignerItemViewModelBase directLine2 = new DirectLineDrawingDesignerItemViewModel(DiagramViewModel, drawingPoint2, true); + DiagramViewModel.Add(directLine2); + + //画五边形 + var drawingPoint3 = DrawingHelper.GetPoints(new Point(238, 338), 0, Enumerable.Repeat(new System.Tuple(100, 72), 5).ToList()); + DesignerItemViewModelBase directLine3 = new DirectLineDrawingDesignerItemViewModel(DiagramViewModel, drawingPoint3, true); + DiagramViewModel.Add(directLine3); } public override void Dispose() diff --git a/AIStudio.Wpf.DiagramDesigner/Helpers/DrawingHelper.cs b/AIStudio.Wpf.DiagramDesigner/Helpers/DrawingHelper.cs new file mode 100644 index 0000000..a87620c --- /dev/null +++ b/AIStudio.Wpf.DiagramDesigner/Helpers/DrawingHelper.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; + +namespace AIStudio.Wpf.DiagramDesigner +{ + public static class DrawingHelper + { + public static List GetPoints(Point startPoint, double angle, List> angleAndWidth) + { + List points = new List(); + points.Add(startPoint); + + Point thisPoint= startPoint; + double thisAngle = angle; + + Point nextPoint; + foreach (var item in angleAndWidth) + { + nextPoint = GetEndPointByTrigonometric(thisPoint, thisAngle, item.Item1); + points.Add((Point)nextPoint); + + thisPoint = nextPoint; + thisAngle = thisAngle + item.Item2; + } + + return points; + } + + + /// + /// 通过三角函数求终点坐标 + /// + /// 角度 + /// 起点 + /// 距离 + /// 终点坐标 + public static Point GetEndPointByTrigonometric(Point startPoint, double angle, double distance) + { + //角度转弧度 + var radian = (angle * Math.PI) / 180; + + //计算新坐标 r 就是两者的距离 + Point endPoint = new Point(startPoint.X + distance * Math.Cos(radian), startPoint.Y + distance * Math.Sin(radian)); + + return endPoint; + } + + } +}