www.pudn.com > 3DAni.rar > Myclass.cpp, change:2009-06-18,size:3885b


// Myclass.cpp: implementation of the CMyclass class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "3DAni.h" 
#include "Myclass.h" 
#include "math.h" 
#define PI 3.1415926 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CMyclass::CMyclass() 
{ 
 
} 
 
CMyclass::~CMyclass() 
{ 
 
} 
void CMyclass::DrawPers() 
{ 
	double Th,Ph; 
	Th=PI*Theta/180; 
	Ph=PI*Phi/180; 
	Aux1=sin(Th); 
	Aux2=sin(Ph); 
	Aux3=cos(Th); 
	Aux4=cos(Ph); 
	Aux5=Aux3*Aux2; 
	Aux6=Aux1*Aux2; 
	Aux7=Aux3*Aux4; 
	Aux8=Aux1*Aux4; 
	DrawCube(); 
} 
void CMyclass::DrawCube() 
{ 
	CFrameWnd *pWnd=(CFrameWnd*)AfxGetApp()->m_pMainWnd; 
	CDC *pDC=pWnd->GetActiveView()->GetDC(); 
	CRect rc; 
	::GetClientRect(pWnd->GetActiveView()->m_hWnd,rc); 
	ReadCube(); 
	 
    for(int i=1;i<4;i++) 
	{ 
		WMoveTo(XP[i],YP[i],ZP[i],pDC,rc.right,rc.bottom); 
        WLineTo(XP[i+1],YP[i+1],ZP[i+1],pDC,rc.right,rc.bottom); 
        WMoveTo(XP[i+4],YP[i+4],ZP[i+4],pDC,rc.right,rc.bottom); 
        WLineTo(XP[i+5],YP[i+5],ZP[i+5],pDC,rc.right,rc.bottom); 
    } 
    WMoveTo(XP[4],YP[4],ZP[4],pDC,rc.right,rc.bottom); 
    WLineTo(XP[1],YP[1],ZP[1],pDC,rc.right,rc.bottom); 
    WMoveTo(XP[8],YP[8],ZP[8],pDC,rc.right,rc.bottom); 
    WLineTo(XP[5],YP[5],ZP[5],pDC,rc.right,rc.bottom); 
	for(i=1;i=4;i++) 
	{ 
		WMoveTo(XP[i],YP[i],ZP[i],pDC,rc.right,rc.bottom); 
        WLineTo(XP[i+4],YP[i+4],ZP[i+4],pDC,rc.right,rc.bottom); 
	} 
	 
 
 
 
	/*int i=1; 
	while(CP[i]!=-1) 
	{ 
		if(CP[i]==0) 
			WMoveTo(XP[i],YP[i],ZP[i],pDC,rr.right,rr.bottom); 
		else 
            WLineTo(XP[i+1],YP[i+1],ZP[i+1],pDC,rr.right,rr.bottom); 
		i=i+1; 
	}*/ 
	pWnd->GetActiveView()->ReleaseDC(pDC); 
} 
void CMyclass::ReadCube() 
{   XP[1]=0;   YP[1]=1;   ZP[1]=1; CP[1]=1;// 
 
    XP[2]=0;   YP[2]=1;   ZP[2]=1; CP[2]=1; 
	XP[3]=0;   YP[3]=0;   ZP[3]=1; CP[3]=1; 
 
	XP[4]=0;   YP[4]=0;   ZP[4]=1; CP[4]=1;// 
 
	XP[5]=0.5; YP[5]=0.5; ZP[5]=0; CP[5]=0.5;// 
 
	XP[6]=0;   YP[6]=0.5; ZP[6]=0; CP[6]=0.5; 
	XP[7]=0;   YP[7]=0;   ZP[7]=0; CP[7]=0.5; 
 
	XP[8]=0.5; YP[8]=0;   ZP[8]=0; CP[8]=0.5;// 
 
	/*XP[1]=1;YP[1]=1;ZP[1]=1;CP[1]=0; 
    XP[2]=1;YP[2]=-1;ZP[2]=1;CP[2]=1; 
	XP[3]=1;YP[3]=-1;ZP[3]=1;CP[3]=1; 
	XP[4]=-1;YP[4]=-1;ZP[4]=1;CP[4]=1; 
	XP[5]=-1;YP[5]=1;ZP[5]=1;CP[5]=1; 
	XP[6]=1;YP[6]=1;ZP[6]=1;CP[6]=1; 
	XP[7]=1;YP[7]=-1;ZP[7]=-1;CP[7]=1; 
	XP[8]=-1;YP[8]=-1;ZP[8]=-1;CP[8]=1; 
    XP[9]=-1;YP[9]=1;ZP[9]=-1;CP[9]=1; 
	XP[10]=1;YP[10]=1;ZP[10]=-1;CP[10]=1; 
	XP[11]=1;YP[11]=-1;ZP[11]=-1;CP[11]=0; 
	XP[12]=1;YP[12]=-1;ZP[12]=1;CP[12]=1; 
	XP[13]=-1;YP[13]=-1;ZP[13]=1;CP[13]=0; 
	XP[14]=-1;YP[14]=-1;ZP[14]=-1;CP[14]=1; 
	XP[15]=-1;YP[15]=1;ZP[15]=1;CP[15]=0; 
	XP[16]=-1;YP[16]=1;ZP[16]=-1;CP[16]=1; 
	XP[17]=0.5;YP[17]=1;ZP[17]=-1;CP[17]=0; 
	XP[18]=0.5;YP[18]=1;ZP[18]=0.5;CP[18]=1; 
	XP[19]=-0.5;YP[19]=1;ZP[19]=0.5;CP[19]=1; 
	XP[20]=-0.5;YP[20]=1;ZP[20]=-1;CP[20]=1; 
    XP[21]=0;YP[21]=0;ZP[21]=0;CP[21]=-1;*/ 
} 
 
void CMyclass::WLineTo(double x,double y,double z,CDC *pDC,int MaxX,int MaxY) 
{ 
	int XScreen,YScreen; 
	Project(x,y,z); 
    XScreen=(int)floor(0.5+XProj+MaxX/2); 
	YScreen=(int)floor(0.5+MaxY/2-YProj); 
	pDC->LineTo(XScreen,YScreen); 
} 
 
void CMyclass::WMoveTo(double x,double y,double z,CDC *pDC,int MaxX,int MaxY) 
{ 
	int XScreen,YScreen; 
	Project(x,y,z); 
	XScreen=(int)floor(0.5+XProj+MaxX/2); 
	YScreen=(int)floor(0.5+MaxY/2-YProj); 
	pDC->MoveTo(XScreen,YScreen); 
} 
 
void CMyclass::Project(double x,double y,double z) 
{ 
	double xobs,yobs,zobs; 
	xobs=-x*Aux1+y*Aux3; 
	yobs=-x*Aux5-y*Aux6+z*Aux4; 
	zobs=-x*Aux7-y*Aux8-z*Aux2+Rol; 
	XProj=DE*xobs/zobs*20; 
	YProj=DE*yobs/zobs*20; 
}