private void DoRotateHandle()
    {
        _currentMousePosition += Event.current.delta;
        var normalized   = Vector3.Cross(_rotateStartAxis, transform.position - _rotateStartPosition).normalized;
        var rotationDist = (float)((double)MyHandleUtility.CalcLineTranslation(_startMousePosition, _currentMousePosition, _rotateStartPosition, normalized) / (double)_handleSize * 30.0);

        transform.rotation = Quaternion.AngleAxis(rotationDist * -1f, _rotateStartAxis) * _rotateStartRotation;
    }
    private void DoTranslateHandle()
    {
        _currentMousePosition += Event.current.delta;
        var translateAxis   = GetAxis(_currentControl);
        var translationDist = MyHandleUtility.CalcLineTranslation(_startMousePosition, _currentMousePosition, _translateStartPosition, translateAxis);

        transform.position = _translateStartPosition + translateAxis * translationDist;
    }
    private void DoScaleHandle()
    {
        _currentMousePosition += Event.current.delta;
        var scaleAxis = GetAxis(_currentControl);

        if (CurrentControl == ControlType.ScaleCenter)
        {
            _scaleValueDrag += MyHandleUtility.niceMouseDelta * 0.01f;
            var scaleFactor = (_scaleValueDrag + 1f) * _startScaleValue;

            var num2     = scaleFactor / transform.localScale.x;
            var newScale = transform.localScale;

            newScale.x  = scaleFactor;
            newScale.y *= num2;
            newScale.z *= num2;

            transform.localScale = newScale;

            _drawScaleValue.x = newScale.x / _startScaleValue;
            _drawScaleValue.y = newScale.x / _startScaleValue;
            _drawScaleValue.z = newScale.x / _startScaleValue;
        }
        else
        {
            float num = 1.0f + MyHandleUtility.CalcLineTranslation(_startMousePosition, _currentMousePosition, transform.position, -GetAxis(_currentControl)) / _handleSize;

            var newScale = transform.localScale;

            if (CurrentControl == ControlType.ScaleX)
            {
                newScale.x        = _startScaleValue * num;
                _drawScaleValue.x = newScale.x / _startScaleValue;
            }
            else if (CurrentControl == ControlType.ScaleY)
            {
                newScale.y        = _startScaleValue * num;
                _drawScaleValue.y = newScale.y / _startScaleValue;
            }
            else if (CurrentControl == ControlType.ScaleZ)
            {
                newScale.z        = _startScaleValue * num;
                _drawScaleValue.z = newScale.z / _startScaleValue;
            }

            transform.localScale = newScale;
        }
    }