?? cnsdftctl.cpp
字號:
AfxMessageBox("寫入文件失敗");
return;
}
fputs("HeadBegin\n",pfile);
WriteVctFileHead(pfile);
fputs("HeadEnd\n",pfile);
fputs("\n",pfile);
fputs("FeatureCodeBegin\n",pfile);
WriteVctFeature(pfile);
fputs("FeatureCodeEnd\n",pfile);
fputs("\n",pfile);
fputs("TableStructureBegin\n",pfile);
WriteVctTableStructure(pfile);
fputs("TableStructureEnd\n",pfile);
fputs("\n",pfile);
WriteVctGraphy();
fputs("AnnotationBegin\n",pfile);
WriteVctAnnotation(pfile);
fputs("AnnotationEnd\n",pfile);
fputs("\n",pfile);
fputs("AttributeBegin\n",pfile);
WriteVctAttribute(pfile);
fputs("AttributeEnd\n",pfile);
fclose(pfile);
MessageBox("數據轉換完成",MB_OK,MB_ICONINFORMATION);
}
void CCNSDFTCtrl::ReadVctFileHead(FILE *file)
{
char buffer[200];
do
{
fgetNoEmpty(buffer,sizeof(buffer),pfile);
strtok(buffer,":");
char* tmp=strtok(NULL,":");
if(0==strnicmp("DataMark",buffer,8))
{
if(tmp)
m_filehead.DataMark=tmp;
else
m_filehead.DataMark="";
m_filehead.DataMark.TrimLeft();
m_filehead.DataMark.TrimRight();
}
if(0==strnicmp("VerSion",buffer,7))
{
if(tmp)
sscanf(tmp,"%f",&m_filehead.VerSion);
else
m_filehead.VerSion=0;
}
if(0==strnicmp("Unit",buffer,4))
{
if(tmp)
sscanf(tmp,"%s",&m_filehead.Unit);//problem
else
m_filehead.Unit=' ';
}
if(0==strnicmp("Dim",buffer,3))
{
if(tmp)
sscanf(tmp,"%d",&m_filehead.Dim);
// else
}
if(0==strnicmp("Topo",buffer,4))
{
if(tmp)
sscanf(tmp,"%d",&m_filehead.Topo);
//else
}
if(0==strnicmp("MinX",buffer,4))
{
if(tmp)
sscanf(tmp,"%f",&m_filehead.MinX);//問題m_filehead.MinX
//else
// m_filehead.MinX=0;
}
if(0==strnicmp("MinY",buffer,4))
{
if(tmp)
sscanf(tmp,"%f",&m_filehead.MinY);
// else
// m_filehead.MinY=0;
}
if(0==strnicmp("MinZ",buffer,4))
{
if(tmp)
sscanf(tmp,"%f",&m_filehead.MinZ);
//else
// m_filehead.MinZ=0;
}
if(0==strnicmp("MaxX",buffer,4))
{
if(tmp)
sscanf(tmp,"%f",&m_filehead.MaxX);
// else
// m_filehead.MaxX=0;
}
if(0==strnicmp("MaxY",buffer,4))
{
if(tmp)
sscanf(tmp,"%f",&m_filehead.MaxY);
//else
// m_filehead.MaxY=0;
}
if(0==strnicmp("MaxZ",buffer,4))
{
if(tmp)
sscanf(tmp,"%f",&m_filehead.MaxZ);
//else
// m_filehead.MaxZ=0;
}
if(0==strnicmp("ScaleM",buffer,6))
{
if(tmp)
sscanf(tmp,"%f",&m_filehead.ScaleM);
//else
// m_filehead.ScaleM=0;
}
if(0==strnicmp("Projection",buffer,10))
{
if(tmp)
m_filehead.Projection=tmp;
//else
// m_filehead.Projection="";
}
if(0==strnicmp("Spheroid",buffer,8))
{
if(tmp)
m_filehead.Spheroid=tmp;
//else
// m_filehead.Spheroid="";
}
if(0==strnicmp("Parameters",buffer,10))
{
if(tmp)
m_filehead.Parameters=tmp;
else
m_filehead.Parameters="";
}
if(0==strnicmp("Date",buffer,4))
{
if(tmp)
m_filehead.Date=tmp;
//else
// m_filehead.Date="";
}
if(0==strnicmp("Separator",buffer,9))
{
if(tmp)
sscanf(tmp,"%s",&m_filehead.Separator);//NOproblem
else
m_filehead.Separator=',';
}
if(0==strnicmp("Coordinate",buffer,10))
{
if(tmp)
sscanf(tmp,"%c",&m_filehead.Coordinate);
else
m_filehead.Coordinate='M';
}
}while(strnicmp("HeadEnd",buffer,7)!=0);
}
void CCNSDFTCtrl::ReadVctFeature(FILE *pfile)
{
///////////讀取要素類型參數
pHeadFeature=NULL;
char buffer[200];
Feature *pCurFeature, *pPrevFeature;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
int TmpFlg=1;
while(strnicmp("FeatureCodeEnd",buffer,14)!=0)
{
strtok(buffer,",");
char* nam=strtok(NULL,",");
char* shap=strtok(NULL,",");
char* colr=strtok(NULL,",");
char* lstnam=strtok(NULL,",");
pCurFeature=new Feature[sizeof(Feature)];
pCurFeature->Code=buffer;
pCurFeature->Name=nam;
pCurFeature->Shape=shap;
sscanf(colr,"%d",&pCurFeature->Color);
pCurFeature->ListName=lstnam;
pCurFeature->pNext=NULL;
if(TmpFlg==1)
pHeadFeature=pCurFeature;
else
pPrevFeature->pNext=pCurFeature;
pPrevFeature=pCurFeature;
TmpFlg=0;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
}
}
void CCNSDFTCtrl::ReadVctTableStruct(FILE *pfile)
{
//////讀屬性數據結構
pHeadTblStruct=NULL;
char buffer[200];
TableStructure *pCurTblStruct,*pPrevTblStruct;
int temp=1;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
while(strnicmp("TableStructureEnd",buffer,17)!=0)
{
strtok(buffer,",");
char* itemNum=strtok(NULL,",");
pCurTblStruct=new TableStructure[sizeof(TableStructure)];
pCurTblStruct->ListName=buffer;
sscanf(itemNum,"%d",&pCurTblStruct->ItemNum);
pCurTblStruct->pTblNext=NULL;
Item* item=new Item[pCurTblStruct->ItemNum];
pCurTblStruct->pItem=item;
for(int i=0;i<pCurTblStruct->ItemNum;i++)
{
fgetNoEmpty(buffer,sizeof(buffer),pfile);
strtok(buffer,",");
char* type=strtok(NULL,",");
item[i].Name=buffer;
item[i].Type=type;
if(item[i].Type=="Char"||item[i].Type=="Integer")
{
char* width=strtok(NULL,",");
sscanf(width,"%d",&item[i].Width);
}
if(item[i].Type=="Float")
{
char* width=strtok(NULL,",");
char* pric=strtok(NULL,",");
sscanf(width,"%d",&item[i].Width);
sscanf(pric,"%d",&item[i].Pric);
}
}
if(temp==1)
pHeadTblStruct=pCurTblStruct;
else
pPrevTblStruct->pTblNext=pCurTblStruct;
pPrevTblStruct=pCurTblStruct;
temp=0;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
}
}
void CCNSDFTCtrl::ReadVctGraphy()
{
///讀幾何圖形數據
char buffer[200];
fgetNoEmpty(buffer,sizeof(buffer),pfile);
if(strnicmp("PointBegin",buffer,10)!=0)
{
fclose(pfile);
AfxMessageBox("文件沒有點數據信息");
return;
}
ReadVctPoint(pfile);
fgetNoEmpty(buffer,sizeof(buffer),pfile);
if(strnicmp("LineBegin",buffer,9)!=0)
{
fclose(pfile);
AfxMessageBox("文件沒有線數據信息");
return;
}
ReadVctLine(pfile);
fgetNoEmpty(buffer,sizeof(buffer),pfile);
if(strnicmp("PolygonBegin",buffer,12)!=0)
{
fclose(pfile);
AfxMessageBox("文件沒有多邊形信息");
return;
}
ReadVctPolygon(pfile);
}
void CCNSDFTCtrl::ReadVctPoint(FILE *pfile)
{
/////////////讀點數據
pHeadPointData=NULL;
char buffer[200];
PointData *pCurPointData,*pPrevPointData;
int tmflag=1;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
while(strnicmp("PointEnd",buffer,8)!=0)
{
pCurPointData=new PointData[sizeof(PointData)];
pCurPointData->AimCode=buffer;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
pCurPointData->FeatureCode=buffer;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
pCurPointData->LayerName=buffer;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
sscanf(buffer,"%d",&pCurPointData->PointMark);
fgetNoEmpty(buffer,sizeof(buffer),pfile);
strtok(buffer,",");
char* temp=strtok(NULL,",");
sscanf(buffer,"%f",&pCurPointData->X);
sscanf(temp,"%f",&pCurPointData->Y);
//////////////////////////坐標Z未加
if(m_filehead.Topo==2&&pCurPointData->PointMark==2)
{
//////////待擴充的模塊
}
//pPrevPointData=pCurPointData;
pCurPointData->pNext=NULL;
if(tmflag==1)
pHeadPointData=pCurPointData;
else
pPrevPointData->pNext=pCurPointData;
pPrevPointData=pCurPointData;
tmflag=0;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
}
}
void CCNSDFTCtrl::ReadVctLine(FILE *pfile)
{
////////讀線數據
pHeadLineData=NULL;
char buffer[200];
fgetNoEmpty(buffer,sizeof(buffer),pfile);
LineData *pCurLineData,*pPrevLineData;
int tpflag=1;
while(strnicmp("LineEnd",buffer,7)!=0)
{
pCurLineData=new LineData[sizeof(LineData)];
pCurLineData->AimCode=buffer;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
pCurLineData->FeatureCode=buffer;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
pCurLineData->LayerName=buffer;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
sscanf(buffer,"%d",&pCurLineData->LineMark);
///////讀直接坐標
if(pCurLineData->LineMark!=100)
{
fgetNoEmpty(buffer,sizeof(buffer),pfile);
sscanf(buffer,"%d",&pCurLineData->PointNum);
Point *LnPnt;
LnPnt=new Point[pCurLineData->PointNum];
pCurLineData->pMemberPoint=LnPnt;
for(int i=0;i<pCurLineData->PointNum;i++)
{
fgetNoEmpty(buffer,sizeof(buffer),pfile);
strtok(buffer,",");
char* tmp=strtok(NULL,",");
sscanf(buffer,"%f",&LnPnt[i].X);
sscanf(tmp,"%f",&LnPnt[i].Y);
/////坐標Z未加
}
}
else
{
//讀間接坐標
fgetNoEmpty(buffer,sizeof(buffer),pfile);
sscanf(buffer,"%d",&pCurLineData->ChildNum);
int* LnChild;
LnChild=new int[pCurLineData->ChildNum];
pCurLineData->pMemberChild=LnChild;
int cout=GetShang(pCurLineData->ChildNum,8);
for(int i=0;i<cout+1;i++)
{
if(i!=cout)
{
fgetNoEmpty(buffer,sizeof(buffer),pfile);
strtok(buffer,",");
sscanf(buffer,"%d",&LnChild[i*8]);
for(int j=1;j<=7;j++)
{
char* swap=strtok(NULL,",");
sscanf(swap,"%d",&LnChild[i*8+j]);
}
}
else
{
fgetNoEmpty(buffer,sizeof(buffer),pfile);
strtok(buffer,",");
sscanf(buffer,"%d",&LnChild[cout*8]);
for(int k=1;k<pCurLineData->ChildNum%8;k++)
{
char* swap=strtok(NULL,",");
sscanf(swap,"%d",&LnChild[cout*8+k]);
}
}
}
}
pCurLineData->pNext=NULL;
if(tpflag==1)
pHeadLineData=pCurLineData;
else
pPrevLineData->pNext=pCurLineData;
pPrevLineData=pCurLineData;
tpflag=0;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
}
}
void CCNSDFTCtrl::ReadVctPolygon(FILE *pfile)
{
///////讀多邊形
pHeadPolygon=NULL;
char buffer[200];
fgetNoEmpty(buffer,sizeof(buffer),pfile);
int flag=1;
PolygonData *pPrevPolygon,*pCurPolygon;
while(strnicmp("PolygonEnd",buffer,10)!=0)
{
pCurPolygon=new PolygonData[sizeof(PolygonData)];
pCurPolygon->AimCode=buffer;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
pCurPolygon->FeatureCode=buffer;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
pCurPolygon->LayerName=buffer;
fgetNoEmpty(buffer,sizeof(buffer),pfile);
strtok(buffer,",");
char* tmp=strtok(NULL,",");
sscanf(buffer,"%f",&pCurPolygon->labX);
sscanf(tmp,"%f",&pCurPolygon->labY);
if(m_filehead.Topo==0)
{
fgetNoEmpty(buffer,sizeof(buffer),pfile);
sscanf(buffer,"%d",&pCurPolygon->PointNum);//problem
int TmpSwap=pCurPolygon->PointNum;
while(pCurPolygon->PointNum!=0)
{
Point *PlyPnt;
PlyPnt=new Point[pCurPolygon->PointNum];
pCurPolygon->pMemberPoint=PlyPnt;
for(int i=0;i<pCurPolygon->PointNum;i++)
{
fgetNoEmpty(buffer,sizeof(buffer),pfile);
strtok(buffer,",");
char* tmp=strtok(NULL,",");
sscanf(buffer,"%f",&PlyPnt[i].X);
sscanf(tmp,"%f",&PlyPnt[i].Y);
/////坐標Z暫未加
}
fgetNoEmpty(buffer,sizeof(buffer),pfile);
sscanf(buffer,"%d",&pCurPolygon->PointNum);//problem
}
pCurPolygon->PointNum=TmpSwap;
}
else
{
//////讀間接坐標
fgetNoEmpty(buffer,sizeof(buffer),pfile);
sscanf(buffer,"%d",&pCurPolygon->ChildNum);
int* PlyChild;
PlyChild=new int[pCurPolygon->ChildNum];
pCurPolygon->pMemberChild=PlyChild;
int cout=GetShang(pCurPolygon->ChildNum,8);
for(int i=0;i<cout+1;i++)
{
if(i!=cout)
{
fgetNoEmpty(buffer,sizeof(buffer),pfile);
strtok(buffer,",");
sscanf(buffer,"%d",&PlyChild[i*8]);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -