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

GIS编程

开发平台:

Visual C++

  1. // LinkNet.cpp: implementation of the CLinkNet class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Draw.h"
  6. #include "LinkNet.h"
  7. #include "math.h"
  8. #define pi 3.1415926
  9. #include "DrawDoc.h"
  10. #ifdef _DEBUG
  11. #undef THIS_FILE
  12. static char THIS_FILE[]=__FILE__;
  13. #define new DEBUG_NEW
  14. #endif
  15. //////////////////////////////////////////////////////////////////////
  16. // Construction/Destruction
  17. //////////////////////////////////////////////////////////////////////
  18. //CLinkNet::CLinkNet()
  19. extern IsRectCross(float minx,float miny,float maxx,float maxy);
  20. CLinkNet::~CLinkNet()
  21. {
  22. }
  23. float CLinkNet::CalDisp(float x1,float y1,float x2,float y2)
  24. {
  25. return (float)sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
  26. }
  27. void CLinkNet::Draw(CDC* pDC,int m_DrawMode,int m_DrawModel,short BackColor)
  28. {
  29. if(this->b_Delete)
  30. {
  31. return ;
  32. }
  33. float minx,miny,maxx,maxy;
  34. GetRect(&minx,&miny,&maxx,&maxy);//得到边界矩形
  35. if(!IsRectCross(minx,miny,maxx,maxy))//如果边界矩形不与屏幕窗口相交
  36. return;
  37. if(m_DrawMode==0)
  38. pDC->SetROP2(R2_COPYPEN);
  39. else if(m_DrawMode==1)
  40. pDC->SetROP2(R2_NOT);
  41. short ColorPen=m_ColorPen;
  42.     if(m_DrawModel==2)
  43. ColorPen=BackColor;
  44. CGraphPara m_GraphPara;
  45.     CGraphPara *p_GraphPara;
  46. p_GraphPara=&m_GraphPara;
  47.     CPen pen(0,1,p_GraphPara->GetColor(ColorPen));
  48. CPen* pOldPen=pDC->SelectObject(&pen);
  49. int x1,y1,x2,y2,x3,y3;
  50. DPtoVP(m_x,m_y,&x1,&y1);
  51. int rr=DLtoVL(m_rRadiu);
  52. pDC->SelectStockObject(NULL_BRUSH);
  53. pDC->Ellipse(x1-rr,y1-rr,x1+rr,y1+rr);
  54. BOOL bDelete;
  55. float xx,yy;
  56. if(m_DrawModel==0)
  57. {
  58. for(int i=0;i<this->m_LinkNumb;i++)
  59. {
  60. CDrawDoc* p_Doc;
  61. BOOL pb=p_Doc->GetNetXy(this->m_LinkID[i],&xx,&yy,&bDelete);
  62. if(!pb||b_Delete)
  63. continue;
  64. float angle=p_Doc->GetAngle(xx,yy,m_x,m_y);
  65. DPtoVP(xx,yy,&x2,&y2);
  66. pDC->MoveTo(x1,y1);
  67. pDC->LineTo(x2,y2);
  68. x2=(int)(x2*0.75+x1*0.25);
  69. y2=(int)(y2*0.75+y1*0.25);
  70. pDC->MoveTo(x2,y2);
  71. x3=x2+(int)(10*cos(angle+pi/6));
  72. y3=y2-(int)(10*sin(angle+pi/6));
  73. pDC->LineTo(x3,y3);
  74. pDC->MoveTo(x2,y2);
  75. x3=x2+(int)(10*cos(angle-pi/6));
  76. y3=y2-(int)(10*sin(angle-pi/6));
  77. pDC->LineTo(x3,y3);
  78. }
  79. }
  80. pDC->SelectObject(pOldPen);
  81. }
  82. void CLinkNet::AddLink(int nID)
  83. {
  84. for(int i=0;i<m_LinkNumb;i++)
  85. {
  86. if(nID==this->m_LinkID[i])
  87. return;
  88. }
  89. m_LinkID[m_LinkNumb++]=nID;
  90. }
  91. void CLinkNet::GetRect(float* minX,float* minY,float* maxX,float* maxY)
  92. {
  93. *minX=m_x-m_rRadiu;
  94. *minY=m_y-m_rRadiu;
  95. *maxX=m_x+m_rRadiu;
  96. *maxY=m_y+m_rRadiu;
  97. // return TRUE;
  98. }
  99. BOOL CLinkNet::IsPoint(float x,float y,float j1,float blc)
  100. {
  101. float jl1;
  102. if(b_Delete)
  103. return FALSE;
  104. jl1=CalDisp(x,y,j1,blc);
  105. if(jl1<m_rRadiu+j1)
  106. return TRUE;
  107. return FALSE;
  108. }
  109. void CLinkNet::Move(float x_Move,float y_Move)
  110. {
  111. this->m_x+=x_Move;
  112. this->m_y+=y_Move;
  113. }
  114. void CLinkNet::Rotate(float baseX,float baseY,float angle)
  115. {
  116. RotatePoint(baseX,baseY,angle,&m_x,&m_y);
  117. }