Search code examples
qtgeometrydrawingqgraphicsview

How to test proximity to the outline of a QGraphicsPathItem?


I'm trying to test whether a given point (x, y) is located on or close to the outline of a QGraphicsPathItem.

Using QGraphicsItem.contains() or .collidesWithItem() / Path() will not do: those also return True if the point is contained within the area on the interior of the path, while I want to test only for points on the outline. How can I accomplish that?


Solution

  • After posting the question I found the following solution:

        path = QPainterPath(...)   # Path we are testing against
        point = QPointF(...)       # Current position
    
        stroker = QPainterPathStroker()
        stroker.setWidth(10)        # Distance which we consider "on" the path 
        stroke = stroker.createStroke(path)
    
        if stroke.contains(point):
            # point is on path