How isPointInStroke Detects SVG Line Hits
The isPointInStroke method determines whether a specific
set of coordinates intersects the stroked outline of a vector path, such
as an SVG line represented directly or through a canvas
Path2D object. This article breaks down the internal
hit-testing mechanics of the method, detailing how coordinate data,
stroke styling rules, and geometric boundary calculations combine to
detect accurate pointer interactions.
1. Ingestion of the Vector Geometry
To evaluate pointer interaction with an SVG line, the method requires
the geometry of the target path. In standard web implementations, an SVG
line’s path data (defined by starting and ending coordinates
x1, y1 to x2, y2 or SVG path syntax
d="M... L...") is passed into a Path2D object
or drawn directly onto a 2D rendering context. The
isPointInStroke method takes this geometric baseline as the
central axis for its calculations.
2. Construction of the Stroke Boundary
An SVG line mathematically exists as a one-dimensional segment with
zero area. Because a user cannot click a zero-width line,
isPointInStroke synthesizes a two-dimensional
boundary—known as the stroke envelope—around the central path. This
calculation incorporates all active stroke styling properties:
- Stroke Width (
lineWidth): The engine expands the line symmetrically outward by half the stroke width on both sides (\(w / 2\)). - Line Caps (
lineCap): For endpoints, the algorithm adds the appropriate cap geometry (buttcuts off at endpoints,roundadds semicircles with radius \(w / 2\), andsquareextends the line by a rectangle of length \(w / 2\)). - Line Joins and Miter Limits (
lineJoin,miterLimit): For multi-segment SVG lines, corners are expanded according tomiter,round, orbeveldefinitions. - Dash Offsets and Arrays (
setLineDash): If the SVG line is dashed, empty intervals are excluded from the calculated hit area.
3. Coordinate System Transformation
Before performing spatial calculations, the method maps the pointer coordinates \((x, y)\) to the coordinate system of the line. If transformations such as scaling, rotation, or translation have been applied via the SVG matrix or canvas context transformation matrix (CTM), the test coordinates are transformed into the local coordinate space of the path.
4. Mathematical Hit Detection
Once the stroke boundary polygon is established in the appropriate coordinate space, the algorithm evaluates whether the target point \((x, y)\) resides inside that polygon.
For simple solid lines without dashes, this is solved by calculating
the shortest perpendicular distance from the point \((x, y)\) to the line segment. If the
perpendicular distance is less than or equal to \(w / 2\), and the point falls within the
boundaries dictated by the endpoints and lineCap style, the
test passes.
For complex paths, curves, or dashed lines, the engine typically relies on winding-number or ray-casting point-in-polygon algorithms against the computed stroke outline.
5. Output
The method returns a boolean value: * true if the point
\((x, y)\) falls within the calculated
stroke envelope. * false if the point falls outside the
boundary or inside the transparent gaps of a dashed stroke.