www.pudn.com > DrawVector.rar > LinkNet.cpp
// LinkNet.cpp: implementation of the CLinkNet class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Draw.h"
#include "LinkNet.h"
#include "math.h"
#define pi 3.1415926
#include "DrawDoc.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//CLinkNet::CLinkNet()
extern IsRectCross(float minx,float miny,float maxx,float maxy);
CLinkNet::~CLinkNet()
{
}
float CLinkNet::CalDisp(float x1,float y1,float x2,float y2)
{
return (float)sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
void CLinkNet::Draw(CDC* pDC,int m_DrawMode,int m_DrawModel,short BackColor)
{
if(this->b_Delete)
{
return ;
}
float minx,miny,maxx,maxy;
GetRect(&minx,&miny,&maxx,&maxy);//得到边界矩形
if(!IsRectCross(minx,miny,maxx,maxy))//如果边界矩形不与屏幕窗口相交
return;
if(m_DrawMode==0)
pDC->SetROP2(R2_COPYPEN);
else if(m_DrawMode==1)
pDC->SetROP2(R2_NOT);
short ColorPen=m_ColorPen;
if(m_DrawModel==2)
ColorPen=BackColor;
CGraphPara m_GraphPara;
CGraphPara *p_GraphPara;
p_GraphPara=&m_GraphPara;
CPen pen(0,1,p_GraphPara->GetColor(ColorPen));
CPen* pOldPen=pDC->SelectObject(&pen);
int x1,y1,x2,y2,x3,y3;
DPtoVP(m_x,m_y,&x1,&y1);
int rr=DLtoVL(m_rRadiu);
pDC->SelectStockObject(NULL_BRUSH);
pDC->Ellipse(x1-rr,y1-rr,x1+rr,y1+rr);
BOOL bDelete;
float xx,yy;
if(m_DrawModel==0)
{
for(int i=0;im_LinkNumb;i++)
{
CDrawDoc* p_Doc;
BOOL pb=p_Doc->GetNetXy(this->m_LinkID[i],&xx,&yy,&bDelete);
if(!pb||b_Delete)
continue;
float angle=p_Doc->GetAngle(xx,yy,m_x,m_y);
DPtoVP(xx,yy,&x2,&y2);
pDC->MoveTo(x1,y1);
pDC->LineTo(x2,y2);
x2=(int)(x2*0.75+x1*0.25);
y2=(int)(y2*0.75+y1*0.25);
pDC->MoveTo(x2,y2);
x3=x2+(int)(10*cos(angle+pi/6));
y3=y2-(int)(10*sin(angle+pi/6));
pDC->LineTo(x3,y3);
pDC->MoveTo(x2,y2);
x3=x2+(int)(10*cos(angle-pi/6));
y3=y2-(int)(10*sin(angle-pi/6));
pDC->LineTo(x3,y3);
}
}
pDC->SelectObject(pOldPen);
}
void CLinkNet::AddLink(int nID)
{
for(int i=0;im_LinkID[i])
return;
}
m_LinkID[m_LinkNumb++]=nID;
}
void CLinkNet::GetRect(float* minX,float* minY,float* maxX,float* maxY)
{
*minX=m_x-m_rRadiu;
*minY=m_y-m_rRadiu;
*maxX=m_x+m_rRadiu;
*maxY=m_y+m_rRadiu;
// return TRUE;
}
BOOL CLinkNet::IsPoint(float x,float y,float j1,float blc)
{
float jl1;
if(b_Delete)
return FALSE;
jl1=CalDisp(x,y,j1,blc);
if(jl1m_x+=x_Move;
this->m_y+=y_Move;
}
void CLinkNet::Rotate(float baseX,float baseY,float angle)
{
RotatePoint(baseX,baseY,angle,&m_x,&m_y);
}