/// <summary> /// Initialize new instance of <see cref="PathSelection"/> class. /// </summary> /// <param name="layer">The selection shapes layer.</param> /// <param name="shape">The selected shape.</param> /// <param name="style">The selection shapes style.</param> /// <param name="point">The selection point shape.</param> public PathSelection(XLayer layer, XPath shape, ShapeStyle style, BaseShape point) { _layer = layer; _path = shape; _style = style; _point = point; }
public void Inherits_From_BaseShape() { var target = new XPath(); Assert.True(target is BaseShape); }
/// <inheritdoc/> public override void Draw(object dc, XPath path, double dx, double dy, ImmutableArray<XProperty> db, XRecord r) { if (path.Geometry == null) return; var _dc = dc as DrawingContext; var style = path.Style; if (style == null) return; double thickness = style.Thickness / _state.ZoomX; double half = thickness / 2.0; Tuple<Brush, Pen> styleCached = _styleCache.Get(style); Brush fill; Pen stroke; if (styleCached != null) { fill = styleCached.Item1; stroke = styleCached.Item2; } else { fill = CreateBrush(style.Fill); stroke = CreatePen(style, thickness); _styleCache.Set(style, Tuple.Create(fill, stroke)); } Tuple<XPathGeometry, StreamGeometry, ShapeStyle> pcache = _pathCache.Get(path); StreamGeometry sg; if (pcache != null && pcache.Item1 == path.Geometry && pcache.Item3 == style) { sg = pcache.Item2; _dc.DrawGeometry(path.IsFilled ? fill : null, path.IsStroked ? stroke : null, sg); } else { sg = path.Geometry.ToStreamGeometry(dx, dy); // TODO: Enable XPath caching, cache is disabled to enable PathHelper to work. //_pathCache.Set(path, Tuple.Create(path.Geometry, sg, style)); _dc.DrawGeometry(path.IsFilled ? fill : null, path.IsStroked ? stroke : null, sg); } }
/// <inheritdoc/> public override void Draw(object dc, XPath path, double dx, double dy, ImmutableArray<XProperty> db, XRecord r) { // TODO: Implement Draw path. }
/// <inheritdoc/> public override void Draw(object dc, XPath path, double dx, double dy, ImmutableArray<XProperty> db, XRecord r) { var canvas = dc as SKCanvas; using (SKPaint brush = ToSKPaintBrush(path.Style.Fill)) using (SKPaint pen = ToSKPaintPen(path.Style, _scaleToPage, _sourceDpi, _targetDpi)) using (var spath = path.Geometry.ToSKPath(dx, dy, _scaleToPage)) { DrawPathInternal(canvas, brush, pen, path.IsStroked, path.IsFilled, spath); } }
/// <summary> /// /// </summary> /// <param name="path"></param> /// <param name="v"></param> /// <param name="threshold"></param> /// <param name="dx"></param> /// <param name="dy"></param> /// <returns></returns> public static BaseShape HitTestPath(XPath path, Vector2 v, double threshold, double dx, double dy) { if (path.Geometry != null) { var points = path.GetPoints().ToImmutableArray(); foreach (var point in points) { if (ShapeBounds.GetPointBounds(point, threshold, dx, dy).Contains(v)) { return point; } } if (ShapeBounds.Contains(points, v, dx, dy)) { return path; } } return null; }
/// <inheritdoc/> public override void Draw(object dc, XPath path, double dx, double dy, ImmutableArray<XProperty> db, XRecord r) { if (!path.IsFilled && !path.IsStroked) return; var _dc = dc as AM.DrawingContext; var g = path.Geometry.ToGeometry(dx, dy); var brush = ToBrush(path.Style.Fill); var pen = ToPen(path.Style, _scaleToPage); _dc.DrawGeometry( path.IsFilled ? brush : null, path.IsStroked ? pen : null, g); }
/// <summary> /// Draws a <see cref="XPath"/> shape using drawing context. /// </summary> /// <param name="dc">The native drawing context.</param> /// <param name="path">The <see cref="XPath"/> shape.</param> /// <param name="dx">The X coordinate offset.</param> /// <param name="dy">The Y coordinate offset.</param> /// <param name="db">The properties database.</param> /// <param name="r">The data record.</param> public abstract void Draw(object dc, XPath path, double dx, double dy, ImmutableArray<XProperty> db, XRecord r);
/// <inheritdoc/> public override void Draw(object dc, XPath path, double dx, double dy, ImmutableArray<XProperty> db, XRecord r) { var _gfx = dc as Graphics; var gp = path.Geometry.ToGraphicsPath(dx, dy, _scaleToPage); if (path.IsFilled && path.IsStroked) { var brush = ToSolidBrush(path.Style.Fill); var pen = ToPen(path.Style, _scaleToPage); _gfx.FillPath( brush, gp); _gfx.DrawPath( pen, gp); brush.Dispose(); pen.Dispose(); } else if (path.IsFilled && !path.IsStroked) { var brush = ToSolidBrush(path.Style.Fill); _gfx.FillPath( brush, gp); brush.Dispose(); } else if (!path.IsFilled && path.IsStroked) { var pen = ToPen(path.Style, _scaleToPage); _gfx.DrawPath( pen, gp); pen.Dispose(); } }
/// <summary> /// /// </summary> /// <param name="path"></param> /// <param name="selection"></param> /// <param name="selected"></param> /// <param name="dx"></param> /// <param name="dy"></param> /// <returns></returns> public static bool HitTestPath(XPath path, Vector2[] selection, ISet<BaseShape> selected, double dx, double dy) { if (path.Geometry != null) { var points = path.GetPoints().ToImmutableArray(); if (ShapeBounds.Overlap(selection, points, dx, dy)) { if (selected != null) { selected.Add(path); return false; } else { return true; } } } return false; }