📄 tarshow.cpp
字号:
// TarShow.cpp: implementation of the CTarShow class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "TarShow.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CTarShow::CTarShow()
{
}
CTarShow::~CTarShow()
{
}
void CTarShow::SetGraphPar(CPoint p, int SizeR,float Angle0)
{
m_p0=p;
m_SizeR=SizeR;
m_Angle0=Angle0;
}
void CTarShow::DrawGrid(CDC *pDC)
{
CPen *oldpen,newpen;
newpen.CreatePen(PS_DOT,1,RGB(0,0,0));
oldpen=pDC->SelectObject(&newpen);
for(int i=1;i<m_NumR;i++)
{
pDC->MoveTo(m_p0);
pDC->AngleArc(m_p0.x,m_p0.y,m_SizeR*i/m_NumR,
m_BeginAngle+m_Angle0,m_EndAngle-m_BeginAngle);
}
for(i=1;i<m_NumAngle;i++)
{
pDC->MoveTo(m_p0);
pDC->AngleArc(m_p0.x,m_p0.y,m_SizeR,m_BeginAngle+m_Angle0
+(m_EndAngle-m_BeginAngle)*i/m_NumAngle,0);
}
pDC->SelectObject(oldpen);
newpen.DeleteObject();
//pDC->MoveTo(m_p0);
//pDC->AngleArc(m_p0.x,m_p0.y,m_SizeR,m_BeginAngle+m_Angle0,0);
}
void CTarShow::DrawBorder(CDC *pDC)
{
pDC->MoveTo(m_p0);
pDC->AngleArc(m_p0.x,m_p0.y,m_SizeR,m_BeginAngle+m_Angle0,
m_EndAngle-m_BeginAngle);
pDC->LineTo(m_p0);
}
void CTarShow::Convert(double d_x, double d_y, int &i_x, int &i_y,
bool flg)
{
double a,r,angle;
if(!flg)
{
r=d_x;
angle=(d_y+m_Angle0)*PI/180;
}
else
{
r=pow(d_x*d_x+d_y*d_y,0.5);
if(fabs(d_x)<=EPS)
{
if(d_y<0)
angle=-PI/2+m_Angle0*PI/180;
else
angle=PI/2+m_Angle0*PI/180;
}
else
{
if(d_x<-EPS)
angle=atan(d_y/d_x)+PI+m_Angle0*PI/180;
if(d_x>EPS)
angle=atan(d_y/d_x)+m_Angle0*PI/180;
}
}
a=r*m_SizeR/m_R;
i_x=(int)(a*cos(angle));
i_y=(int)(a*sin(angle));
}
void CTarShow::DrawScale(CDC *pDC)
{
int a;
int x1,y1;
m_font.CreateFont(15, 0, 0, 0,
FW_NORMAL, FALSE, FALSE,FALSE,
ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, VARIABLE_PITCH | FF_DONTCARE,
"Times New Roman");
CFont *pOldFont=(CFont*)pDC->SelectObject(&m_font);
//此处是否需要设置CPen?
CString s;
for(int i=0;i<=m_NumAngle;i++)
{
a=(int)(m_SizeR*cos((m_Angle0+m_BeginAngle+
(m_EndAngle-m_BeginAngle)*i/m_NumAngle)*PI/180));
x1=m_p0.x+a;
a=(int)(m_SizeR*sin((m_Angle0+m_BeginAngle+
(m_EndAngle-m_BeginAngle)*i/m_NumAngle)*PI/180));
y1=m_p0.y-a;
a=(int)(m_BeginAngle+(m_EndAngle-m_BeginAngle)*
i/m_NumAngle);
s.Format("%d°",a);//加了个度的符号!
if(a>0)
{
x1+=8;
y1-=10;
}
if(a==0)
{
x1+=3;
y1-=5;
}
if(a<0)
{
x1+=3;
y1+=0;
}
pDC->TextOut(x1,y1,s);
}
for(i=0;i<=m_NumR;i++)
{
a=(int)(m_SizeR*i/m_NumR*cos((m_Angle0+m_BeginAngle)*PI/180));
x1=m_p0.x+a;
a=(int)(m_SizeR*i/m_NumR*sin((m_Angle0+m_BeginAngle)*PI/180));
y1=m_p0.y-a;
a=(int)(m_R*i/m_NumR);
s.Format("%d",a);
if(s.GetLength()==1)
{
x1-=8;
y1-=3;
}
if(s.GetLength()==2)
{
x1-=15;
y1-=3;
}
if(s.GetLength()==3)
{
x1-=22;
y1-=3;
}
pDC->TextOut(x1,y1,s);
}
pDC->SelectObject(pOldFont);
m_font.DeleteObject();
pOldFont->DeleteObject();//?
}
void CTarShow::DrawPoint(CDC *pDC, double x0, double y0,
bool flg, COLORREF color)
{
int i_x0,i_y0;
Convert(x0,y0,i_x0,i_y0,flg);
CPen *oldpen,newpen;
CRect rect;//?
CRgn rgn;
CBrush brush;
int r;
newpen.CreatePen(PS_SOLID,5,RGB(255,0,0));
oldpen=pDC->SelectObject(&newpen);
r=3;
rgn.CreateEllipticRgn(m_p0.x+i_x0-r,m_p0.y-i_y0-r,m_p0.x+i_x0+r,
m_p0.y-i_y0+r);
brush.CreateSolidBrush(color);
pDC->FillRgn(&rgn,&brush);
pDC->SelectObject(oldpen);
newpen.DeleteObject();
// oldpen->DeleteObject();
}
void CTarShow::DrawT(CDC *pDC, double x0, double y0, char s0,
double x1, double y1, char s1, bool flg, COLORREF color)
{
int i_x0,i_y0,i_x1,i_y1;
Convert(x0,y0,i_x0,i_y0,flg);
Convert(x1,y1,i_x1,i_y1,flg);
if(s0==3&&s1==3)
{
pDC->MoveTo(m_p0.x+i_x0,m_p0.y-i_y0);
pDC->LineTo(m_p0.x+i_x1,m_p0.y-i_y1);
}
else
{
CPen *oldpen,newpen;
if(color==RGB(0,0,0))
newpen.CreatePen(PS_SOLID,1,RGB(255,0,0));
else
newpen.CreatePen(PS_SOLID,1,color);
oldpen=pDC->SelectObject(&newpen);
pDC->MoveTo(m_p0.x+i_x0,m_p0.y-i_y0);
pDC->LineTo(m_p0.x+i_x1,m_p0.y-i_y1);
pDC->SelectObject(oldpen);
newpen.DeleteObject();
oldpen->DeleteObject();
}
}
void CTarShow::SetFullSize(float R, float BeginAngle, float EndAngle)
{
m_R=R;
m_BeginAngle=BeginAngle;
m_EndAngle=EndAngle;
}
void CTarShow::SetGridNum(short NumR, short NumA)
{
m_NumAngle=NumA;
m_NumR=NumR;
}
bool CTarShow::GetCoo(int x, int y, double &radii, double &angle)
{
int x0=x-m_p0.x;
int y0=-y+m_p0.y;
radii=pow(x0*x0+y0*y0,0.5)*m_R/m_SizeR;
angle=atan((double)y0/x0)*180/PI-m_Angle0;
if(radii<=m_R&&angle>=m_BeginAngle&&angle<=m_EndAngle)
{
return true;
}
else
{
radii=0;
angle=0;
return false;
}
}
void CTarShow::DrawT(CDC *pDC, double x0, double y0, double x1,
double y1, bool flg, COLORREF color)
{
int i_x0,i_y0,i_x1,i_y1;
Convert(x0,y0,i_x0,i_y0,flg);
Convert(x1,y1,i_x1,i_y1,flg);
CPen *oldpen,newpen;
newpen.CreatePen(PS_SOLID,1,color);
oldpen=pDC->SelectObject(&newpen);
pDC->MoveTo(m_p0.x+i_x0,m_p0.y-i_y0);
pDC->LineTo(m_p0.x+i_x1,m_p0.y-i_y1);
pDC->SelectObject(oldpen);
newpen.DeleteObject();
oldpen->DeleteObject();
}
void CTarShow::ShowString(CDC *pDC, double x0, double y0,bool flg,
CString str)
{
int i_x0,i_y0;
Convert(x0,y0,i_x0,i_y0,flg);
short r=5;
pDC->TextOut(m_p0.x+i_x0+r,m_p0.y-i_y0+r,str);
}
void CTarShow::DrawT(CDC *pDC, double x0, double y0, double x1,
double y1, bool flg, CPen &pen)
{
int i_x0,i_y0,i_x1,i_y1;
Convert(x0,y0,i_x0,i_y0,flg);
Convert(x1,y1,i_x1,i_y1,flg);
CPen *oldpen;
oldpen=pDC->SelectObject(&pen);
pDC->MoveTo(m_p0.x+i_x0,m_p0.y-i_y0);
pDC->LineTo(m_p0.x+i_x1,m_p0.y-i_y1);
pDC->SelectObject(oldpen);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -