3dpagecloud.cpp
上传用户:shxiangxiu
上传日期:2007-01-03
资源大小:1101k
文件大小:6k
源码类别:

OpenGL

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // 3dPageCloud.cpp : implementation file
  3. //
  4. // glOOP (OpenGL Object Oriented Programming library)
  5. // Copyright (c) Craig Fahrnbach 1997, 1998
  6. //
  7. // OpenGL is a registered trademark of Silicon Graphics
  8. //
  9. //
  10. // This program is provided for educational and personal use only and
  11. // is provided without guarantee or warrantee expressed or implied.
  12. //
  13. // Commercial use is strickly prohibited without written permission
  14. // from ImageWare Development.
  15. //
  16. // This program is -not- in the public domain.
  17. //
  18. /////////////////////////////////////////////////////////////////////////////
  19. #include "stdafx.h"
  20. #include "glOOP.h"
  21. #include "3dObjectDialog.h"
  22. #ifdef _DEBUG
  23. #undef THIS_FILE
  24. static char BASED_CODE THIS_FILE[] = __FILE__;
  25. #endif
  26. //////////////////////////////////////////////////////////////////
  27. // C3dPageCloud
  28. IMPLEMENT_DYNCREATE(C3dPageCloud, CPropertyPage)
  29. /////////////////////////////////////////////////////////////////////////////
  30. // C3dPageCloud dialog construction
  31. C3dPageCloud::C3dPageCloud()
  32. : CPropertyPage(C3dPageCloud::IDD)
  33. {
  34. m_bInitVertices = FALSE;
  35. //{{AFX_DATA_INIT(C3dPageCloud)
  36. m_szName = _T("");
  37. m_bRandomSeed = FALSE;
  38. m_iHeightSeed = 0;
  39. m_fDepth = 0.0f;
  40. m_fWidth = 0.0f;
  41. m_iTile = 0;
  42. //}}AFX_DATA_INIT
  43. }
  44. /////////////////////////////////////////////////////////////////////////////
  45. // C3dPageCloud Destructor
  46. C3dPageCloud::~C3dPageCloud()
  47. {
  48. }
  49. void C3dPageCloud::DoDataExchange(CDataExchange* pDX)
  50. {
  51. CPropertyPage::DoDataExchange(pDX);
  52. //{{AFX_DATA_MAP(C3dPageCloud)
  53. DDX_Control(pDX, IDC_SLIDER_HEIGHT, m_SliderHeight);
  54. DDX_Control(pDX, IDC_SLIDER_DENSITY, m_SliderDensity);
  55. DDX_Text(pDX, IDC_NAME, m_szName);
  56. DDV_MaxChars(pDX, m_szName, 40);
  57. DDX_Text(pDX, IDC_DEPTH, m_fDepth);
  58. DDX_Text(pDX, IDC_HEIGHT_SEED, m_iHeightSeed);
  59. DDX_Text(pDX, IDC_TILE, m_iTile);
  60. DDX_Text(pDX, IDC_WIDTH, m_fWidth);
  61. DDX_Check(pDX, IDC_RANDOM_SEED, m_bRandomSeed);
  62. //}}AFX_DATA_MAP
  63. }
  64. BEGIN_MESSAGE_MAP(C3dPageCloud, CPropertyPage)
  65. //{{AFX_MSG_MAP(C3dPageCloud)
  66. ON_WM_VSCROLL()
  67. ON_EN_CHANGE(IDC_HEIGHT_SEED, OnChangeHeightSeed)
  68. ON_EN_CHANGE(IDC_DEPTH, OnChangeDepth)
  69. ON_EN_CHANGE(IDC_WIDTH, OnChangeWidth)
  70. //}}AFX_MSG_MAP
  71. END_MESSAGE_MAP()
  72. /////////////////////////////////////////////////////////////////////////////
  73. // C3dPageCloud message handlers
  74. BOOL C3dPageCloud::OnInitDialog() 
  75. {
  76. // Let the base class do the default work
  77. CPropertyPage::OnInitDialog();
  78. // Set our local values to the Objects' values
  79. m_szName = m_pObject->m_szName;
  80. m_fDepth = m_pObject->m_fDepth;
  81. m_fWidth = m_pObject->m_fWidth;
  82. m_iHeightSeed = m_pObject->m_iHeightSeed;
  83. m_iTile = m_pObject->m_iTile;
  84. // Set our Cloud bump height, or smoothness, slider. Scaled by 100.
  85. m_SliderHeight.SetRange(0, 100, TRUE);
  86. m_SliderHeight.SetPos((int)(m_pObject->m_fBumpHeight*100));
  87. // Set our Cloud density slider.  Range 0 to .5, scaled by 100
  88. m_SliderDensity.SetRange(0, 50, TRUE);
  89. m_SliderDensity.SetPos((int)(m_pObject->m_fDensity*100));
  90. // Dialog box is being initialized (FALSE)
  91. // or data is being retrieved (TRUE).
  92. UpdateData(FALSE);
  93. return TRUE;  // return TRUE unless you set the focus to a control
  94.               // EXCEPTION: OCX Property Pages should return FALSE
  95. }
  96. void C3dPageCloud::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  97. {
  98. // The property page settings have been modified, so 
  99. // Enable (TRUE) or disable (FALSE) the Apply Now button
  100. SetModified(TRUE);
  101. // User has modified the planes depth, so set our vertice
  102. // initialization flag
  103. m_bInitVertices = TRUE;
  104. int posn;
  105. C3dObjectCloud* pCloud = m_pObject;
  106. if(pScrollBar == (CScrollBar*)&m_SliderHeight)
  107. {
  108. // Get the position of our slider control.
  109. posn = m_SliderHeight.GetPos();
  110. pCloud->m_fBumpHeight = (float)posn/100.f;
  111. }
  112. else if(pScrollBar == (CScrollBar*)&m_SliderDensity)
  113. {
  114. posn = m_SliderDensity.GetPos();
  115. pCloud->m_fDensity = (float)posn/100.f;
  116. }
  117. CPropertyPage::OnVScroll(nSBCode, nPos, pScrollBar);
  118. }
  119. void C3dPageCloud::OnChangeHeightSeed() 
  120. {
  121. // The property page settings have been modified, so 
  122. // Enable (TRUE) or disable (FALSE) the Apply Now button
  123. SetModified(TRUE);
  124. // User has modified the clouds random seed height, so set our vertice
  125. // initialization flag
  126. m_bInitVertices = TRUE;
  127. }
  128. void C3dPageCloud::OnChangeDepth() 
  129. {
  130. // The property page settings have been modified, so 
  131. // Enable (TRUE) or disable (FALSE) the Apply Now button
  132. SetModified(TRUE);
  133. // User has modified the clouds' depth, so set our vertice
  134. // initialization flag
  135. m_bInitVertices = TRUE;
  136. }
  137. void C3dPageCloud::OnChangeWidth() 
  138. {
  139. // The property page settings have been modified, so 
  140. // Enable (TRUE) or disable (FALSE) the Apply Now button
  141. SetModified(TRUE);
  142. // User has modified the clouds' width, so set our vertice
  143. // initialization flag
  144. m_bInitVertices = TRUE;
  145. }
  146. void C3dPageCloud::OnOK() 
  147. {
  148. CPropertyPage::OnOK();
  149. }
  150. BOOL C3dPageCloud::OnApply() 
  151. {
  152. // The property page settings have been modified, so 
  153. // Enable (TRUE) or disable (FALSE) the Apply Now button
  154. SetModified(FALSE);
  155. // Dialog box is being initialized (FALSE)
  156. // or data is being retrieved (TRUE).
  157. UpdateData(TRUE);
  158. // Set the Objects Origin..
  159. m_pObject->m_szName = m_szName; 
  160. m_pObject->m_fDepth = m_fDepth; 
  161. m_pObject->m_fWidth = m_fWidth; 
  162. m_pObject->m_iTile = m_iTile; 
  163. if(m_bRandomSeed)
  164. m_pObject->m_iHeightSeed = -1;
  165. else
  166. m_pObject->m_iHeightSeed = m_iHeightSeed; 
  167. // Force the object to rebuild its' display list
  168. m_pObject->m_bBuildLists = TRUE;
  169. // Rebuild our objects vertices?
  170. if(m_bInitVertices)
  171. m_pObject->InitVertices();
  172. return CPropertyPage::OnApply();
  173. }