private void button_Apply_Click(object sender, EventArgs e) { if (!_bHasApplyButton) { return; } progress.Percentage = 0.0f; progressBar.Visible = true; TerrainShape terrain = TerrainEditor.CurrentTerrain; // in case this is a heightmap filter... IHeightmapFilter hmFilter = _filter as IHeightmapFilter; if (hmFilter != null) { if (!hmFilter.OnStart(terrain.Heightmap, x1, y1, x2, y2)) { string err = _filter.LastError; string msg = "An error occurred while running this action."; if (!string.IsNullOrEmpty(err)) { msg += "\n\nDetailed message: " + err; } EditorManager.ShowMessageBox(msg, "Failed", MessageBoxButtons.OK, MessageBoxIcon.Error); hmFilter.OnFinish(); return; } terrain.EngineTerrain.ApplyHeightmapFilter(hmFilter, progress); hmFilter.OnFinish(); // trigger the action that has the backed-up height values EditorManager.Actions.Add(new TerrainChangedAction(terrain.EngineTerrain, "Import Heightmap : " + _filter.Name)); } // ...or decoration filter IDecorationFilter decoFilter = _filter as IDecorationFilter; if (decoFilter != null) { if (!decoFilter.OnStart()) { string err = decoFilter.LastError; string msg = "An error occurred while running this action."; if (!string.IsNullOrEmpty(err)) { msg += "\n\nDetailed message: " + err; } EditorManager.ShowMessageBox(msg, "Failed", MessageBoxButtons.OK, MessageBoxIcon.Error); decoFilter.OnFinish(); return; } terrain.EngineTerrain.ApplyDecorationFilter(decoFilter, progress); EditorManager.Actions.Add(new TerrainChangedAction(terrain.EngineTerrain, "Decoration : " + _filter.Name)); decoFilter.OnFinish(); } }
/// <summary> /// Static function to open the filter dialog with additional sample range /// </summary> /// <param name="filter"></param> /// <param name="x1"></param> /// <param name="y1"></param> /// <param name="x2"></param> /// <param name="y2"></param> /// <returns></returns> public static bool RunFilter(IHeightmapFilter filter, int x1, int y1, int x2, int y2) { if (filter == null || TerrainEditor.CurrentTerrain == null || TerrainEditor.CurrentTerrain.EngineTerrain == null) { return(false); } ApplyHeightmapFilterDlg dlg = new ApplyHeightmapFilterDlg(); dlg.Filter = filter; dlg.x1 = x1; dlg.y1 = y1; dlg.x2 = x2; dlg.y2 = y2; return(dlg.ShowDialog() == DialogResult.OK); }
/// <summary> /// Static function to open the filter dialog /// </summary> /// <param name="filter"></param> /// <returns></returns> public static bool RunFilter(IHeightmapFilter filter) { return(RunFilter(filter, 0, 0, -1, -1)); }