public void Disable()
    {
        // Debug.Log("disable");
        if (m_enabled)
        {
            m_enabled = false;
            // SetCurrentTool(Tool.PAINT);
            if (m_blockMap == null)
            {
                return;
            }
            UpdateVisibleLayers(true);
            Renderer[] renderers = m_blockMap.GetComponentsInChildren <Renderer>(true);
            foreach (Renderer renderer in renderers)
            {
                EditorUtility.SetSelectedRenderState(renderer, EditorSelectedRenderState.Wireframe);
//                EditorUtility.SetSelectedWireframeHidden(renderer, false);
            }
            m_prefabNavigation.OnFolderChanged -= LoadCurrentRandomBrushFlags;

            m_blockMap.m_prefab  = m_currentPrefab;
            m_blockMap.m_bLocked = false;

            CalculateBounds();
            RemoveEmptyLayers();
        }
    }
    public void Enable(GNBlockMap blockMap)
    {
        if (!m_enabled)
        {
            m_prefabNavigation = new GNPrefabNavigation();
            if (m_currentPrefab != null)
            {
                m_prefabNavigation.SetCurrentPrefabPathFromPrefab(m_currentPrefab);
            }

            m_blockMap           = blockMap;
            m_blockMap.m_bLocked = true;
            // Undo.RecordObject(m_blockMap, "Scene Save Enforcement");
            // EditorUtility.SetDirty(m_blockMap);
            // UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty();
            m_enabled = true;
            UpdateCurrentCell();
            UpdateVisibleLayers(false);
            ResetSelectedBox();

            Renderer[] renderers = blockMap.GetComponentsInChildren <Renderer>(true);
            foreach (Renderer renderer in renderers)
            {
                EditorUtility.SetSelectedRenderState(renderer, EditorSelectedRenderState.Hidden);
//                EditorUtility.SetSelectedWireframeHidden(renderer, true);
            }
            m_prefabNavigation.OnFolderChanged += LoadCurrentRandomBrushFlags;

            MoveChildrenToCorrectTargetLayers();

            EditorUtility.SetDirty(m_blockMap);

            if (!m_currentPrefab)
            {
                SelectPrefab(m_blockMap.m_prefab);
                m_prefabNavigation.SetCurrentPrefabPathFromPrefab(m_currentPrefab);
            }
        }
    }