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

GIS编程

开发平台:

Visual C++

  1. // Line.cpp: implementation of the CLine class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Draw.h"
  6. #include "Line.h"
  7. //#include "DrawDoc.h"
  8. //#include "Data.h"
  9. #include "math.h"
  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. //CLine::CLine()
  20. //{
  21. //}
  22. extern BOOL IsRectCross(float minx,float miny,float maxx,float maxy);
  23. void CLine::Draw(CDC* pDC,int m_DrawMode,int m_DrawModel,short BackColor)
  24. {
  25. int x1,y1,x2,y2;
  26. if(b_Delete)
  27. return ;
  28. float minx,miny,maxx,maxy;
  29. GetRect(&minx,&miny,&maxx,&maxy);//得到边界矩形
  30. if(!IsRectCross(minx,miny,maxx,maxy))//如果边界矩形不与屏幕窗口相交
  31. {
  32. return;
  33. }
  34. short LineType=m_LineType;
  35. short LineWide=max(1,DLtoVL(m_LineWide));
  36. short ColorPen=m_ColorPen;
  37. if(m_DrawModel==1)
  38. {
  39. if(m_LineType!=2)
  40. LineType=2;
  41. else
  42. LineType++;
  43. }
  44. if(m_DrawModel==2)
  45. {
  46. ColorPen=BackColor;
  47. }
  48. CGraphPara m_GraphPara;
  49.     CGraphPara *p_GraphPara;
  50. p_GraphPara=&m_GraphPara;
  51. CPen pen(LineType,LineWide,p_GraphPara->GetColor(ColorPen));
  52. CPen* pOldPen=pDC->SelectObject(&pen);
  53. if(m_DrawMode==0)
  54. {
  55. pDC->SetROP2(R2_COPYPEN);
  56. }
  57. else if(m_DrawMode==1)
  58. pDC->SetROP2(R2_NOT);
  59. DPtoVP(m_X1,m_Y1,&x1,&y1);
  60. DPtoVP(m_X2,m_Y2,&x2,&y2);
  61. pDC->MoveTo(x1,y1);
  62. pDC->MoveTo(x2,y2);
  63. pDC->SelectObject(pOldPen);
  64. }
  65. void CLine::GetRect(float* minX,float* minY,float* maxX,float* maxY)
  66. {
  67. *minX=min(m_X1,m_X2);
  68. *maxX=max(m_X1,m_X2);
  69. *minY=min(m_Y1,m_Y2);
  70. *minY=min(m_Y1,m_Y2);
  71. }
  72. void CLine::CalLong()
  73. {
  74. m_fLong=sqrt((m_X1-m_X2)*(m_X1-m_X2)+(m_Y1-m_Y2)*(m_Y1-m_Y2));
  75. }
  76. BOOL CLine::IsPoint(float x,float y,float j1,float blc)
  77. {
  78. float xx,x1,y1,x2,y2;
  79. if(b_Delete)
  80. return FALSE;
  81. GetRect(&x1,&y1,&x2,&y2);
  82. if(!(x>=x1&&x<=x2&&y>=y1&&y<=y2))
  83. return FALSE;
  84. xx=PointLine(x,y,m_X1,m_Y1,m_X2,m_Y2);
  85. if(xx<j1)
  86. return TRUE;
  87. return FALSE;
  88. }
  89. void CLine::Move(float x_Move,float y_Move)
  90. {
  91. m_X1+=x_Move;
  92. m_X2+=x_Move;
  93. m_Y1+=y_Move;
  94. m_Y2+=y_Move;
  95. }
  96. void CLine::Rotate(float baseX,float baseY,float angle)
  97. {
  98. RotatePoint(baseX,baseY,angle,&this->m_X1,&this->m_Y1);
  99. RotatePoint(baseX,baseY,angle,&this->m_X2,&this->m_Y2);
  100. }
  101. CLine::~CLine()
  102. {
  103. }