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