Path: blob/devel/ElmerGUI/netgen/libsrc/interface/nglib.h
3206 views
#ifndef NGLIB1#define NGLIB23/**************************************************************************/4/* File: nglib.hh */5/* Author: Joachim Schoeberl */6/* Date: 7. May. 2000 */7/**************************************************************************/89/*1011Interface to the netgen meshing kernel1213*/1415/// Data type for NETGEN mesh16typedef void * Ng_Mesh;1718/// Data type for NETGEN CSG geomty19typedef void * Ng_CSG_Geometry;2021/// Data type for NETGEN 2D geomty22typedef void * Ng_Geometry_2D;2324/// Data type for NETGEN STL geomty25typedef void * Ng_STL_Geometry;26272829// max number of nodes per element30#define NG_VOLUME_ELEMENT_MAXPOINTS 103132// implemented element types:33enum Ng_Volume_Element_Type { NG_TET = 1, NG_PYRAMID = 2, NG_PRISM = 3,34NG_TET10 = 4 };3536// max number of nodes per surface element37#define NG_SURFACE_ELEMENT_MAXPOINTS 63839// implemented element types:40enum Ng_Surface_Element_Type { NG_TRIG = 1, NG_QUAD = 2,41NG_TRIG6 = 3 };42434445class Ng_Meshing_Parameters46{47public:4849double maxh;50double fineness; // 0 .. coarse, 1 .. fine51int secondorder;52char * meshsize_filename;53int quad_dominated;5455Ng_Meshing_Parameters();56};575859enum Ng_Result { NG_OK = 0,60NG_SURFACE_INPUT_ERROR = 1,61NG_VOLUME_FAILURE = 2,62NG_STL_INPUT_ERROR = 3,63NG_SURFACE_FAILURE = 4,64NG_FILE_NOT_FOUND = 5 };656667686970// initialize, deconstruct Netgen library:71void Ng_Init ();72void Ng_Exit ();7374// ===== Elmer related additions =====7576// return surface and volume element in pi + underlying stl number77Ng_Surface_Element_Type78EG_GetSurfaceElement (Ng_Mesh * mesh, int num, int * pi, int * ptrignum);7980// return surface element bc property:81int82EG_GetSurfaceElementBCProperty(Ng_Mesh * mesh, int i);8384// return segment bcnum85void86EG_GetSegmentBCProperty (Ng_Mesh *mesh, Ng_Geometry_2D *geom, int num, int * bcnum);878889// Generates new mesh structure90Ng_Mesh * Ng_NewMesh ();91void Ng_DeleteMesh (Ng_Mesh * mesh);9293// feeds points, surface elements and volume elements to the mesh94void Ng_AddPoint (Ng_Mesh * mesh, double * x);95void Ng_AddSurfaceElement (Ng_Mesh * mesh, Ng_Surface_Element_Type et,96int * pi);97void Ng_AddVolumeElement (Ng_Mesh * mesh, Ng_Volume_Element_Type et,98int * pi);99100// ask for number of points, surface and volume elements101int Ng_GetNP (Ng_Mesh * mesh);102int Ng_GetNSE (Ng_Mesh * mesh);103int Ng_GetNE (Ng_Mesh * mesh);104105// return point coordinates106void Ng_GetPoint (Ng_Mesh * mesh, int num, double * x);107108// return surface and volume element in pi109Ng_Surface_Element_Type110Ng_GetSurfaceElement (Ng_Mesh * mesh, int num, int * pi);111112Ng_Volume_Element_Type113Ng_GetVolumeElement (Ng_Mesh * mesh, int num, int * pi);114115116// Defines MeshSize Functions117void Ng_RestrictMeshSizeGlobal (Ng_Mesh * mesh, double h);118void Ng_RestrictMeshSizePoint (Ng_Mesh * mesh, double * p, double h);119void Ng_RestrictMeshSizeBox (Ng_Mesh * mesh, double * pmin, double * pmax, double h);120121// generates volume mesh from surface mesh122Ng_Result Ng_GenerateVolumeMesh (Ng_Mesh * mesh, Ng_Meshing_Parameters * mp);123124void Ng_SaveMesh(Ng_Mesh * mesh, const char* filename);125Ng_Mesh * Ng_LoadMesh(const char* filename);126127128129130131// **********************************************************132// ** 2D Meshing **133// **********************************************************134135136// feeds points and boundary to mesh137138void Ng_AddPoint_2D (Ng_Mesh * mesh, double * x);139void Ng_AddBoundarySeg_2D (Ng_Mesh * mesh, int pi1, int pi2);140141// ask for number of points, elements and boundary segments142int Ng_GetNP_2D (Ng_Mesh * mesh);143int Ng_GetNE_2D (Ng_Mesh * mesh);144int Ng_GetNSeg_2D (Ng_Mesh * mesh);145146// return point coordinates147void Ng_GetPoint_2D (Ng_Mesh * mesh, int num, double * x);148149// return 2d triangles150void Ng_GetElement_2D (Ng_Mesh * mesh, int num, int * pi, int * matnum = NULL);151152// return 2d boundary segment153void Ng_GetSegment_2D (Ng_Mesh * mesh, int num, int * pi, int * matnum = NULL);154155156// load 2d netgen spline geometry157Ng_Geometry_2D * Ng_LoadGeometry_2D (const char * filename);158159// generate 2d mesh, mesh is allocated by function160Ng_Result Ng_GenerateMesh_2D (Ng_Geometry_2D * geom,161Ng_Mesh ** mesh,162Ng_Meshing_Parameters * mp);163164void Ng_HP_Refinement (Ng_Geometry_2D * geom,165Ng_Mesh * mesh,166int levels);167168169170171172// **********************************************************173// ** STL Meshing **174// **********************************************************175176177// loads geometry from STL file178Ng_STL_Geometry * Ng_STL_LoadGeometry (const char * filename, int binary = 0);179180181// generate new STL Geometry182Ng_STL_Geometry * Ng_STL_NewGeometry ();183184185// fills STL Geometry186// positive orientation187// normal vector may be null-pointer188void Ng_STL_AddTriangle (Ng_STL_Geometry * geom,189double * p1, double * p2, double * p3,190double * nv = NULL);191192// add (optional) edges :193void Ng_STL_AddEdge (Ng_STL_Geometry * geom,194double * p1, double * p2);195196// after adding triangles (and edges) initialize197Ng_Result Ng_STL_InitSTLGeometry (Ng_STL_Geometry * geom);198199// automatically generates edges:200Ng_Result Ng_STL_MakeEdges (Ng_STL_Geometry * geom,201Ng_Mesh* mesh,202Ng_Meshing_Parameters * mp);203204205// generates mesh, empty mesh must be already created.206Ng_Result Ng_STL_GenerateSurfaceMesh (Ng_STL_Geometry * geom,207Ng_Mesh * mesh,208Ng_Meshing_Parameters * mp);209210211#ifdef ACIS212213// **********************************************************214// ** ACIS Meshing **215// **********************************************************216217/// Data type for NETGEN STL geomty218typedef void * Ng_ACIS_Geometry;219220// loads geometry from STL file221Ng_ACIS_Geometry * Ng_ACIS_LoadGeometry (const char * filename);222223// generates mesh, empty mesh must be already created.224Ng_Result Ng_ACIS_GenerateSurfaceMesh (Ng_ACIS_Geometry * geom,225Ng_Mesh * mesh,226Ng_Meshing_Parameters * mp);227228229#endif230231232#endif233234235