mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-03 00:00:57 +08:00
简单画线算法
This commit is contained in:
@@ -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<Point> { new Point(138, 238), new Point(218, 318) }, true);
|
||||
DiagramViewModel.Add(heart);
|
||||
DiagramViewModel.Add(heart);
|
||||
|
||||
DesignerItemViewModelBase directLine = new DirectLineDrawingDesignerItemViewModel(DiagramViewModel, new List<Point> { 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<Point> { new Point(338, 238), new Point(398, 258), new Point(358, 298), new Point(418, 318) }, true);
|
||||
DesignerItemViewModelBase polyline = new PolylineDrawingDesignerItemViewModel(DiagramViewModel, new List<Point> { 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<Point> { new Point(438, 238), new Point(498, 258), new Point(458, 298), new Point(518, 318) }, true);
|
||||
DesignerItemViewModelBase polygon = new PolygonDrawingDesignerItemViewModel(DiagramViewModel, new List<Point> { 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<double, double>(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<double, double>(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<double, double>(100, 72), 5).ToList());
|
||||
DesignerItemViewModelBase directLine3 = new DirectLineDrawingDesignerItemViewModel(DiagramViewModel, drawingPoint3, true);
|
||||
DiagramViewModel.Add(directLine3);
|
||||
}
|
||||
|
||||
public override void Dispose()
|
||||
|
||||
53
AIStudio.Wpf.DiagramDesigner/Helpers/DrawingHelper.cs
Normal file
53
AIStudio.Wpf.DiagramDesigner/Helpers/DrawingHelper.cs
Normal file
@@ -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<Point> GetPoints(Point startPoint, double angle, List<Tuple<double, double>> angleAndWidth)
|
||||
{
|
||||
List<Point> points = new List<Point>();
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 通过三角函数求终点坐标
|
||||
/// </summary>
|
||||
/// <param name="angle">角度</param>
|
||||
/// <param name="startPoint">起点</param>
|
||||
/// <param name="distance">距离</param>
|
||||
/// <returns>终点坐标</returns>
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user