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