void hVp3D_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
 {
     if (_enableHover)
     {
         var hits = hVp3D.FindHits(e.GetPosition(hVp3D));
         foreach (var hit in hits)
         {
             OnModelSelected(hit.ModelHit as MeshGeometryModel3D);
             break;
         }
     }
 }
 /// <summary>
 /// Finds the hits for a given 2D viewport position.
 /// </summary>
 /// <param name="viewport">
 /// The viewport.
 /// </param>
 /// <param name="position">
 /// The position.
 /// </param>
 /// <returns>
 /// List of hits, sorted with the nearest hit first.
 /// </returns>
 public static IList <HitTestResult> FindHits(this Viewport3DX viewport, Point position)
 {
     return(viewport.FindHits(position.ToVector2()));
 }
        /// <summary>
        /// 連續點擊兩下產生出球
        /// </summary>
        public void OnMouseDoubleClickHandler(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            //如果當前可點擊的狀態為否則直接return
            if (!MainViewModel.ProjData.CanSelectPoints)
            {
                return;
            }

            Viewport3DX viewport = sender as Viewport3DX;

            if (viewport == null)
            {
                return;
            }
            var point    = e.GetPosition(viewport);
            var hitTests = viewport.FindHits(point);

            //null或是點到的東西為少於零個
            if (hitTests == null || hitTests.Count <= 0)
            {
                return;
            }

            foreach (var hit in hitTests)
            {
                //有可能點到對稱面,不是BoneModel的話換下一個模型
                if (!(hit.ModelHit is BoneModel))
                {
                    continue;
                }

                BallModel ball = new BallModel
                {
                    BallName = "Ball",
                };

                //這邊很怪 拿不到該有的屬性資訊只有一些基底類別的資訊
                BoneModel model = hit.ModelHit as BoneModel;
                foreach (BoneModel modeltem in MainViewModel.ProjData.BoneCollection)
                {
                    //先找出當前點到的BoneModel是哪個,並將點擊的球的ModelType設定成跟該Model一樣
                    if (modeltem.Geometry.Positions.Count == model.Geometry.Positions.Count)
                    {
                        ball.ModelType = modeltem.ModelType;
                        Binding binding = new Binding("Transform");
                        binding.Source = modeltem;
                        binding.Mode   = BindingMode.OneWay;
                        BindingOperations.SetBinding(ball, HelixToolkit.Wpf.SharpDX.Model3D.TransformProperty, binding);
                    }
                }


                var ballContainer = new HelixToolkit.Wpf.SharpDX.MeshBuilder();
                ball.BallCenter = new Vector3(Convert.ToSingle(hit.PointHit.X), Convert.ToSingle(hit.PointHit.Y), Convert.ToSingle(hit.PointHit.Z));
                ballContainer.AddSphere(ball.BallCenter, 1.5);
                ball.Geometry = ballContainer.ToMeshGeometry3D();
                ball.Material = PhongMaterials.White;

                MainViewModel.ProjData.BallCollection.Add(ball);

                break;
            }
        }