gctl_toolkits/archive/grd2msh/main.cpp
2024-09-10 20:25:18 +08:00

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