DlgRenderingPreferences.cpp 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  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. // DlgRenderingPreferences.cpp : implementation file
  13. //
  14. #include "stdafx.h"
  15. #include "DlgRenderingPreferences.h"
  16. #ifdef _DEBUG
  17. #undef new
  18. #define new DEBUG_NEW
  19. #undef THIS_FILE
  20. static char THIS_FILE[] = __FILE__;
  21. #endif
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CDlgRenderingPreferences dialog
  24. CDlgRenderingPreferences::CDlgRenderingPreferences( INDEX iBuffer, CWnd* pParent /*=NULL*/)
  25. : CDialog(CDlgRenderingPreferences::IDD, pParent)
  26. {
  27. m_iBuffer = iBuffer;
  28. //{{AFX_DATA_INIT(CDlgRenderingPreferences)
  29. m_bBoundingBox = FALSE;
  30. m_bHidenLines = FALSE;
  31. m_bShadows = FALSE;
  32. m_bWireFrame = FALSE;
  33. m_fRenderingRange = 0.0f;
  34. m_bAutoRenderingRange = FALSE;
  35. m_bRenderEditorModels = FALSE;
  36. m_bUseTextureForBcg = FALSE;
  37. m_bRenderFieldBrushes = FALSE;
  38. m_bRenderFog = FALSE;
  39. m_bRenderHaze = FALSE;
  40. m_bRenderMirrors = FALSE;
  41. m_strBcgTexture = _T("");
  42. m_fFarClipPlane = 0.0f;
  43. m_bApplyFarClipInIsometricProjection = FALSE;
  44. //}}AFX_DATA_INIT
  45. m_VertexColors.SetPickerType( CColoredButton::PT_MFC);
  46. m_EdgesColors.SetPickerType( CColoredButton::PT_MFC);
  47. m_PolygonColors.SetPickerType( CColoredButton::PT_MFC);
  48. m_PaperColor.SetPickerType( CColoredButton::PT_MFC);
  49. m_SelectionColor.SetPickerType( CColoredButton::PT_MFC);
  50. m_GridColor.SetPickerType( CColoredButton::PT_MFC);
  51. }
  52. void CDlgRenderingPreferences::DoDataExchange(CDataExchange* pDX)
  53. {
  54. CDialog::DoDataExchange(pDX);
  55. CModelRenderPrefs &pmrpPrefs = theApp.m_vpViewPrefs[ m_iBuffer].m_mrpModelRenderPrefs;
  56. CWorldRenderPrefs &pwrpPrefs = theApp.m_vpViewPrefs[ m_iBuffer].m_wrpWorldRenderPrefs;
  57. // if dialog is recieving data
  58. if( (pDX->m_bSaveAndValidate == FALSE) && IsWindow( m_hWnd) &&
  59. IsWindow( m_VertexFillType.m_hWnd) &&
  60. IsWindow( m_EdgesFillType.m_hWnd) &&
  61. IsWindow( m_PolygonFillType.m_hWnd) &&
  62. IsWindow( m_TextureFillType.m_hWnd) )
  63. {
  64. // world rendering preferences
  65. m_VertexColors.SetColor( pwrpPrefs.GetVerticesInkColor());
  66. m_EdgesColors.SetColor( pwrpPrefs.GetEdgesInkColor());
  67. m_PolygonColors.SetColor( pwrpPrefs.GetPolygonsInkColor());
  68. m_PaperColor.SetColor( theApp.m_vpViewPrefs[ m_iBuffer].m_PaperColor);
  69. m_SelectionColor.SetColor( theApp.m_vpViewPrefs[ m_iBuffer].m_SelectionColor);
  70. m_GridColor.SetColor( theApp.m_vpViewPrefs[ m_iBuffer].m_GridColor);
  71. m_fFarClipPlane=pwrpPrefs.wrp_fFarClipPlane;
  72. m_bApplyFarClipInIsometricProjection=pwrpPrefs.wrp_bApplyFarClipPlaneInIsometricProjection;
  73. m_strBcgTexture = CTFileName(CTString( theApp.m_vpViewPrefs[ m_iBuffer].m_achrBcgPicture)).FileName();
  74. // get render editor models flag
  75. m_bRenderEditorModels = pwrpPrefs.IsEditorModelsOn();
  76. // get render field brushes flag
  77. m_bRenderFieldBrushes = pwrpPrefs.IsFieldBrushesOn();
  78. // get use texture for background flag
  79. m_bUseTextureForBcg = pwrpPrefs.IsBackgroundTextureOn();
  80. m_bRenderMirrors = pwrpPrefs.IsMirrorsOn();
  81. m_bRenderFog = pwrpPrefs.IsFogOn();
  82. m_bRenderHaze = pwrpPrefs.IsHazeOn();
  83. // get auto rendering range flag
  84. m_bAutoRenderingRange = theApp.m_vpViewPrefs[ m_iBuffer].m_bAutoRenderingRange;
  85. // get rendering range
  86. m_fRenderingRange = theApp.m_vpViewPrefs[ m_iBuffer].m_fRenderingRange;
  87. // enable/disable edit render range control depending on auto range flag
  88. UpdateEditRangeControl();
  89. // fill values for vertice's combo box
  90. m_VertexFillType.ResetContent();
  91. m_VertexFillType.AddString( L"No vertices");
  92. m_VertexFillType.AddString( L"Vertices ink");
  93. m_VertexFillType.AddString( L"Polygon color");
  94. m_VertexFillType.AddString( L"Sector color");
  95. // fill values for edges's combo box
  96. m_EdgesFillType.ResetContent();
  97. m_EdgesFillType.AddString( L"No edges");
  98. m_EdgesFillType.AddString( L"Edges ink");
  99. m_EdgesFillType.AddString( L"Polygon color");
  100. m_EdgesFillType.AddString( L"Sector color");
  101. // fill values for polygons's combo box
  102. m_PolygonFillType.ResetContent();
  103. m_PolygonFillType.AddString( L"No polygons");
  104. m_PolygonFillType.AddString( L"Polygons ink");
  105. m_PolygonFillType.AddString( L"Polygon color");
  106. m_PolygonFillType.AddString( L"Sector color");
  107. m_PolygonFillType.AddString( L"Texture");
  108. // fill values for model's texture combo
  109. m_TextureFillType.ResetContent();
  110. m_TextureFillType.AddString( L"No fill");
  111. m_TextureFillType.AddString( L"White color");
  112. m_TextureFillType.AddString( L"Surface colors");
  113. m_TextureFillType.AddString( L"On colors");
  114. m_TextureFillType.AddString( L"Off colors");
  115. m_TextureFillType.AddString( L"Texture");
  116. // fill values for flare FX combo
  117. m_comboFlareFX.ResetContent();
  118. m_comboFlareFX.AddString( L"None");
  119. m_comboFlareFX.AddString( L"Single flare");
  120. m_comboFlareFX.AddString( L"Reflections");
  121. m_comboFlareFX.AddString( L"Reflections and glare");
  122. INDEX iFillType;
  123. // set current fill type to vertices combo box
  124. iFillType = pwrpPrefs.GetVerticesFillType();
  125. m_VertexFillType.SetCurSel( iFillType);
  126. // set current fill type to edges combo box
  127. iFillType = pwrpPrefs.GetEdgesFillType();
  128. m_EdgesFillType.SetCurSel( iFillType);
  129. // set current fill type to polygons combo box
  130. iFillType = pwrpPrefs.GetPolygonsFillType();
  131. m_PolygonFillType.SetCurSel( iFillType);
  132. // set currently selected modeler's texture rendering type
  133. ULONG rtRenderType = pmrpPrefs.GetRenderType();
  134. iFillType = 0;
  135. if( (rtRenderType & RT_NO_POLYGON_FILL) != 0) iFillType = 0;
  136. else if( (rtRenderType & RT_WHITE_TEXTURE) != 0) iFillType = 1;
  137. else if( (rtRenderType & RT_SURFACE_COLORS) != 0) iFillType = 2;
  138. else if( (rtRenderType & RT_ON_COLORS) != 0) iFillType = 3;
  139. else if( (rtRenderType & RT_OFF_COLORS) != 0) iFillType = 4;
  140. else if( (rtRenderType & RT_TEXTURE) != 0) iFillType = 5;
  141. m_TextureFillType.SetCurSel( iFillType);
  142. enum CWorldRenderPrefs::LensFlaresType lftFlareFX = pwrpPrefs.GetLensFlares();
  143. m_comboFlareFX.SetCurSel( (INDEX) lftFlareFX);
  144. // set model rendering flags
  145. m_bBoundingBox = pmrpPrefs.BBoxAllVisible();
  146. m_bHidenLines = pmrpPrefs.HiddenLines();
  147. m_bShadows = pmrpPrefs.GetShadowQuality() == 0;
  148. m_bWireFrame = pmrpPrefs.WireOn();
  149. }
  150. //{{AFX_DATA_MAP(CDlgRenderingPreferences)
  151. DDX_Control(pDX, IDC_FLARE_FX, m_comboFlareFX);
  152. DDX_Control(pDX, IDC_SELECTION_COLOR, m_SelectionColor);
  153. DDX_Control(pDX, IDC_GRID_COLOR, m_GridColor);
  154. DDX_Control(pDX, IDC_PAPER_COLOR, m_PaperColor);
  155. DDX_Control(pDX, IDC_TEXTURE_FILL_TYPE, m_TextureFillType);
  156. DDX_Control(pDX, IDC_EDGES_FILL_TYPE, m_EdgesFillType);
  157. DDX_Control(pDX, IDC_POLYGON_FILL_TYPE, m_PolygonFillType);
  158. DDX_Control(pDX, IDC_VERTEX_FILL_TYPE, m_VertexFillType);
  159. DDX_Control(pDX, IDC_VERTEX_COLORS, m_VertexColors);
  160. DDX_Control(pDX, IDC_POLYGON_COLORS, m_PolygonColors);
  161. DDX_Control(pDX, IDC_EDGES_COLORS, m_EdgesColors);
  162. DDX_Check(pDX, IDC_BBOX, m_bBoundingBox);
  163. DDX_Check(pDX, IDC_HIDEN_LINES, m_bHidenLines);
  164. DDX_Check(pDX, IDC_SHADOWS, m_bShadows);
  165. DDX_Check(pDX, IDC_WIRE_FRAME, m_bWireFrame);
  166. DDX_Text(pDX, IDC_RENDERING_RANGE, m_fRenderingRange);
  167. DDV_MinMaxFloat(pDX, m_fRenderingRange, 1.f, 10000.f);
  168. DDX_Check(pDX, IDC_AUTO_RENDERING_RANGE, m_bAutoRenderingRange);
  169. DDX_Check(pDX, IDC_RENDER_EDITOR_MODELS, m_bRenderEditorModels);
  170. DDX_Check(pDX, IDC_USE_TEXTURE_FOR_BCG, m_bUseTextureForBcg);
  171. DDX_Check(pDX, IDC_RENDER_FIELDS, m_bRenderFieldBrushes);
  172. DDX_Check(pDX, IDC_RENDER_FOG, m_bRenderFog);
  173. DDX_Check(pDX, IDC_RENDER_HAZE, m_bRenderHaze);
  174. DDX_Check(pDX, IDC_RENDER_MIRRORS, m_bRenderMirrors);
  175. DDX_Text(pDX, IDC_BCG_PICTURE_T, m_strBcgTexture);
  176. DDX_Text(pDX, IDC_FAR_CLIP_PLANE, m_fFarClipPlane);
  177. DDV_MinMaxFloat(pDX, m_fFarClipPlane, -1.f, 1.e+007f);
  178. DDX_Check(pDX, IDC_APPLY_CLIP_FOR_ISOMETRIC, m_bApplyFarClipInIsometricProjection);
  179. //}}AFX_DATA_MAP
  180. // if dialog is giving data
  181. if( pDX->m_bSaveAndValidate != FALSE)
  182. {
  183. // set auto rendering range flag
  184. theApp.m_vpViewPrefs[ m_iBuffer].m_bAutoRenderingRange = m_bAutoRenderingRange;
  185. // set rendering range
  186. theApp.m_vpViewPrefs[ m_iBuffer].m_fRenderingRange = m_fRenderingRange;
  187. // set drawing of editor models on or off
  188. pwrpPrefs.SetEditorModelsOn( m_bRenderEditorModels);
  189. // set render field brushes flag
  190. pwrpPrefs.SetFieldBrushesOn( m_bRenderFieldBrushes);
  191. // set use texture for background flag
  192. pwrpPrefs.SetBackgroundTextureOn( m_bUseTextureForBcg);
  193. pwrpPrefs.SetMirrorsOn( m_bRenderMirrors);
  194. pwrpPrefs.SetFogOn( m_bRenderFog);
  195. pwrpPrefs.SetHazeOn( m_bRenderHaze);
  196. // enable/disable edit render range control depending on auto range flag
  197. UpdateEditRangeControl();
  198. // set colors
  199. pwrpPrefs.SetVerticesInkColor( m_VertexColors.GetColor());
  200. pwrpPrefs.SetEdgesInkColor( m_EdgesColors.GetColor());
  201. pwrpPrefs.SetPolygonsInkColor( m_PolygonColors.GetColor());
  202. theApp.m_vpViewPrefs[ m_iBuffer].m_PaperColor = m_PaperColor.GetColor();
  203. theApp.m_vpViewPrefs[ m_iBuffer].m_GridColor = m_GridColor.GetColor();
  204. theApp.m_vpViewPrefs[ m_iBuffer].m_SelectionColor = m_SelectionColor.GetColor();
  205. pwrpPrefs.wrp_fFarClipPlane=m_fFarClipPlane;
  206. pwrpPrefs.wrp_bApplyFarClipPlaneInIsometricProjection=m_bApplyFarClipInIsometricProjection;
  207. enum CWorldRenderPrefs::FillType ftFillType;
  208. // get current fill type from vertices combo box
  209. ftFillType = (enum CWorldRenderPrefs::FillType) m_VertexFillType.GetCurSel();
  210. pwrpPrefs.SetVerticesFillType( ftFillType);
  211. // get current fill type from edges combo box
  212. ftFillType = (enum CWorldRenderPrefs::FillType) m_EdgesFillType.GetCurSel();
  213. pwrpPrefs.SetEdgesFillType( ftFillType);
  214. // get current fill type from polygons combo box
  215. ftFillType = (enum CWorldRenderPrefs::FillType) m_PolygonFillType.GetCurSel();
  216. pwrpPrefs.SetPolygonsFillType( ftFillType);
  217. enum CWorldRenderPrefs::LensFlaresType lftFlares;
  218. // get type for rendering flares
  219. lftFlares = (enum CWorldRenderPrefs::LensFlaresType) m_comboFlareFX.GetCurSel();
  220. pwrpPrefs.SetLensFlaresType( lftFlares);
  221. // get current model's texturizing type from model's texture combo box
  222. ULONG ulMdlFillType;
  223. ulMdlFillType = m_TextureFillType.GetCurSel();
  224. switch( ulMdlFillType)
  225. {
  226. case 0: {
  227. pmrpPrefs.SetRenderType( RT_NO_POLYGON_FILL);
  228. break;
  229. }
  230. case 1: {
  231. pmrpPrefs.SetRenderType( RT_WHITE_TEXTURE);
  232. break;
  233. }
  234. case 2: {
  235. pmrpPrefs.SetRenderType( RT_SURFACE_COLORS);
  236. break;
  237. }
  238. case 3: {
  239. pmrpPrefs.SetRenderType( RT_ON_COLORS);
  240. break;
  241. }
  242. case 4: {
  243. pmrpPrefs.SetRenderType( RT_OFF_COLORS);
  244. break;
  245. }
  246. case 5: {
  247. pmrpPrefs.SetRenderType( RT_TEXTURE);
  248. break;
  249. }
  250. default: {
  251. ASSERTALWAYS( "Invalid selection found in model's texture combo box");
  252. }
  253. }
  254. // get rest of model's rendering preferences
  255. pmrpPrefs.SetWire( m_bWireFrame);
  256. pmrpPrefs.SetHiddenLines( m_bHidenLines);
  257. pmrpPrefs.BBoxAllShow( m_bBoundingBox);
  258. if( m_bShadows) {
  259. pmrpPrefs.SetShadowQuality( 0);
  260. } else {
  261. pmrpPrefs.SetShadowQuality( 255);
  262. }
  263. }
  264. }
  265. BEGIN_MESSAGE_MAP(CDlgRenderingPreferences, CDialog)
  266. //{{AFX_MSG_MAP(CDlgRenderingPreferences)
  267. ON_BN_CLICKED(ID_LOAD_PREFERENCES, OnLoadPreferences)
  268. ON_BN_CLICKED(ID_SAVE_PREFERENCES, OnSavePreferences)
  269. ON_BN_CLICKED(IDC_AUTO_RENDERING_RANGE, OnAutoRenderingRange)
  270. ON_BN_CLICKED(IDC_BROWSE_BCG_PICTURE, OnBrowseBcgPicture)
  271. //}}AFX_MSG_MAP
  272. END_MESSAGE_MAP()
  273. /////////////////////////////////////////////////////////////////////////////
  274. // CDlgRenderingPreferences message handlers
  275. BOOL CDlgRenderingPreferences::OnInitDialog()
  276. {
  277. CDialog::OnInitDialog();
  278. CModelRenderPrefs &pmrpPrefs = theApp.m_vpViewPrefs[ m_iBuffer].m_mrpModelRenderPrefs;
  279. CWorldRenderPrefs &pwrpPrefs = theApp.m_vpViewPrefs[ m_iBuffer].m_wrpWorldRenderPrefs;
  280. // we will set window's name so we know on which buffer we are working on
  281. char chrWndTitle[ 64];
  282. // create new name
  283. if( m_iBuffer!=10)
  284. {
  285. sprintf( chrWndTitle, "Change rendering preferences of buffer %d.", m_iBuffer+1);
  286. }
  287. else
  288. {
  289. sprintf( chrWndTitle, "Change rendering preferences");
  290. }
  291. // set it as window new title
  292. SetWindowText( CString(chrWndTitle));
  293. // set dialog data
  294. UpdateData( FALSE);
  295. return TRUE; // return TRUE unless you set the focus to a control
  296. // EXCEPTION: OCX Property Pages should return FALSE
  297. }
  298. void CDlgRenderingPreferences::OnLoadPreferences()
  299. {
  300. // load world and model's rendering preferences
  301. theApp.LoadRenderingPreferences();
  302. // set dialog data
  303. UpdateData( FALSE);
  304. }
  305. void CDlgRenderingPreferences::OnSavePreferences()
  306. {
  307. // get data from dialog
  308. UpdateData( TRUE);
  309. // load world and model's rendering preferences
  310. theApp.SaveRenderingPreferences();
  311. }
  312. void CDlgRenderingPreferences::UpdateEditRangeControl()
  313. {
  314. // get edit rendering range control
  315. CWnd *pWnd = GetDlgItem( IDC_RENDERING_RANGE);
  316. // must exists
  317. ASSERT( pWnd != NULL);
  318. // if rendering range flag is on
  319. if( m_bAutoRenderingRange)
  320. {
  321. // disable edit rendering range control
  322. pWnd->EnableWindow( FALSE);
  323. }
  324. else
  325. {
  326. // otherwise enable it
  327. pWnd->EnableWindow( TRUE);
  328. }
  329. }
  330. void CDlgRenderingPreferences::OnAutoRenderingRange()
  331. {
  332. m_bAutoRenderingRange = !m_bAutoRenderingRange;
  333. // set dialog data
  334. UpdateData( TRUE);
  335. // enable/disable edit range control
  336. UpdateEditRangeControl();
  337. }
  338. void CDlgRenderingPreferences::OnBrowseBcgPicture()
  339. {
  340. CTFileName fnBcgPicture = _EngineGUI.FileRequester( "Select background texture",
  341. "Texture (*.tex)\0*.tex\0" FILTER_TEX FILTER_END, "Background textures", "");
  342. if( fnBcgPicture == "") return;
  343. sprintf( theApp.m_vpViewPrefs[ m_iBuffer].m_achrBcgPicture, "%s", fnBcgPicture);
  344. m_strBcgTexture = fnBcgPicture.FileName();
  345. UpdateData( FALSE);
  346. }