2011-01-27 9 views
6

Estoy usando .NET para dibujar un diagrama y quiero resaltar los objetos cuando el usuario hace clic en ellos. Es fácil cuando una figura está totalmente contenida en un rectángulo:Cómo saber si un GraphicsPath contiene un punto en C#

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

Pero no sé cómo manejarlo si la figura es un complejo GraphicsPath.

He definido el siguiente GraphicsPath para la figura (el círculo verde).

GraphicsPath

Quiero resaltar la figura cuando el usuario haga clic en él. Me gustaría saber si hay Point en ese GraphicsPath.

¿Alguna idea? Gracias por adelantado.

Respuesta

12

No sé una DrawingPath (que quiere decir probablemente; Graphics.drawPath) sino un GraphicsPath tiene el método IsVisible para comprobar si un punto está en el camino.

bool isInPath = graphicsObj.IsVisible(point) 
+0

Lo sentimos, no sé qué estaba pensando cuando escribí esto :-). Me refiero a un GraphicsPath. –

1

El uso de ambos .IsOutlineVisible y .IsVisible juntos cubren toda la cosa, frontera y dentro de la frontera, para este ejemplo rectángulo, pero como usted sabe GraphicsPath puede trabajar de diferentes formas.

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

Porque en el código

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);    
    } 
Cuestiones relacionadas