/// <summary>
        /// A tree view item has been selected.
        /// </summary>
        private void SceneTreeView_AfterSelect(object sender, TreeViewEventArgs e)
        {
            UpdatePropertyGrid();

            // Get selected proxy
            BaseEditorProxy proxy = SceneTreeView.SelectedNode.Tag as BaseEditorProxy;

            // Enable/disable terrain editor
            if (proxy is QuadTerrainProxy)
            {
                TerrainEditorPanel.Visible = true;
                terrainEditMode            = true;
                currentTerrainProxy        = (QuadTerrainProxy)proxy;
                terrainEditor1.SetTerrain(currentTerrainProxy.Component, sceneDocument);
                (proxy as QuadTerrainProxy).Component.EnablePicking = true;
            }
            else
            {
                TerrainEditorPanel.Visible = false;
                terrainEditMode            = false;
                if (currentTerrainProxy != null)
                {
                    currentTerrainProxy.Component.EnablePicking = false;
                    currentTerrainProxy = null;
                    terrainEditor1.ClearTerrain();
                }
            }
        }
        /// <summary>
        /// Called when a new terrain is requested.
        /// </summary>
        private void AddQuadTerrainMenuItem_Click(object sender, EventArgs e)
        {
            // Get selected entity
            EntityProxy entity = GetSelectedEntity();

            if (entity == null)
            {
                return;
            }

            // Add quad terrain
            QuadTerrainProxy terrainProxy = AddQuadTerrainComponentProxy(entity);
        }
        /// <summary>
        /// Creates a new quad terrain proxy.
        /// </summary>
        private QuadTerrainProxy AddQuadTerrainComponentProxy(EntityProxy parent)
        {
            // Create new quad terrain
            QuadTerrainComponent quadTerrain = new QuadTerrainComponent(worldControl.Core, QuadTerrainComponent.TerrainSize.Small);

            // Create new quad terrain proxy
            QuadTerrainProxy quadTerrainProxy = new QuadTerrainProxy(sceneDocument, parent, quadTerrain);

            // Add new quad terrain proxy to tree view
            TreeNode quadTerrainNode = AddTreeNode(parent.TreeNode, quadTerrainProxy);

            // Assign tree node to proxy
            quadTerrainProxy.TreeNode = quadTerrainNode;

            return(quadTerrainProxy);
        }
        /// <summary>
        /// Builds a default scene document.
        /// </summary>
        private void CreateDefaultDocument()
        {
            // Lock stacks
            sceneDocument.LockUndoRedo = true;

            // Set camera position
            sceneDocument.EditorScene.Camera.Position = new Vector3(0, 2, 50);
            sceneDocument.EditorScene.Camera.Update();

            // Add lighting rig
            AddDefaultLightingRig();

            // Create entities
            EntityProxy entityProxy = AddEntityProxy();

            // Add sphere primitive component
            SphereProxy sphereProxy = AddSphereProxy(entityProxy);

            sphereProxy.Position = new Vector3(0, 0.5f, 0);

            // Add model component
            DaggerfallModelProxy modelProxy = AddModelProxy(entityProxy, 456);

            // Add quad terrain component
            QuadTerrainProxy terrainProxy = AddQuadTerrainComponentProxy(entityProxy);

            terrainProxy.Position       = new Vector3(-1024f, 0, -1024f);
            terrainProxy.Scale          = new Vector3(4, 0.16f, 4);
            terrainProxy.TextureRepeat  = 100f;
            terrainProxy.NormalStrength = 0.01f;

            // Expand nodes
            documentProxy.TreeNode.Expand();
            entityProxy.TreeNode.Expand();

            // Unlock stacks
            sceneDocument.LockUndoRedo = false;
        }