private void SpawnDrawCurveModeCurve(bool smoothAcuteAngles)
        {
            var p0 = newCurvePoints[0];
            var p3 = newCurvePoints[3];

            BezierUtils.GetInverseControlPoints(p0, p3, newCurvePoints[1], newCurvePoints[2], EditorState.DrawCurveFirstPointHook, EditorState.DrawCurveSecondPointHook, out var p1, out var p2);

            if (smoothAcuteAngles)
            {
                EditorState.CurrentSpline.SetControlPointMode(EditorState.CurrentSpline.PointsCount - 1, BezierControlPointMode.Aligned);
            }

            EditorState.CurrentSpline.AppendCurve(p1, p2, p3, BezierControlPointMode.Free, false);
        }
        private void VisualizeDrawCurveModeCurve()
        {
            var p0 = newCurvePoints[0];
            var p3 = newCurvePoints[3];

            if (Vector3.Distance(p0, p3) < EditorState.DrawCurveSegmentLength * DrawCurveMinLengthToVisualize)
            {
                return;
            }

            BezierUtils.GetInverseControlPoints(p0, p3, newCurvePoints[1], newCurvePoints[2], EditorState.DrawCurveFirstPointHook, EditorState.DrawCurveSecondPointHook, out var p1, out var p2);

            p0 = handleTransform.TransformPoint(p0);
            p1 = handleTransform.TransformPoint(p1);
            p2 = handleTransform.TransformPoint(p2);
            p3 = handleTransform.TransformPoint(p3);

            Handles.DrawBezier(p0, p3, p1, p2, EditorSettings.DrawerModeCurveColor, null, EditorSettings.SplineWidth * 1.5f);

            if (EditorState.DrawPoints)
            {
                if (firstControlPointSet)
                {
                    var f    = handleTransform.TransformPoint(newCurvePoints[1]);
                    var size = EditorSettings.ScaleDrawerHandleOnScreen ? HandleUtility.GetHandleSize(f) : 1f;
                    Handles.color = EditorSettings.DrawModePointColor;
                    Handles.CubeHandleCap(0, f, Quaternion.identity, size * EditorSettings.MainPointSize, EventType.Repaint);
                }

                if (secondControlPointSet)
                {
                    var g    = handleTransform.TransformPoint(newCurvePoints[2]);
                    var size = EditorSettings.ScaleDrawerHandleOnScreen ? HandleUtility.GetHandleSize(g) : 1f;
                    Handles.color = EditorSettings.DrawModePointColor;
                    Handles.CubeHandleCap(0, g, Quaternion.identity, size * EditorSettings.MainPointSize, EventType.Repaint);
                }
            }
        }