private float doRotation(Vector3 center, Vector2 oldScreenPos, Vector2 newScreenPos)
        {
            var newVector = projectionLayer.ProjectTo(newScreenPos, TransformPlane) - center;
            var oldVector = projectionLayer.ProjectTo(oldScreenPos, TransformPlane) - center;
            var angle     = Vector3.Angle(oldVector, newVector);

            if (Vector3.Dot(Vector3.Cross(oldVector, newVector), TransformPlane.normal) < 0)
            {
                angle = -angle;
            }
            return(angle);
        }
        /// <inheritdoc />
        protected override float doRotation(Vector2 oldScreenPos1, Vector2 oldScreenPos2, Vector2 newScreenPos1,
                                            Vector2 newScreenPos2)
        {
            var newVector = projectionLayer.ProjectTo(newScreenPos2, TransformPlane) -
                            projectionLayer.ProjectTo(newScreenPos1, TransformPlane);
            var oldVector = projectionLayer.ProjectTo(oldScreenPos2, TransformPlane) -
                            projectionLayer.ProjectTo(oldScreenPos1, TransformPlane);
            var angle = Vector3.Angle(oldVector, newVector);

            if (Vector3.Dot(Vector3.Cross(oldVector, newVector), TransformPlane.normal) < 0)
            {
                angle = -angle;
            }
            return(angle);
        }