Circle.cpp
上传用户:yklx818
上传日期:2013-04-13
资源大小:459k
文件大小:3k
源码类别:

GIS编程

开发平台:

Visual C++

  1. // Circle.cpp: implementation of the CCircle class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Draw.h"
  6. #include "Circle.h"
  7. //#include "DrawDoc.h"
  8. #include "Data.h"
  9. #define pi 3.1415926
  10. #ifdef _DEBUG
  11. #undef THIS_FILE
  12. static char THIS_FILE[]=__FILE__;
  13. #define new DEBUG_NEW
  14. #endif
  15. //extern CGraphPara *p_GraphPara;
  16. //////////////////////////////////////////////////////////////////////
  17. // Construction/Destruction
  18. //////////////////////////////////////////////////////////////////////
  19. extern IsRectCross(float minx,float miny,float maxx,float maxy);
  20. CCircle::CCircle();
  21. /*float xMinScreen,yMinScreen,xMaxScreen,yMaxScreen;
  22. BOOL IsRectCross(float minx,float miny,float maxx,float maxy);
  23. BOOL CText::IsRectCross(float minx,float miny,float maxx,float maxy)
  24. {
  25. if(minx>xMaxScreen||maxx<xMinScreen||miny>yMaxScreen||maxy<yMinScreen)
  26. return FALSE;  //如两个矩形不相交
  27. else
  28. return TRUE;
  29. }*/
  30. void CCircle::Draw(CDC* pDC,int m_DrawMode,int m_DrawModel,short BackColor)
  31. {
  32. int x,y,r;
  33. if(b_Delete)
  34. {
  35. return ;
  36. }
  37. float minx,miny,maxx,maxy;
  38. GetRect(&minx,&miny,&maxx,&maxy);//得到边界矩形
  39. if(!IsRectCross(minx,miny,maxx,maxy))//如果边界矩形不与屏幕窗口相交
  40. return;
  41. short LineType=m_LineType;
  42. short LineWide=max(1,DLtoVL(m_LineWide));
  43. short ColorPen=m_ColorPen;
  44. short ColorBrush=m_ColorBrush;
  45. if(m_DrawModel==1)
  46. {
  47. if(m_LineType!=2)
  48. LineType=2;
  49. else
  50. LineType++;
  51. }
  52. else if(m_DrawModel==2)
  53. {
  54. ColorPen=BackColor;
  55. ColorBrush=BackColor;
  56. }
  57. CGraphPara m_GraphPara;
  58.     CGraphPara *p_GraphPara;
  59. p_GraphPara=&m_GraphPara;
  60. CPen pen(LineType,LineWide,p_GraphPara->GetColor(ColorPen));
  61. CPen* pOldPen=pDC->SelectObject(&pen);
  62. CBrush brush(p_GraphPara->GetColor(m_ColorBrush));
  63. CBrush* pOldBrush=pDC->SelectObject(&brush);
  64. if(m_DrawMode==0)
  65. pDC->SetROP2(R2_COPYPEN);
  66. else if(m_DrawMode==1)
  67. pDC->SetROP2(R2_NOT);
  68. if(!m_bFill)
  69. pDC->SelectStockObject(NULL_BRUSH);
  70. DPtoVP(m_CircleX,m_CircleY,&x,&y);
  71. r=DLtoVL(m_CircleR);
  72. pDC->Ellipse(x-r,y-r,x+r,y+r);
  73. pDC->SelectObject(pOldPen);
  74. pDC->SelectObject(pOldBrush);
  75. }
  76. void CCircle::CalLong()
  77. {
  78. m_fLong=m_CircleR*2*pi;
  79. }
  80. void CCircle::CalArea()
  81. {
  82. m_fArea=pi*m_CircleR*m_CircleR;
  83. }
  84. void CCircle::GetRect(float* minX,float* minY,float* maxX,float* maxY)
  85. {
  86. *minX=m_CircleX-m_CircleR;
  87. *minY=m_CircleY-m_CircleR;
  88. *maxX=m_CircleX+m_CircleR;
  89. *maxY=m_CircleY+m_CircleR;
  90. }
  91. BOOL CCircle::IsPoint(float x,float y,float j1,float blc)
  92. {
  93. float xx;
  94. if(b_Delete)
  95. return FALSE;
  96. xx=CalDisp(x,y,m_CircleX,m_CircleY);
  97. if(!m_bFill)
  98. {
  99. if((xx>m_CircleR-j1&&xx<m_CircleR+j1))
  100. return TRUE;
  101. }
  102. else
  103. {
  104. if(xx<=m_CircleR)
  105. return TRUE;
  106. }
  107. return FALSE;
  108. }
  109. void CCircle::Move(float x_Move,float y_Move)
  110. {
  111. m_CircleX+=x_Move;
  112. m_CircleY+=y_Move;
  113. }
  114. void CCircle::Rotate(float baseX,float baseY,float angle)
  115. {
  116. RotatePoint(baseX,baseY,angle,&this->m_CircleX,&this->m_CircleY);
  117. }
  118. BOOL CCircle::IsFill()
  119. {
  120. return m_bFill;
  121. }
  122. CCircle::~CCircle()
  123. {
  124. }