public override void OnPointerMoved(DesignCanvas canvas, PointerRoutedEventArgs args) { base.OnPointerMoved(canvas, args); if (_origin.HasValue) { var pos = canvas.FromClientPosition(args.GetCurrentPoint(canvas).Position); if (args.KeyModifiers.HasFlag(VirtualKeyModifiers.Shift)) { pos = ClampToOrigin(pos, _origin.Value); } if (_shouldMoveOrigin) { _origin = new Point( _origin.Value.X + pos.X - _anchor.X, _origin.Value.Y + pos.Y - _anchor.Y); } _anchor = pos; _points = Slicing.IntersectPaths(canvas.Layer, _origin.Value.ToVector2(), _anchor.ToVector2()); canvas.Invalidate(); } Cursor = args.KeyModifiers.HasFlag(VirtualKeyModifiers.Menu) ? Cursors.KnifeWithPlus : DefaultCursor; canvas.InvalidateCursor(); }
IList <Vector2> GetPointsWithEndpoints(Data.Layer layer, bool addIntersections = true) { var origin = _origin.Value.ToVector2(); var anchor = _anchor.ToVector2(); return(addIntersections switch { true => Enumerable.Concat(Slicing.IntersectPaths(layer, origin, anchor), new Vector2[] { origin, anchor }) .OrderBy(point => (point - origin).LengthSquared()) .ToArray(), false => new Vector2[] { origin, anchor } });