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;
}