private static Point DrawLineArrowInternal(DrawingContext dc, double half, Pen pen, Brush brush, double x, double y, double angle, ArrowStyle style) { Point pt; bool doRectTransform = angle % 90.0 != 0.0; var rt = new RotateTransform(angle, x, y); double rx = style.RadiusX; double ry = style.RadiusY; double sx = 2.0 * rx; double sy = 2.0 * ry; switch (style.ArrowType) { default: case ArrowType.None: { pt = new Point(x, y); } break; case ArrowType.Rectangle: { pt = rt.Transform(new Point(x - sx, y)); var rect = new Rect(x - sx, y - ry, sx, sy); if (doRectTransform) { dc.PushTransform(rt); DrawRectangleInternal(dc, half, brush, pen, style.IsStroked, style.IsFilled, ref rect); dc.Pop(); } else { var bounds = rt.TransformBounds(rect); DrawRectangleInternal(dc, half, brush, pen, style.IsStroked, style.IsFilled, ref bounds); } } break; case ArrowType.Ellipse: { pt = rt.Transform(new Point(x - sx, y)); dc.PushTransform(rt); var c = new Point(x - rx, y); DrawEllipseInternal(dc, half, brush, pen, style.IsStroked, style.IsFilled, ref c, rx, ry); dc.Pop(); } break; case ArrowType.Arrow: { pt = rt.Transform(new Point(x, y)); var p11 = rt.Transform(new Point(x - sx, y + sy)); var p21 = rt.Transform(new Point(x, y)); var p12 = rt.Transform(new Point(x - sx, y - sy)); var p22 = rt.Transform(new Point(x, y)); DrawLineInternal(dc, half, pen, style.IsStroked, ref p11, ref p21); DrawLineInternal(dc, half, pen, style.IsStroked, ref p12, ref p22); } break; } return pt; }
private SKPoint DrawLineArrowInternal(SKCanvas canvas, SKPaint pen, SKPaint brush, float x, float y, double angle, ArrowStyle style) { SKPoint pt = default(SKPoint); var rt = MatrixHelper.Rotation(angle, new SKPoint(x, y)); double rx = style.RadiusX; double ry = style.RadiusY; double sx = 2.0 * rx; double sy = 2.0 * ry; switch (style.ArrowType) { default: case ArrowType.None: { pt = new SKPoint(x, y); } break; case ArrowType.Rectangle: { pt = MatrixHelper.TransformPoint(rt, new SKPoint(x - (float)sx, y)); var rect = ToSKRect(x - sx, y - ry, sx, sy); int count = canvas.Save(); canvas.SetMatrix(rt); DrawRectangleInternal(canvas, brush, pen, style.IsStroked, style.IsFilled, ref rect); canvas.RestoreToCount(count); } break; case ArrowType.Ellipse: { pt = MatrixHelper.TransformPoint(rt, new SKPoint(x - (float)sx, y)); int count = canvas.Save(); canvas.SetMatrix(rt); var rect = ToSKRect(x - sx, y - ry, sx, sy); DrawEllipseInternal(canvas, brush, pen, style.IsStroked, style.IsFilled, ref rect); canvas.RestoreToCount(count); } break; case ArrowType.Arrow: { var pts = new SKPoint[] { new SKPoint(x, y), new SKPoint(x - (float)sx, y + (float)sy), new SKPoint(x, y), new SKPoint(x - (float)sx, y - (float)sy), new SKPoint(x, y) }; pt = MatrixHelper.TransformPoint(rt, pts[0]); var p11 = MatrixHelper.TransformPoint(rt, pts[1]); var p21 = MatrixHelper.TransformPoint(rt, pts[2]); var p12 = MatrixHelper.TransformPoint(rt, pts[3]); var p22 = MatrixHelper.TransformPoint(rt, pts[4]); DrawLineInternal(canvas, pen, style.IsStroked, ref p11, ref p21); DrawLineInternal(canvas, pen, style.IsStroked, ref p12, ref p22); } break; } return pt; }
private static A.Point DrawLineArrowInternal(AM.DrawingContext dc, AM.Pen pen, AM.IBrush brush, float x, float y, double angle, ArrowStyle style) { A.Point pt = default(A.Point); var rt = APAZ.MatrixHelper.Rotation(angle, new A.Vector(x, y)); double rx = style.RadiusX; double ry = style.RadiusY; double sx = 2.0 * rx; double sy = 2.0 * ry; switch (style.ArrowType) { default: case ArrowType.None: { pt = new A.Point(x, y); } break; case ArrowType.Rectangle: { pt = APAZ.MatrixHelper.TransformPoint(rt, new A.Point(x - (float)sx, y)); var rect = new Rect2(x - sx, y - ry, sx, sy); using (var d = dc.PushPreTransform(rt)) { DrawRectangleInternal(dc, brush, pen, style.IsStroked, style.IsFilled, ref rect); } } break; case ArrowType.Ellipse: { pt = APAZ.MatrixHelper.TransformPoint(rt, new A.Point(x - (float)sx, y)); using (var d = dc.PushPreTransform(rt)) { var rect = new Rect2(x - sx, y - ry, sx, sy); DrawEllipseInternal(dc, brush, pen, style.IsStroked, style.IsFilled, ref rect); } } break; case ArrowType.Arrow: { var pts = new A.Point[] { new A.Point(x, y), new A.Point(x - (float)sx, y + (float)sy), new A.Point(x, y), new A.Point(x - (float)sx, y - (float)sy), new A.Point(x, y) }; pt = APAZ.MatrixHelper.TransformPoint(rt, pts[0]); var p11 = APAZ.MatrixHelper.TransformPoint(rt, pts[1]); var p21 = APAZ.MatrixHelper.TransformPoint(rt, pts[2]); var p12 = APAZ.MatrixHelper.TransformPoint(rt, pts[3]); var p22 = APAZ.MatrixHelper.TransformPoint(rt, pts[4]); DrawLineInternal(dc, pen, style.IsStroked, ref p11, ref p21); DrawLineInternal(dc, pen, style.IsStroked, ref p12, ref p22); } break; } return pt; }
public void Inherits_From_ObservableObject() { var target = new ArrowStyle(); Assert.True(target is BaseStyle); }
private static PointF DrawLineArrowInternal(Graphics gfx, Pen pen, Brush brush, float x, float y, float angle, ArrowStyle style) { PointF pt; var rt = new Matrix(); rt.RotateAt(angle, new PointF(x, y)); double rx = style.RadiusX; double ry = style.RadiusY; double sx = 2.0 * rx; double sy = 2.0 * ry; switch (style.ArrowType) { default: case ArrowType.None: { pt = new PointF(x, y); } break; case ArrowType.Rectangle: { var pts = new PointF[] { new PointF(x - (float)sx, y) }; rt.TransformPoints(pts); pt = pts[0]; var rect = new Rect2(x - sx, y - ry, sx, sy); var gs = gfx.Save(); gfx.MultiplyTransform(rt); DrawRectangleInternal(gfx, brush, pen, style.IsStroked, style.IsFilled, ref rect); gfx.Restore(gs); } break; case ArrowType.Ellipse: { var pts = new PointF[] { new PointF(x - (float)sx, y) }; rt.TransformPoints(pts); pt = pts[0]; var gs = gfx.Save(); gfx.MultiplyTransform(rt); var rect = new Rect2(x - sx, y - ry, sx, sy); DrawEllipseInternal(gfx, brush, pen, style.IsStroked, style.IsFilled, ref rect); gfx.Restore(gs); } break; case ArrowType.Arrow: { var pts = new PointF[] { new PointF(x, y), new PointF(x - (float)sx, y + (float)sy), new PointF(x, y), new PointF(x - (float)sx, y - (float)sy), new PointF(x, y) }; rt.TransformPoints(pts); pt = pts[0]; var p11 = pts[1]; var p21 = pts[2]; var p12 = pts[3]; var p22 = pts[4]; DrawLineInternal(gfx, pen, style.IsStroked, ref p11, ref p21); DrawLineInternal(gfx, pen, style.IsStroked, ref p12, ref p22); } break; } return pt; }