Share via


Comment : effectuer un test d'atteinte avec Geometry dans un Visual

Mise à jour : novembre 2007

Cet exemple montre comment effectuer un test d'atteinte sur un objet visuel composé d'un ou plusieurs objets Geometry.

Exemple

L'exemple suivant montre comment récupérer le DrawingGroup d'un objet visuel qui utilise la méthode GetDrawing. Un test d'atteinte est ensuite effectué sur le contenu rendu de chaque dessin dans le DrawingGroup afin de déterminer la géométrie atteinte.

Remarque :

Dans la plupart des cas, vous utiliserez la méthode HitTest pour déterminer si un point croise un des contenus rendus d'un visuel.

// Determine if a geometry within the visual was hit.
static public void HitTestGeometryInVisual(Visual visual, Point pt)
{
    // Retrieve the group of drawings for the visual.
    DrawingGroup drawingGroup = VisualTreeHelper.GetDrawing(visual);
    EnumDrawingGroup(drawingGroup, pt);
}

// Enumerate the drawings in the DrawingGroup.
static public void EnumDrawingGroup(DrawingGroup drawingGroup, Point pt)
{
    DrawingCollection drawingCollection = drawingGroup.Children;

    // Enumerate the drawings in the DrawingCollection.
    foreach (Drawing drawing in drawingCollection)
    {
        // If the drawing is a DrawingGroup, call the function recursively.
        if (drawing.GetType() == typeof(DrawingGroup))
        {
            EnumDrawingGroup((DrawingGroup)drawing, pt);
        }
        else if (drawing.GetType() == typeof(GeometryDrawing))
        {
            // Determine whether the hit test point falls within the geometry.
            if (((GeometryDrawing)drawing).Geometry.FillContains(pt))
            {
                // Perform action based on hit test on geometry.
            }
        }

    }
}

La méthode FillContains est une méthode surchargée qui vous permet d'effectuer un test d'atteinte à l'aide d'un Point ou d'une Geometry spécifié. Si une géométrie est rayée, le trait peut s'étendre en dehors des limites du remplissage. Dans ce cas, vous pouvez appeler StrokeContains en plus de FillContains.

Vous pouvez également fournir un ToleranceType utilisé pour les besoins de l'aplatissement de Bézier.

Remarque :

Cet exemple ne prend pas en compte les transformations ou découpages qui auraient été appliqués à la géométrie. De plus, cet exemple n'utilise pas de contrôle auquel est appliqué un style, car aucun dessin ne lui est directement associé.

Voir aussi

Tâches

Comment : effectuer un test d'atteinte avec Geometry comme paramètre

Concepts

Test d'atteinte dans la couche visuelle