protected override void OnHandleDragging(HandleEventData eventData)
        {
            var rayOrigin     = eventData.rayOrigin;
            var lastPosition  = m_LastPositions[rayOrigin];
            var worldPosition = lastPosition;

            // Raycast against the plane and get the hit point
            var ray = eventData.GetRay();

            if (m_Plane.Raycast(ray, out var distance))
            {
                worldPosition = ray.GetPoint(Mathf.Min(Mathf.Abs(distance), HandleSettings.instance.MaxDragDistance * this.GetViewerScale()));
            }

            var deltaPosition = worldPosition - lastPosition;

            m_LastPositions[rayOrigin] = worldPosition;

            eventData.deltaPosition = deltaPosition;
            base.OnHandleDragging(eventData);
        }
        protected override void OnHandleDragging(HandleEventData eventData)
        {
            var rayOrigin     = eventData.rayOrigin;
            var lastPosition  = m_LastPositions[rayOrigin];
            var worldPosition = lastPosition;

            float distance;
            var   ray = eventData.GetRay();

            if (m_Plane.Raycast(ray, out distance))
            {
                worldPosition = ray.GetPoint(Mathf.Abs(distance));
            }

            var thisTransform = transform;
            var up            = thisTransform.up;
            var pivot         = thisTransform.parent.position;
            var angle         = Vector3.SignedAngle(worldPosition - pivot, m_LastPositions[rayOrigin] - pivot, -up);

            eventData.deltaRotation = Quaternion.AngleAxis(angle, up);

            m_LastPositions[rayOrigin] = worldPosition;
            base.OnHandleDragging(eventData);
        }
 Vector3 GetRayPoint(HandleEventData eventData)
 {
     return(eventData.GetRay().GetPoint(m_CurrentRadius));
 }