www.pudn.com > 3dpipe.zip > Tridimensional PipeDoc.cpp, change:2006-01-21,size:6008b


// Tridimensional PipeDoc.cpp : implementation of the CTridimensionalPipeDoc class 
// 
 
#include "stdafx.h" 
#include "Tridimensional Pipe.h" 
#include "Tridimensional PipeDoc.h" 
 
#include "PipeLineObject.h" 
#include "PipelineDatabase.h" 
#include "ReadDXF.h" 
#include "Afxdlgs.h" 
#include "Afx.h" 
#include "stdio.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CTridimensionalPipeDoc 
 
IMPLEMENT_DYNCREATE(CTridimensionalPipeDoc, CDocument) 
 
BEGIN_MESSAGE_MAP(CTridimensionalPipeDoc, CDocument) 
	//{{AFX_MSG_MAP(CTridimensionalPipeDoc) 
	ON_COMMAND(ID_FILE_EXPORT, OnFileExport) 
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CTridimensionalPipeDoc construction/destruction 
 
CTridimensionalPipeDoc::CTridimensionalPipeDoc() 
{ 
	// TODO: add one-time construction code here 
 
} 
 
CTridimensionalPipeDoc::~CTridimensionalPipeDoc() 
{ 
	for(int i = 0; i  MapFile.arrLineFile.GetSize(); i++) 
		MapFile.arrLineFile[i].arrPointArray.RemoveAll(); 
 
	MapFile.arrLineFile.RemoveAll(); 
	MapFile.arrPointFile.RemoveAll(); 
	PipeLine.ptLines3d.RemoveAll(); 
	PipeLine.ptPipeLinesNormal.RemoveAll(); 
} 
 
BOOL CTridimensionalPipeDoc::OnNewDocument() 
{ 
	if (!CDocument::OnNewDocument()) 
		return FALSE; 
 
	// TODO: add reinitialization code here 
	// (SDI documents will reuse this document) 
 
	return TRUE; 
} 
 
 
///////////////////////////////////////////////////////////////////////////// 
// CTridimensionalPipeDoc serialization 
 
