DlgTEOperationSettings.cpp 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. /* Copyright (c) 2002-2012 Croteam Ltd.
  2. This program is free software; you can redistribute it and/or modify
  3. it under the terms of version 2 of the GNU General Public License as published by
  4. the Free Software Foundation
  5. This program is distributed in the hope that it will be useful,
  6. but WITHOUT ANY WARRANTY; without even the implied warranty of
  7. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  8. GNU General Public License for more details.
  9. You should have received a copy of the GNU General Public License along
  10. with this program; if not, write to the Free Software Foundation, Inc.,
  11. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
  12. // DlgTEOperationSettings.cpp : implementation file
  13. //
  14. #include "stdafx.h"
  15. #include "WorldEditor.h"
  16. #include "DlgTEOperationSettings.h"
  17. #ifdef _DEBUG
  18. #undef new
  19. #define new DEBUG_NEW
  20. #undef THIS_FILE
  21. static char THIS_FILE[] = __FILE__;
  22. #endif
  23. /////////////////////////////////////////////////////////////////////////////
  24. // CDlgTEOperationSettings dialog
  25. CDlgTEOperationSettings::CDlgTEOperationSettings(CWnd* pParent /*=NULL*/)
  26. : CDialog(CDlgTEOperationSettings::IDD, pParent)
  27. {
  28. //{{AFX_DATA_INIT(CDlgTEOperationSettings)
  29. m_fClampAltitude = 0.0f;
  30. m_fNoiseAltitude = 0.0f;
  31. m_fPaintPower = 0.0f;
  32. m_fPosterizeStep = 0.0f;
  33. m_fSmoothPower = 0.0f;
  34. m_fFilterPower = 0.0f;
  35. m_strContinousNoiseTexture = _T("");
  36. m_strDistributionNoiseTexture = _T("");
  37. //}}AFX_DATA_INIT
  38. }
  39. void CDlgTEOperationSettings::DoDataExchange(CDataExchange* pDX)
  40. {
  41. // if dialog is recieving data
  42. if(pDX->m_bSaveAndValidate == FALSE)
  43. {
  44. m_strDistributionNoiseTexture=theApp.m_fnDistributionNoiseTexture.FileName();
  45. m_strContinousNoiseTexture=theApp.m_fnContinousNoiseTexture.FileName();
  46. CTerrain *ptrTerrain=GetTerrain();
  47. if(ptrTerrain!=NULL)
  48. {
  49. GetDlgItem(IDC_EQUALIZE_VALUE)->EnableWindow( TRUE);
  50. m_fClampAltitude=FLOAT(theApp.m_uwEditAltitude)/65535*ptrTerrain->tr_vTerrainSize(2);
  51. }
  52. else
  53. {
  54. GetDlgItem(IDC_EQUALIZE_VALUE)->EnableWindow( FALSE);
  55. m_fClampAltitude=0;
  56. }
  57. m_fPaintPower=theApp.m_fPaintPower*100.0f;
  58. m_fSmoothPower=theApp.m_fSmoothPower*100.0f;
  59. m_fFilterPower=theApp.m_fFilterPower*100.0f;
  60. m_fPosterizeStep=theApp.m_fPosterizeStep;
  61. m_fNoiseAltitude=theApp.m_fNoiseAltitude;
  62. }
  63. CDialog::DoDataExchange(pDX);
  64. //{{AFX_DATA_MAP(CDlgTEOperationSettings)
  65. DDX_Control(pDX, IDC_GENERATION_ALGORITHM, m_ctrlGenerationMethod);
  66. DDX_Control(pDX, IDC_FILTER_COMBO, m_ctrlFilter);
  67. DDX_Text(pDX, IDC_EQUALIZE_VALUE, m_fClampAltitude);
  68. DDV_MinMaxFloat(pDX, m_fClampAltitude, 0.f, 65535.f);
  69. DDX_Text(pDX, IDC_NOISE_STRENGTH, m_fNoiseAltitude);
  70. DDV_MinMaxFloat(pDX, m_fNoiseAltitude, 0.f, 65535.f);
  71. DDX_Text(pDX, IDC_PAINT_POWER, m_fPaintPower);
  72. DDV_MinMaxFloat(pDX, m_fPaintPower, 0.f, 10000.f);
  73. DDX_Text(pDX, IDC_POSTERIZE_STEP, m_fPosterizeStep);
  74. DDV_MinMaxFloat(pDX, m_fPosterizeStep, 0.f, 65535.f);
  75. DDX_Text(pDX, IDC_SMOOTH_POWER, m_fSmoothPower);
  76. DDV_MinMaxFloat(pDX, m_fSmoothPower, 0.f, 10000.f);
  77. DDX_Text(pDX, IDC_FILTER_POWER, m_fFilterPower);
  78. DDX_Text(pDX, IDC_CONTINOUS_NOISE_T, m_strContinousNoiseTexture);
  79. DDX_Text(pDX, IDC_DISTRIBUTION_NOISE_T, m_strDistributionNoiseTexture);
  80. //}}AFX_DATA_MAP
  81. // if dialog is giving data
  82. if(pDX->m_bSaveAndValidate != FALSE)
  83. {
  84. CTerrain *ptrTerrain=GetTerrain();
  85. if(ptrTerrain!=NULL)
  86. {
  87. theApp.m_uwEditAltitude=m_fClampAltitude/ptrTerrain->tr_vTerrainSize(2)*65535;
  88. }
  89. theApp.m_fPaintPower=m_fPaintPower/100.0f;
  90. theApp.m_fSmoothPower=m_fSmoothPower/100.0f;
  91. INDEX iSelectedItem=iSelectedItem=m_ctrlFilter.GetCurSel();
  92. theApp.m_iFilter=m_ctrlFilter.GetItemData(iSelectedItem);
  93. theApp.m_fFilterPower=m_fFilterPower/100.0f;
  94. theApp.m_fPosterizeStep=m_fPosterizeStep;
  95. theApp.m_fNoiseAltitude=m_fNoiseAltitude;
  96. theApp.m_iTerrainGenerationMethod=m_ctrlGenerationMethod.GetCurSel();
  97. }
  98. }
  99. BEGIN_MESSAGE_MAP(CDlgTEOperationSettings, CDialog)
  100. //{{AFX_MSG_MAP(CDlgTEOperationSettings)
  101. ON_BN_CLICKED(IDC_VIEW_NOISE_TEXTURE, OnViewNoiseTexture)
  102. ON_BN_CLICKED(IDC_BROWSE_CONTINOUS_NOISE, OnBrowseContinousNoise)
  103. ON_BN_CLICKED(IDC_BROWSE_DISTRIBUTION_NOISE, OnBrowseDistributionNoise)
  104. ON_BN_CLICKED(IDC_VIEW_DISTRIBUTION_NOISE_TEXTURE, OnViewDistributionNoiseTexture)
  105. ON_BN_CLICKED(IDC_GENERATION_SETTINGS, OnGenerationSettings)
  106. ON_CBN_DROPDOWN(IDC_GENERATION_ALGORITHM, OnDropdownGenerationAlgorithm)
  107. //}}AFX_MSG_MAP
  108. END_MESSAGE_MAP()
  109. /////////////////////////////////////////////////////////////////////////////
  110. // CDlgTEOperationSettings message handlers
  111. CTString GetFilterName(INDEX iFilter)
  112. {
  113. if(iFilter==FLT_SHARPEN) return "Sharpen";
  114. if(iFilter==FLT_FINEBLUR) return "Fine blur";
  115. if(iFilter==FLT_EMBOSS) return "Emboss";
  116. if(iFilter==FLT_EDGEDETECT) return "Edge detect";
  117. return "Unknown";
  118. }
  119. BOOL CDlgTEOperationSettings::OnInitDialog()
  120. {
  121. CDialog::OnInitDialog();
  122. if( IsWindow( m_ctrlFilter.m_hWnd))
  123. {
  124. INDEX iItem;
  125. iItem=m_ctrlFilter.AddString(CString(GetFilterName(FLT_SHARPEN)));
  126. m_ctrlFilter.SetItemData(iItem,FLT_SHARPEN);
  127. if(theApp.m_iFilter==FLT_SHARPEN) m_ctrlFilter.SetCurSel(iItem);
  128. iItem=m_ctrlFilter.AddString(CString(GetFilterName(FLT_FINEBLUR)));
  129. m_ctrlFilter.SetItemData(iItem,FLT_FINEBLUR);
  130. if(theApp.m_iFilter==FLT_FINEBLUR) m_ctrlFilter.SetCurSel(iItem);
  131. iItem=m_ctrlFilter.AddString(CString(GetFilterName(FLT_EMBOSS)));
  132. m_ctrlFilter.SetItemData(iItem,FLT_EMBOSS);
  133. if(theApp.m_iFilter==FLT_EMBOSS) m_ctrlFilter.SetCurSel(iItem);
  134. iItem=m_ctrlFilter.AddString(CString(GetFilterName(FLT_EDGEDETECT)));
  135. m_ctrlFilter.SetItemData(iItem,FLT_EDGEDETECT);
  136. if(theApp.m_iFilter==FLT_EDGEDETECT) m_ctrlFilter.SetCurSel(iItem);
  137. m_ctrlGenerationMethod.AddString(L"Subdivide and displace");
  138. m_ctrlGenerationMethod.AddString(L"Fractal Brownian motion (FBM)");
  139. m_ctrlGenerationMethod.SetCurSel(theApp.m_iTerrainGenerationMethod);
  140. }
  141. return TRUE; // return TRUE unless you set the focus to a control
  142. // EXCEPTION: OCX Property Pages should return FALSE
  143. }
  144. void CDlgTEOperationSettings::OnViewNoiseTexture()
  145. {
  146. if(!SetupContinousNoiseTexture()) return;
  147. POINT pt;
  148. GetCursorPos(&pt);
  149. CTString strText1=_ptdContinousRandomNoise->GetName();
  150. CTString strText2=_ptdContinousRandomNoise->GetDescription();
  151. CWndDisplayTexture *pDisplay=new CWndDisplayTexture;
  152. pDisplay->Initialize(pt.x, pt.y, _ptdContinousRandomNoise, strText1, strText2);
  153. FreeContinousNoiseTexture();
  154. }
  155. void CDlgTEOperationSettings::OnViewDistributionNoiseTexture()
  156. {
  157. if(!SetupDistributionNoiseTexture()) return;
  158. POINT pt;
  159. GetCursorPos(&pt);
  160. CTString strText1=_ptdDistributionRandomNoise->GetName();
  161. CTString strText2=_ptdDistributionRandomNoise->GetDescription();
  162. CWndDisplayTexture *pDisplay=new CWndDisplayTexture;
  163. pDisplay->Initialize(pt.x, pt.y, _ptdDistributionRandomNoise, strText1, strText2);
  164. FreeDistributionNoiseTexture();
  165. }
  166. void CDlgTEOperationSettings::OnBrowseContinousNoise()
  167. {
  168. CTFileName fnNoise=_EngineGUI.FileRequester(
  169. "Noise texture", FILTER_TEX FILTER_ALL FILTER_END,
  170. "Noise texture directory", "Textures\\");
  171. if( fnNoise=="") return;
  172. if(!SetupContinousNoiseTexture()) return;
  173. theApp.m_fnContinousNoiseTexture=fnNoise;
  174. FreeContinousNoiseTexture();
  175. UpdateData(FALSE);
  176. }
  177. void CDlgTEOperationSettings::OnBrowseDistributionNoise()
  178. {
  179. CTFileName fnNoise=_EngineGUI.FileRequester(
  180. "Noise texture", FILTER_TEX FILTER_ALL FILTER_END,
  181. "Noise texture directory", "Textures\\");
  182. if( fnNoise=="") return;
  183. if(!SetupDistributionNoiseTexture()) return;
  184. theApp.m_fnDistributionNoiseTexture=fnNoise;
  185. FreeDistributionNoiseTexture();
  186. UpdateData(FALSE);
  187. }
  188. void CDlgTEOperationSettings::OnGenerationSettings()
  189. {
  190. INDEX iItem=m_ctrlGenerationMethod.GetCurSel();
  191. switch(iItem)
  192. {
  193. case 0:
  194. {
  195. CDlgEditFloat dlg(this);
  196. dlg.m_fEditFloat=theApp.m_iRNDSubdivideAndDisplaceItterations;
  197. dlg.m_strVarName = "Random itterations";
  198. dlg.m_strTitle = "Subdivide and displace";
  199. if(dlg.DoModal()!=IDOK)
  200. {
  201. return;
  202. }
  203. theApp.m_iRNDSubdivideAndDisplaceItterations=dlg.m_fEditFloat;
  204. break;
  205. }
  206. case 1:
  207. {
  208. CDlgGenerateFBM dlg(this);
  209. dlg.DoModal();
  210. break;
  211. }
  212. }
  213. }
  214. void CDlgTEOperationSettings::OnDropdownGenerationAlgorithm()
  215. {
  216. m_ctrlGenerationMethod.SetDroppedWidth( 256);
  217. }