void Spline()
    {
        var centerStyle = new GUIStyle(GUI.skin.label)
        {
            alignment = TextAnchor.MiddleCenter, fontStyle = FontStyle.Bold, fontSize = 18
        };


        EditorGUILayout.BeginVertical(EditorStyles.helpBox);
        EditorGUILayout.LabelField("Spline", centerStyle, GUILayout.ExpandWidth(true));
        centerStyle = new GUIStyle(GUI.skin.label)
        {
            alignment = TextAnchor.MiddleLeft, fontStyle = FontStyle.Bold
        };
        EditorGUILayout.Space();

        EditorGUILayout.BeginHorizontal();


        if (GUILayout.Button("Clear"))
        {
            SceneViewDisplay.Spline_Clear(SPData);
            FocusSceneView();
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.LabelField("Actions:", centerStyle, GUILayout.ExpandWidth(true));

        EditorGUILayout.BeginHorizontal();

        if (GUILayout.Button("Reverse"))
        {
            SceneViewDisplay.Spline_Reverse(SPData);
            FocusSceneView();
        }


        if (SPData.Close)
        {
            if (GUILayout.Button("Open"))
            {
                SceneViewDisplay.Spline_Open(SPData);
                FocusSceneView();
            }
        }
        else
        {
            if (GUILayout.Button("Close"))
            {
                SceneViewDisplay.Spline_Close(SPData);
                FocusSceneView();
            }
        }

        EditorGUILayout.EndHorizontal();
        EditorGUILayout.EndVertical();
    }
    protected virtual void OnSceneGUI()
    {
        Selection.activeGameObject = SPData.SplinePlus.gameObject;

        if (SPData.Projection.ContinuosUpdate == Switch.On)
        {
            SplineCreationClass.ProjectSpline(SPData);
        }

        SceneViewDisplay.Display(SPData);
        Shortcuts();
    }
        public static bool Display(this SceneViewDisplay display, bool isMaximized)
        {
            switch (display)
            {
            case SceneViewDisplay.Never: return(false);

            case SceneViewDisplay.Always: return(true);

            case SceneViewDisplay.FullscreenOnly: return(isMaximized);

            default: throw display.Unexpected();
            }
        }
    void Node()
    {
        var selectedNode = SPData.Node_Selected();
        var centerStyle  = new GUIStyle(GUI.skin.label)
        {
            alignment = TextAnchor.MiddleCenter, fontStyle = FontStyle.Bold, fontSize = 18
        };

        if (selectedNode == null)
        {
            EditorGUILayout.LabelField("No Node Selected!", centerStyle, GUILayout.ExpandWidth(true));
            return;
        }
        EditorGUILayout.BeginVertical(EditorStyles.helpBox);

        EditorGUILayout.LabelField("Node", centerStyle, GUILayout.ExpandWidth(true));
        centerStyle = new GUIStyle(GUI.skin.label)
        {
            alignment = TextAnchor.MiddleLeft, fontStyle = FontStyle.Bold
        };
        EditorGUILayout.Space();

        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Add"))
        {
            SceneViewDisplay.Node_Add(SPData);
            FocusSceneView();
        }

        if (GUILayout.Button("Remove"))
        {
            SceneViewDisplay.Node_Delete(SPData);
            FocusSceneView();
        }
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.LabelField("Pop Ups:", centerStyle, GUILayout.ExpandWidth(true));

        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Normal"))
        {
            SceneViewDisplay.Node_Normal(SPData);
            FocusSceneView();
        }

        if (GUILayout.Button("Coordinates"))
        {
            SceneViewDisplay.Node_Coordinates(SPData);
            FocusSceneView();
        }
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.LabelField("Shape:", centerStyle, GUILayout.ExpandWidth(true));

        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Flip Handles"))
        {
            SceneViewDisplay.Node_FlipHandles(SPData);
            FocusSceneView();
        }

        if (GUILayout.Button("Hide/Unhide Handles"))
        {
            SceneViewDisplay.Node_Hide_Unhide_Handles(SPData);
            FocusSceneView();
        }
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.BeginHorizontal();
        EditorGUI.BeginChangeCheck();
        var newNodeType = EditorGUILayout.EnumPopup("Node Type", selectedNode._Type);

        if (EditorGUI.EndChangeCheck())
        {
            selectedNode._Type = (NodeType)newNodeType;
            switch (newNodeType)
            {
            case NodeType.Smooth:
                SceneViewDisplay.Node_Type_Smooth(SPData);
                break;

            case NodeType.Free:
                SceneViewDisplay.Node_Type_Free(SPData);
                break;

            case NodeType.Broken:
                SceneViewDisplay.Node_Type_Broken(SPData);
                break;
            }

            FocusSceneView();
        }

        EditorGUILayout.EndHorizontal();
        EditorGUILayout.EndVertical();
    }