static void CreateBezPatch()
    {
        Vector3 pos = Vector3.zero;

        if (UnityEditor.SceneView.lastActiveSceneView != null)
        {
            pos = UnityEditor.SceneView.lastActiveSceneView.pivot;
        }

        GameObject go = new GameObject("Bez Patch");

        MeshFilter mf = go.AddComponent <MeshFilter>();

        mf.sharedMesh = new Mesh();
        MeshRenderer mr = go.AddComponent <MeshRenderer>();

        Material[] mats = new Material[1];

        mr.sharedMaterials = mats;
        MegaBezPatch pm = go.AddComponent <MegaBezPatch>();

        pm.mesh = mf.sharedMesh;
        go.transform.position  = pos;
        Selection.activeObject = go;
        pm.Rebuild();

        // Add the first warp
    }
    public override void OnInspectorGUI()
    {
        MegaBezPatch mod = (MegaBezPatch)target;

#if !UNITY_5 && !UNITY_2017 && !UNITY_2018 && !UNITY_2019 && !UNITY_2020
        EditorGUIUtility.LookLikeControls();
#endif

        float Width = EditorGUILayout.FloatField("Width", mod.Width);
        if (Width != mod.Width)
        {
            mod.AdjustLattice(Width, mod.Height);
        }

        float Height = EditorGUILayout.FloatField("Height", mod.Height);
        if (Height != mod.Height)
        {
            mod.AdjustLattice(mod.Width, Height);
        }
        mod.WidthSegs  = EditorGUILayout.IntField("Width Segs", mod.WidthSegs);
        mod.HeightSegs = EditorGUILayout.IntField("Height Segs", mod.HeightSegs);

        mod.recalcBounds = EditorGUILayout.Toggle("Recalc Bounds", mod.recalcBounds);
        //mod.recalcNormals = EditorGUILayout.Toggle("Recalc Normals", mod.recalcNormals);
        mod.recalcTangents = EditorGUILayout.Toggle("Recalc Tangents", mod.recalcTangents);

        mod.GenUVs   = EditorGUILayout.BeginToggleGroup("Gen UVs", mod.GenUVs);
        mod.UVOffset = EditorGUILayout.Vector2Field("UV Offset", mod.UVOffset);
        mod.UVScale  = EditorGUILayout.Vector2Field("UV Scale", mod.UVScale);
        EditorGUILayout.EndToggleGroup();

        mod.showgizmos      = EditorGUILayout.Toggle("Show Gizmos", mod.showgizmos);
        mod.showlabels      = EditorGUILayout.Toggle("Show Labels", mod.showlabels);
        mod.latticecol      = EditorGUILayout.ColorField("Lattice Color", mod.latticecol);
        mod.positionhandles = EditorGUILayout.Toggle("Position Handles", mod.positionhandles);
        mod.handlesize      = EditorGUILayout.FloatField("Handle Size", mod.handlesize);
        mod.snap            = EditorGUILayout.Vector2Field("Snap", mod.snap);
        mod.align           = EditorGUILayout.Toggle("Align", mod.align);
        //mod.scale = EditorGUILayout.FloatField("Scale", mod.scale);

        mod.showlatticepoints = EditorGUILayout.Foldout(mod.showlatticepoints, "Lattice Points");

        mod.switchtime   = EditorGUILayout.FloatField("Switch Time", mod.switchtime);
        mod.animateWarps = EditorGUILayout.Toggle("Animate Warps", mod.animateWarps);

        if (mod.showlatticepoints)
        {
            mod.p11 = EditorGUILayout.Vector2Field("p11", mod.p11);
            mod.p12 = EditorGUILayout.Vector2Field("p12", mod.p12);
            mod.p13 = EditorGUILayout.Vector2Field("p13", mod.p13);
            mod.p14 = EditorGUILayout.Vector2Field("p14", mod.p14);

            mod.p21 = EditorGUILayout.Vector2Field("p21", mod.p21);
            mod.p22 = EditorGUILayout.Vector2Field("p22", mod.p22);
            mod.p23 = EditorGUILayout.Vector2Field("p23", mod.p23);
            mod.p24 = EditorGUILayout.Vector2Field("p24", mod.p24);

            mod.p31 = EditorGUILayout.Vector2Field("p31", mod.p31);
            mod.p32 = EditorGUILayout.Vector2Field("p32", mod.p32);
            mod.p33 = EditorGUILayout.Vector2Field("p33", mod.p33);
            mod.p34 = EditorGUILayout.Vector2Field("p34", mod.p34);

            mod.p41 = EditorGUILayout.Vector2Field("p41", mod.p41);
            mod.p42 = EditorGUILayout.Vector2Field("p42", mod.p42);
            mod.p43 = EditorGUILayout.Vector2Field("p43", mod.p43);
            mod.p44 = EditorGUILayout.Vector2Field("p44", mod.p44);
        }

        mod.destwarp = EditorGUILayout.IntField("Dest Warp", mod.destwarp);
        int currentwarp = EditorGUILayout.IntSlider("Warp", mod.currentwarp, 0, mod.warps.Count - 1);
        if (currentwarp != mod.currentwarp)
        {
            mod.SetWarp(currentwarp);
        }

        //mod.useWarpValue = EditorGUILayout.BeginToggleGroup("Use Warp Value", mod.useWarpValue);
        //mod.warpValue = EditorGUILayout.Slider("Warp Value", mod.warpValue, 0.0f, (float)(mod.warps.Count - 1));
        //EditorGUILayout.EndToggleGroup();

        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Add Warp"))
        {
            mod.AddWarp();
        }

        if (GUILayout.Button("Reset"))
        {
            mod.Reset();
        }

        EditorGUILayout.EndHorizontal();

        for (int i = 0; i < mod.warps.Count; i++)
        {
            EditorGUILayout.BeginHorizontal();
            mod.warps[i].name = EditorGUILayout.TextField("", mod.warps[i].name);
            //mod.meshes[i].Enabled = EditorGUILayout.Toggle("", mod.meshes[i].Enabled, GUILayout.MaxWidth(20));

            if (GUILayout.Button("Set", GUILayout.MaxWidth(50)))
            {
                mod.SetWarp(i);
                EditorUtility.SetDirty(mod);
            }

            if (GUILayout.Button("Update", GUILayout.MaxWidth(50)))
            {
                mod.UpdateWarp(i);
            }

            if (GUILayout.Button("Delete", GUILayout.MaxWidth(50)))
            {
                mod.warps.RemoveAt(i);
            }

            EditorGUILayout.EndHorizontal();
        }

        if (GUI.changed)                //rebuild )
        {
            mod.Rebuild();
            EditorUtility.SetDirty(target);
        }
    }