2011-01-27 13 views
6

Używam .NET do rysowania diagramu i chcę podświetlić obiekty, gdy użytkownik kliknie na nich. To jest łatwe, gdy postać jest w pełni zawarte w prostokącie:Jak sprawdzić, czy GraphicsPath zawiera punkt w C#

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

Ale nie wiem, jak zarządzać, jeśli postać jest złożonym GraphicsPath.

Mam zdefiniowane następujące GraphicsPath dla rysunku (zielone kółko).

GraphicsPath

Chcę podkreślić figurę, gdy użytkownik kliknie na nim. Chciałbym wiedzieć, czy Point jest zawarty w tym GraphicsPath.

Jakieś pomysły? Z góry dziękuję.

Odpowiedz

12

ja nie wiem DrawingPath (masz na myśli zapewne; Graphics.drawPath), ale GraphicsPath ma metodę IsVisible Aby sprawdzić, czy punkt znajduje się na ścieżce.

bool isInPath = graphicsObj.IsVisible(point) 
+0

Niestety, nie wiem, co myślałem, kiedy pisałem ten :-). Mam na myśli GraphicsPath. –

1

Korzystanie zarówno .IsOutlineVisible i .IsVisible razem pokrywać całą sprawę, kontroli granicznej i wewnątrz granicy, na tym przykładzie prostokąt, ale jak wiesz GraphicsPath może pracować w różnych kształtach.

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

go w kodzie

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);    
    } 
Powiązane problemy