/// <summary>
        /// Process mouse drag and hover events and draw velocity vectors if enabled
        /// </summary>
        private void ProcessVelocityArrows()
        {
            if (!_simControl.SceneElementsDisplayParameters.DrawVelocityVectors)
            {
                return;
            }
            Vector3d velocity = new Vector3d();
            Vector3  hpos     = new Vector3();
            Vector3  pos      = new Vector3();

            for (int i = 0; i < _bodies.Length; i++)
            {
                if (_bodies[i].isActiveAndEnabled)
                {
                    velocity = _simControl.SceneElementsDisplayParameters.EditGlobalVelocity ?
                               _bodies[i].Velocity :
                               _bodies[i].RelativeVelocity;
                    pos = (Vector3)(_bodies[i].Position + velocity * _simControl.SceneElementsDisplayParameters.VelocitiesArrowsScale);
                    Handles.CapFunction capFunc;
                    switch (_simControl.SceneElementsDisplayParameters.VelocityHandlerType)
                    {
                    case VelocityHandlerType.Circle:
                        capFunc = Handles.CircleHandleCap;
                        break;

                    case VelocityHandlerType.Sphere:
                        capFunc = Handles.SphereHandleCap;
                        break;

                    case VelocityHandlerType.Dot:
                        capFunc = Handles.DotHandleCap;
                        break;

                    default:
                        continue;
                    }
                    Handles.color = Color.white;
                    hpos          = Handles.FreeMoveHandle(pos, Quaternion.identity, _simControl.SceneElementsDisplayParameters.HandleScale * HandleUtility.GetHandleSize(pos), Vector3.zero, capFunc);
                    if (pos != hpos)
                    {
                        // Project onto orbit plane.
                        if (_bodies[i].AttractorRef != null && !_simControl.SceneElementsDisplayParameters.EditGlobalVelocity && (_simControl.SceneElementsDisplayParameters.KeepOrbitPlaneWhileChangeVelocity || _simControl.KeepBodiesOnEclipticPlane))
                        {
                            Ray ray = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition);
                            hpos = CelestialBodyUtils.GetRayPlaneIntersectionPoint((Vector3)_bodies[i].Position, (Vector3)_bodies[i].OrbitData.OrbitNormal, ray.origin, ray.direction);
                        }

                        velocity = (new Vector3d(hpos) - _bodies[i].Position) / _simControl.SceneElementsDisplayParameters.VelocitiesArrowsScale;
                        Undo.RecordObject(_bodies[i], "Velocity change");
                        if (_simControl.SceneElementsDisplayParameters.EditGlobalVelocity)
                        {
                            _bodies[i].Velocity = velocity;
                        }
                        else
                        {
                            _bodies[i].RelativeVelocity = velocity;
                        }
                        _bodies[i].OrbitData.IsDirty = true;
                        if (_simControl.SceneElementsDisplayParameters.SelectBodyWhenDraggingVelocity)
                        {
                            Selection.activeGameObject = _bodies[i].gameObject;
                        }
                    }
                }
            }
            ShowAllVelocitiesVectors();
        }