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