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

OpenGL

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // 3dObjectHSpline.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. // HSplines by Joe Dart, 1999
  19. //
  20. // ???? this ok?  ** Modify as necessary **
  21. //
  22. /////////////////////////////////////////////////////////////////////////////
  23. #include "stdafx.h"
  24. #include "glOOP.h"
  25. #include "3dObjectDialog.h"
  26. #include <math.h>
  27. #ifdef _DEBUG
  28. #define new DEBUG_NEW
  29. #undef THIS_FILE
  30. static char THIS_FILE[] = __FILE__;
  31. #endif
  32. //////////////////////////////////////////////////////////////////
  33. // C3dObjectHSpline
  34. IMPLEMENT_DYNAMIC(C3dObjectHSpline, C3dObject)
  35. /////////////////////////////////////////////////////////////////////////////
  36. // C3dShape construction
  37. C3dObjectHSpline::C3dObjectHSpline()
  38. {
  39. // Set the attributes to default values..
  40.   m_iType = SHAPE_OBJECT;
  41.    m_szName.Format("hSpline %u", nHSplineObjects++);
  42. //*****************************************************************
  43. // Add your member variable initializations here
  44. //*****************************************************************
  45. // Create our C3dPointArray object
  46. m_pPointArray = new C3dPointArray;
  47. ASSERT(m_pPointArray);
  48. }
  49. /////////////////////////////////////////////////////////////////////////////
  50. // C3DWorld Destructor
  51. C3dObjectHSpline::~C3dObjectHSpline()
  52. {
  53. // Delete our point array
  54. if(m_pPointArray)
  55. delete m_pPointArray;
  56. }
  57. /////////////////////////////////////////////////////////////////////////////
  58. // C3dObjectHSpline virtual function overrides
  59. void C3dObjectHSpline::AddAttributePage(C3dWorld* pWorld, LPVOID pSht)
  60. {
  61. C3dObjectPropSheet* pSheet = (C3dObjectPropSheet*)pSht;
  62. ASSERT(pSheet);
  63. // Add the page to the property sheet
  64. pSheet->AddPage(&pSheet->m_HSplinePage);
  65. // Save the address of this object in the page
  66. pSheet->m_HSplinePage.m_pObject = this;
  67. }
  68. void C3dObjectHSpline::GetShapeBounds(C3dBoundingBox* pBox)
  69. {
  70. //*****************************************************************
  71. // Add your code to calculate the bounds of the shape
  72. //*****************************************************************
  73. }
  74. int C3dObjectHSpline::LoadBitMapImage(CImageList* pList)
  75. {
  76. CBitmap bitmap;
  77. // If the image index has been stored in this object,
  78. // return the index.
  79. if(m_iBMImage > -1)
  80. return m_iBMImage;
  81. // If the image index for this object type has been
  82. // created, store the index for this object and
  83. // return the index.
  84. if( iObjectHSplineBMImage > -1) {
  85. m_iBMImage = iObjectHSplineBMImage;
  86. return m_iBMImage;
  87. }
  88. // The image index for this object type has not been
  89. // loaded and the object image index has not been
  90. // stored.
  91. //
  92. // Load the bitmap for the non-selected object
  93. bitmap.LoadBitmap(IDB_OBJECT_HSPLINE);
  94. m_iBMImage = pList->Add(&bitmap, (COLORREF)0xFFFFFF);
  95. bitmap.DeleteObject();
  96. // Load the bitmap for the non-selected object
  97. bitmap.LoadBitmap(IDB_OBJECT_HSPLINE_SELECTED);
  98. pList->Add(&bitmap, (COLORREF)0xFFFFFF);
  99. bitmap.DeleteObject();
  100. iObjectHSplineBMImage = m_iBMImage;
  101. return m_iBMImage;
  102. }
  103. void C3dObjectHSpline::Serialize(CArchive& ar, int iVersion)
  104. {
  105. CString szBuffer;
  106. if (ar.IsStoring())
  107. {
  108. // Save the Object Class header...
  109. szBuffer.Format("n%sC3dObjectHSpline {n", szIndent);
  110. ar.WriteString(szBuffer);
  111. // Save the this objects' specific data...
  112. //***************************************************
  113. //******* Add your object specific date here  *******
  114. //***************************************************
  115. // Save the base class object data...
  116. C3dObject::Serialize(ar, iVersion);
  117. szBuffer.Format("%s}n", szIndent); // end of object def
  118. ar.WriteString(szBuffer);
  119. }
  120. else
  121. {
  122. if(iVersion < 102)
  123. // Read the base class object data...
  124. C3dObject::Serialize(ar, iVersion);
  125. // Read the derived class data..
  126. //***************************************************
  127. //******* Add your object specific date here  *******
  128. //***************************************************
  129. // Create the array of points
  130. if(!m_pPointArray->Create(m_pPointArray->m_iNumPoints))
  131. {
  132. // Now that the points array has been created,
  133. // read the point data.
  134. for(int i=0; i<m_pPointArray->m_iNumPoints; i++)
  135. {
  136. ar.ReadString(szBuffer);
  137. szBuffer.TrimLeft();
  138. sscanf(szBuffer, "< %f, %f, %f >n", &m_pPointArray->m_pPoints[i].m_fOrigin[0],
  139.  &m_pPointArray->m_pPoints[i].m_fOrigin[1],
  140.  &m_pPointArray->m_pPoints[i].m_fOrigin[2]);
  141. }
  142. }
  143. if(iVersion < 102)
  144. // Read all child objects...
  145. LoadChildObjects(ar, iVersion);
  146. else
  147. // Read the base class object data...
  148. C3dObject::Serialize(ar, iVersion);
  149. }
  150. }
  151. void C3dObjectHSpline::Build(C3dWorld* pWorld, C3dCamera* pCamera)
  152. {
  153. glNewList(m_iDisplayLists, GL_COMPILE_AND_EXECUTE);
  154. //*****************************************************************
  155. // Add your code to 'build' the object, in object coordinates, here
  156. //*****************************************************************
  157. glEndList();
  158. }
  159. /////////////////////////////////////////////////////////////////////////////
  160. // C3dObjectHSpline function implimentation