File: Core\CSharp\System\Windows\Media3D\Ray3DHitTestResult.cs
Project: wpf\src\PresentationCore.csproj (PresentationCore)
//---------------------------------------------------------------------------
//
// <copyright file="RayHitTestResult.cs" company="Microsoft">
//    Copyright (C) Microsoft Corporation.  All rights reserved.
// </copyright>
//
//
// History:
//  06/22/2005 : Microsoft - Integrated from RayHitTestResult.
//
//---------------------------------------------------------------------------
 
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
 
namespace System.Windows.Media.Media3D
{
    /// <summary>
    ///     The HitTestResult of a Visual3D.HitTest(...) where the parameter
    ///     was a RayHitTestParameter. 
    /// 
    ///     NOTE:  This might have originated as a PointHitTest on a 2D Visual
    ///            which was extended into 3D.
    /// </summary>
    public abstract class RayHitTestResult : HitTestResult
    {
        //------------------------------------------------------
        //
        //  Constructors
        //
        //------------------------------------------------------
 
        #region Constructors
 
        // Prevent 3rd parties from extending this abstract base class.
        internal RayHitTestResult(Visual3D visualHit, Model3D modelHit) : base (visualHit)
        {
            _modelHit = modelHit;
        }
 
        #endregion Constructors
 
        //------------------------------------------------------
        //
        //  Public Methods
        //
        //------------------------------------------------------
 
        /// <summary>
        ///     Re-expose Visual property strongly typed to Visual3D.
        /// </summary>
        public new Visual3D VisualHit 
        { 
            get { return (Visual3D) base.VisualHit; }
        }
 
        /// <summary>
        ///     The Model3D intersected by the ray.
        /// </summary>
        public Model3D ModelHit
        {
            get { return _modelHit; }
        }
 
        /// <summary>
        ///     This is a point in 3-space at which the ray intersected
        ///     the geometry of the hit Model3D.  This point is in the
        ///     local coordinate system of the Model3D.
        /// </summary>
        public abstract Point3D PointHit { get; }
 
        /// <summary>
        ///     This is the distance between the ray's origin and the
        ///     point hit.
        /// </summary>
        public abstract double DistanceToRayOrigin { get; }
 
        //------------------------------------------------------
        //
        //  Public Properties
        //
        //------------------------------------------------------
 
        //------------------------------------------------------
        //
        //  Public Events
        //
        //------------------------------------------------------
 
        //------------------------------------------------------
        //
        //  Internal Methods
        //
        //------------------------------------------------------
 
        internal abstract void SetDistanceToRayOrigin(double distance);
 
        internal static int CompareByDistanceToRayOrigin(RayHitTestResult x, RayHitTestResult y)
        {
            return Math.Sign(x.DistanceToRayOrigin - y.DistanceToRayOrigin);
        }
        
        //------------------------------------------------------
        //
        //  Private Fields
        //
        //------------------------------------------------------
 
        #region Private Fields
        
        private readonly Model3D _modelHit;
        
        #endregion Private Fields
    }
}