private void DrawCurve(SineDeformer sine)
        {
            var forward = sine.Axis.forward;
            var size    = HandleUtility.GetHandleSize(sine.Axis.position) * 5f;
            var a       = sine.Axis.position - (forward * size);
            var b       = sine.Axis.position + (forward * size);

            var pointSet         = false;
            var lastPointOnCurve = Vector3.zero;

            for (int i = 0; i <= DeformHandles.DEF_CURVE_SEGMENTS; i++)
            {
                var pointOnLine     = sine.Axis.worldToLocalMatrix.MultiplyPoint3x4(Vector3.Lerp(a, b, i / (float)DeformHandles.DEF_CURVE_SEGMENTS));
                var newPointOnCurve = pointOnLine + Vector3.up * Mathf.Sin((pointOnLine.z * sine.Frequency + sine.GetTotalOffset()) * Mathf.PI * 2f);
                newPointOnCurve.y *= sine.Amplitude;
                newPointOnCurve.y *= Mathf.Exp(-sine.Falloff * Mathf.Abs(newPointOnCurve.z));
                newPointOnCurve    = sine.Axis.localToWorldMatrix.MultiplyPoint3x4(newPointOnCurve);
                if (pointSet)
                {
                    DeformHandles.Line(lastPointOnCurve, newPointOnCurve, DeformHandles.LineMode.Solid);
                }
                lastPointOnCurve = newPointOnCurve;
                pointSet         = true;
            }
        }