Q: How can I clear a linerenderer from any points/lines that have beem drawn and return the points and lines back using a flag? using UnityEngine;
using System.Collections;

[ExecuteAlways]

[RequireComponent(typeof(LineRenderer))]
public class DrawRadiusAroundTurret : MonoBehaviour
{
    [Range(1, 50)]
    public int segments = 50;
    [Range(1, 5)]
    public float xRadius = 5;
    [Range(1, 5)]
    public float yRadius = 5;
    [Range(0.1f, 5f)]
    public float width = 0.1f;
    LineRenderer line;
    public bool controlBothXradiusYradius = false;
    public bool draw = true;

    void Start()
    {
        line = gameObject.GetComponent<LineRenderer>();

        line.enabled = true;
        line.positionCount = segments + 1;
        line.widthMultiplier = width;
        line.useWorldSpace = false;
        CreatePoints();
    }

    private void Update()
    {
        
    }

    public void CreatePoints()
    {
        line.widthMultiplier = width;

        float x;
        float y;
        float z;

        float angle = 20f;

        for (int i = 0; i < (segments + 1); i++)
        {
            x = Mathf.Sin(Mathf.Deg2Rad * angle) * xRadius;
            y = Mathf.Cos(Mathf.Deg2Rad * angle) * yRadius;

            line.SetPosition(i, new Vector3(x, 0f, y));

            angle += (380f / segments);
        }
    }

#if UNITY_EDITOR
    float prevXRadius, prevYRadius;
    int prevSegments;
    float prevWidth;

    void OnValidate()
    {
        // Can't set up our line if the user hasn't connected it yet.
        if (line == null)
            return;

        if (draw == false)
        {
            line.positionCount = 0;
        }
        else
        {
            // If any values have changed, update our points.
            if (xRadius != prevXRadius || yRadius != prevYRadius || segments != prevSegments || width != prevWidth)
            {
                CreatePoints();

                // Cache our most recently used values.
                prevXRadius = xRadius;
                prevYRadius = yRadius;
                prevSegments = segments;
                prevWidth = width;
            }

            if (controlBothXradiusYradius == true)
            {
                yRadius = xRadius;
            }
        }
    }
#endif
}

I'm using the flag draw and if it's false its like cleaning clear the linerenderer. The problem is if I set back the draw flag back to true it will not draw anything and I want it to draw back what have been drawn before setting the flag to false.
The false make it likes clearing but when it's true and it's drawing back what there was.

A: Why not simply leave the positions untouched but disable/enable the component:
using UnityEngine;
using System.Collections;

[ExecuteAlways]
[RequireComponent(typeof(LineRenderer))]
public class DrawRadiusAroundTurret : MonoBehaviour
{
    [Range(1, 50)] public int segments = 50;
    [Range(1, 5)] public float xRadius = 5;
    [Range(1, 5)] public float yRadius = 5;
    [Range(0.1f, 5f)] public float width = 0.1f;
    public bool controlBothXradiusYradius = false;
    public bool draw = true;

    [SerilaizeField] private LineRenderer line;

    private void Start()
    {
        if(!line) line = GetComponent<LineRenderer>();

        CreatePoints();
    }

    //private void Update()
    //{
    //    
    //}

    public void CreatePoints()
    {
        line.enabled = true;
        line.widthMultiplier = width;
        line.useWorldSpace = false;
        line.widthMultiplier = width;
        line.positionCount = segments + 1;

        float x;
        float y;
        float z; // ?

        var angle = 20f;
        var points = new Vector3[segments + 1];
        for (int i = 0; i < segments + 1; i++)
        {
            x = Mathf.Sin(Mathf.Deg2Rad * angle) * xRadius;
            y = Mathf.Cos(Mathf.Deg2Rad * angle) * yRadius;

            points[i] = new Vector3(x, 0f, y);

            angle += (380f / segments);
        }

        // it's way more efficient to do this in one go!
        line.SetPositions(points);
    }

#if UNITY_EDITOR
    private float prevXRadius, prevYRadius;
    private int prevSegments;
    private float prevWidth;

    private void OnValidate()
    {
        // Can't set up our line if the user hasn't connected it yet.
        if(!line) line = GetComponent<LineRenderer>();
        if(!line) return;

        if(!draw)
        {
            // instead simply disable the component
            line.enabled = false;
        }
        else
        {
            // Otherwise re-enable the component
            // This will simply re-use the previously created points
            line.enabled = true;

            if (xRadius != prevXRadius || yRadius != prevYRadius || segments != prevSegments || width != prevWidth)
            {
                CreatePoints();

                // Cache our most recently used values.
                prevXRadius = xRadius;
                prevYRadius = yRadius;
                prevSegments = segments;
                prevWidth = width;
            }

            if (controlBothXradiusYradius)
            {
                yRadius = xRadius;
            }
        }
    }
#endif
}

