www.pudn.com > final_6.rar > Cuboid.cpp


#include "stdafx.h" 
#include "CG.h" 
#include "math.h" 
//#include "PerView.h" 
//#include "TopView.h" 
#include "Shape.h" 
#include "CGDoc.h" 
#include "Operation.h" 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
IMPLEMENT_SERIAL(CCuboid,CShape,0) 
CCuboid::CCuboid() 
{ 
 
 
} 
void CCuboid::TopSet(CPoint point1, CPoint point2) 
{ 
	CuboidPoint[0].Set(point1.x,0,point1.y); 
    CuboidPoint[2].Set(point2.x,0,point2.y); 
	CuboidPoint[1].Set(point1.x,0,point2.y); 
	CuboidPoint[3].Set(point2.x,0,point1.y); 
    CuboidPoint[4].Set(point1.x,0,point1.y); 
    CuboidPoint[5].Set(point2.x,0,point2.y); 
	CuboidPoint[6].Set(point1.x,0,point2.y); 
	CuboidPoint[7].Set(point2.x,0,point1.y); 
	g_pDoc->UpdateAllViews(NULL); 
	 
}    
//DEL void CCuboid::LeftSet(CPoint point) 
//DEL { 
//DEL     CuboidPoint[4].Set(CuboidPoint[4].x,point.y-155,CuboidPoint[4].y); 
//DEL     CuboidPoint[5].Set(CuboidPoint[5].x,point.y-155,CuboidPoint[5].y); 
//DEL 	CuboidPoint[6].Set(CuboidPoint[2].x,point.y-155,CuboidPoint[2].z); 
//DEL     CuboidPoint[7].Set(CuboidPoint[3].x,point.y-155,CuboidPoint[3].z); 
//DEL     g_pDoc->UpdateAllViews(NULL); 
//DEL  
//DEL } 
 
 void CCuboid::DrawTop(CDC *pDC,CRect *rc){ 
     
	pDC->MoveTo((int)BPoint[0][0].x,(int)BPoint[0][0].z); 
	pDC->LineTo((int)BPoint[0][4].x,(int)BPoint[0][4].z); 
 
    pDC->MoveTo((int)BPoint[0][0].x,(int)BPoint[0][0].z); 
	pDC->LineTo((int)BPoint[8][0].x,(int)BPoint[8][0].z); 
 
	pDC->MoveTo((int)BPoint[0][4].x,(int)BPoint[0][4].z); 
	pDC->LineTo((int)BPoint[0][8].x,(int)BPoint[0][8].z); 
 
    pDC->MoveTo((int)BPoint[0][4].x,(int)BPoint[0][4].z); 
	pDC->LineTo((int)BPoint[8][4].x,(int)BPoint[8][4].z); 
 
	pDC->MoveTo((int)BPoint[0][8].x,(int)BPoint[0][8].z); 
	pDC->LineTo((int)BPoint[8][8].x,(int)BPoint[8][8].z); 
 
	pDC->MoveTo((int)BPoint[0][8].x,(int)BPoint[0][8].z); 
	pDC->LineTo((int)BPoint[0][12].x,(int)BPoint[0][12].z); 
 
   	pDC->MoveTo((int)BPoint[0][12].x,(int)BPoint[0][12].z); 
	pDC->LineTo((int)BPoint[0][0].x,(int)BPoint[0][0].z); 
 
	pDC->MoveTo((int)BPoint[0][12].x,(int)BPoint[0][12].z); 
	pDC->LineTo((int)BPoint[8][12].x,(int)BPoint[8][12].z); 
 
    int x; 
	for (x=0;x<12;x=x+4) 
	{ 
	   pDC->MoveTo((int)BPoint[8][x].x,(int)BPoint[8][x].z); 
	   pDC->LineTo((int)BPoint[8][x+4].x,(int)BPoint[8][x+4].z); 
	} 
   
    pDC->MoveTo((int)BPoint[8][12].x,(int)BPoint[8][12].z); 
	pDC->LineTo((int)BPoint[8][0].x,(int)BPoint[8][0].z); 
} 
 void CCuboid::DrawLeft(CDC* pDC, CRect* rc) 
 { 
    int x; 
	for (x=0;x<12;x=x+4) 
	{ 
	   pDC->MoveTo(-(int)BPoint[0][x].z,(int)BPoint[0][x].y); 
	   pDC->LineTo(-(int)BPoint[0][x+4].z,(int)BPoint[0][x+4].y); 
	   		 
	   pDC->MoveTo(-(int)BPoint[8][x].z,(int)BPoint[8][x].y); 
	   pDC->LineTo(-(int)BPoint[8][x+4].z,(int)BPoint[8][x+4].y); 
	} 
       pDC->MoveTo(-(int)BPoint[0][12].z,(int)BPoint[0][12].y); 
	   pDC->LineTo(-(int)BPoint[0][0].z,(int)BPoint[0][0].y); 
 
	   pDC->MoveTo(-(int)BPoint[8][12].z,(int)BPoint[8][12].y); 
       pDC->LineTo(-(int)BPoint[8][0].z,(int)BPoint[8][0].y); 
	  
	for (x=0;x<=12;x=x+4) 
	{  
		pDC->MoveTo(-(int)BPoint[0][x].z,(int)BPoint[0][x].y); 
		pDC->LineTo(-(int)BPoint[8][x].z,(int)BPoint[8][x].y); 
	} 
	  
 } 
 void CCuboid::DrawFront(CDC*pDC,CRect *rc){ 
       
     
	 int x; 
	for (x=0;x<12;x=x+4) 
	{ 
	   pDC->MoveTo((int)BPoint[0][x].x,(int)BPoint[0][x].y); 
	   pDC->LineTo((int)BPoint[0][x+4].x,(int)BPoint[0][x+4].y); 
	   		 
	   pDC->MoveTo((int)BPoint[8][x].x,(int)BPoint[8][x].y); 
	   pDC->LineTo((int)BPoint[8][x+4].x,(int)BPoint[8][x+4].y); 
	} 
     pDC->MoveTo((int)BPoint[0][12].x,(int)BPoint[0][12].y); 
	 pDC->LineTo((int)BPoint[0][0].x,(int)BPoint[0][0].y); 
 
	 pDC->MoveTo((int)BPoint[8][12].x,(int)BPoint[8][12].y); 
     pDC->LineTo((int)BPoint[8][0].x,(int)BPoint[8][0].y); 
	  
	for (x=0;x<=12;x=x+4) 
	{  
		pDC->MoveTo((int)BPoint[0][x].x,(int)BPoint[0][x].y); 
		pDC->LineTo((int)BPoint[8][x].x,(int)BPoint[8][x].y); 
	} 
 } 
 void CCuboid::DrawPer(CDC*pDC,CRect *rc){ 
    int x; 
	for (x=0;x<12;x=x+4) 
	{ 
	   pDC->MoveTo((int)(BPer[0][x].x),(int)(BPer[0][x].y)); 
	   pDC->LineTo((int)(BPer[0][x+4].x),(int)(BPer[0][x+4].y)); 
	   		 
	   pDC->MoveTo((int)(BPer[8][x].x),(int)(BPer[8][x].y)); 
	   pDC->LineTo((int)(BPer[8][x+4].x),(int)(BPer[8][x+4].y)); 
	} 
       pDC->MoveTo((int)(BPer[0][12].x),(int)(BPer[0][12].y)); 
	   pDC->LineTo((int)(BPer[0][0].x),(int)(BPer[0][0].y)); 
 
	   pDC->MoveTo((int)(BPer[8][12].x),(int)(BPer[8][12].y)); 
       pDC->LineTo((int)(BPer[8][0].x),(int)(BPer[8][0].y)); 
	  
	for (x=0;x<=12;x=x+4) 
	{  
	   pDC->MoveTo((int)(BPer[0][x].x),(int)(BPer[0][x].y)); 
	   pDC->LineTo((int)(BPer[8][x].x),(int)(BPer[8][x].y)); 
	} 
 
 } 
 void CCuboid::Serialize(CArchive &ar){ 
    CShape::Serialize(ar); 
	center.Serialize(ar); 
	int x,y; 
	for (x=0;x<=8;x++) 
      for (y=0;y<=15;y++) 
	   { 
	     BPoint[x][y].Serialize(ar);		    
	   }		    
 } 
 
 void CCuboid::SetBodyFace(){ 
    int x,y; 
     CGPlane *face; 
	 for (x=0;x<=7;x++) 
		 for (y=0;y<=14;y++) 
		 { 
		     face=&BFace[x][y]; 
	         COperation::CaculateFace(face,BPoint[x][y],BPoint[x][y+1],BPoint[x+1][y+1],BPoint[x+1][y]); 
		 } 
     for (x=0;x<=7;x++) 
	 { 
	     face=&BFace[x][15]; 
	     COperation::CaculateFace(face,BPoint[x][15],BPoint[x][0],BPoint[x+1][0],BPoint[x+1][15]); 
	 } 
	 face=&BFace[8][0];//top 
	 COperation::CaculateFace(face,BPoint[0][0],BPoint[0][12],BPoint[0][8],BPoint[0][4]); 
	 face=&BFace[8][1];//base 
	 COperation::CaculateFace(face,BPoint[8][0],BPoint[8][4],BPoint[8][8],BPoint[8][12]); 
 
 } 
 
 void CCuboid::SetCuboidPoint(double width,double length,double height){ 
      int x,y; 
	  for (x=0;x<=8;x++) 
		  for (y=0;y<=15;y++) 
		  { 
     	     BPoint[x][y].y=(-height/2+x*height/8)+center.y; 
			 BPoint[x][y].m=1; 
		  } 
      for (x=0;x<=8;x++) 
		  for (y=0;y<=4;y++) 
		  { 
		     BPoint[x][y].x=-length/2+center.x; 
			 BPoint[x][y].z=(-width/2+width/4*y)+center.z; 
		  } 
      for (x=0;x<=8;x++) 
		  for (y=5;y<=8;y++) 
		  { 
		     BPoint[x][y].x=(-length/2+(y-4)*length/4)+center.x; 
		     BPoint[x][y].z=width/2+center.z; 
		  } 
      for (x=0;x<=8;x++) 
		  for (y=9;y<=12;y++) 
		  { 
		     BPoint[x][y].x=length/2+center.x; 
    		 BPoint[x][y].z=(width/2-(y-8)*width/4)+center.z; 
		  } 
      for (x=0;x<=8;x++) 
		  for (y=13;y<=15;y++) 
		  { 
		     BPoint[x][y].x=(length/2-(y-12)*length/4)+center.x; 
			 BPoint[x][y].z=-width/2+center.z; 
		  } 
	this->tempCenter.x = center.x; 
	this->tempCenter.y = center.y; 
	this->tempCenter.z = center.z; 
 }