Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to know if a GraphicsPath contains a point in C#

I'm using .NET to draw a diagram, and I want to highlight objects when the user performs a click on them. It is easy when a figure is fully contained in a rectangle:

if (figure.Bounds.Contains(p)) // bounds is a rectangle

But I don't know how to manage it if the figure is a complex GraphicsPath.

I have defined the following GraphicsPath for the figure (the green circle).

GraphicsPath

I want to highlight the figure when the user click on it. I would like to know if a Point is contained in that GraphicsPath.

Any ideas? Thanks in advance.

like image 961
Daniel Peñalba Avatar asked Jan 27 '11 12:01

Daniel Peñalba


2 Answers

I don't know a DrawingPath (you mean probably; graphics.DrawPath) but a GraphicsPath has the IsVisible method to check if a point is in the path.

bool isInPath = graphicsObj.IsVisible(point)
like image 184
Caspar Kleijne Avatar answered Oct 08 '22 08:10

Caspar Kleijne


Using both .IsOutlineVisible and .IsVisible together cover the whole thing, border and within border, for this rectangle example, but as you know GraphicsPath can works for different shapes.

  bool b = gp.IsVisible(point) || gp.IsOutlineVisible(point, pen);     

For it in code

 Rectangle r = new Rectangle(new Point(50, 100), new Size(500, 100));
 bool b;
 // say Point p is set.
 // say Pen pen is set.

 using (var gp = new GraphicsPath())
 using (var pen = new Pen(Color.Black, 44)) {
    gp.AddRectangle(r);
    bool b = gp.IsVisible(point) || gp.IsOutlineVisible(point, pen);              
  }
like image 41
barlop Avatar answered Oct 08 '22 08:10

barlop