www.pudn.com > easygis.rar > EasyGisDoc.cpp
// EasyGisDoc.cpp : implementation of the CEasyGisDoc class // #include "stdafx.h" #include "EasyGis.h" #include "EasyGisDoc.h" #include "EG_DataStruct.h" #include "EasyGisView.h" #include#include #include #include #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CEasyGisDoc IMPLEMENT_DYNCREATE(CEasyGisDoc, CDocument) BEGIN_MESSAGE_MAP(CEasyGisDoc, CDocument) //{{AFX_MSG_MAP(CEasyGisDoc) ON_COMMAND(ID_FILE_OPEN, OnFileOpen) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CEasyGisDoc construction/destruction CEasyGisDoc::CEasyGisDoc() { // TODO: add one-time construction code here MaxX=0;MaxY=0;MinX=0;MinY=0; } CEasyGisDoc::~CEasyGisDoc() { } BOOL CEasyGisDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; // TODO: add reinitialization code here // (SDI documents will reuse this document) return TRUE; } // CEasyGisDoc serialization void CEasyGisDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here } else { // TODO: add loading code here } } ///////////////////////////////////////////////////////////////////////////// // CEasyGisDoc diagnostics #ifdef _DEBUG void CEasyGisDoc::AssertValid() const { CDocument::AssertValid(); } void CEasyGisDoc::Dump(CDumpContext& dc) const { CDocument::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CEasyGisDoc commands void CEasyGisDoc::OnFileOpen() { // TODO: Add your command handler code here //FileDialog static char BASED_CODE szFilter[] = "Chart Files (*.mif)|*.mif|Worksheet Files (*.mif)|*.xls|Data Files (*.mid;*.mif)|*.mid; *.mif|All Files (*.*)|*.*||"; CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, NULL); if(dlg.DoModal() == IDCANCEL) return; CString strPath = dlg.GetPathName(); ///////////////////////////////////////////////////////////////////////////// FILE *fpf,*fpd; if((fpf = fopen(strPath, "r" )) == NULL) { AfxMessageBox("数据文件没有打开"); return ; //打开mif文件 } int Strlength=strPath.GetLength(); CString midpath=strPath.Left( Strlength-1); CString strPath2=midpath+"D"; if((fpd= fopen(strPath2, "r" )) == NULL) { AfxMessageBox("数据文件没有打开"); return ; //打开mid文件 } //////////////////////////////////////////////////////////////////////////// EGC_WorkSpace * WorkSpace_obj= new EGC_WorkSpace;//creat a workspace object. m_WorkSpaceList.AddTail(WorkSpace_obj); EGC_Map * Map_obj= new EGC_Map; WorkSpace_obj->m_EGLMapList.AddTail(Map_obj); Map_obj->m_sMapName="郑州局部图"; //图名 EGC_Layer * Layer_obj= new EGC_Layer; Map_obj->m_EGLLayerList.AddTail(Layer_obj); char list[100]; CString str; int flag; EGS_DPOINT pt; EGS_BasicAttri * BasicAttri_obj= new EGS_BasicAttri; // read file ///////////////////读前面的信息////////////////// for( ; ; ) { fscanf(fpf,"%s",str); flag=str.Compare("Data"); if(!flag) break; } //fread(list, sizeof( char ), 258, fpf ); fread(list, sizeof( char ), 2, fpf ); while(!feof(fpf)==1) { int a; fread(list, sizeof( char ),5,fpf);//read the frist 5 char ///////////////////////读Line信息///////////////////// EGC_LineInfo * Line_obj= new EGC_LineInfo; if(list[0]=='L') { int i; Line_obj->m_iPosPointNumber=2; for(i=0;i m_iPosPointNumber;i++) { double x,y; fscanf( fpf, "%lf %lf ", &x ,&y ); pt.X = x; pt.Y = y; Line_obj->PtArray.Add(pt); if(x>MaxX) MaxX=x; if(y>MaxY) MaxY=y; if(x m_Attri.m_id=m_id; Line_obj->m_Attri.m_iCode=m_icode; Line_obj->m_Attri.m_sName=name; Layer_obj->m_EGLLineInfoList.AddTail(Line_obj); a=(int)m_icode/1000; } ///////////////////读Pline信息//////////////////// if(list[0]=='P') { int n,i; fscanf(fpf,"%d",&n); Line_obj->m_iPosPointNumber=n; for(i=0;i m_iPosPointNumber;i++) { double x,y; fscanf(fpf,"%lf %lf",&x,&y); pt.X = x; pt.Y = y; Line_obj->PtArray.Add(pt); if(x>MaxX) MaxX=x; if(y>MaxY) MaxY=y; if(x m_Attri.m_id=m_id; Line_obj->m_Attri.m_iCode=m_icode; Line_obj->m_Attri.m_sName=name; a=(int)m_icode/1000; Layer_obj->m_EGLLineInfoList.AddTail(Line_obj); fread(list, sizeof( char ),18,fpf); } /////////////////////////读Rect信息///////////////////// if(list[2]=='c') { EGC_RectInfo * Rect_obj= new EGC_RectInfo; double x1,y1,x2,y2; fscanf(fpf,"%lf %lf %lf %lf",&x1,&y1,&x2,&y2); Rect_obj->RectArray.X1 = x1; Rect_obj->RectArray.Y1 = y1; Rect_obj->RectArray.X2 = x2; Rect_obj->RectArray.Y2 = y2; if(x1>MaxX) MaxX=x1; if(y1>MaxY) MaxY=y1; if(x1 MaxX) MaxX=x2; if(y2>MaxY) MaxY=y2; if(x2 m_Attri.m_id=m_id; Rect_obj->m_Attri.m_iCode=m_icode; Rect_obj->m_Attri.m_sName=name; Layer_obj->m_EGLRectInfoList.AddTail(Rect_obj); a=(int)m_icode/1000; } /////////////////////读Region信息///////////////////// if(list[2]=='g') { fread(list, sizeof( char ),5,fpf); EGC_RegionInfo * Region_obj= new EGC_RegionInfo; int n,i; fscanf(fpf,"%d",&n); Region_obj->m_iRegPointNumber=n; for(i=0;i m_iRegPointNumber;i++) { double x,y; fscanf(fpf,"%lf %lf",&x,&y); pt.X = x; pt.Y = y; Region_obj->PtArray.Add(pt); } for(i=0;i<7;i++) fscanf(fpf,"%s",str); fread(list, sizeof( char ),1,fpf); /////////////////////////读相应的MID文件!//////////// int m_id,m_icode; char name[100]; fscanf(fpd,"%d,%d,%s",&m_id,&m_icode,name); Region_obj->m_Attri.m_id=m_id; Region_obj->m_Attri.m_iCode=m_icode; Region_obj->m_Attri.m_sName=name; a=(int)m_icode/1000; Layer_obj->m_EGLRegionInfoList.AddTail(Region_obj); } ////////////////给不同的层命名////////////// if(a==1) Layer_obj->m_sLayerName="居民地层"; if(a==2) Layer_obj->m_sLayerName="道路层"; if(a==3) Layer_obj->m_sLayerName="等高线层"; if(a==4) Layer_obj->m_sLayerName="设施层"; if(a==5) Layer_obj->m_sLayerName="独立地物层"; if(a==6) Layer_obj->m_sLayerName="水系层"; if(a==7) Layer_obj->m_sLayerName="电力层"; if(a==8) Layer_obj->m_sLayerName="图廓层"; } fclose( fpf ); fclose( fpd ); ///////////////////激发显示的OnDraw()///////////////// POSITION pos = GetFirstViewPosition(); CEasyGisView* pView = (CEasyGisView*)GetNextView(pos); pView->m_MaxX=MaxX; pView->m_MaxY=MaxY; pView->m_MinX=MinX; pView->m_MinY=MinY; pView->Invalidate(FALSE); }