139 lines
3.5 KiB
C++
139 lines
3.5 KiB
C++
|
#include "func.h"
|
||
|
|
||
|
void disp_help()
|
||
|
{
|
||
|
cout
|
||
|
<<"grd2msh 1.0 - convert a Surfer6's grd file or a xyz file into Gmsh .msh file for 3D Mapping"<<endl<<endl
|
||
|
<<"syntax: grd2msh <grd_file>|{<xyz_file> -i<x_interval>/<y_interval>}|{<xyz_file> -I<N>/<M>} [-rWGS84|EarthR|<ref-r>/<ref-R>] [-m<magnify_factor>] [-o<msh_file>]"<<endl
|
||
|
<<"-i\tintervals in x and y directions for the xyz file"<<endl
|
||
|
<<"-I\tmartax number in x and y directions for the xyz file"<<endl
|
||
|
<<"-r\treference system of the input file, the data will be taken as altitudes with respect to the reference system"<<endl
|
||
|
<<"-m\tmagnify factor of z values of the grid data"<<endl
|
||
|
<<"-o\tGmsh's mesh file name. The input filename will be used if -o is absent"<<endl<<endl
|
||
|
<<"example: grd2msh test.grd -m1.0 -otest.msh"<<endl;
|
||
|
}
|
||
|
|
||
|
int main(int argc, char const *argv[])
|
||
|
{
|
||
|
char command_type[1024] = {0};
|
||
|
char inputname[1024] = {0};
|
||
|
char mshname[1024] = {0};
|
||
|
char nametype[1024] = {0};
|
||
|
char refSystem[1024] = "NULL";
|
||
|
double mg_factor = 1.0;
|
||
|
double dx = 0,dy = 0;
|
||
|
int n_num = -1, m_num = -1;
|
||
|
int Run = 1;
|
||
|
int filetype;
|
||
|
|
||
|
if (argc==1)
|
||
|
{
|
||
|
disp_help();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sscanf(argv[1],"%[^.]%s",inputname,nametype);//按格式读入文件名与扩展名
|
||
|
if(!strcmp(inputname,""))//检查文件名是否为空
|
||
|
{
|
||
|
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[1]<<endl;
|
||
|
Run = 0;
|
||
|
}
|
||
|
|
||
|
if (!strcmp(nametype,".grd"))
|
||
|
{
|
||
|
filetype = 1;
|
||
|
sscanf(argv[1],"%s",inputname);
|
||
|
}
|
||
|
else if (!strcmp(nametype,".dat")||!strcmp(nametype,".xyz"))
|
||
|
{
|
||
|
filetype = 2;
|
||
|
sscanf(argv[1],"%s",inputname);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
cout<<BOLDRED<<"==> "<<RESET<<"unrecognized file type: "<<nametype<<endl;
|
||
|
Run = 0;
|
||
|
}
|
||
|
|
||
|
for (int i = 2; i < argc; i++)
|
||
|
{
|
||
|
sscanf(argv[i],"%2s",command_type);
|
||
|
if (!strcmp(command_type,MAGNIFY))
|
||
|
{
|
||
|
if (1!=sscanf(argv[i],"%*2s%lf",&mg_factor))
|
||
|
{
|
||
|
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||
|
Run = 0;
|
||
|
}
|
||
|
}
|
||
|
else if(!strcmp(command_type,OUTMSH))//命令为文件名设置符
|
||
|
{
|
||
|
sscanf(argv[i],"%*2s%s",mshname);//按格式读入文件名与扩展名
|
||
|
if(!strcmp(mshname,""))//检查文件名是否为空
|
||
|
{
|
||
|
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||
|
Run = 0;
|
||
|
}
|
||
|
}
|
||
|
else if (!strcmp(command_type,INTERVAL))
|
||
|
{
|
||
|
if(2!=sscanf(argv[i],"%*2s%lf/%lf",&dx,&dy))
|
||
|
{
|
||
|
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||
|
Run = 0;
|
||
|
}
|
||
|
}
|
||
|
else if (!strcmp(command_type,HL))
|
||
|
{
|
||
|
if(2!=sscanf(argv[i],"%*2s%d/%d",&n_num,&m_num))
|
||
|
{
|
||
|
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||
|
Run = 0;
|
||
|
}
|
||
|
}
|
||
|
else if (!strcmp(command_type,REFER))
|
||
|
{
|
||
|
if(1!=sscanf(argv[i],"%*2s%s",refSystem))
|
||
|
{
|
||
|
cout<<BOLDRED<<"==> "<<RESET<<"bad syntax: "<<argv[i]<<endl;
|
||
|
Run = 0;
|
||
|
}
|
||
|
}
|
||
|
else //未定义的命令符
|
||
|
{
|
||
|
cout<<BOLDRED<<"==> "<<RESET<<"unrecognized syntax: "<<argv[i]<<endl;
|
||
|
Run = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!strcmp(inputname,""))
|
||
|
{
|
||
|
cout<<BOLDRED<<"==> "<<RESET<<"error: bad syntax"<<endl;
|
||
|
Run = 0;
|
||
|
}
|
||
|
else if (!strcmp(mshname,""))
|
||
|
{
|
||
|
char temp[1024] = {0};
|
||
|
char temp2[1024] = {0};
|
||
|
sscanf(inputname,"%[^.]%s",temp,temp2);
|
||
|
strcpy(mshname,temp);
|
||
|
strcat(mshname,".msh");
|
||
|
}
|
||
|
|
||
|
if ((filetype==2&&dx==0)||(filetype==2&&dy==0))
|
||
|
{
|
||
|
if ((filetype==2&&n_num==-1)||(filetype==2&&m_num==-1))
|
||
|
{
|
||
|
cout<<BOLDRED<<"==> "<<RESET<<"error: bad syntax"<<endl;
|
||
|
Run = 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (Run)
|
||
|
{
|
||
|
func F1;
|
||
|
F1.run(inputname,mshname,refSystem,mg_factor,filetype,dx,dy,n_num,m_num);
|
||
|
}
|
||
|
}
|
||
|
return 0;
|
||
|
}
|