/// <summary>Hit tests all segments within a contour generated with shape and path</summary> /// <param name="shape"></param> /// <param name="path"></param> /// <returns>StrokeIntersection array for these segments</returns> internal StrokeIntersection[] EraseTest(IEnumerable<Point> path, StylusShape shape) { System.Diagnostics.Debug.Assert(shape != null); System.Diagnostics.Debug.Assert(path != null); if (IEnumerablePointHelper.GetCount(path) == 0) { return new StrokeIntersection[0]; } ErasingStroke erasingStroke = new ErasingStroke(shape, path); List<StrokeIntersection> intersections = new List<StrokeIntersection>(); erasingStroke.EraseTest(StrokeNodeIterator.GetIterator(this, this.DrawingAttributes), intersections); return intersections.ToArray(); }
/// <summary> /// C-tor /// </summary> /// <param name="strokes">strokes to hit-test for erasing</param> /// <param name="eraserShape">erasing shape</param> internal IncrementalStrokeHitTester(StrokeCollection strokes, StylusShape eraserShape) : base(strokes) { System.Diagnostics.Debug.Assert(eraserShape != null); // Create an ErasingStroke objects that implements the actual hit-testing _erasingStroke = new ErasingStroke(eraserShape); }
/// <summary> /// /// </summary> /// <param name="path"></param> /// <param name="stylusShape"></param> /// <returns></returns> public bool HitTest(IEnumerable<Point> path, StylusShape stylusShape) { // Check the input parameters if (path == null) { throw new System.ArgumentNullException("path"); } if (stylusShape == null) { throw new System.ArgumentNullException("stylusShape"); } if (IEnumerablePointHelper.GetCount(path) == 0) { return false; } ErasingStroke erasingStroke = new ErasingStroke(stylusShape); erasingStroke.MoveTo(path); Rect erasingBounds = erasingStroke.Bounds; if (erasingBounds.IsEmpty) { return false; } if (erasingBounds.IntersectsWith(this.GetBounds())) { return erasingStroke.HitTest(StrokeNodeIterator.GetIterator(this, this.DrawingAttributes)); } return false; }