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