Как узнать, содержит ли GraphicsPath точку в C # - PullRequest
8 голосов
/ 27 января 2011

Я использую .NET , чтобы нарисовать диаграмму, и я хочу выделить объекты, когда пользователь нажимает на них.Легко, когда фигура полностью содержится в прямоугольнике:

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

Но я не знаю, как с этим справиться, если фигура сложная GraphicsPath.

У меня естьопределили следующее GraphicsPath для фигуры (зеленый кружок).

GraphicsPath

Я хочу выделить фигуру, когда пользователь нажимает на нее. Я хотел бы знать, содержится ли Point в этом GraphicsPath.

Есть идеи?Заранее спасибо.

Ответы [ 2 ]

14 голосов
/ 27 января 2011

Я не знаю DrawingPath (вы, вероятно, имеете в виду; graphics.DrawPath), но GraphicsPath имеет метод IsVisible , чтобы проверить, находится ли точка в пути.

bool isInPath = graphicsObj.IsVisible(point)
3 голосов
/ 20 декабря 2015

Использование как .IsOutlineVisible, так и .IsVisible вместе охватывает все, границы и границы, для этого примера прямоугольника, но, как вы знаете, GraphicsPath может работать для разных фигур.

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

Для этого в коде

 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);              
  }
...