namespace InkCanvas
{
public class BaseStroke : Stroke
{
public BaseStroke(StylusPointCollection stylusPoints, DrawingAttributes drawingAttributes)
: base(stylusPoints, drawingAttributes)
{
}
protected override void DrawCore(DrawingContext drawingContext,
DrawingAttributes drawingAttributes)
{
//创建画笔对象
Pen pen = new Pen(new SolidColorBrush(drawingAttributes.Color), drawingAttributes.Width);
//设置画笔线型
DashStyle dashStyle = new DashStyle();
dashStyle.Offset = 0;
dashStyle.Dashes = new DoubleCollection();
dashStyle.Dashes.Add(1);
dashStyle.Dashes.Add(2);
pen.StartLineCap = PenLineCap.Triangle;
if (DashStyle == 0)
{
}
else
{
pen.DashStyle = dashStyle;
}
// 长方形
if (DrawType == 6)
{
for (int i = 0; i < StylusPoints.Count - 1; i++)
{
drawingContext.DrawLine(pen, new Point(StylusPoints[i].X, StylusPoints[i].Y), new Point(StylusPoints[i + 1].X, StylusPoints[i + 1].Y));
}
}
// 圆
else if (DrawType == 7)
{
for (int i = 0; i < StylusPoints.Count - 1; i++)
{
if (DashStyle == 0)
{
drawingContext.DrawLine(pen, new Point(StylusPoints[i].X, StylusPoints[i].Y), new Point(StylusPoints[i + 1].X, StylusPoints[i + 1].Y));
}
else
{
drawingContext.DrawLine(pen, new Point(StylusPoints[i].X, StylusPoints[i].Y), new Point(StylusPoints[i + 1].X, StylusPoints[i + 1].Y));
i = i + 2;
}
}
}
// 椭圆
else if (DrawType == 8)
{
for (int i = 0; i < StylusPoints.Count - 1; i++)
{
if (DashStyle == 0)
{
drawingContext.DrawLine(pen, new Point(StylusPoints[i].X, StylusPoints[i].Y), new Point(StylusPoints[i + 1].X, StylusPoints[i + 1].Y));
}
else
{
drawingContext.DrawLine(pen, new Point(StylusPoints[i].X, StylusPoints[i].Y), new Point(StylusPoints[i + 1].X, StylusPoints[i + 1].Y));
i = i + 2;
}
}
}
//直线
else if (DrawType == 9)
{
Point point = new Point(StylusPoints[0].X, StylusPoints[0].Y);
Point point2 = new Point(StylusPoints[1].X, StylusPoints[1].Y);
double num = Math.Atan((StylusPoints[1].Y - StylusPoints[0].Y) / (StylusPoints[1].X - StylusPoints[0].X));
double d = num + this.ArrowAngle;
double num3 = num - this.ArrowAngle;
int num4 = (StylusPoints[1].X > StylusPoints[0].X) ? -1 : 1;
double x = StylusPoints[1].X + ((num4 * this.ArrowLengh) * Math.Cos(d));
double y = StylusPoints[1].Y + ((num4 * this.ArrowLengh) * Math.Sin(d));
double num7 = StylusPoints[1].X + ((num4 * this.ArrowLengh) * Math.Cos(num3));
double num8 = StylusPoints[1].Y + ((num4 * this.ArrowLengh) * Math.Sin(num3));
Point point3 = new Point(x, y);
Point point4 = new Point(num7, num8);
PathGeometry geometry = new PathGeometry();
PathFigure figure = new PathFigure();
figure.IsFilled = true;
figure.StartPoint = point;
Point[] pointss = new Point[] { point, point2, point3, point4, point2 };
PolyLineSegment segment = new PolyLineSegment(pointss, true);
figure.Segments.Add(segment);
geometry.Figures.Add(figure);
geometry.Freeze();
drawingContext.DrawGeometry(new SolidColorBrush(drawingAttributes.Color),pen, geometry);
}
}
}
}
绘制带箭头的虚线时如何让箭头不产生xu'xian