/// <summary> /// Moves the selected vertices. /// </summary> /// <param name="endMovement">Whether to end vertex movement.</param> /// <param name="distChange">The change in distance to move selected vertices.</param> public void MoveVertices(bool endMovement, float distChange) { if (_moveVertex) { // Movement is done; store page history if (endMovement) { if (_pageCopy != null) { StoreGenericPage(_pageCopy, "Vertex Movement"); _pageCopy.Dispose(); _pageCopy = null; } } else // Vertices are still being moved { if (_pageCopy == null) { _pageCopy = new TerrainPage(_page); } _page.MoveSelectedVertices(_softSelection, distChange, _falloff, _softDistanceSquared); } } }
/// <summary> /// Loads the specified TerrainPage and refreshes vertex/index buffers. /// </summary> /// <param name="page">The TerrainPage to load.</param> public void LoadTerrain(TerrainPage page) { StoreLastPage(page, "Load New Terrain"); _page.TerrainPatch.RefreshBuffers = true; _buffers.RefreshIndexBuffer_Page(); _buffers.RefreshIndexBuffer_Vertices(); }
/// <summary> /// Loads XML data from the chosen file in the OpenFileDialog. /// </summary> private void LoadXML() { if (_dlgOpen.FileName != null) { try { XmlNodeList xmlNodes; StreamReader reader = new StreamReader(_dlgOpen.FileName); _xmlDoc.Load(reader.BaseStream); xmlNodes = _xmlDoc.GetElementsByTagName("TerrainPage"); // Load the TerrainPage(s) _page = new TerrainPage(); LoadTerrainPage(xmlNodes.Item(0)); reader.Close(); } catch (Exception e) { string message = "The XML file is not properly formed!\n\n"; message += "Source: " + e.Source + "\n"; message += "Error: " + e.Message; MessageBox.Show(null, message, "Error Running Application", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
/// <summary> /// Scales the currently selected texture by the indicated distance. /// </summary> public void ScaleTexture() { if (_pageCopy == null) { _pageCopy = new TerrainPage(_page); } _page.TerrainPatch.SetTextureCoordinates(); }
/// <summary> /// Initialize the data of the base element. /// </summary> public virtual void InitializeBase() { _owner = null; _page = null; _success = false; _modifiedTextures = false; _textures = new ArrayList(); _desiredData = new ArrayList(); _receivedData = new ArrayList(); }
public void StoreGenericPage(TerrainPage page, string action) { if (page != null) { _history.PushPage(new TerrainPage(page), action); } else { _history.PushPage(null, action); } _redoHistory.ClearHistory(); }
/// <summary> /// Pops the last added TerrainPage from the history stack. /// </summary> /// <returns>The last added TerrainPage.</returns> public TerrainPage PopPage() { TerrainPage page = null; if (_pageHistory.Count > 0) { // Return the latest pushed TerrainPage page = ( TerrainPage )_pageHistory.Pop(); _pageAction.Pop(); } return(page); }
public void StoreLastPage(TerrainPage page, string action) { if (_page != null) { _history.PushPage(_page, action); } else { _history.PushPage(null, action); } _redoHistory.ClearHistory(); _page = page; }
/// <summary> /// Disposes of all data being used. /// </summary> public void Dispose() { // Clear terrain pages if (_page != null) { _page.Dispose(); _page = null; } if (_pageCopy != null) { _pageCopy.Dispose(); _pageCopy = null; } _buffers.ClearBuffers(); // Clear history _history.ClearHistory(); _redoHistory.ClearHistory(); // Clear plug-ins foreach (PlugIn p in _plugins.VertexPlugIns) { p.Dispose(); } foreach (PlugIn p in _plugins.TexturePlugIns) { p.Dispose(); } foreach (PlugIn p in _plugins.FileImportPlugIns) { p.Dispose(); } foreach (PlugIn p in _plugins.FileExportPlugIns) { p.Dispose(); } _plugins.VertexPlugIns.Clear(); _plugins.TexturePlugIns.Clear(); _plugins.FileImportPlugIns.Clear(); _plugins.FileExportPlugIns.Clear(); }
/// <summary> /// Pushes the specified TerrainPage onto the history stack. If the maximum /// stack size has been reached, only the latest additions are kept. /// </summary> /// <param name="page">The TerrainPage to push onto the history stack.</param> /// <param name="action">The description for the action causing the TerrainPage change.</param> public void PushPage(TerrainPage page, string action) { if (_pageHistory.Count < _maxPages) { // Push the latest TerrainPage onto the history stack _pageHistory.Push(page); _pageAction.Push(action); } else { // Maximum stack size has been reached. // Only store the latest TerrainPages in the history stack. CopyPageHistory(_maxPages - 1); _pageHistory.Push(page); _pageAction.Push(action); } }
/// <summary> /// Creates a TerrainPatch. /// </summary> /// <param name="rows">The number of rows in the TerrainPatch.</param> /// <param name="columns">The number of columns in the TerrainPatch.</param> /// <param name="height">The total height of the TerrainPatch.</param> /// <param name="width">The total width of the TerrainPatch.</param> /// <param name="name">The name of the TerrainPage.</param> /// <returns>The created TerrainPage.</returns> public TerrainPage CreateTerrain(int rows, int columns, float height, float width, string name) { if (_page != null) { _page.Dispose(); } else { _page = new TerrainPage(); } _page.TerrainPatch.CreatePatch(rows, columns, height, width); _page.TerrainPatch.RefreshBuffers = true; _page.Name = name; _buffers.RefreshIndexBuffer_Page(); _buffers.RefreshIndexBuffer_Vertices(); return(_page); }
/// <summary> /// Updates the number of rows and columns in a TerrainPatch by creating /// a new version of the TerrainPatch. /// </summary> /// <param name="rows">Number of rows in the new TerrainPatch.</param> /// <param name="columns">Number of columns in the new TerrainPatch.</param> public void UpdateTerrainSize(int rows, int columns) { float height = _page.TerrainPatch.Height; float width = _page.TerrainPatch.Width; StoreCurrentPage("Update Terrain Size"); if (_page != null) { _page.Dispose(); } else { _page = new TerrainPage(); } _page.TerrainPatch.CreatePatch(rows, columns, height, width); RefreshIndexBuffer(); _page.TerrainPatch.RefreshBuffers = true; }
/// <summary> /// Restores the last TerrainPage pushed onto the "redo" history stack. /// </summary> public void RedoLastPageAction() { if (_redoHistory.PageHistoryCount > 0) { if (_page != null) { _history.PushPage(new TerrainPage(_page), _redoHistory.LastPageAction()); } else { _history.PushPage(null, _redoHistory.LastPageAction()); } _page = _redoHistory.PopPage(); RefreshIndexBuffer(); if (_page != null) { _page.TerrainPatch.RefreshBuffers = true; } } }
public void SetTerrain(TerrainPage page) { _page = page; }
/// <summary> /// Sets the TerrainPage used by the plug-in. /// </summary> /// <param name="page">The TerrainPage to modify.</param> public virtual void SetPage(TerrainPage page) { _page = page; }