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

OpenGL

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // 3dPageCylinder.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. // C3dPageCylinder
  28. IMPLEMENT_DYNCREATE(C3dPageCylinder, CPropertyPage)
  29. /////////////////////////////////////////////////////////////////////////////
  30. // C3dPageCylinder dialog construction
  31. C3dPageCylinder::C3dPageCylinder()
  32. : CPropertyPage(C3dPageCylinder::IDD)
  33. {
  34. m_bInitVertices = FALSE;
  35. //{{AFX_DATA_INIT(C3dPageCylinder)
  36. m_iSolid = -1;
  37. m_fTopRadius = 0.0f;
  38. m_fBaseRadius = 0.0f;
  39. m_szName = _T("");
  40. m_iSegments = 0;
  41. m_iSmooth = -1;
  42. //}}AFX_DATA_INIT
  43. }
  44. /////////////////////////////////////////////////////////////////////////////
  45. // C3dPageCylinder Destructor
  46. C3dPageCylinder::~C3dPageCylinder()
  47. {
  48. }
  49. void C3dPageCylinder::DoDataExchange(CDataExchange* pDX)
  50. {
  51. CPropertyPage::DoDataExchange(pDX);
  52. //{{AFX_DATA_MAP(C3dPageCylinder)
  53. DDX_Radio(pDX, IDC_RADIO_SOLID, m_iSolid);
  54. DDX_Text(pDX, IDC_HEIGHT, m_fHeight);
  55. DDX_Text(pDX, IDC_TOP_RADIUS, m_fTopRadius);
  56. DDX_Text(pDX, IDC_BASE_RADIUS, m_fBaseRadius);
  57. DDX_Text(pDX, IDC_NAME, m_szName);
  58. DDV_MaxChars(pDX, m_szName, 40);
  59. DDX_Text(pDX, IDC_SEGMENTS, m_iSegments);
  60. DDX_Radio(pDX, IDC_RADIO_SMOOTH, m_iSmooth);
  61. //}}AFX_DATA_MAP
  62. }
  63. BEGIN_MESSAGE_MAP(C3dPageCylinder, CPropertyPage)
  64. //{{AFX_MSG_MAP(C3dPageCylinder)
  65. ON_EN_CHANGE(IDC_BASE_RADIUS, OnChangeBaseRadius)
  66. ON_EN_CHANGE(IDC_HEIGHT, OnChangeHeight)
  67. ON_EN_CHANGE(IDC_TOP_RADIUS, OnChangeTopRadius)
  68. ON_EN_CHANGE(IDC_SEGMENTS, OnChangeSegments)
  69. ON_BN_CLICKED(IDC_RADIO_SOLID, OnRadioSolid)
  70. ON_BN_CLICKED(IDC_RADIO_SMOOTH, OnRadioSmooth)
  71. //}}AFX_MSG_MAP
  72. END_MESSAGE_MAP()
  73. /////////////////////////////////////////////////////////////////////////////
  74. // C3dPageCylinder message handlers
  75. BOOL C3dPageCylinder::OnInitDialog() 
  76. {
  77. // Set our local values to the Objects' values
  78. m_szName   = m_pObject->m_szName;
  79. m_fHeight     = m_pObject->m_fHeight;
  80. m_fTopRadius  = m_pObject->m_fTopRadius;
  81. m_fBaseRadius = m_pObject->m_fBaseRadius;
  82. m_iSegments   = m_pObject->m_iSegments;
  83. m_iSolid  = !m_pObject->m_bSolid;
  84. m_iSmooth = !m_pObject->m_bSmooth;
  85. CPropertyPage::OnInitDialog();  // let the base class do the default work
  86. return TRUE;  // return TRUE unless you set the focus to a control
  87.               // EXCEPTION: OCX Property Pages should return FALSE
  88. }
  89. void C3dPageCylinder::OnOK() 
  90. {
  91. // Dialog box is being initialized (FALSE)
  92. // or data is being retrieved (TRUE).
  93. UpdateData(TRUE);
  94. // Set our Objects' values to the local values
  95. m_pObject->m_szName      = m_szName; 
  96. m_pObject->m_fHeight     = m_fHeight;
  97. m_pObject->m_fTopRadius  = m_fTopRadius;
  98. m_pObject->m_fBaseRadius = m_fBaseRadius;
  99. m_pObject->m_iSegments   = m_iSegments;
  100. // Force the object to rebuild its' display list
  101. m_pObject->m_bBuildLists = TRUE;
  102. // Rebuild our objects vertices?
  103. if(m_bInitVertices)
  104. m_pObject->InitVertices();
  105. CPropertyPage::OnOK();
  106. }
  107. void C3dPageCylinder::OnRadioSolid() 
  108. {
  109. // Toggle the radio selection
  110. if(m_pObject->m_bSolid) {
  111. m_pObject->m_bSolid = FALSE;
  112. m_iSolid = 1;
  113. }
  114. else {
  115. m_pObject->m_bSolid = TRUE;
  116. m_iSolid = 0;
  117. }
  118. // Initialize the Dialog Data (forces DoDataExchange)
  119. UpdateData(FALSE);
  120. }
  121. void C3dPageCylinder::OnRadioSmooth() 
  122. {
  123. // Toggle the radio selection
  124. if(m_pObject->m_bSmooth) {
  125. m_pObject->m_bSmooth = FALSE;
  126. m_iSmooth = 1;
  127. }
  128. else {
  129. m_pObject->m_bSmooth = TRUE;
  130. m_iSmooth = 0;
  131. }
  132. // Initialize the Dialog Data (forces DoDataExchange)
  133. UpdateData(FALSE);
  134. }
  135. void C3dPageCylinder::OnChangeBaseRadius() 
  136. {
  137. // User has modified the cylinders base radius, so set our vertice
  138. // initialization flag
  139. m_bInitVertices = TRUE;
  140. }
  141. void C3dPageCylinder::OnChangeTopRadius() 
  142. {
  143. // User has modified the cylinders top radius, so set our vertice
  144. // initialization flag
  145. m_bInitVertices = TRUE;
  146. }
  147. void C3dPageCylinder::OnChangeHeight() 
  148. {
  149. // User has modified the cylinders height, so set our vertice
  150. // initialization flag
  151. m_bInitVertices = TRUE;
  152. }
  153. void C3dPageCylinder::OnChangeSegments() 
  154. {
  155. // User has modified the cylinders height, so set our vertice
  156. // initialization flag
  157. m_bInitVertices = TRUE;
  158. }