I would think about using image points. In case of circles you could check the distance to the respective image points (having them places centered on the circles). The closest distance that's still in the radius of the circle would be picked. But you'd have to use PVs then too to set the radii.
Or you could define rectangle shapes with PVs too, you'd need at least two values per area. One representing top left, the other bottom right position (X/Y and gettoken maybe).
Actually what I'm talking about is more or less like image maps in HTML work, so you could adapt that if you're familiar with it.
It's prolly better for any shape to just place contained invisible dummy sprites on the object. Again with image points.