initial upload
This commit is contained in:
5
archive/tetgen2gmsh/CMakeLists.txt
Normal file
5
archive/tetgen2gmsh/CMakeLists.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
add_executable(tet2msh main.cpp)
|
||||
# 第二种方式指定目标文件的路径 这个方式目标文件夹中将只包含目标文件而没有中间文件
|
||||
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||
# 设置安装地址
|
||||
install(TARGETS tet2msh RUNTIME DESTINATION selfpro)
|
||||
63
archive/tetgen2gmsh/data_func.h
Normal file
63
archive/tetgen2gmsh/data_func.h
Normal file
@@ -0,0 +1,63 @@
|
||||
#ifndef _DATA_FUNC_H
|
||||
#define _DATA_FUNC_H
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <string.h>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
#include <ctime>
|
||||
#include <cmath>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#define pole_radius 6356752.3
|
||||
#define equator_radius 6378137
|
||||
#define pi 3.1415926535897932384626433832795
|
||||
#define OUTPUT "-o"
|
||||
using namespace std;
|
||||
|
||||
struct vector //<2F><><EFBFBD><EFBFBD>ʸ<EFBFBD><CAB8><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
{
|
||||
double x,y,z;
|
||||
};
|
||||
|
||||
struct vertex //<2F><><EFBFBD>嶥<EFBFBD><E5B6A5><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
{
|
||||
int No;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
vector vt;;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
struct edge
|
||||
{
|
||||
int No;
|
||||
int ver[2];
|
||||
};
|
||||
|
||||
struct face
|
||||
{
|
||||
int No;
|
||||
int ver[3];
|
||||
};
|
||||
|
||||
struct tetra //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><E1B9B9>
|
||||
{
|
||||
int No;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int ver[4];//<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>嶥<EFBFBD><E5B6A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
struct sphere_point{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
double phi,thet,radius;
|
||||
};
|
||||
|
||||
double WGS84_r(double lati){//<2F><><EFBFBD><EFBFBD>WGS84<38>ο<EFBFBD><CEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뾶
|
||||
return pole_radius*equator_radius/sqrt(pow(pole_radius,2)*pow(cos((double) lati*pi/180),2)+pow(equator_radius,2)*pow(sin((double) lati*pi/180),2));
|
||||
}
|
||||
|
||||
vector SCS2CCS(sphere_point p1){//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>תֱ<D7AA><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
vector v;
|
||||
v.x = p1.radius*sin((0.5-p1.thet/180.0)*pi)*cos((2.0+p1.phi/180.0)*pi);
|
||||
v.y = p1.radius*sin((0.5-p1.thet/180.0)*pi)*sin((2.0+p1.phi/180.0)*pi);
|
||||
v.z = p1.radius*cos((0.5-p1.thet/180.0)*pi);
|
||||
return v;
|
||||
}
|
||||
#endif
|
||||
75
archive/tetgen2gmsh/main.cpp
Normal file
75
archive/tetgen2gmsh/main.cpp
Normal file
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
tetgen2gmsh: <20><>ȡtetgen<65>ļ<EFBFBD><C4BC><EFBFBD>.node\.ele\.face\.edge<67><65>ת<EFBFBD><D7AA>Ϊ.msh<73>ļ<EFBFBD><C4BC><EFBFBD>tetgen<65><6E>Ȼ<EFBFBD><C8BB>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.msh<73><68>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>.pos<6F>ļ<EFBFBD>
|
||||
*/
|
||||
|
||||
#include "tetgen2gmsh.h"
|
||||
|
||||
void disp_help()
|
||||
{
|
||||
cout<<"tetgen2gmsh 0.0.1 - convert tetgen files(.node& .edge& .face& .ele) to gmsh(.msh) file"<<endl<<endl
|
||||
<<"usage: tetgen2msh input_file [-o<output-file>]"<<endl
|
||||
<<" -o specify output file's name, the input name will be used if -o is absent"<<endl
|
||||
<<" the extensions of input and output files will be added atuomaticly"<<endl<<endl
|
||||
<<"example: tetgen2gmsh in -otest"<<endl;
|
||||
}
|
||||
|
||||
int typeget(char *str, const char* str2,string &str3)//<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD>˵<EFBFBD><CBB5>Ӿ<EFBFBD>
|
||||
{
|
||||
char* strp = strstr(str, str2); // <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>str<74>в<EFBFBD><D0B2><EFBFBD>str2<72><32>
|
||||
if (strp == NULL)
|
||||
{
|
||||
return 0; // <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
string temp = str;
|
||||
str3=temp.substr(strlen(str2));//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>str2<72><32><EFBFBD><EFBFBD><EFBFBD>Ӿ<EFBFBD>
|
||||
return 1;
|
||||
}
|
||||
|
||||
//tetgen2gmsh p1;
|
||||
//p1.call_back();
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
string innname="";
|
||||
string outname="";
|
||||
string temp;
|
||||
if (argc==1)
|
||||
{
|
||||
disp_help();
|
||||
}
|
||||
else if (argc==2)
|
||||
{
|
||||
innname=outname=argv[1];
|
||||
tetgen2gmsh p1;
|
||||
p1.call_back(innname,outname);
|
||||
}
|
||||
else
|
||||
{
|
||||
innname=argv[1];
|
||||
for (int i = 2; i < argc; i++)
|
||||
{
|
||||
if (typeget(argv[i],OUTPUT,temp))
|
||||
{
|
||||
if (temp=="")
|
||||
{
|
||||
cout<<"no output picked, program stopped..."<<endl;
|
||||
return 0;
|
||||
}
|
||||
else outname = temp;
|
||||
}
|
||||
}
|
||||
|
||||
if (outname=="")
|
||||
{
|
||||
cout<<"no output picked, program stopped..."<<endl;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
tetgen2gmsh p1;
|
||||
p1.call_back(innname,outname);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
204
archive/tetgen2gmsh/tetgen2gmsh.h
Normal file
204
archive/tetgen2gmsh/tetgen2gmsh.h
Normal file
@@ -0,0 +1,204 @@
|
||||
#ifndef _TETGEN2GMSH_H
|
||||
#define _TETGEN2GMSH_H
|
||||
#include "data_func.h"
|
||||
|
||||
class tetgen2gmsh
|
||||
{
|
||||
public:
|
||||
tetgen2gmsh();
|
||||
~tetgen2gmsh();
|
||||
|
||||
int call_back(string,string);//<2F><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>
|
||||
int read_tetgen(string);//<2F><>ȡtetgen<65>ļ<EFBFBD>
|
||||
int write_gmsh(string);//д<><D0B4>gmsh(.msh)<29>ļ<EFBFBD>
|
||||
private:
|
||||
int node_sum;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
vertex *vert;
|
||||
int edge_sum;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
edge *edg;
|
||||
int face_sum;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
face *fac;
|
||||
int tetra_sum;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
tetra *tet;
|
||||
|
||||
string tetgen_name;//tetgen<65>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
string gmsh_name;//gmsh<73>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
};
|
||||
|
||||
tetgen2gmsh::tetgen2gmsh()//<2F><>ʼ<EFBFBD><CABC>ָ<EFBFBD><D6B8>
|
||||
{
|
||||
vert=NULL;
|
||||
edg=NULL;
|
||||
fac=NULL;
|
||||
tet=NULL;
|
||||
}
|
||||
|
||||
tetgen2gmsh::~tetgen2gmsh()//<2F><><EFBFBD>ٶ<EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD>
|
||||
{
|
||||
if(vert!=NULL) delete []vert;
|
||||
if(edg!=NULL) delete []edg;
|
||||
if(fac!=NULL) delete []fac;
|
||||
if(tet!=NULL) delete []tet;
|
||||
}
|
||||
|
||||
int tetgen2gmsh::call_back(string tetgen_name,string gmsh_name)
|
||||
{
|
||||
if(access((tetgen_name + ".node").c_str(),F_OK)||access((tetgen_name + ".edge").c_str(),F_OK)
|
||||
||access((tetgen_name + ".face").c_str(),F_OK)||access((tetgen_name + ".ele").c_str(),F_OK))
|
||||
{
|
||||
cout<<"tetgen files are incomplete..."<<endl;
|
||||
return 0;
|
||||
}
|
||||
read_tetgen(tetgen_name);
|
||||
write_gmsh(gmsh_name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tetgen2gmsh::read_tetgen(string filename)//<2F><>ȡtetgen<65>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.node/.edge/.face/.ele<6C>ļ<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>ע<EFBFBD>⽫<EFBFBD><E2BDAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>1<EFBFBD><31>ʼ
|
||||
{
|
||||
int first_no;
|
||||
double temp;
|
||||
string nodename,elename,facename,edgename;
|
||||
|
||||
nodename = filename + ".node";
|
||||
elename = filename + ".ele";
|
||||
facename = filename + ".face";
|
||||
edgename = filename + ".edge";
|
||||
const char* nodename_c = nodename.c_str();
|
||||
const char* elename_c = elename.c_str();
|
||||
const char* facename_c = facename.c_str();
|
||||
const char* edgename_c = edgename.c_str();
|
||||
|
||||
ifstream node_in(nodename_c);
|
||||
ifstream ele_in(elename_c);
|
||||
ifstream face_in(facename_c);
|
||||
ifstream edge_in(edgename_c);
|
||||
|
||||
node_in>>node_sum>>temp>>temp>>temp>>first_no;
|
||||
node_in.seekg(-1,ios::cur);
|
||||
vert = new vertex [node_sum];
|
||||
if(first_no==1)
|
||||
{
|
||||
for(int i=0;i<node_sum;i++)
|
||||
{
|
||||
node_in>>vert[i].No>>vert[i].vt.x>>vert[i].vt.y>>vert[i].vt.z>>temp;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(int i=0;i<node_sum;i++)
|
||||
{
|
||||
node_in>>vert[i].No>>vert[i].vt.x>>vert[i].vt.y>>vert[i].vt.z;
|
||||
vert[i].No+=1;
|
||||
}
|
||||
}
|
||||
|
||||
edge_in>>edge_sum>>temp;
|
||||
edg = new edge [edge_sum];
|
||||
if(first_no==1)
|
||||
{
|
||||
for(int i=0;i<edge_sum;i++)
|
||||
{
|
||||
edge_in>>edg[i].No>>edg[i].ver[0]>>edg[i].ver[1]>>temp;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(int i=0;i<edge_sum;i++)
|
||||
{
|
||||
edge_in>>edg[i].No>>edg[i].ver[0]>>edg[i].ver[1]>>temp;
|
||||
edg[i].ver[0]+=1;
|
||||
edg[i].ver[1]+=1;
|
||||
}
|
||||
}
|
||||
|
||||
face_in>>face_sum>>temp;
|
||||
fac = new face [face_sum];
|
||||
if(first_no==1)
|
||||
{
|
||||
for(int i=0;i<face_sum;i++)
|
||||
{
|
||||
face_in>>fac[i].No>>fac[i].ver[0]>>fac[i].ver[1]>>fac[i].ver[2]>>temp;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(int i=0;i<face_sum;i++)
|
||||
{
|
||||
face_in>>fac[i].No>>fac[i].ver[0]>>fac[i].ver[1]>>fac[i].ver[2]>>temp;
|
||||
fac[i].ver[0]+=1;
|
||||
fac[i].ver[1]+=1;
|
||||
fac[i].ver[2]+=1;
|
||||
}
|
||||
}
|
||||
|
||||
ele_in>>tetra_sum>>temp>>temp;
|
||||
tet = new tetra [tetra_sum];
|
||||
if(first_no==1)
|
||||
{
|
||||
for(int i=0;i<tetra_sum;i++)
|
||||
{
|
||||
ele_in>>tet[i].No>>tet[i].ver[0]>>tet[i].ver[1]>>tet[i].ver[2]>>tet[i].ver[3];
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(int i=0;i<tetra_sum;i++)
|
||||
{
|
||||
ele_in>>tet[i].No>>tet[i].ver[0]>>tet[i].ver[1]>>tet[i].ver[2]>>tet[i].ver[3];
|
||||
tet[i].ver[0]+=1;
|
||||
tet[i].ver[1]+=1;
|
||||
tet[i].ver[2]+=1;
|
||||
tet[i].ver[3]+=1;
|
||||
}
|
||||
}
|
||||
|
||||
node_in.close();
|
||||
ele_in.close();
|
||||
face_in.close();
|
||||
edge_in.close();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tetgen2gmsh::write_gmsh(string filename)//д<><D0B4>gmsh<73>ļ<EFBFBD>
|
||||
{
|
||||
int count = 1;
|
||||
|
||||
string outname = filename + ".msh";
|
||||
const char* outname_c = outname.c_str();
|
||||
ofstream msh_out(outname_c);
|
||||
if(!msh_out)
|
||||
{
|
||||
cout<<"Can not create "<<outname;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
msh_out<<"$MeshFormat"<<endl<<"2.2 0 8"<<endl<<"$EndMeshFormat"<<endl<<"$Nodes"<<endl<<node_sum<<endl;
|
||||
for(int i=0;i<node_sum;i++)
|
||||
{
|
||||
msh_out<<vert[i].No<<" "<<setprecision(16)<<vert[i].vt.x<<" "<<vert[i].vt.y<<" "<<vert[i].vt.z<<endl;
|
||||
}
|
||||
msh_out<<"$EndNodes"<<endl<<"$Elements"<<endl<<edge_sum+face_sum+tetra_sum<<endl;
|
||||
for(int i=0;i<edge_sum;i++)
|
||||
{
|
||||
msh_out<<count<<" 1 2 0 1 "<<edg[i].ver[0]<<" "<<edg[i].ver[1]<<endl;
|
||||
count++;
|
||||
}
|
||||
for(int i=0;i<face_sum;i++)
|
||||
{
|
||||
msh_out<<count<<" 2 2 0 14 "<<fac[i].ver[0]<<" "<<fac[i].ver[1]<<" "<<fac[i].ver[2]<<endl;
|
||||
count++;
|
||||
}
|
||||
for(int i=0;i<tetra_sum;i++)
|
||||
{
|
||||
msh_out<<count<<" 4 2 0 26 "<<tet[i].ver[0]<<" "<<tet[i].ver[1]<<" "<<tet[i].ver[2]<<" "<<tet[i].ver[3]<<endl;
|
||||
count++;
|
||||
}
|
||||
msh_out<<"$EndElements"<<endl;
|
||||
}
|
||||
msh_out.close();
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user