www.pudn.com > Poly.rar > PolyTopDoc.cpp


// PolyTopDoc.cpp : implementation of the CPolyTopDoc class 
// 
 
#include "stdafx.h" 
#include "PolyTop.h" 
#include "DefineZoneDlg.h" 
#include "PolyTopDoc.h" 
#include "PolyTopView.h" 
#include "io.h" 
#include "datasdef.h" 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CPolyTopDoc 
 
IMPLEMENT_DYNCREATE(CPolyTopDoc, CDocument) 
 
BEGIN_MESSAGE_MAP(CPolyTopDoc, CDocument) 
	//{{AFX_MSG_MAP(CPolyTopDoc) 
	ON_COMMAND(ID_LOAD_POLY, OnLoadPoly) 
	ON_COMMAND(ID_CREATE_TOP, OnCreateTop) 
	ON_COMMAND(ID_DEFINE_ZONE, OnDefineZone) 
	ON_COMMAND(ID_ZOOM_IN, OnZoomIn) 
	ON_COMMAND(ID_ZOOM_OUT, OnZoomOut) 
	ON_COMMAND(ID_ZOOM_SOURCE, OnZoomSource) 
	ON_UPDATE_COMMAND_UI(ID_ZOOM_IN, OnUpdateZoomIn) 
	ON_UPDATE_COMMAND_UI(ID_ZOOM_OUT, OnUpdateZoomOut) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CPolyTopDoc construction/destruction 
 
CPolyTopDoc::CPolyTopDoc() 
{ 
	// TODO: add one-time construction code here 
    m_disPt = 0; 
	m_disPoly = 0; 
	m_size.cx = 15000; 
	m_size.cy = 12000; 
	m_chooseMode = mode_choose_none; 
} 
 
CPolyTopDoc::~CPolyTopDoc() 
{ 
} 
 
BOOL CPolyTopDoc::OnNewDocument() 
{ 
	if (!CDocument::OnNewDocument()) 
		return FALSE; 
 
	// TODO: add reinitialization code here 
	// (SDI documents will reuse this document) 
 
	return TRUE; 
} 
 
 
 
///////////////////////////////////////////////////////////////////////////// 
// CPolyTopDoc serialization 
 
void CPolyTopDoc::Serialize(CArchive& ar) 
{ 
	if (ar.IsStoring()) 
	{ 
		// TODO: add storing code here 
	} 
	else 
	{ 
		// TODO: add loading code here 
	} 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CPolyTopDoc diagnostics 
 
#ifdef _DEBUG 
void CPolyTopDoc::AssertValid() const 
{ 
	CDocument::AssertValid(); 
} 
 
void CPolyTopDoc::Dump(CDumpContext& dc) const 
{ 
	CDocument::Dump(dc); 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CPolyTopDoc commands 
 
void CPolyTopDoc::OnLoadPoly()  
{ 
	// TODO: Add your command handler code here 
	CString     strOpenFileType1 = "拓朴数据(*.txt)|*.txt|All Files (*.*)|*.*||"; 
	CFileDialog FileDlg1(TRUE, "*.txt", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strOpenFileType1); 
	if(FileDlg1.DoModal()==IDOK) 
	{ 
		m_poly.InitData(); 
		m_poly.ReadFile(FileDlg1.GetPathName()); 
	} 
	//显示点 
	InitData(); 
	m_ptList = m_poly.GetPtList(); 
	m_disPt = 1; 
	UpdateAllViews(NULL); 
} 
                      
void CPolyTopDoc::OnCreateTop()  
{ 
	// TODO: Add your command handler code here 
	if(m_ptList.empty())  
		return; 
	m_poly.SortPolygons(); 
	 
	m_vPolygons = m_poly.GetPolyList(); 
	m_disPoly = 1; 
	//测试 
	FILE* fp; 
	if((fp = fopen("C:\\temp\\poly.txt","w"))==0)  
		return; 
	intIntList::iterator it1; 
	intList::iterator    it2; 
	for(it1=m_vPolygons.begin();it1!=m_vPolygons.end();it1++) 
	{ 
		intList pList = *it1; 
		for(it2=pList.begin();it2!=pList.end();it2++) 
		{ 
			int pt = *it2; 
            fprintf(fp,"%d\n",pt); 
		} 
		fprintf(fp,"\n"); 
	} 
	fclose(fp); 
	UpdateAllViews(NULL); 
} 
 
void CPolyTopDoc::InitData() 
{ 
	m_disPt = 0; 
	m_disPoly = 0; 
	m_ptList.clear(); 
	m_vPolygons.clear(); 
} 
 
void CPolyTopDoc::OnDefineZone()  
{ 
	// TODO: Add your command handler code here 
	CDefineZoneDlg dlg; 
	if(dlg.DoModal()==IDOK) 
	{ 
		m_size.cx = dlg.m_width; 
		m_size.cy = dlg.m_heighr; 
	} 
	UpdateAllViews(NULL); 
} 
 
void CPolyTopDoc::OnZoomIn()  
{ 
	// TODO: Add your command handler code here 
	if(m_chooseMode==mode_zoom_in) 
	{ 
		m_chooseMode = mode_choose_none;		 
	} 
	else 
	{ 
		m_chooseMode = mode_zoom_in;		 
	} 
} 
 
void CPolyTopDoc::OnZoomOut()  
{ 
	// TODO: Add your command handler code here 
	if(m_chooseMode==mode_zoom_out) 
	{ 
		m_chooseMode = mode_choose_none;		 
	} 
	else 
	{ 
		m_chooseMode = mode_zoom_out;		 
	} 
} 
 
void CPolyTopDoc::OnZoomSource()  
{ 
	// TODO: Add your command handler code here 
	CPolyTopView* pView = (CPolyTopView*)GetView(); 
	pView->ZoomSource();	 
} 
 
void CPolyTopDoc::OnUpdateZoomIn(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	pCmdUI->SetCheck(m_chooseMode==mode_zoom_in); 
} 
 
void CPolyTopDoc::OnUpdateZoomOut(CCmdUI* pCmdUI)  
{ 
	// TODO: Add your command update UI handler code here 
	pCmdUI->SetCheck(m_chooseMode==mode_zoom_out); 
} 
 
 
CView* CPolyTopDoc::GetView() 
{ 
	CView* 	pView; 
	POSITION pos; 
	pos = GetFirstViewPosition(); 
	while (pos)  
	{ 
		pView = GetNextView(pos); 
		if(pView->IsKindOf(RUNTIME_CLASS(CPolyTopView))) 
			return pView;		 
	} 
	return NULL; 
	 
 
} 
 
BOOL CPolyTopDoc::OnOpenDocument(LPCTSTR lpszPathName)  
{ 
	if (!CDocument::OnOpenDocument(lpszPathName)) 
		return FALSE; 
	 
	// TODO: Add your specialized creation code here 
	//判断文件是否存在 
	m_poly.InitData(); 
    if(!m_poly.ReadMlFile(lpszPathName)) 
		return FALSE; 
     
	m_ptList = m_poly.GetPtList(); 
    m_size = m_poly.GetSize();  
	m_disPt = 1; 
	UpdateAllViews(NULL); 
	return TRUE; 
}