www.pudn.com > DrawVector.rar > Text.cpp


// Text.cpp: implementation of the CText class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "Draw.h" 
#include "Text.h" 
#include "math.h" 
#include "DrawDoc.h" 
//#include "DrawDoc.cpp" 
#define pi 3.1415926 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
extern  IsRectCross(float minx,float miny,float maxx,float maxy); 
 
CText::CText(); 
 
//CGraphPara* p_GraphPara; 
//float xMinScreen,yMinScreen,xMaxScreen,yMaxScreen; 
 
/*BOOL CText::IsRectCross(float minx,float miny,float maxx,float maxy) 
{ 
	if(minx>xMaxScreen||maxxyMaxScreen||maxySetROP2(R2_COPYPEN); 
	else if(m_DrawMode==1) 
		pDC->SetROP2(R2_NOT); 
	pDC->SetBkMode(TRANSPARENT); 
	hight=DLtoVL(m_TextHeight); 
	angl=(float)(m_Angle1*pi/180); 
	if(hight<3||hight>200) 
		return; 
	x1=m_StartX-m_TextHeight*(float)sin(angl); 
	y1=m_StartY+m_TextHeight*(float)cos(angl); 
	angg=(int)(m_Angle2*10); 
	wide=DLtoVL(m_TextWide); 
	DPtoVP(x1,y1,&cc1,&cc2); 
	cjcf.CreateFont(hight,wide,angg,0,50,0,0,0,255,OUT_TT_PRECIS,CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,FIXED_PITCH,"cjc"); 
	CFont* cjcbakf=pDC->SelectObject(&cjcf); 
	pDC->SetBkMode(TRANSPARENT); 
	CGraphPara m_GraphPara; 
    CGraphPara *p_GraphPara; 
	p_GraphPara=&m_GraphPara; 
	pDC->SetTextColor(p_GraphPara->GetColor(ColorPen)); 
	ls1=(const char *)c_Text; 
	cd=strlen(ls1); 
	while(cd>0) 
	{ 
		c1=*ls1; 
		c2=*(ls1+1); 
		if(c1>c2&&c2>127) 
		{ 
			strncpy(bz,ls1,2); 
			bz[2]=0; 
			ls1=ls1+2; 
			pDC->TextOut(cc1,cc2,bz); 
			cd=cd-2; 
            x1=x1+(m_TextWide*2+m_OffWide)*(float)cos(angl); 
            y1=y1+(m_TextWide*2+m_OffWide)*(float)sin(angl); 
			DPtoVP(x1,y1,&cc1,&cc2); 
		} 
		else 
		{ 
			strncpy(bz,ls1,1); 
			bz[1]=0; 
			ls1++; 
			pDC->TextOut(cc1,cc2,bz); 
            cd=cd-1; 
            x1=x1+(m_TextWide*2+m_OffWide/2)*(float)cos(angl); 
            y1=y1+(m_TextWide*2+m_OffWide/2)*(float)sin(angl); 
			DPtoVP(x1,y1,&cc1,&cc2); 
		} 
	} 
	pDC->SelectObject(cjcbakf); 
} 
void CText::GetRect(float *minX,float *minY,float* maxX,float* maxY ) 
{ 
	float x[4],y[4]; 
	double ang=pi*m_Angle1/180; 
	x[0]=m_StartX; 
	y[0]=m_StartY; 
	x[1]=m_StartX+(float)((m_TextWide+m_OffWide)*m_TextLong*cos(ang)); 
	y[1]=m_StartY+(float)((m_TextWide+m_OffWide)*m_TextLong*sin(ang)); 
	x[2]=x[1]-(float)(sin(ang)*m_TextHeight); 
	y[2]=y[1]+(float)(cos(ang)*m_TextHeight); 
	x[3]=m_StartX-(float)(sin(ang)*m_TextHeight); 
	y[3]=m_StartY-(float)(cos(ang)*m_TextHeight); 
	*minX=m_StartX; 
	*minY=m_StartY; 
	*maxX=m_StartX; 
	*maxY=m_StartY; 
	for(int i=1;i<4;i++)  //比较得到最小和最大坐标值 
	{ 
		if(*minX>x[i]) *minX=x[i]; 
		if(*minY>y[i]) *minY=y[i]; 
		if(*maxX=x1&&x<=x2&&y>=y1&&y<=y2)) 
		return FALSE; 
	float ang=(float)pi*m_Angle1/180; 
	XY[0].x=m_StartX; 
	XY[0].y=m_StartY; 
	XY[1].x=m_StartX+(float)((m_TextWide+m_OffWide)*m_TextLong*cos(ang)); 
	XY[1].y=m_StartY+(float)((m_TextWide+m_OffWide)*m_TextLong*sin(ang)); 
	XY[2].x=XY[1].x-(float)(sin(ang)*m_TextHeight); 
	XY[2].y=XY[1].y+(float)(cos(ang)*m_TextHeight); 
	XY[3].x=m_StartX-(float)(sin(ang)*m_TextHeight); 
	XY[3].y=m_StartY+(float)(cos(ang)*m_TextHeight); 
	if(PointRgn(x,y,4,XY,blc)) 
		return TRUE; 
	return FALSE; 
 
 
} 
 
void CText::Move(float x_Move,float y_Move) 
{ 
	m_StartX+=x_Move; 
	m_StartY+=y_Move; 
} 
 
void CText::Rotate(float baseX,float baseY,float angle) 
{ 
	RotatePoint(baseX,baseY,angle,&this->m_StartX,&this->m_StartY); 
	RotatePoint(baseX,baseY,angle,&this->m_EndX,&this->m_EndY); 
	m_Angle1+=(float)(angle*180/pi); 
	m_Angle2+=(float)(angle*180/pi); 
} 
 
void CText::Init(short ColorPen,short ColorBrush,float LineWide,short LineType,short Layer, 
				 float StartX,float StartY,float Angle1,float Angle2,float TextHeight, 
				 float TextWide,float OffWide,int TextLong,CString Text) 
{ 
	m_ColorPen=ColorPen; 
	m_ColorBrush=ColorBrush; 
	m_LineWide=LineWide; 
	m_LineType=LineType; 
	m_Layer=Layer; 
	m_StartX=StartX; 
	m_StartY=StartY; 
	m_Angle1=Angle1; 
	m_Angle2=Angle2; 
	m_TextHeight=TextHeight; 
	m_TextWide=TextWide; 
	m_OffWide=OffWide; 
	m_TextLong=TextLong; 
	c_Text=Text; 
 
} 
CText::~CText() 
{ 
 
}