Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to extend WPF hit testing zone for a Path object

Wpf hit testing is pretty good but the only method I found to extend the hit zone is to put a transparent padding area around your object. I can't find any method to add a transparent area arround a Path object. The path is very thin and I would like to enable hit testing if the user clicks near the path. I can't find any method to extend the path object with a transparent area like the image below : alt text http://img175.imageshack.us/img175/6741/linepadding.png

I tried to used a partially transparent stroke brush but I ran into the problem described here : How can I draw a "soft" line in WPF (presumably using a LinearGradientBrush)?

I also tried to put an adorner over my line but because of WPF anti-aliasing algorithms, the position is way off when I zoom in my canvas and interfere with other objects hit-testing in a bad way.

Any suggestion to extend the hit testing zone would be highly appreciated.

Thanks, Kumar

like image 944
user275587 Avatar asked Apr 15 '10 01:04

user275587


2 Answers

Path.Data is a geometry object. The Geometry class has several methods that can help you hit test with tolerance:

GetFlattenedPathGeometry(Double, ToleranceType)
GetOutlinedPathGeometry(Double, ToleranceType)
GetRenderBounds(Pen, Double, ToleranceType)

I think GetRenderBounds will work best for you.

Once you have the geometry (plus a little width) you can call

geometry.FillContains(Point, Double, ToleranceType)

or

geometry.StrokeContains(Pen, Point, Double, ToleranceType)

Out of all of that you should tune the desired hit from your hit test;

like image 111
Josh C. Avatar answered Oct 12 '22 23:10

Josh C.


You can wrap the Path inside a transparent Border.

like image 43
Dimitri C. Avatar answered Oct 13 '22 00:10

Dimitri C.