Как узнать, содержит ли GraphicsPath точку в C#

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

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

но я не знаю, как это сделать, если цифра сложная GraphicsPath.

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

GraphicsPath

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

какие идеи? Спасибо заранее.

2 ответов


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

bool isInPath = graphicsObj.IsVisible(point)

используя обе .IsOutlineVisible and .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);              
  }