AllContour.cpp
上传用户:ynjin1970
上传日期:2014-10-13
资源大小:6438k
文件大小:2k
源码类别:

中间件编程

开发平台:

Visual C++

  1. // AllContour.cpp: implementation of the CAllContour class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. //#include "ct.h"
  6. #include "AllContour.h"
  7. #include "OneContour.h"
  8. #include <math.h>
  9. #ifdef _DEBUG
  10. #undef THIS_FILE
  11. static char THIS_FILE[]=__FILE__;
  12. #define new DEBUG_NEW
  13. #endif
  14. //////////////////////////////////////////////////////////////////////
  15. // Construction/Destruction
  16. //////////////////////////////////////////////////////////////////////
  17. CAllContour::CAllContour()
  18. {
  19. contourcount_ = 0;
  20. }
  21. CAllContour::~CAllContour()
  22. {
  23. delete []contour_;
  24. }
  25. void CAllContour::Initial(CTriangulate *T) // 接受一个三角网并寻找一个合理的基准值和增量
  26. {
  27. SearchMaxMinZ(T);
  28. // 为basez和incz寻找一个较合理的基准值和增量
  29. startz_ = minz_;
  30. incz_ = (maxz_ - minz_) / 15;
  31. endz_ = maxz_;
  32. Initial(T, startz_, endz_, incz_);
  33. }
  34. /*
  35.    接受一个三角网并指定基准值和增量,
  36.    同时确定等值线的数量并分配内存。
  37. */ 
  38. void CAllContour::Initial(CTriangulate *T, double basez, double incz) 
  39. {
  40. SearchMaxMinZ(T);
  41. startz_ = minz_ + fmod(fabs(minz_ - startz_), incz);
  42. incz_ = incz;
  43. endz_ = maxz_;
  44. Initial(T, startz_, endz_, incz_);
  45. }
  46. void CAllContour::CreateAllContour()
  47. {
  48. for ( int i = 0; i < contourcount_; i++)
  49. {
  50. contour_[i].Initial(t_, startz_ + i * incz_, 0);
  51. contour_[i].CreateContour();
  52. }
  53. }
  54.  int CAllContour::GetContourCount()
  55.  {
  56.   return contourcount_;
  57.  }
  58.  COneContour* CAllContour::GetContour()
  59.  {
  60.   return contour_;
  61.  }
  62.  // 查找三角网中z值的最大最小值
  63. void CAllContour::SearchMaxMinZ(CTriangulate *T)
  64. {
  65. XYZ *pv = T->GetVertex();
  66. int vcount = T->GetVertexCount();
  67. // search zvalue's maxium and minium of vertex
  68. minz_ = pv[0].z;
  69. maxz_ = minz_;
  70. for ( int i = 1; i < vcount; i++)
  71. {
  72. if (pv[i].z > maxz_) maxz_ = pv[i].z;
  73. if (pv[i].z < minz_) minz_ = pv[i].z;
  74. }
  75. }
  76. void CAllContour::Initial(CTriangulate *T, double startZ, double endZ, double incZ)
  77. {
  78. SearchMaxMinZ(T);
  79. if ( startZ < minz_ || endZ > maxz_ ) 
  80. {
  81. AfxMessageBox("起始值和终止值应该在Z值的最大最小值之间。",0,0);
  82. return;
  83. }
  84. t_ = T;
  85. startz_ = startZ;
  86. endz_ = endZ;
  87. incz_ = incZ;
  88. // 统计contour_的大小并分配内存
  89. double tmpsum = startz_;
  90. while( tmpsum < endz_ ) // 统计循环次数
  91. {
  92. contourcount_++;
  93. tmpsum += incz_;
  94. }
  95. contour_ = new COneContour[contourcount_];
  96. }