Beispiel #1
0
 void hVp3D_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
 {
     if (_enableHover)
     {
         var      point = Mouse.GetPosition(hVp3D);
         Point3D  pnt;
         Vector3D normal;
         Model3D  model;
         if (hVp3D.FindNearest(point, out pnt, out normal, out model))
         {
             OnModelHovered(model);
         }
     }
 }
 /// <summary>
 /// Find the coordinates of the nearest point given a 2D position in the viewport
 /// </summary>
 /// <param name="viewport">The viewport.</param>
 /// <param name="position">The position.</param>
 /// <returns>The nearest point, or null if no point was found.</returns>
 public static Point3D?FindNearestPoint(this Viewport3DX viewport, Point position)
 {
     if (viewport.FindNearest(position.ToVector2(), out var p, out var n, out var model))
     {
         return(p.ToPoint3D());
     }
     return(null);
 }
Beispiel #3
0
 /// <summary>
 /// Finds the nearest point and its normal.
 /// </summary>
 /// <param name="viewport">
 /// The viewport.
 /// </param>
 /// <param name="position">
 /// The position.
 /// </param>
 /// <param name="point">
 /// The point.
 /// </param>
 /// <param name="normal">
 /// The normal.
 /// </param>
 /// <param name="model">
 /// The model.
 /// </param>
 /// <param name="node"></param>
 /// <returns>
 /// The find nearest.
 /// </returns>
 public static bool FindNearest(this Viewport3DX viewport, Point position,
                                out Vector3 point, out Vector3 normal, out Element3D model, out SceneNode node)
 {
     model = null;
     node  = null;
     if (viewport.FindNearest(position.ToVector2(), out point, out normal, out var m))
     {
         if (m is Element3D ele)
         {
             model = ele;
             node  = ele.SceneNode;
         }
         else if (m is SceneNode nd)
         {
             node  = nd;
             model = null;
         }
         return(true);
     }
     return(false);
 }
        /// <summary>
        /// Finds the nearest point and its normal.
        /// </summary>
        /// <param name="viewport">
        /// The viewport.
        /// </param>
        /// <param name="position">
        /// The position.
        /// </param>
        /// <param name="point">
        /// The point.
        /// </param>
        /// <param name="normal">
        /// The normal.
        /// </param>
        /// <param name="model">
        /// The model.
        /// </param>
        /// <param name="node"></param>
        /// <returns>
        /// The find nearest.
        /// </returns>
        public static bool FindNearest(this Viewport3DX viewport, Point position,
                                       out Point3D point, out Vector3D normal, out Element3D model, out SceneNode node)
        {
            var succ = viewport.FindNearest(position.ToVector2(), out var p, out var n, out var m);

            point  = p.ToPoint3D();
            normal = n.ToVector3D();
            if (m is Element3D ele)
            {
                model = ele;
                node  = ele.SceneNode;
            }
            else if (m is SceneNode nd)
            {
                node  = nd;
                model = null;
            }
            else
            {
                model = null;
                node  = null;
            }
            return(succ);
        }