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;
}
Kommentare zum Snippet