/** @file TerrainEditPanel.cs
@brief
* Copyright (c) 2007,第九城市游戏研发中心
* All rights reserved.
*
* 当前版本:
* 作 者:zhangxu
* 完成日期:2007-11-6
*
* 取代版本:
* 作 者:
* 完成日期:
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using Emergent.Gamebryo.SceneDesigner.Framework;
using Emergent.Gamebryo.SceneDesigner.PluginAPI;
using Emergent.Gamebryo.SceneDesigner.PluginAPI.StandardServices;
using Emergent.Gamebryo.SceneDesigner.StdPluginsCs.Dialogs;
namespace Emergent.Gamebryo.SceneDesigner.StdPluginsCs.Panels
{
public partial class TerrainEditPanel : Form
{
// 使用 MTerrain 的 EPaintType 枚举
// 绘制模式
//public enum PaintMode
//{
// PM_TERRAIN_VERTEX = 0, // 地形顶点
// PM_TERRAIN_MATERIAL, // 地表纹理
// PM_TERRAIN_PROPERTY, // 地表属性
// PM_WATER_SURFACE, // 水体表面生成
// PM_GRID_AREA, // 以 grid 为单位的区域。目前用于在区域中刷模型
// PM_MAX,
//}
public TerrainEditPanel()
{
InitializeComponent();
SettingsService.RegisterSettingsObject(
"TerrainEditPanel.Raise", true, SettingsCategory.PerUser);
UICommandService.BindCommands(this);
this.m_textBoxinnerradius.Text = "0";
this.m_textBoxouterradius.Text = "0.1";
this.m_textBoxheight.Text = "1";
this.m_trackHeight.Minimum = -100;
this.m_trackHeight.Maximum = 255;
this.m_trackBarInnerRadius.Minimum = 0;
this.m_trackBarInnerRadius.Maximum = (int)m_MaxRadius;
this.m_trackBarOuterRadius.Minimum = 0;
this.m_trackBarOuterRadius.Maximum = (int)m_MaxRadius;
this.m_trackBarOuterRadius.Value = 1;
this.m_selectedMaterial = "";
this.m_lastSelectedMaterial = "";
this.m_previewImage = "";
this.m_lastPreviewImage = "";
this.m_lastSelectedHeight = 0.0f;
this.m_lastSelectedGradual = 1.0f;
this.m_fInnerRadius = 0.0f;
this.m_fOuterRadius = 0.1f;
this.m_fValue = 0.0f;
this.m_iCurrentEditChunk = 0;
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
// 从 CSceneDesignerConfig 中获取 terrain surface property 列表
m_TerrSurPropList = MFramework.Instance.Scene.GetTerrainSurfacePropertyList();
// 刷新 combobox
RefreshTerrSurPropComboBox();
//m_PanelShadowTools = new ShadowPanel();
}
///
/// 返回内半径
///
/// 笔刷内半径值
public int get_InnerRadius()
{
return this.m_trackBarInnerRadius.Value;
}
///
/// 返回外半径
///
/// 笔刷外半径值
public int get_OuterRadius()
{
return this.m_trackBarOuterRadius.Value;
}
///
/// 返回高度
///
/// 笔刷高度值
public int get_Height()
{
return this.m_trackHeight.Value;
}
#region const data
///
/// 最大半径值
///
private const float m_MaxRadius = 200.0f;
///
/// 预览最大半径
///
private const float m_PreviewMax = 90.0f;
///
/// 预览图大小
///
private const int m_previewpicSize = 80;
///
/// 1除以该变量即为半径变动最小单位
///
private const float m_RadiusDivider = 10.0f;
private const float m_GradualDivider = 100.0f;
private const float m_HeightDivider = 1.0f;
private float m_fInnerRadius;
private float m_fOuterRadius;
private float m_fValue;
#endregion
#region Private Data
private ISelectionService m_selectionService;
private ISettingsService m_settingsService;
private IUICommandService m_uiCommandService;
private ICommandPanelService m_commandPanelService;
private ICommandService m_commandService;
private string m_selectedMaterial;
private string m_lastSelectedMaterial;
private string m_previewImage; // 用于预览的 bmp 纹理
private string m_lastPreviewImage;
private float m_lastSelectedHeight;
private float m_lastSelectedGradual;
#endregion
private MFramework FW
{
get
{ return MFramework.Instance; }
}
private ISettingsService SettingsService
{
get
{
if (m_settingsService == null)
{
ServiceProvider sp = ServiceProvider.Instance;
m_settingsService =
sp.GetService(typeof(ISettingsService))
as ISettingsService;
}
return m_settingsService;
}
}
private IUICommandService UICommandService
{
get
{
if (m_uiCommandService == null)
{
ServiceProvider sp = ServiceProvider.Instance;
m_uiCommandService =
sp.GetService(typeof(IUICommandService))
as IUICommandService;
}
return m_uiCommandService;
}
}
[UICommandHandler("TerrainBrushEnlarge")]
private void OnTerrainBrushEnlarge(object sender, EventArgs args)
{
if (m_trackBarOuterRadius.Value < m_trackBarInnerRadius.Value)
{
m_trackBarInnerRadius.Value = m_trackBarOuterRadius.Value;
}
this.m_trackBarOuterRadius.Value += (int)(0.3 * m_RadiusDivider);
m_fInnerRadius = (float)this.m_trackBarInnerRadius.Value / m_RadiusDivider;
m_textBoxinnerradius.Text = m_fInnerRadius.ToString();
m_fOuterRadius = (float)this.m_trackBarOuterRadius.Value / m_RadiusDivider;
m_textBoxouterradius.Text = m_fOuterRadius.ToString();
SendSettings(m_PaintMode);
m_panelbrushpreview.Invalidate();
}
[UICommandHandler("TerrainBrushReduce")]
private void OnTerrainBrushReduce(object sender, EventArgs args)
{
if (m_trackBarOuterRadius.Value < m_trackBarInnerRadius.Value)
{
m_trackBarInnerRadius.Value = m_trackBarOuterRadius.Value;
}
this.m_trackBarOuterRadius.Value -= (int)(0.3 * m_RadiusDivider);
if (this.m_trackBarOuterRadius.Value / m_RadiusDivider < 0.1)
this.m_trackBarOuterRadius.Value = (int)(0.1 * m_RadiusDivider);
m_fInnerRadius = (float)this.m_trackBarInnerRadius.Value / m_RadiusDivider;
m_textBoxinnerradius.Text = m_fInnerRadius.ToString();
m_fOuterRadius = (float)this.m_trackBarOuterRadius.Value / m_RadiusDivider;
m_textBoxouterradius.Text = m_fOuterRadius.ToString();
SendSettings(m_PaintMode);
m_panelbrushpreview.Invalidate();
}
private ICommandPanelService CommandPanelService
{
get
{
if (m_commandPanelService == null)
{
ServiceProvider sp = ServiceProvider.Instance;
m_commandPanelService =
sp.GetService(typeof(ICommandPanelService))
as ICommandPanelService;
}
return m_commandPanelService;
}
}
private ICommandService CommandService
{
get
{
if (m_commandService == null)
{
ServiceProvider sp = ServiceProvider.Instance;
m_commandService =
sp.GetService(typeof(ICommandService))
as ICommandService;
}
return m_commandService;
}
}
#region Winform handlers
private Graphics m_Graphics;
private System.Drawing.Bitmap m_BrushBitmap;
///
/// 绘制预览图
///
private void ReDrawEllipse()
{
m_Graphics.Clear(SystemColors.Control);
GraphicsPath path = new GraphicsPath();///构造一个路径
int g_centerX = this.m_panelbrushpreview.Width / 2;
int g_centerY = this.m_panelbrushpreview.Height / 2;
float finner = (this.m_trackBarInnerRadius.Value / m_MaxRadius) * m_PreviewMax;
float fouter = (this.m_trackBarOuterRadius.Value / m_MaxRadius) * m_PreviewMax;
path.AddEllipse(g_centerX - fouter / 2, g_centerY - fouter / 2, fouter, fouter);
///使用路径构建一个画刷
///Position参数数组
float[] ff = { 0.0f, 1.0f, 1.0f };
///Factor参数数组
float[] fp = { 0.0f, 0.1f, 1.0f };///中间的0.1f为任意值,需要根据实际内外半径值之比进行修正
float fio = finner / fouter;
fp[1] = (1.0f - fio);///修正Position数据
///根据路径构建出路径渐变画刷
PathGradientBrush pthGrBrush = new PathGradientBrush(path);
pthGrBrush.CenterPoint = new Point(g_centerX, g_centerY);
pthGrBrush.CenterColor = Color.Black;///中心设为黑色
pthGrBrush.SurroundColors = new Color[] { Color.LightGray };
Blend blend = new Blend();
blend.Positions = fp;
blend.Factors = ff;
pthGrBrush.Blend = blend;
m_Graphics.FillEllipse(pthGrBrush, g_centerX - fouter / 2, g_centerY - fouter / 2, fouter, fouter);
pthGrBrush.Dispose();
path.Dispose();
}
private void TerrainEditPanel_Load(object sender, EventArgs e)
{
this.m_Graphics = this.m_panelbrushpreview.CreateGraphics();
}
#endregion
///
/// 消息发送函数
///
/// 消息类型
/// 消息值
private void m_trackBarinnerradius_Scroll(object sender, EventArgs e)
{
if (this.m_trackBarInnerRadius.Value > this.m_trackBarOuterRadius.Value)
{
this.m_trackBarOuterRadius.Value = this.m_trackBarInnerRadius.Value;
}
if (this.m_trackBarOuterRadius.Value / m_RadiusDivider < 0.1)
this.m_trackBarOuterRadius.Value = (int)(0.1 * m_RadiusDivider);
m_fInnerRadius = (float)this.m_trackBarInnerRadius.Value / m_RadiusDivider;
m_textBoxinnerradius.Text = m_fInnerRadius.ToString();
m_fOuterRadius = (float)this.m_trackBarOuterRadius.Value / m_RadiusDivider;
m_textBoxouterradius.Text = m_fOuterRadius.ToString();
SendSettings(m_PaintMode);
m_panelbrushpreview.Invalidate();
}
private void m_trackBarouterradius_Scroll(object sender, EventArgs e)
{
if (m_trackBarOuterRadius.Value < m_trackBarInnerRadius.Value)
{
m_trackBarInnerRadius.Value = m_trackBarOuterRadius.Value;
}
if (this.m_trackBarOuterRadius.Value / m_RadiusDivider < 0.1)
this.m_trackBarOuterRadius.Value = (int)(0.1 * m_RadiusDivider);
m_fInnerRadius = (float)this.m_trackBarInnerRadius.Value / m_RadiusDivider;
m_textBoxinnerradius.Text = m_fInnerRadius.ToString();
m_fOuterRadius = (float)this.m_trackBarOuterRadius.Value / m_RadiusDivider;
m_textBoxouterradius.Text = m_fOuterRadius.ToString();
SendSettings(m_PaintMode);
m_panelbrushpreview.Invalidate();
}
private void m_trackBargradualchange_Scroll(object sender, EventArgs e)
{
if (m_PaintMode == MTerrain.EPainterType.PT_TERRAIN_VERTEX)
{
m_fValue = (float)m_trackHeight.Value / m_HeightDivider;
m_lastSelectedHeight = m_fValue;
m_textBoxheight.Text = m_fValue.ToString();
}
else if (m_PaintMode == MTerrain.EPainterType.PT_TERRAIN_MATERIAL)
{
m_fValue = m_trackHeight.Value / m_GradualDivider;
m_lastSelectedGradual = m_fValue;
m_textBoxheight.Text= m_fValue.ToString();
}
SendSettings(m_PaintMode);
}
private void TerrainEditPanel_Paint(object sender, PaintEventArgs e)
{
ReDrawEllipse();
}
// 设置当前绘制模式
// 0 - 地形高度
// 1 - 地形纹理
// 2 - 地表属性
// 3 - 水面
// 4 - grid 为单位的地形区域
private void SetPaintMode(MTerrain.EPainterType type)
{
m_PaintMode = type;
// 改变 UI 到相应 Paint 类型
if (type == MTerrain.EPainterType.PT_TERRAIN_VERTEX)
{
this.m_fValue = this.m_lastSelectedHeight;
this.m_labelheight.Text = "高度";
this.m_trackHeight.Maximum = 255;
this.m_trackHeight.Minimum = -100;
this.m_trackHeight.Value = (int)Math.Ceiling(m_fValue * m_HeightDivider);
this.m_textBoxheight.Text = this.m_fValue.ToString();
// 将面板设置为 地形高度
m_tabControlTools.SelectedIndex = 0;
// 设置 高度/浓度 track bar 的显示
m_labelheight.Enabled = true;
m_trackHeight.Enabled = true;
m_textBoxheight.Enabled = true;
m_HeightLabel.Show();
}
else if(type == MTerrain.EPainterType.PT_TERRAIN_MATERIAL)
{
this.m_fValue = this.m_lastSelectedGradual;
this.m_labelheight.Text = "渐变度";
this.m_trackHeight.Maximum = 100;
this.m_trackHeight.Minimum = -100;
this.m_trackHeight.Value = (int)Math.Ceiling(m_fValue * m_GradualDivider);
this.m_textBoxheight.Text = this.m_fValue.ToString();
// 将面板设置为 地表纹理
m_tabControlTools.SelectedIndex = 1;
// 设置 高度/浓度 track bar 的显示
m_labelheight.Enabled = true;
m_trackHeight.Enabled = true;
m_textBoxheight.Enabled = true;
m_HeightLabel.Hide();
}
else if (type == MTerrain.EPainterType.PT_TERRAIN_PROPERTY)
{
// 将面板设置为 地表属性
m_tabControlTools.SelectedIndex = 2;
m_labelheight.Enabled = false;
m_trackHeight.Enabled = false;
m_textBoxheight.Enabled = false;
m_HeightLabel.Hide();
}
else if (type == MTerrain.EPainterType.PT_TERRAIN_GRID_AREA)
{
// 将面板设置为 其他工具
m_tabControlTools.SelectedIndex = 3;
m_labelheight.Enabled = false;
m_trackHeight.Enabled = false;
m_textBoxheight.Enabled = false;
m_HeightLabel.Hide();
}
//else if (type == MTerrain.EPainterType.PT_WATER_SURFACE)
//{
// // 将面板设置为 其他工具
// m_tabControlTools.SelectedIndex = 3;
// m_labelheight.Enabled = false;
// m_trackHeight.Enabled = false;
// m_textBoxheight.Enabled = false;
// m_HeightLabel.Hide();
//}
else if (type == MTerrain.EPainterType.PT_REMOVE_ENTITY)
{
// 将面板设置为 其他工具
m_tabControlTools.SelectedIndex = 3;
m_labelheight.Enabled = false;
m_trackHeight.Enabled = false;
m_textBoxheight.Enabled = false;
m_HeightLabel.Hide();
}
SendSettings(type);
}
private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
if (m_PaintMode == MTerrain.EPainterType.PT_TERRAIN_VERTEX)
{
m_tabControlTools.SelectedIndex = 0;
}
else if (m_PaintMode == MTerrain.EPainterType.PT_TERRAIN_MATERIAL)
{
m_tabControlTools.SelectedIndex = 1;
}
else if (m_PaintMode == MTerrain.EPainterType.PT_TERRAIN_PROPERTY)
{
m_tabControlTools.SelectedIndex = 2;
}
else if (m_PaintMode == MTerrain.EPainterType.PT_TERRAIN_GRID_AREA)
{
m_tabControlTools.SelectedIndex = 3;
}
//else if (m_PaintMode == MTerrain.EPainterType.PT_WATER_SURFACE)
//{
// m_tabControlTools.SelectedIndex = 3;
//}
return;
}
private void m_panelbrushpreview_Paint(object sender, PaintEventArgs e)
{
ReDrawEllipse();
}
private void m_buttonselectmaterial_Click(object sender, EventArgs e)
{
System.IO.Directory.SetCurrentDirectory(Application.StartupPath);
SelectMaterialDlg m_picselectdlg = new SelectMaterialDlg();
m_picselectdlg.ShowDialog();
m_selectedMaterial = m_picselectdlg.get_CurrentSelectedPic();
m_previewImage = m_picselectdlg.get_CurrentPreviewPic();
if (!m_selectedMaterial.Equals(""))
{
m_lastSelectedMaterial = m_selectedMaterial;
m_lastPreviewImage = m_previewImage;
m_pictureBoxMaterialPreview.Load(m_previewImage);
m_pictureBoxMaterialPreview2.Load(m_previewImage);
SendSettings(MTerrain.EPainterType.PT_TERRAIN_MATERIAL);
}
else
{
m_selectedMaterial = m_lastSelectedMaterial;
m_previewImage = m_lastPreviewImage;
}
}
private void TerrainCreateButton_Click(object sender, EventArgs e)
{
if (MFramework.Instance.Scene.HasTerrain())
{
MessageBox.Show("地形已存在。");
return;
}
if ( m_TerrainChunkX.Text.Equals("") )
{
MessageBox.Show("请输入参数X");
return;
}
else if (m_TerrainChunkY.Text.Equals(""))
{
MessageBox.Show("请输入参数Y");
return;
}
else if (m_selectedMaterial.Equals(""))
{
MessageBox.Show("请选择一种材质");
return;
}
InputDlg inputDlg = new InputDlg();
inputDlg.ShowDialog(this);
System.String strInput = inputDlg.GetText();
int iMapNo = 0;
try
{
iMapNo = Int32.Parse(strInput);
}
catch (System.Exception e2)
{
MessageBox.Show("地图编号请输入整数。如果为非正式地图请输入0。");
return;
}
int iTerrainChunkX;
int iTerrainChunkY;
try
{
iTerrainChunkX = Convert.ToInt32(m_TerrainChunkX.Text);
iTerrainChunkY = Convert.ToInt32(m_TerrainChunkY.Text);
}
catch (Exception)
{
MessageBox.Show("参数只能为数字");
return ;
}
/// 限定X,Y的大小,不能超过8
if (iTerrainChunkX > 16 || iTerrainChunkX < 1 )
{
MessageBox.Show("参数X必须在1~16之间");
return;
}
if (iTerrainChunkY > 16 || iTerrainChunkY < 1)
{
MessageBox.Show("参数Y必须在1~16之间");
return;
}
MTerrainParameter terrainParam = new MTerrainParameter(iTerrainChunkX, iTerrainChunkY, m_selectedMaterial, 0, iMapNo);
SettingsService.SetSettingsObject("TerrainParam", terrainParam, SettingsCategory.Temp);
m_radioButtonTex0.Enabled = true;
m_radioButtonTex1.Enabled = true;
m_radioButtonTex2.Enabled = true;
m_radioButtonTex3.Enabled = true;
m_radioButtonTex0.PerformClick();
m_textBoxTex0.Text = m_selectedMaterial;
}
private void m_SelectMatiralButton_Click(object sender, EventArgs e)
{
System.IO.Directory.SetCurrentDirectory(Application.StartupPath);
SelectMaterialDlg m_picselectdlg = new SelectMaterialDlg();
m_picselectdlg.ShowDialog();
m_selectedMaterial = m_picselectdlg.get_CurrentSelectedPic();
m_previewImage = m_picselectdlg.get_CurrentPreviewPic();
if (!m_selectedMaterial.Equals(""))
{
m_lastSelectedMaterial = m_selectedMaterial;
m_lastPreviewImage = m_previewImage;
m_pictureBoxMaterialPreview.Load(m_previewImage);
m_pictureBoxMaterialPreview2.Load(m_previewImage);
if (1 == m_tabControlTools.SelectedIndex)
{
SendSettings(MTerrain.EPainterType.PT_TERRAIN_MATERIAL);
}
}
else
{
m_selectedMaterial = m_lastSelectedMaterial;
m_previewImage = m_lastPreviewImage;
}
}
private void SendSettings(MTerrain.EPainterType eType)
{
MBrushParameter tempBrush = null;
if (eType == MTerrain.EPainterType.PT_TERRAIN_VERTEX ||
eType == MTerrain.EPainterType.PT_TERRAIN_PROPERTY ||
eType == MTerrain.EPainterType.PT_TERRAIN_GRID_AREA ||
//eType == MTerrain.EPainterType.PT_WATER_SURFACE ||
eType == MTerrain.EPainterType.PT_REMOVE_ENTITY)
{
tempBrush = new MBrushParameter(m_fInnerRadius,
m_fOuterRadius,
m_fValue, "", eType);
}
else if (eType == MTerrain.EPainterType.PT_TERRAIN_MATERIAL)
{
tempBrush = new MBrushParameter(m_fInnerRadius,
m_fOuterRadius,
m_fValue, m_selectedMaterial, eType);
}
if (tempBrush != null)
{
SettingsService.SetSettingsObject("TerrainBrush", tempBrush, SettingsCategory.Temp);
}
}
// 用户调整 地形高度/纹理深度 等属性,稍后完成
private void m_textBoxheight_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
try
{
m_fValue = (float)Convert.ToDouble(m_textBoxheight.Text);
}
catch (Exception)
{
m_fValue = 0.0f;
m_textBoxheight.Text = "0";
m_trackHeight.Value = 0;
return;
}
//if (edit.Equals("terrain"))
if (m_PaintMode == MTerrain.EPainterType.PT_TERRAIN_VERTEX)
{
if (m_fValue < -100.0f || m_fValue > 255.0f)
{
m_fValue = 0.0f;
m_textBoxheight.Text = "0";
}
this.m_lastSelectedHeight = this.m_fValue;
// trackBar上的数值响应更改
m_trackHeight.Value = (int)(m_fValue * m_HeightDivider);
SendSettings(MTerrain.EPainterType.PT_TERRAIN_VERTEX);
}
else if (m_PaintMode == MTerrain.EPainterType.PT_TERRAIN_MATERIAL)
{
if (m_fValue < 0.0f || m_fValue > 1.0f)
{
m_fValue = 0.0f;
m_textBoxheight.Text = "0";
}
this.m_lastSelectedGradual = this.m_fValue;
// trackBar上的数值响应更改
m_trackHeight.Value = (int)(m_fValue * m_GradualDivider);
SendSettings(MTerrain.EPainterType.PT_TERRAIN_MATERIAL);
}
}
}
private void m_textBoxouterradius_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
try
{
m_fOuterRadius = (float)Convert.ToDouble(m_textBoxouterradius.Text);
}
catch (Exception)
{
m_fOuterRadius = 0.5f;
m_textBoxouterradius.Text = "0.5";
m_trackBarOuterRadius.Value = 1;
return;
}
if (m_fOuterRadius < 0.5f || m_fOuterRadius > 10)
{
m_fOuterRadius = 0.5f;
m_textBoxouterradius.Text = "0.5";
}
if (m_fOuterRadius < m_fInnerRadius)
{
m_fOuterRadius = m_fInnerRadius;
m_textBoxouterradius.Text = m_textBoxinnerradius.Text;
}
// trackBar上的数值响应更改
m_trackBarOuterRadius.Value = (int)Math.Ceiling(m_fOuterRadius * m_RadiusDivider);
//if (edit.Equals("terrain"))
//{
// SendSettings(0);
//}
//else
//{
// SendSettings(1);
//}
}
}
private void m_textBoxinnerradius_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
try
{
m_fInnerRadius = (float)Convert.ToDouble(m_textBoxinnerradius.Text);
}
catch (Exception)
{
m_fInnerRadius = 0.0f;
m_textBoxinnerradius.Text = "0";
m_trackBarInnerRadius.Value = 0;
return;
}
if (m_fInnerRadius < 0 || m_fInnerRadius > 10)
{
m_fInnerRadius = 0.0f;
m_textBoxinnerradius.Text = "0";
}
if (m_fInnerRadius > m_fOuterRadius)
{
m_fInnerRadius = m_fOuterRadius;
m_textBoxinnerradius.Text = m_textBoxouterradius.Text;
}
// trackBar上的数值响应更改
m_trackBarInnerRadius.Value = (int)Math.Round(m_fInnerRadius * m_RadiusDivider);
//if (edit.Equals("terrain"))
//{
// SendSettings(0);
//}
//else
//{
// SendSettings(1);
//}
}
}
private void m_ShowCollisionDataCheckBox_CheckedChanged(object sender, EventArgs e)
{
bool bShow = m_ShowCollisionDataCheckBox.Checked;
MFramework.Instance.Scene.ShowCollisionData(bShow);
MFramework.Instance.Scene.ShowHiddenTerrain(bShow);
}
private void TerrainRevertBtn_Click(object sender, EventArgs e)
{
// 地形还原
MFramework.Instance.Scene.OptimizeTerrain(false);
}
private void TerrainOptimizeBtn_Click(object sender, EventArgs e)
{
// 地形优化
MFramework.Instance.Scene.OptimizeTerrain(true);
}
private void BakeCollisionBlockBtn_Click(object sender, EventArgs e)
{
// 烘焙物件碰撞块
MFramework.Instance.Scene.BakeObjectsToCollisionBlock();
//MFramework.Instance.Scene.SM_Init();
//MFramework.Instance.Scene.SM_Process();
//MFramework.Instance.Scene.SM_UnInit();
}
private void OptimizeSensitivityStrackBar_Scroll(object sender, EventArgs e)
{
MFramework.Instance.Scene.SetTerrainOptimizeSensitivity(m_trackBarOptimizeSensitivity.Value);
m_textBoxOptimizeSensitivity.Text = m_trackBarOptimizeSensitivity.Value.ToString();
}
// 刷新 地表属性下拉列表
private void RefreshTerrSurPropComboBox()
{
m_TerrSurPropComboBox.Items.Clear();
foreach(MTerrainSurfaceProperty surProp in m_TerrSurPropList)
{
m_TerrSurPropComboBox.Items.Add(surProp.Name);
}
}
private void m_textBoxOptimizeSensitivity_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
int iSensitivity = 0;
try
{
iSensitivity = Convert.ToInt32(m_textBoxOptimizeSensitivity.Text);
}
catch (Exception)
{
iSensitivity = 5;
m_textBoxOptimizeSensitivity.Text = "5";
//return;
}
if (iSensitivity < 1 || iSensitivity > 50)
{
iSensitivity = 5;
m_textBoxOptimizeSensitivity.Text = "5";
}
m_trackBarOptimizeSensitivity.Value = iSensitivity;
MFramework.Instance.Scene.SetTerrainOptimizeSensitivity(m_trackBarOptimizeSensitivity.Value);
}
}
private void TerrToCollisionBlockBtn_Click(object sender, EventArgs e)
{
// 根据地形生成碰状块
int iDegree = 0;
try
{
iDegree = Convert.ToInt32(DegreeTextBox.Text);
}
catch (Exception)
{
iDegree = 45;
DegreeTextBox.Text = "45";
MessageBox.Show("临界角度必须 1 至 89 之间的整数。");
return;
}
if (iDegree<1 || iDegree>89)
{
iDegree = 45;
DegreeTextBox.Text = "45";
MessageBox.Show("临界角度必须 1 至 89 之间的整数。");
return;
}
MFramework.Instance.Scene.TerrainToCollisionBlock(iDegree,false);
MTerrain.Instance.FillTerrainCollisionHole(10000); // 填充碰撞块空洞
}
private void ClearCollisionBlockBtn_Click(object sender, EventArgs e)
{
// 清除所有碰撞块
DialogResult result = MessageBox.Show("本操作不可逆,确定要清除所有碰撞块吗?", "重要提示", MessageBoxButtons.YesNo);
if (result == DialogResult.Yes)
{
MFramework.Instance.Scene.ClearAllCollisionBlock();
}
}
private void ChangeChunkTexture(int iLayer)
{
// 判断当前显示的chunk纹理信息与当前正编辑chunk是否相同
if (m_iCurrentEditChunk != MFramework.Instance.Scene.GetCurrentEditChunkID())
{
MessageBox.Show("当前显示纹理信息与正编辑 Chunk 不符,请重新获取Chunk纹理.");
return;
}
// 获取当前 chunk 纹理
System.String[] strTexture = MFramework.Instance.Scene.GetTerrainCurrentChunkTexture();
if (m_textBoxTex0.Text != strTexture[0] ||
m_textBoxTex1.Text != strTexture[1] ||
m_textBoxTex2.Text != strTexture[2] ||
m_textBoxTex3.Text != strTexture[3])
{
MessageBox.Show("当前显示纹理信息与正编辑 Chunk 不符,请重新获取Chunk纹理.");
return;
}
System.IO.Directory.SetCurrentDirectory(Application.StartupPath);
SelectMaterialDlg m_picselectdlg = new SelectMaterialDlg();
m_picselectdlg.ShowDialog();
string selectedMaterial = m_picselectdlg.get_CurrentSelectedPic();
if (!selectedMaterial.Equals(""))
{
if (MFramework.Instance.Scene.ReplaceChunkTexture(iLayer, selectedMaterial))
{
m_buttonGetCurrentChunkTex.PerformClick();
if (m_radioButtonTex0.Checked)
{
m_radioButtonTex0.Checked = true;
m_radioButtonTex0_CheckedChanged(m_radioButtonTex0, new EventArgs());
}
else if (m_radioButtonTex1.Checked)
{
m_radioButtonTex1.Checked = true;
m_radioButtonTex1_CheckedChanged(m_radioButtonTex1, new EventArgs());
}
else if (m_radioButtonTex2.Checked)
{
m_radioButtonTex2.Checked = true;
m_radioButtonTex2_CheckedChanged(m_radioButtonTex2, new EventArgs());
}
else if (m_radioButtonTex3.Checked)
{
m_radioButtonTex3.Checked = true;
m_radioButtonTex3_CheckedChanged(m_radioButtonTex3, new EventArgs());
}
}
else
{
MessageBox.Show("该纹理不存在或已在某层使用。");
}
}
}
// 删除纹理 [5/4/2009 hemeng ]
private void DeleteChunkTexture(int iLayer)
{
// 判断当前显示的chunk纹理信息与当前正编辑chunk是否相同
if (m_iCurrentEditChunk != MFramework.Instance.Scene.GetCurrentEditChunkID())
{
MessageBox.Show("当前显示纹理信息与正编辑 Chunk 不符,请重新获取Chunk纹理.");
return;
}
// 获取当前 chunk 纹理
System.String[] strTexture = MFramework.Instance.Scene.GetTerrainCurrentChunkTexture();
if (m_textBoxTex0.Text != strTexture[0] ||
m_textBoxTex1.Text != strTexture[1] ||
m_textBoxTex2.Text != strTexture[2] ||
m_textBoxTex3.Text != strTexture[3])
{
MessageBox.Show("当前显示纹理信息与正编辑 Chunk 不符,请重新获取Chunk纹理.");
return;
}
if (MFramework.Instance.Scene.DeleteChunkTexture(iLayer))
{
m_buttonGetCurrentChunkTex.PerformClick();
//if (m_radioButtonTex0.Checked)
//{
// m_radioButtonTex0.Checked = true;
// m_radioButtonTex0_CheckedChanged(m_radioButtonTex0, new EventArgs());
//}
//else if (m_radioButtonTex1.Checked)
//{
// m_radioButtonTex1.Checked = true;
// m_radioButtonTex1_CheckedChanged(m_radioButtonTex1, new EventArgs());
//}
//else if (m_radioButtonTex2.Checked)
//{
// m_radioButtonTex2.Checked = true;
// m_radioButtonTex2_CheckedChanged(m_radioButtonTex2, new EventArgs());
//}
//else if (m_radioButtonTex3.Checked)
//{
// m_radioButtonTex3.Checked = true;
// m_radioButtonTex3_CheckedChanged(m_radioButtonTex3, new EventArgs());
//}
}
}
private void m_buttonTex0_Click(object sender, EventArgs e)
{
// 更换第一层纹理
ChangeChunkTexture(0);
}
private void m_buttonTex1_Click(object sender, EventArgs e)
{
ChangeChunkTexture(1);
}
private void m_buttonTex2_Click(object sender, EventArgs e)
{
ChangeChunkTexture(2);
}
private void m_buttonTex3_Click(object sender, EventArgs e)
{
ChangeChunkTexture(3);
}
public void SetCurrentEditChunk(int iIndex)
{
m_iCurrentEditChunk = iIndex;
}
private void m_buttonGetCurrentChunkTex_Click(object sender, EventArgs e)
{
// 获取当前 chunk 纹理
System.String[] strTexture = MFramework.Instance.Scene.GetTerrainCurrentChunkTexture();
m_textBoxTex0.Text = strTexture[0];
m_textBoxTex1.Text = strTexture[1];
m_textBoxTex2.Text = strTexture[2];
m_textBoxTex3.Text = strTexture[3];
int iInUseLayer = MFramework.Instance.Scene.GetTerrainInUseTextureLayer();
m_iCurrentEditChunk = MFramework.Instance.Scene.GetCurrentEditChunkID();
if (iInUseLayer==0)
{
m_radioButtonTex0.Checked = true;
m_radioButtonTex0.PerformClick();
}
else if (iInUseLayer == 1)
{
m_radioButtonTex1.Checked = true;
m_radioButtonTex1.PerformClick();
}
else if (iInUseLayer == 2)
{
m_radioButtonTex2.Checked = true;
m_radioButtonTex2.PerformClick();
}
else if (iInUseLayer == 3)
{
m_radioButtonTex3.Checked = true;
m_radioButtonTex3.PerformClick();
}
}
// 将 dds 扩展名文件名转换为 bmp 扩展名文件名
private string DDSFileNameToBMPFileName(string strDDSFile)
{
int iLastDotPos = strDDSFile.LastIndexOf('.');
if (iLastDotPos > 0)
{
return strDDSFile.Substring(0, iLastDotPos) + ".bmp";
}
else
{
return null;
}
}
private void m_radioButtonTex0_CheckedChanged(object sender, EventArgs e)
{
if (m_radioButtonTex0.Checked != true)
return;
if (m_iCurrentEditChunk != MFramework.Instance.Scene.GetCurrentEditChunkID())
{
MessageBox.Show("当前显示纹理信息与正编辑 Chunk 不符,请重新获取Chunk纹理.");
return;
}
if (m_textBoxTex0.Text == "")
{
m_radioButtonTex0.Checked = false;
MessageBox.Show("请不要选择空纹理.");
return;
}
m_lastSelectedMaterial = m_selectedMaterial;
m_selectedMaterial = m_textBoxTex0.Text;
m_lastPreviewImage = m_previewImage;
m_previewImage = DDSFileNameToBMPFileName(m_selectedMaterial);
m_pictureBoxMaterialPreview.Load(m_previewImage);
m_pictureBoxMaterialPreview2.Load(m_previewImage);
SendSettings(MTerrain.EPainterType.PT_TERRAIN_MATERIAL);
}
private void m_radioButtonTex1_CheckedChanged(object sender, EventArgs e)
{
if (m_radioButtonTex1.Checked != true)
return;
if (m_iCurrentEditChunk != MFramework.Instance.Scene.GetCurrentEditChunkID())
{
MessageBox.Show("当前显示纹理信息与正编辑 Chunk 不符,请重新获取Chunk纹理.");
return;
}
if (m_textBoxTex1.Text == "")
{
m_radioButtonTex1.Checked = false;
MessageBox.Show("请不要选择空纹理.");
return;
}
m_lastSelectedMaterial = m_selectedMaterial;
m_selectedMaterial = m_textBoxTex1.Text;
m_lastPreviewImage = m_previewImage;
m_previewImage = DDSFileNameToBMPFileName(m_selectedMaterial);
m_pictureBoxMaterialPreview.Load(m_previewImage);
m_pictureBoxMaterialPreview2.Load(m_previewImage);
SendSettings(MTerrain.EPainterType.PT_TERRAIN_MATERIAL);
}
private void m_radioButtonTex2_CheckedChanged(object sender, EventArgs e)
{
if (m_radioButtonTex2.Checked != true)
return;
if (m_iCurrentEditChunk != MFramework.Instance.Scene.GetCurrentEditChunkID())
{
MessageBox.Show("当前显示纹理信息与正编辑 Chunk 不符,请重新获取Chunk纹理.");
return;
}
if (m_textBoxTex2.Text == "")
{
m_radioButtonTex2.Checked = false;
MessageBox.Show("请不要选择空纹理.");
return;
}
m_lastSelectedMaterial = m_selectedMaterial;
m_selectedMaterial = m_textBoxTex2.Text;
m_lastPreviewImage = m_previewImage;
m_previewImage = DDSFileNameToBMPFileName(m_selectedMaterial);
m_pictureBoxMaterialPreview.Load(m_previewImage);
m_pictureBoxMaterialPreview2.Load(m_previewImage);
SendSettings(MTerrain.EPainterType.PT_TERRAIN_MATERIAL);
}
private void m_radioButtonTex3_CheckedChanged(object sender, EventArgs e)
{
if (m_radioButtonTex3.Checked != true)
return;
if (m_iCurrentEditChunk != MFramework.Instance.Scene.GetCurrentEditChunkID())
{
MessageBox.Show("当前显示纹理信息与正编辑 Chunk 不符,请重新获取Chunk纹理.");
return;
}
if (m_textBoxTex3.Text == "")
{
m_radioButtonTex3.Checked = false;
MessageBox.Show("请不要选择空纹理.");
return;
}
m_lastSelectedMaterial = m_selectedMaterial;
m_selectedMaterial = m_textBoxTex3.Text;
m_lastPreviewImage = m_previewImage;
m_previewImage = DDSFileNameToBMPFileName(m_selectedMaterial);
m_pictureBoxMaterialPreview.Load(m_previewImage);
m_pictureBoxMaterialPreview2.Load(m_previewImage);
SendSettings(MTerrain.EPainterType.PT_TERRAIN_MATERIAL);
}
private void m_SelectBrushTextureMenuItem_Click(object sender, EventArgs e)
{
// 选择笔触纹理
System.IO.Directory.SetCurrentDirectory(Application.StartupPath);
OpenFileDialog openFiledlg = new OpenFileDialog();
openFiledlg.InitialDirectory = Application.StartupPath+"\\Brush";
openFiledlg.Filter = "bmp files (*.bmp)|*.bmp|All files (*.*)|*.*";
openFiledlg.FilterIndex = 1;
openFiledlg.RestoreDirectory = true;
if (openFiledlg.ShowDialog() == DialogResult.OK)
{
MFramework.Instance.Scene.SetBrushTexture(openFiledlg.FileName);
m_BrushBitmap = new Bitmap(openFiledlg.FileName);
}
}
private void m_ClearBrushTextureMenuItem_Click(object sender, EventArgs e)
{
// 清除笔触纹理
MFramework.Instance.Scene.SetBrushTexture(null);
m_BrushBitmap = null;
}
private void m_SelectColorBtn_Click(object sender, EventArgs e)
{
// 选择顶点颜色
ColorDialog colorDlg = new ColorDialog();
if (colorDlg.ShowDialog() == DialogResult.OK)
{
m_pictureBoxBrushColorPreview.BackColor = colorDlg.Color;
MFramework.Instance.Scene.SetInUseVertexColor(colorDlg.Color);
}
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
// 刷地表纹理
if (m_checkBoxPaintTexture.Checked==false
&& m_checkBoxPaintColor.Checked==false
&& m_checkBoxPaintWater.Checked == false)
{
MessageBox.Show("刷地表纹理 、 刷顶点颜色 、刷水波至少得选一个。");
m_checkBoxPaintTexture.Checked = true;
}
if (m_checkBoxPaintColor.Checked || m_checkBoxPaintTexture.Checked)
{
m_checkBoxPaintWater.Checked = false;
}
MFramework.Instance.Scene.SetPaintTerrainState(m_checkBoxPaintTexture.Checked, m_checkBoxPaintColor.Checked, m_checkBoxPaintWater.Checked);
}
private void checkBox2_CheckedChanged(object sender, EventArgs e)
{
// 刷顶点颜色
if (m_checkBoxPaintTexture.Checked == false
&& m_checkBoxPaintColor.Checked == false
&& m_checkBoxPaintWater.Checked == false)
{
MessageBox.Show("刷地表纹理 、 刷顶点颜色 、刷水波至少得选一个。");
m_checkBoxPaintColor.Checked = true;
}
if(m_checkBoxPaintColor.Checked || m_checkBoxPaintTexture.Checked)
{
m_checkBoxPaintWater.Checked = false;
}
MFramework.Instance.Scene.SetPaintTerrainState(m_checkBoxPaintTexture.Checked, m_checkBoxPaintColor.Checked, m_checkBoxPaintWater.Checked);
}
private void m_checkBoxPaintAddTo_CheckedChanged(object sender, EventArgs e)
{
// 叠加 check box
}
private void m_FlatTerrainMenuItem_Click(object sender, EventArgs e)
{
m_FlatTerrainMenuItem.Checked = true;
m_UpTerrainMenuItem.Checked = false;
m_FallTerrainMenuItem.Checked = false;
m_SmoothTerrainMenuItem.Checked = false;
MFramework.Instance.Scene.SetTerrainOperation(0);
}
private void m_UpTerrainMenuItem_Click(object sender, EventArgs e)
{
m_FlatTerrainMenuItem.Checked = false;
m_UpTerrainMenuItem.Checked = true;
m_FallTerrainMenuItem.Checked = false;
m_SmoothTerrainMenuItem.Checked = false;
MFramework.Instance.Scene.SetTerrainOperation(1);
}
private void m_FallTerrainMenuItem_Click(object sender, EventArgs e)
{
m_FlatTerrainMenuItem.Checked = false;
m_UpTerrainMenuItem.Checked = false;
m_FallTerrainMenuItem.Checked = true;
m_SmoothTerrainMenuItem.Checked = false;
MFramework.Instance.Scene.SetTerrainOperation(2);
}
private void m_SmoothTerrainMenuItem_Click(object sender, EventArgs e)
{
m_FlatTerrainMenuItem.Checked = false;
m_UpTerrainMenuItem.Checked = false;
m_FallTerrainMenuItem.Checked = false;
m_SmoothTerrainMenuItem.Checked = true;
MFramework.Instance.Scene.SetTerrainOperation(3);
}
private void m_PaintAddUpMenuItem_Click(object sender, EventArgs e)
{
// 纹理刷图叠加
if (m_PaintAddUpMenuItem.Checked == true)
{
m_PaintAddUpMenuItem.Checked = false;
}
else
{
m_PaintAddUpMenuItem.Checked = true;
}
MFramework.Instance.Scene.SetPaintTerrainAddTo(m_PaintAddUpMenuItem.Checked);
}
private void m_ShowChunkBorderCheckBox_CheckedChanged(object sender, EventArgs e)
{
MViewportManager.Instance.SetShowChunkBorder(m_ShowChunkBorderCheckBox.Checked);
}
private void m_pictureBoxPropColorPreview_Click(object sender, EventArgs e)
{
// 点击表示色框,弹出颜色选择框,改变当前属性表示色
}
private void m_AddSurPropBtn_Click(object sender, EventArgs e)
{
// 添加 地表属性
stTerrainSurfaceProperty pTerrProp = new stTerrainSurfaceProperty();
MFramework.Instance.Scene.AddTerrainProperty(pTerrProp);
}
private void m_TerrSurPropComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
System.String selPropName = m_TerrSurPropComboBox.SelectedItem as System.String;
foreach(MTerrainSurfaceProperty terrProp in m_TerrSurPropList)
{
if (terrProp.Name.Equals(selPropName))
{
m_TerrPropIDLabel.Text = terrProp.ID.ToString();
m_pictureBoxPropColorPreview.BackColor = System.Drawing.Color.FromArgb((int)(terrProp.R * 255), (int)(terrProp.G * 255), (int)(terrProp.B * 255));
MFramework.Instance.Scene.SetCurrentTerrainProperty(terrProp.ID);
}
}
}
private void btn_BakeShadow_Click(object sender, EventArgs e)
{
// 之前老翟 shadow map 的烘焙
//MFramework.Instance.Scene.Set_BakeShadow( true );
if (m_PanelShadowTools==null || m_PanelShadowTools.IsDisposed)
{
m_PanelShadowTools = new ShadowPanel();
m_PanelShadowTools.Show();
}
else
{
m_PanelShadowTools.Activate();
}
}
private void m_btnImportShadow_Click(object sender, EventArgs e)
{
// 选择阴影纹理`
System.IO.Directory.SetCurrentDirectory(Application.StartupPath);
OpenFileDialog openFiledlg = new OpenFileDialog();
openFiledlg.InitialDirectory = Application.StartupPath;
openFiledlg.Filter = "dds files (*.dds)|*.dds|All files (*.*)|*.*";
openFiledlg.FilterIndex = 1;
openFiledlg.RestoreDirectory = true;
if (openFiledlg.ShowDialog() == DialogResult.OK)
{
MFramework.Instance.Scene.ImportShadowTexture(openFiledlg.FileName);
}
}
private void m_btnExportShadow_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDlg = new SaveFileDialog();
saveFileDlg.Filter = "dds files (*.dds)|*.dds|All files (*.*)|*.*";
saveFileDlg.FilterIndex = 1;
saveFileDlg.RestoreDirectory = true;
if (saveFileDlg.ShowDialog() == DialogResult.OK)
{
MFramework.Instance.Scene.ExportShadowTexture(saveFileDlg.FileName);
}
}
private void m_btnTextureCombineTool_Click(object sender, EventArgs e)
{
}
private void m_btnLayerFogTools_Click(object sender, EventArgs e)
{
if (m_panelFogTools == null || m_panelFogTools.IsDisposed)
{
m_panelFogTools = new FogPanel();
m_panelFogTools.Show();
}
else
{
m_panelFogTools.Activate();
}
}
private void m_btnHeightCheck_Click(object sender, EventArgs e)
{
if (m_panelHeightCheckTool == null || m_panelHeightCheckTool.IsDisposed)
{
m_panelHeightCheckTool = new TerrainHeightCheckPanel();
m_panelHeightCheckTool.Show();
}
else
{
m_panelHeightCheckTool.Activate();
}
}
private void m_btnBakeLightColorToVertex_Click(object sender, EventArgs e)
{
//MFramework.Instance.Scene.SaveSceneTo3DS("e:\\scene.3ds");
if (m_panelBaker == null || m_panelBaker.IsDisposed)
{
m_panelBaker = new TerrainBakeShadowPanel();
m_panelBaker.Show();
}
else
{
m_panelBaker.Activate();
}
}
private void m_btnRegionTool_Click(object sender, EventArgs e)
{
if (!MFramework.Instance.Scene.HasTerrain())
{
MessageBox.Show("请先创建地形!");
}
else
{
if (m_panelRegionTool == null || m_panelRegionTool.IsDisposed)
{
m_panelRegionTool = new RegionToolPanel();
m_panelRegionTool.Show();
}
else
{
m_panelRegionTool.Activate();
}
}
}
private void m_btnWaterTools_Click(object sender, EventArgs e)
{
//设置为绘制水域
//SendSettings(3);
if (m_panelWater == null || m_panelWater.IsDisposed)
{
m_panelWater = new WaterPanel();
m_panelWater.Show();
}
else
{
m_panelWater.Activate();
}
}
private void m_btnBakeLightToTerrainVertexColor_Click(object sender, EventArgs e)
{
// 测试地形顶点烘焙
TerrainBakeLightPanel form = new TerrainBakeLightPanel();
form.Show();
}
private void m_btnChunkEntityManager_Click(object sender, EventArgs e)
{
if (MChunkEntityManager.Instance == null)
{
MessageBox.Show("请先创建地形。");
return;
}
ChunkEntityManagePanel panel = ChunkEntityManagePanel.Instance;
panel.Show();
panel.Activate();
}
private void m_toolSelectPaintMode_DropDownOpening(object sender, EventArgs e)
{
//获得当前笔刷类型
//MBrushParameter tempBrush = ( SettingsService.GetSettingsObject("TerrainBrush", SettingsCategory.Temp) as MBrushParameter);
m_ToolStripMenuItem_Water.Checked = false;
m_ToolStripMenuItem_Terrain.Checked = false;
m_ToolStripMenuItem_Material.Checked = false;
m_ToolStripMenuItem_Proprity.Checked = false;
m_ToolStripMenuItem_GridArea.Checked = false;
m_ToolStripMenuItemRemoveEntity.Checked = false;
if (m_PaintMode == MTerrain.EPainterType.PT_TERRAIN_VERTEX)
{
m_ToolStripMenuItem_Terrain.Checked = true;
}
else if (m_PaintMode == MTerrain.EPainterType.PT_TERRAIN_MATERIAL)
{
m_ToolStripMenuItem_Material.Checked = true;
}
else if (m_PaintMode == MTerrain.EPainterType.PT_TERRAIN_PROPERTY)
{
m_ToolStripMenuItem_Proprity.Checked = true;
}
//else if (m_PaintMode == MTerrain.EPainterType.PT_WATER_SURFACE)
//{
// m_ToolStripMenuItem_Water.Checked = true;
//}
else if (m_PaintMode == MTerrain.EPainterType.PT_TERRAIN_GRID_AREA)
{
m_ToolStripMenuItem_GridArea.Checked = true;
}
else if (m_PaintMode == MTerrain.EPainterType.PT_REMOVE_ENTITY)
{
m_ToolStripMenuItemRemoveEntity.Checked = true;
}
}
private void m_ToolStripMenuItem_Terrain_Click(object sender, EventArgs e)
{
SetPaintMode(MTerrain.EPainterType.PT_TERRAIN_VERTEX);
}
private void m_ToolStripMenuItem_Material_Click(object sender, EventArgs e)
{
SetPaintMode(MTerrain.EPainterType.PT_TERRAIN_MATERIAL);
}
private void m_ToolStripMenuItem_Proprity_Click(object sender, EventArgs e)
{
SetPaintMode(MTerrain.EPainterType.PT_TERRAIN_PROPERTY);
}
private void m_ToolStripMenuItem_Water_Click(object sender, EventArgs e)
{
//SetPaintMode(MTerrain.EPainterType.PT_WATER_SURFACE);
SetPaintMode(MTerrain.EPainterType.PT_TERRAIN_GRID_AREA);
}
private void m_ToolStripMenuItem_GridArea_Click(object sender, EventArgs e)
{
SetPaintMode(MTerrain.EPainterType.PT_TERRAIN_GRID_AREA);
}
private void m_ToolStripMenuItemRemoveEntity_Click(object sender, EventArgs e)
{
SetPaintMode(MTerrain.EPainterType.PT_REMOVE_ENTITY);
}
private void m_btnGridBaseArea_Click(object sender, EventArgs e)
{
GridBaseAreaPanel form = GridBaseAreaPanel.Instance;
form.Show();
form.Activate();
}
private void ExportCollisionBlockBtn_Click(object sender, EventArgs e)
{
MTerrain.Instance.ExportGridProperty();
}
private void ImportCollisionBlockBtn_Click(object sender, EventArgs e)
{
MTerrain.Instance.ImportGridProperty();
}
private void m_btnPostEffectTools_Click(object sender, EventArgs e)
{
if (m_panelPostEffect == null || m_panelPostEffect.IsDisposed)
{
m_panelPostEffect = new PostEffectPanel();
m_panelPostEffect.Show();
}
else
{
m_panelPostEffect.Activate();
}
}
private void button1_Click(object sender, EventArgs e)
{
SnapToolPanel form = new SnapToolPanel();
form.Show();
}
private void CreateRegProByMtlBtn_Click(object sender, EventArgs e)
{
MTerrain.Instance.CreateGridPropertyByMaterial();
}
private void m_btnColorPalette_Click(object sender, EventArgs e)
{
// 打开自定义调色板
ColorPalettePanel panel = new ColorPalettePanel();
panel.TopMost = true;
panel.Show();
}
private void m_btnEntityAffectLights_Click(object sender, EventArgs e)
{
EntityAffectLightsPanel form = new EntityAffectLightsPanel();
form.Show();
}
private void button2_Click(object sender, EventArgs e)
{
if ( m_textBox_FindPos_X.Text.Equals("") )
{
MessageBox.Show("请输入参数X");
return;
}
if (m_textBox_FindPos_Y.Text.Equals(""))
{
MessageBox.Show("请输入参数Y");
return;
}
int iFindPosX, iFindPosY;
iFindPosX = Convert.ToInt32( m_textBox_FindPos_X.Text );
iFindPosY = Convert.ToInt32( m_textBox_FindPos_Y.Text );
MTerrain.Instance.CameraGoToPos( iFindPosX, iFindPosY );
}
private void m_buttonTexDelete1_Click(object sender, EventArgs e)
{
DeleteChunkTexture(1);
}
private void m_buttonTexDelete2_Click(object sender, EventArgs e)
{
DeleteChunkTexture(2);
}
private void m_buttonTexDelete3_Click(object sender, EventArgs e)
{
DeleteChunkTexture(3);
}
private void GetGridPropertyPercentBtn_Click(object sender, EventArgs e)
{
System.String selPropName = m_TerrSurPropComboBox.SelectedItem as System.String;
foreach (MTerrainSurfaceProperty terrProp in m_TerrSurPropList)
{
if (terrProp.Name.Equals(selPropName))
{
m_TerrPropIDLabel.Text = terrProp.ID.ToString();
m_pictureBoxPropColorPreview.BackColor = System.Drawing.Color.FromArgb((int)(terrProp.R * 255), (int)(terrProp.G * 255), (int)(terrProp.B * 255));
int iPercent = MTerrain.Instance.GetGridPropertyPercent(terrProp.ID);
GridPropertyPerctextBox.Text = Convert.ToString(iPercent);
}
}
}
private void btn_HeightMap_Click(object sender, EventArgs e)
{
HeightMapConfig form = HeightMapConfig.Instance;
form.Visible = true;
form.Show();
}
private void m_btnEntityExportSetting_Click(object sender, EventArgs e)
{
// Entity 导出设置
EntityExportSettingPanel dlg = new EntityExportSettingPanel();
dlg.ShowDialog();
}
private void m_btnImportVertexColor_Click(object sender, EventArgs e)
{
//// 选择阴影纹理`
//System.IO.Directory.SetCurrentDirectory(Application.StartupPath);
//OpenFileDialog openFiledlg = new OpenFileDialog();
//openFiledlg.InitialDirectory = Application.StartupPath;
//openFiledlg.Filter = "dds files (*.dds)|*.dds|tga files (*.tga)|*.tga|All files (*.*)|*.*";
//openFiledlg.FilterIndex = 1;
//openFiledlg.RestoreDirectory = true;
//if (openFiledlg.ShowDialog() == DialogResult.OK)
//{
// MTerrain.Instance.ApplyVertexColorTexture(openFiledlg.FileName, 80);
//}
}
private void m_btnLightMapPanel_Click(object sender, EventArgs e)
{
GlobalIlluminationPanel dlg = GlobalIlluminationPanel.Instance;
dlg.ShowDialog(null);
}
private void m_btnPreview_Click(object sender, EventArgs e)
{
MFramework.Instance.Scene.SetPreviewEntityLightMap(true);
}
private void m_ShowAABBCheckBox_CheckedChanged(object sender, EventArgs e)
{
MViewportManager.Instance.SetShowAABB(m_ShowAABBCheckBox.Checked);
}
private void m_btnSetAABBScale_Click(object sender, EventArgs e)
{
AABBEditPanel form = new AABBEditPanel();
form.Show();
}
private void m_ShowChunkBorderCheckBox_CheckedChanged_1(object sender, EventArgs e)
{
MViewportManager.Instance.SetShowChunkBorder(m_ShowChunkBorderCheckBox.Checked);
}
private void m_btnCityLevelEditor_Click(object sender, EventArgs e)
{
// 城市等级编辑
CityLevelEditPanel panel = new CityLevelEditPanel();
panel.Show();
}
private void m_checkBoxPaintWater_CheckedChanged(object sender, EventArgs e)
{
if (m_checkBoxPaintWater.Checked == true)
{
m_checkBoxPaintTexture.Checked = false;
m_checkBoxPaintColor.Checked = false;
}
// 刷水波
if (m_checkBoxPaintTexture.Checked == false
&& m_checkBoxPaintColor.Checked == false
&& m_checkBoxPaintWater.Checked == false)
{
MessageBox.Show("刷地表纹理 、 刷顶点颜色 、刷水波至少得选一个。");
m_checkBoxPaintWater.Checked = true;
}
MFramework.Instance.Scene.SetPaintTerrainState(m_checkBoxPaintTexture.Checked, m_checkBoxPaintColor.Checked,m_checkBoxPaintWater.Checked);
MFramework.Instance.Scene.SetWaterSceneEnabled(m_checkBoxPaintWater.Checked);
}
private void btn_PostEffect_Click(object sender, EventArgs e)
{
if (m_panelPostEffect == null || m_panelPostEffect.IsDisposed)
{
m_panelPostEffect = new PostEffectPanel();
m_panelPostEffect.Show();
}
else
{
m_panelPostEffect.Activate();
}
}
private void btn_ModelScreenShotor_Click(object sender, EventArgs e)
{
if (m_panelModelScreenShotor == null || m_panelModelScreenShotor.IsDisposed)
{
m_panelModelScreenShotor = new ModelScreenshot();
m_panelModelScreenShotor.Show();
}
else
{
m_panelModelScreenShotor.Activate();
}
}
private void btn_BackLightToEntity_Click(object sender, EventArgs e)
{
MFramework.Instance.Scene.BackLightToEntities();
}
//private void m_btnPreviewLightMap_Click(object sender, EventArgs e)
//{
// MFramework.Instance.Scene.SetPreviewEntityLightMap(m_cbPreviewLightMap.Checked);
//}
}
}