Compartir a través de


Cómo: Hacer una prueba de posicionamiento en Viewport3D

Actualización: noviembre 2007

En este ejemplo se muestra cómo realizar la prueba de posicionamiento en los objetos visuales 3D en Viewport3D.

Dado que HitTest devuelve información 2D y 3D, es posible recorrer en iteración los resultados de la prueba para leer únicamente los resultados 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);

El comportamiento de prueba de posicionamiento (HitTestResultBehavior) del código siguiente determina cómo se procesan los resultados de la prueba de posicionamiento. UpdateResultInfo y UpdateMaterial son métodos definidos localmente.

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;
}

Vea también

Tareas

Ejemplo 3-D Hit Testing