Feedback

C# - Wpf Shape beinhaltet Point

Veröffentlicht von am 2/3/2014
(1 Bewertungen)
WPF

Diese Extensionmethod prüft, ob eine beliebige Form (Shape) einen bestimmten Punkt beinhaltet.

HINWEIS:
Dieses Beispiel funktioniert nicht bei GeometryGroup.Geometry. Dazu müssten die Formen der Gruppe vorher zusammengefasst werden.
public static bool Contains(this Shape shape, Point spot, double spotSize = 3.0)
{
    // Manchmal muss der Punkt noch um den Offset des Elternelements korrigiert werden
    /*
    FrameworkElement parent = shape.Parent as FrameworkElement;
    if (parent != null)
    {
        double left = Canvas.GetLeft(parent);
        double top = Canvas.GetTop(parent);
        spot = new Point(spot.X - left, spot.Y - top);
    }
    */

    Geometry visualSpot = new EllipseGeometry(spot, spotSize, spotSize);
    Geometry visualContainer = shape.RenderedGeometry;
    double oldArea = Math.Round(visualContainer.GetArea());
    double spotArea = Math.Round(visualSpot.GetArea());
    double newSize = Math.Round(Geometry.Combine(visualContainer, visualSpot, GeometryCombineMode.Intersect, null).GetArea());
    
    return newSize > 0;
}
Abgelegt unter WPF, Shape, Contains, Beinhaltet, Punkt, Point, .

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!