⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 caddoc.cpp

📁 显示地震剖面对地震专业的学生来说显示地震剖面特别重要本程序实现了地震剖面的绘制
💻 CPP
字号:
// cadDoc.cpp : implementation of the CCadDoc class
//
#include <afxcoll.h>
#include <afxtempl.h>
#include "stdafx.h"
#include "cad.h"
#include "Line.h"
#include "cadDoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCadDoc

IMPLEMENT_DYNCREATE(CCadDoc, CDocument)

BEGIN_MESSAGE_MAP(CCadDoc, CDocument)
	//{{AFX_MSG_MAP(CCadDoc)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCadDoc construction/destruction

CCadDoc::CCadDoc()
{
	// TODO: add one-time construction code here

}

CCadDoc::~CCadDoc()
{
}

BOOL CCadDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;
	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CCadDoc serialization

void CCadDoc::Serialize(CArchive& ar)
{  
if (ar.IsStoring())
{	    int indexline=0;
	    int indexcircle=0;
		int indexrectangle=0;
		ar<<m_whichgraph;
	if(m_linearray.GetSize())
	{
		if(m_circlearray.GetSize())
		{
         m_linearray.GetAt(m_linearray.GetUpperBound())->SetNext(2);
		}
		else  if(m_rectanglearray.GetSize())
		{
          m_linearray.GetAt(m_linearray.GetUpperBound())->SetNext(3);
		}
		else 
        m_linearray.GetAt(m_linearray.GetUpperBound())->SetNext(4);
	}
	if(m_circlearray.GetSize())
	{
		if(m_rectanglearray.GetSize())
		{
          m_circlearray.GetAt(m_circlearray.GetUpperBound())->SetNext(3);
		}
		 else 
        m_circlearray.GetAt(m_circlearray.GetUpperBound())->SetNext(4);
	}
	if(m_rectanglearray.GetSize())
		m_rectanglearray.GetAt(m_rectanglearray.GetUpperBound())->SetNext(4);
	if(m_linearray.GetSize())
		while(indexline<=m_linearray.GetUpperBound())
		{  
		   m_linearray.GetAt(indexline)->Serialize(ar);
		   indexline++;
		}
		if(m_circlearray.GetSize())
		while(indexcircle<=m_circlearray.GetUpperBound())
		{
			m_circlearray.GetAt(indexcircle)->Serialize(ar);
			indexcircle++;
		}
		if(m_rectanglearray.GetSize())
		while(indexrectangle<=m_rectanglearray.GetUpperBound())
		{
			m_rectanglearray.GetAt(indexrectangle)->Serialize(ar);
			indexrectangle++;
		}

		// TODO: add storing code here
}
else
{	    CLine * pline;
	    CCircle * pcircle;
		CRectangle * prectangle;
		ar>>m_whichgraph;
   if(m_whichgraph==1)
   {
		pline=new CLine; 
		pline->Serialize(ar);

		m_linearray.Add(pline);
		while(pline->GetNext()==1)
		{   
			pline=new(CLine);			
		    pline->Serialize(ar);
            m_linearray.Add(pline);
		}
	     if(pline->GetNext()==2)
		 {
			 pcircle=new CCircle;
			 pcircle->Serialize(ar);
			 m_circlearray.Add(pcircle);
			 while(pcircle->GetNext()==2)
			 {
				 pcircle=new CCircle;
				 pcircle->Serialize(ar);
				 m_circlearray.Add(pcircle);
			 }
		     if(pcircle->GetNext()==3)
			 {
                do
				{
				 prectangle=new CRectangle;
				 prectangle->Serialize(ar);
				 m_rectanglearray.Add(prectangle);
				}
                while(prectangle->GetNext()==3);
			 }
		 }

		 else if(pline->GetNext()==3)
		 {
			 do
			 {
				 prectangle=new CRectangle;
				 prectangle->Serialize(ar);
				 m_rectanglearray.Add(prectangle);
			 }
              while(prectangle->GetNext()==3);
		 }
   }
   else if(m_whichgraph==2)
   {
			 pcircle=new CCircle;
			 pcircle->Serialize(ar);
			 m_circlearray.Add(pcircle);
			 while(pcircle->GetNext()==2)
			 {
				 pcircle=new CCircle;
				 pcircle->Serialize(ar);
				 m_circlearray.Add(pcircle);
			 }
		if(pcircle->GetNext()==3)
		{
             do
			 {
				 prectangle=new CRectangle;
				 prectangle->Serialize(ar);
				 m_rectanglearray.Add(prectangle);
			 }
             while(prectangle->GetNext()==3);
		}
   }
   else if(m_whichgraph==3)
   {
             do
			 {
				 prectangle=new CRectangle;
				 prectangle->Serialize(ar);
				 m_rectanglearray.Add(prectangle);
			 }
             while(prectangle->GetNext()==3);
   }
    if(m_linearray.GetSize())
    m_linearray.GetAt(m_linearray.GetUpperBound())->SetNext(1);
	if(m_circlearray.GetSize())
    m_circlearray.GetAt(m_circlearray.GetUpperBound())->SetNext(2);
	if(m_rectanglearray.GetSize())
	m_rectanglearray.GetAt(m_rectanglearray.GetUpperBound())->SetNext(3);
		// TODO: add loading code here
}

}

/////////////////////////////////////////////////////////////////////////////
// CCadDoc diagnostics

#ifdef _DEBUG
void CCadDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CCadDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CCadDoc commands

CLine * CCadDoc::GetLine(int nIndex)
{ if(nIndex<0||nIndex>m_linearray.GetUpperBound())
       return NULL;
  else
	  return m_linearray.GetAt(nIndex);
}

void CCadDoc::AddLine(CPoint pt1, CPoint pt2)
{ 
  CLine * pline=new CLine(pt1,pt2);
  m_linearray.Add(pline);

}



void CCadDoc::DeleteContents() 
{
	// TODO: Add your specialized code here and/or call the base class
	CDocument::DeleteContents();
  int indexline=m_linearray.GetUpperBound();
  int indexcircle=m_circlearray.GetUpperBound();
  int indexrectangle=m_rectanglearray.GetUpperBound();
CLine * pline;
CCircle * pcircle;
CRectangle * prectangle;
  while(indexline>=0)
  {
	  pline=m_linearray.GetAt(indexline);
	  delete(pline);
	  m_linearray.RemoveAt(indexline);
	  indexline--;
  }
  while(indexcircle>=0)
  {
	  pcircle=m_circlearray.GetAt(indexcircle);
	  delete(pcircle);
	  m_circlearray.RemoveAt(indexcircle);
	  indexcircle--;

  }
  while(indexrectangle>=0)
  {
	  prectangle=m_rectanglearray.GetAt(indexrectangle);
	  delete(prectangle);
	  m_rectanglearray.RemoveAt(indexrectangle);
	  indexrectangle--;
  }

}

void CCadDoc::AddRectangle(CPoint pt1, CPoint pt2)
{
    
	CRectangle *prectangle;
	prectangle=new CRectangle(pt1,pt2);
	m_rectanglearray.Add(prectangle);
    
   
     
}

void CCadDoc::AddCircle(CPoint pt1, CPoint pt2)
{
 CCircle * pcircle;
 pcircle=new CCircle(pt1,pt2);
 m_circlearray.Add(pcircle);

}



void CCadDoc::SetGraphKind(int i)
{
	m_whichgraph=i;

}

int CCadDoc::GetGraphKind()
{
    return m_whichgraph;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -