www.pudn.com > final_6.rar > CGDoc.cpp
// CGDoc.cpp : implementation of the CCGDoc class
//
#include "stdafx.h"
#include "CG.h"
#include "CGDoc.h"
#include "CuboidD.h"
#include "Shape.h"
#include "BallDialog.h"
#include "ColumnDialog.h"
#include "ConeDialog.h"
#include "ViewPointDlg.h"
#include "Base.h"
#include "TopView.h"
#include "GammaDialog.h"
#include "LeftView.h"
#include "ParaDialog.h"
#include "BitmapDlg.h"
#include "Texture.h"
#include "Attach.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCGDoc
IMPLEMENT_DYNCREATE(CCGDoc, CDocument)
BEGIN_MESSAGE_MAP(CCGDoc, CDocument)
//{{AFX_MSG_MAP(CCGDoc)
ON_COMMAND(ID_ADD_CUBOID, OnAddCuboid)
ON_COMMAND(ID_ADD_BALL, OnAddBall)
ON_COMMAND(ID_ADD_COLUMN, OnAddColumn)
ON_COMMAND(ID_ADD_CONE, OnAddCone)
ON_COMMAND(ID_ADD_LIGHT, OnAddLight)
ON_COMMAND(ID_SET_POINT_LIGHT, OnSetPointLight)
ON_COMMAND(ID_MOVE_LIGHT, OnMoveLight)
ON_COMMAND(ID_MOVE_LIGHT,OnMoveLight)
ON_COMMAND(ID_SET_SHAPE, OnSetShape)
ON_COMMAND(ID_GAMMA, OnGamma)
ON_COMMAND(IDC_GAMMA_CORRECT,OnGamma)
ON_COMMAND(ID_LATHE_X, OnLatheX)
ON_COMMAND(ID_LATHE_Y, OnLatheY)
ON_COMMAND(ID_LATHE_Z, OnLatheZ)
ON_COMMAND(ID_LOFT_SAMPLE, OnLoftSample)
ON_COMMAND(ID_LOFT_TRACK, OnLoftTrack)
ON_BN_CLICKED(IDC_D_ZOOM_PER, OnDZoomPer)
ON_BN_CLICKED(IDC_D_ROTATE_PER, OnDRotatePer)
ON_BN_CLICKED(IDC_D_VIEWPOINT, OnDViewpoint)
ON_COMMAND(IDC_D_SETLIGHT,OnSetPointLight)
ON_COMMAND(IDC_D_LIGHT,OnAddLight)
ON_COMMAND(IDC_D_MOVE_LIGHT,OnMoveLight)
ON_COMMAND(ID_CUBOID,OnAddCuboid)
ON_COMMAND(IDC_D_CUBOID,OnAddCuboid)
ON_COMMAND(IDC_D_BALL,OnAddBall)
ON_COMMAND(IDC_D_COLUMN,OnAddColumn)
ON_COMMAND(IDC_D_CONE,OnAddCone)
ON_COMMAND(IDC_D_SETSHAPE,OnSetShape)
ON_COMMAND(IDC_D_RENDER,Render)
ON_COMMAND(IDC_D_FAST,OnTrans)
ON_COMMAND(ID_RENDER_TOP, Render)
ON_COMMAND(ID_TRANS, OnTrans)
ON_COMMAND(IDC_D_DELETE,OnDelete)
ON_COMMAND(IDC_D_DELETELIGHT,OnDeleteLight)
ON_COMMAND(ID_DELETE_POINT_L,OnDeleteLight)
ON_COMMAND(IDC_D_PARA,OnParaLight)
ON_COMMAND(ID_ADD_PARALLEL,OnParaLight)
ON_COMMAND(IDC_DECAY,OnDecay)
ON_COMMAND(IDC_D_DELETE_PARA,OnDeletePara)
ON_COMMAND(ID_DEL_PARALLEL,OnDeletePara)
ON_COMMAND(IDC_TEXTURE, OnTexture)
ON_COMMAND(ID_SETTEXTURE,OnTexture)
ON_COMMAND(IDC_CANCEL_TEXTURE,OnCancelTexture)
ON_COMMAND(ID_CANCELTEXT,OnCancelTexture)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCGDoc construction/destruction
CCGDoc::CCGDoc()
{
// TODO: add one-time construction code here
g_pDoc=this;
}
CCGDoc::~CCGDoc()
{
}
BOOL CCGDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CCGDoc serialization
void CCGDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
ar<>index>>lightIndex;
m_ShapeArray.Serialize(ar);
m_LightArray.Serialize(ar);
UpdateAllViews(NULL);
// TODO: add loading code here
}
}
/////////////////////////////////////////////////////////////////////////////
// CCGDoc diagnostics
#ifdef _DEBUG
void CCGDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CCGDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CCGDoc commands
void CCGDoc::OnAddCuboid()
{
// drawMode=dmCuboid;
CCuboidD CuboidDialog;
if (CuboidDialog.DoModal()==IDOK)
{
m_ShapeArray.Add(new CCuboid());
m_TextureArray.Add(new CAttach());
index++;
CCuboid * pCuboid;
int width,height,length;
width=CuboidDialog.m_width;
height=CuboidDialog.m_height;
length=CuboidDialog.m_length;
pCuboid=(CCuboid*)m_ShapeArray[index-1];
pCuboid->center.x=CuboidDialog.m_CenX;
pCuboid->center.y=CuboidDialog.m_CenY;
pCuboid->center.z=CuboidDialog.m_CenZ;
pCuboid->center.m=1;
pCuboid->SetCuboidPoint(width,length,height);
pCuboid->SetBodyFace();
UpdateAllViews(NULL);
}
}
void CCGDoc::OnAddBall()
{
// drawMode=dmBall;
CBallDialog BallDialog;
if (BallDialog.DoModal()==IDOK)
{
m_ShapeArray.Add(new CBall());
m_TextureArray.Add(new CAttach());
index++;
CBall *pBall;
pBall=(CBall*)m_ShapeArray[index-1];
pBall->center.x=BallDialog.m_x;
pBall->center.y=BallDialog.m_y;
pBall->center.z=BallDialog.m_z;
pBall->radius=BallDialog.m_radius;
pBall->SetBallPoint(pBall->radius,pBall);
pBall->SetBodyFace();
}
UpdateAllViews(NULL);
// drawMode=dmNormal;
}
void CCGDoc::OnAddColumn()
{
// drawMode=dmColumn;
CColumnDialog ColumnDialog;
if (ColumnDialog.DoModal()==IDOK)
{
m_ShapeArray.Add(new CColumn());
m_TextureArray.Add(new CAttach());
index++;
CColumn *pColumn;
pColumn=(CColumn*)m_ShapeArray[index-1];
pColumn->center.x=ColumnDialog.m_colX;
pColumn->center.y=ColumnDialog.m_colY;
pColumn->center.z=ColumnDialog.m_colZ;
pColumn->radius=ColumnDialog.m_colRadius;
pColumn->height=ColumnDialog.m_colHeight;
pColumn->SetColumnPoint(pColumn->radius,pColumn->height,pColumn);
pColumn->SetBodyFace();
}
UpdateAllViews(NULL);
// drawMode=dmNormal;
}
void CCGDoc::OnAddCone()
{
// drawMode=dmCone;
CConeDialog ConeDialog;
if (ConeDialog.DoModal()==IDOK)
{
m_ShapeArray.Add(new CCone());
m_TextureArray.Add(new CAttach());
index++;
CCone *pCone;
pCone=(CCone*)m_ShapeArray[index-1];
pCone->center.x=ConeDialog.m_conX;
pCone->center.y=ConeDialog.m_conY;
pCone->center.z=ConeDialog.m_conZ;
pCone->radius=ConeDialog.m_conRadius;
pCone->height=ConeDialog.m_conHeight;
pCone->SetConePoint(pCone->radius,pCone->height,pCone);
pCone->SetBodyFace();
}
UpdateAllViews(NULL);
}
void CCGDoc::OnAddLight()
{
drawMode=dmAddPointL;
// TODO: Add your command handler code here
}
void CCGDoc::OnSetPointLight()
{
drawMode=dmSetPointL;
}
void CCGDoc::OnMoveLight()
{
drawMode=dmMovePointL;
}
void CCGDoc::OnSetShape()
{
drawMode=dmSetShape;
}
void CCGDoc::OnGamma()
{
CGammaDialog gd;
if (gd.DoModal()==IDOK)
{
gammaR=gd.m_Red;
gammaG=gd.m_Green;
gammaB=gd.m_Blue;
}
}
void CCGDoc::Render()
{
g_pTopView->OnRenderTop2();
}
void CCGDoc::OnTrans()
{
g_pTopView->OnTrans2();
}
void CCGDoc::OnLatheX()
{
// TODO: Add your command handler code here
drawMode = dmLatheX;
m_ShapeArray.Add(new CColumn());
opEntityIndex = index;
index++;
opOn = true;
}
void CCGDoc::OnLatheY()
{
// TODO: Add your command handler code here
drawMode = dmLatheY;
m_ShapeArray.Add(new CColumn());
opEntityIndex = index;
index++;
opOn = true;
}
void CCGDoc::OnLatheZ()
{
// TODO: Add your command handler code here
drawMode = dmLatheZ;
m_ShapeArray.Add(new CColumn());
opEntityIndex = index;
index++;
opOn = true;
}
void CCGDoc::OnLoftSample()
{
// TODO: Add your command handler code here
drawMode = dmLoftSample;
m_ShapeArray.Add(new CColumn());
opEntityIndex = index;
index++;
loftSampleOn = true;
}
void CCGDoc::OnLoftTrack()
{
// TODO: Add your command handler code here
drawMode = dmLoftTrack;
loftTrackOn = true;
}
void CCGDoc::OnDelete()
{
drawMode=dmDelete;
}
void CCGDoc::OnDeleteLight()
{
drawMode=dmDeleteLight;
}
void CCGDoc::OnDZoomPer()
{
// TODO: Add your control notification handler code here
drawMode = dmZoomView;
}
void CCGDoc::OnDRotatePer()
{
// TODO: Add your control notification handler code here
drawMode = dmRotateView;
}
void CCGDoc::OnDViewpoint()
{
// TODO: Add your control notification handler code here
CViewPointDlg ViewPointDlg;
if (ViewPointDlg.DoModal()==IDOK)
{
Oe->x = ViewPointDlg.m_fViewPointX;
Oe->y = -ViewPointDlg.m_fViewPointY;
Oe->z = ViewPointDlg.m_fViewPointZ;
}
UpdateAllViews(NULL);
}
void CCGDoc::OnParaLight()
{
CParaDialog pd;
if(pd.DoModal()==IDOK)
{
CGLight *light;
m_LightArray.Add((CObject *)new CGLight(pd.m_x*1000,-pd.m_y*1000,pd.m_z*1000));
light=(CGLight *)m_LightArray[lightIndex];
light->lc.r=255;
light->lc.g=255;
light->lc.b=255;
light->k=2;
lightIndex++;
}
}
void CCGDoc::OnDecay()
{
if (attenuation)
{
attenuation=FALSE;
}
else
{
attenuation=TRUE;
}
}
void CCGDoc::OnDeletePara()
{
int x;
CGLight *light;
for (x=0;xk==2)
{
m_LightArray.RemoveAt(x,1);
lightIndex--;
}
else
{
x++;
}
}
}
void CCGDoc::OnTexture()
{
drawMode=dmSetTexture;
}
void CCGDoc::OnCancelTexture()
{
drawMode=dmCancelTexture;
}