Partager via


Comment : effectuer un test d'atteinte dans un Viewport3D

Mise à jour : novembre 2007

Cet exemple montre comment effectuer un test d'atteinte pour des objets visuels 3D dans un Viewport3D.

Du fait que HitTest retourne des informations 2D et 3D, il est possible d'itérer à travers les résultats des tests pour lire uniquement les résultats de 3D.

public void HitTest(object sender, System.Windows.Input.MouseButtonEventArgs args)
{
    Point mouseposition = args.GetPosition(myViewport);
    Point3D testpoint3D = new Point3D(mouseposition.X, mouseposition.Y, 0);
    Vector3D testdirection = new Vector3D(mouseposition.X, mouseposition.Y, 10);
    PointHitTestParameters pointparams = new PointHitTestParameters(mouseposition);
    RayHitTestParameters rayparams = new RayHitTestParameters(testpoint3D, testdirection);

    //test for a result in the Viewport3D
    VisualTreeHelper.HitTest(myViewport, null, HTResult, pointparams);

Le HitTestResultBehavior dans le code suivant détermine comment sont traités les résultats de test d'atteinte UpdateResultInfo et UpdateMaterial sont définis comme des méthodes locales.

public HitTestResultBehavior HTResult(System.Windows.Media.HitTestResult rawresult)
{
    //MessageBox.Show(rawresult.ToString());
    RayHitTestResult rayResult = rawresult as RayHitTestResult;

    if (rayResult != null)
    {
        RayMeshGeometry3DHitTestResult rayMeshResult = rayResult as RayMeshGeometry3DHitTestResult;

        if (rayMeshResult != null)
        {
            GeometryModel3D hitgeo = rayMeshResult.ModelHit as GeometryModel3D;

            UpdateResultInfo(rayMeshResult);
            UpdateMaterial(hitgeo, (side1GeometryModel3D.Material as MaterialGroup));
        }
    }

    return HitTestResultBehavior.Continue;
}

Voir aussi

Tâches

Tests d'atteinte 3D, exemple