/// <summary> /// Erases all ink hit by the contour of an erasing stroke /// </summary> /// <param name="eraserShape">Shape of the eraser</param> /// <param name="eraserPath">a path making the spine of the erasing stroke </param> public void Erase(IEnumerable <Point> eraserPath, StylusShape eraserShape) { // Check the input parameters if (eraserShape == null) { throw new System.ArgumentNullException(SR.Get(SRID.SCEraseShape)); } if (eraserPath == null) { throw new System.ArgumentNullException(SR.Get(SRID.SCErasePath)); } if (IEnumerablePointHelper.GetCount(eraserPath) == 0) { return; } ErasingStroke erasingStroke = new ErasingStroke(eraserShape, eraserPath); for (int i = 0; i < this.Count; i++) { Stroke stroke = this[i]; List <StrokeIntersection> intersections = new List <StrokeIntersection>(); erasingStroke.EraseTest(StrokeNodeIterator.GetIterator(stroke, stroke.DrawingAttributes), intersections); StrokeCollection eraseResult = stroke.Erase(intersections.ToArray()); UpdateStrokeCollection(stroke, eraseResult, ref i); } }
/// <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(Array.Empty <StrokeIntersection>()); } ErasingStroke erasingStroke = new ErasingStroke(shape, path); List <StrokeIntersection> intersections = new List <StrokeIntersection>(); erasingStroke.EraseTest(StrokeNodeIterator.GetIterator(this, this.DrawingAttributes), intersections); return(intersections.ToArray()); }