Mouse pointer detection over a Path2D

java, java-2d, path-2d, shapes

Solution

- Create a BasicStroke (the width controls your pixel-distance-tolerance)

- Don't draw with it, only use its createStrokedShape method to create a second shape from your shape. This second shape describes the outline of the shape that would be filled if you would draw your first shape with the BasicStroke.

- Use the contains method of this second shape

From Stroke.createStrokedShape API documentation:

Returns an outline Shape which encloses the area that should be painted when the Shape is stroked according to the rules defined by the object implementing the Stroke interface.

Problem

I have constructed a `Path2D` that represents an unclosed shape consisting of straight lines: I want to be able to detect when the mouse is clicked and the mouse pointer is near to (within a few pixels of) the path. Using the `contains` method does not work because the algorithm treats the unclosed shape as implicitly closed (i.e. by drawing a straight line between the start and end points). Does anyone know of another mechanism for achieving this?

Original source