sharansingh00002 / draw

Library to draw in flutter
158 stars 46 forks source link

Is it possible to implement eraser to your project #5

Open AnsonWooBizCloud opened 4 years ago

AnsonWooBizCloud commented 4 years ago

I have seen many drawing sample projects but none of them supporting eraser feature. I think remove the points are easy but not for lines. Do you have any ideas? Thanks!

andrepo commented 4 years ago

You can try a collision detection algo like the one suggested here: https://www.youtube.com/watch?v=b2apMKU_CMA Or do something based on a range. Here's an example: void eraseDrawingObject(PointerEvent details, DrawingOptions drawingOptions) { _points.retainWhere((item) { // We want to keep null when it's used to mark the end of the shape if (item == null) { return true; } int index = _points.indexOf(item); // Don't keep the offset if it's in the same position as the the pointer's final int drawingDx = item.points.dx.toInt(); final int drawingDy = item.points.dy.toInt(); final int pointerDx = details.localPosition.dx.toInt(); final int pointerDy = details.localPosition.dy.toInt(); final int eraseRange = drawingOptions.strokeWidth.toInt() + 5; for (int i = 0; i <= eraseRange; i++) { if ( // Use ranges on offset location so we can erase within a range (drawingDx+i == pointerDx+i && drawingDy+i == pointerDy+i) || (drawingDx-i == pointerDx-i && drawingDy-i == pointerDy-i) ) { lastRejectedPointIndex = index; return false; } } // If anything else, keep it return true; });