void CTridimensionalPipeDoc::Serialize(CArchive& ar) 
{ 
	if (ar.IsStoring()) 
	{ 
		// TODO: add storing code here 
	} 
	else 
	{ 
		// TODO: add loading code here 
	} 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CTridimensionalPipeDoc diagnostics 
 
#ifdef _DEBUG 
void CTridimensionalPipeDoc::AssertValid() const 
{ 
	CDocument::AssertValid(); 
} 
 
void CTridimensionalPipeDoc::Dump(CDumpContext& dc) const 
{ 
	CDocument::Dump(dc); 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CTridimensionalPipeDoc commands 
 
void CTridimensionalPipeDoc::OnFileExport()  
{ 
	// TODO: Add your command handler code here 
	CString str,filename; 
	CStdioFile fileWater; 
 
	CFileDialog dlg(FALSE,"txt",filename, 
		OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, 
		"文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||",NULL); 
	if(dlg.DoModal() == IDCANCEL) 
		return; 
 
	filename = dlg.GetPathName(); 
	if(filename.IsEmpty()) 
		AfxMessageBox("没有文件名,请重新导出文件"); 
	else 
		filename = filename.Left(filename.GetLength() - 3) + "txt"; 
 
 
 
	if(fileWater.Open(filename,CFile::modeCreate| 
		CFile::modeNoTruncate|CFile::modeWrite|CFile::typeText) == 0) 
	{ 
		str = "保存文件" + filename + "失败!"; 
		AfxMessageBox(str); 
		return; 
	} 
 
	str.Format("\t地下管网数据库文件\n\n"); 
	fileWater.WriteString (str); 
	str.Format("图幅范围:%lf,%lf,%lf,%lf\n\n",MapFile.boxBoundary.minX, 
		MapFile.boxBoundary.minY,MapFile.boxBoundary.maxX,MapFile.boxBoundary.maxY); 
	fileWater.WriteString (str); 
	str.Format("图层名:%s\n\n",MapFile.pMapName ); 
	fileWater.WriteString (str); 
 
	str.Format("管点总数:%u\n",MapFile.nPipePointSum ); 
	fileWater.WriteString (str); 
	str.Format("管点标识号,X,Y,埋深或高度\n"); 
	fileWater.WriteString (str); 
	for(UINT i = 0; i  MapFile.nPipePointSum; i++) 
	{		 
		str.Format("%u,%lf,%lf,%lf\n",MapFile.arrPointFile[i].ID, 
			MapFile.arrPointFile[i].X,MapFile.arrPointFile[i].Y,MapFile.arrPointFile[i].Z); 
		fileWater.WriteString (str); 
	} 
 
	str.Format("\n管线总数:%u\n",MapFile.nPipeLineSum ); 
	fileWater.WriteString (str); 
	str.Format("管线标识号,管点数目\n管点点号\n"); 
	fileWater.WriteString (str); 
	for(i = 0; i  MapFile.nPipeLineSum; i++) 
	{ 
		UINT num = MapFile.arrLineFile[i].nPointNUM ; 
		str.Format("%u,%u\n",MapFile.arrLineFile[i].ID ,num ); 
		fileWater.WriteString (str); 
		for(UINT j = 0; j  num - 1; j++) 
		{ 
			str.Format("%u,",MapFile.arrLineFile[i].arrPointArray[j]); 
			fileWater.WriteString (str); 
		} 
		str.Format("%u\n",MapFile.arrLineFile[i].arrPointArray[num - 1]); 
		fileWater.WriteString (str); 
	} 
 
	fileWater.Close(); 
	 
} 
 
 
 
BOOL CTridimensionalPipeDoc::OnOpenDocument(LPCTSTR lpszPathName)  
{ 
	ReadDXF *pCallFun = new ReadDXF; 
	CString strFileName =(CString)lpszPathName; 
	 
	if(strFileName.Right(3) == "dxf") 
	{ 
		pCallFun->ReadDXFToFile(lpszPathName,MapFile); 
	} 
	else 
		OnFileOpen(lpszPathName); 
	 
	delete []pCallFun; 
	if (!CDocument::OnOpenDocument(lpszPathName)) 
		return FALSE; 
	 
	// TODO: Add your specialized creation code here 
	PipeLine.DrawPipeLine(MapFile); 
	 
	return TRUE; 
} 
 
 
 
void CTridimensionalPipeDoc::OnFileOpen(LPCTSTR lpszPathName)  
{ 
	CString str; 
	CFile file; 
 
	if(file.Open(lpszPathName,CFile::modeRead) == 0) 
	{ 
		str = "打开文件失败!"; 
		AfxMessageBox(str); 
		return; 
	} 
 
	file.Read(&MapFile.boxBoundary, 4*sizeof(double)); 
	file.Read(&MapFile.pMapName, 20*sizeof(char)); 
	file.Read(&MapFile.nPipePointSum, sizeof(unsigned int)); 
	for(UINT i = 0; i  MapFile.nPipePointSum; i++) 
	{ 
		MapFile.arrPointFile.SetSize(MapFile.nPipePointSum); 
		file.Read(&MapFile.arrPointFile[i], sizeof(unsigned int)+sizeof(float)*3); 
	} 
	file.Read(&MapFile.nPipeLineSum, sizeof(unsigned int)); 
	for(i = 0; i  MapFile.nPipeLineSum; i++) 
	{ 
		MapFile.arrLineFile.SetSize(MapFile.nPipeLineSum); 
		file.Read(&MapFile.arrLineFile[i].ID,sizeof(unsigned int)); 
		file.Read(&MapFile.arrLineFile[i].nPointNUM,sizeof(unsigned int)); 
		for(UINT j = 0; j  MapFile.arrLineFile[i].nPointNUM; j++) 
		{ 
			MapFile.arrLineFile[i].arrPointArray.SetSize(MapFile.arrLineFile[i].nPointNUM); 
			file.Read(&MapFile.arrLineFile[i].arrPointArray[j],sizeof(unsigned int)); 
		} 
	}		 
}