mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-26 05:50:32 +05:00
221 lines
6.0 KiB
C
221 lines
6.0 KiB
C
|
#ifndef NGLIB
|
||
|
#define NGLIB
|
||
|
|
||
|
/**************************************************************************/
|
||
|
/* File: nglib.hh */
|
||
|
/* Author: Joachim Schoeberl */
|
||
|
/* Date: 7. May. 2000 */
|
||
|
/**************************************************************************/
|
||
|
|
||
|
/*
|
||
|
|
||
|
Interface to the netgen meshing kernel
|
||
|
|
||
|
*/
|
||
|
|
||
|
/// Data type for NETGEN mesh
|
||
|
typedef void * Ng_Mesh;
|
||
|
|
||
|
/// Data type for NETGEN CSG geomty
|
||
|
typedef void * Ng_CSG_Geometry;
|
||
|
|
||
|
/// Data type for NETGEN 2D geomty
|
||
|
typedef void * Ng_Geometry_2D;
|
||
|
|
||
|
/// Data type for NETGEN STL geomty
|
||
|
typedef void * Ng_STL_Geometry;
|
||
|
|
||
|
|
||
|
|
||
|
// max number of nodes per element
|
||
|
#define NG_VOLUME_ELEMENT_MAXPOINTS 10
|
||
|
|
||
|
// implemented element types:
|
||
|
enum Ng_Volume_Element_Type { NG_TET = 1, NG_PYRAMID = 2, NG_PRISM = 3,
|
||
|
NG_TET10 = 4 };
|
||
|
|
||
|
// max number of nodes per surface element
|
||
|
#define NG_SURFACE_ELEMENT_MAXPOINTS 6
|
||
|
|
||
|
// implemented element types:
|
||
|
enum Ng_Surface_Element_Type { NG_TRIG = 1, NG_QUAD = 2,
|
||
|
NG_TRIG6 = 3 };
|
||
|
|
||
|
|
||
|
|
||
|
class Ng_Meshing_Parameters
|
||
|
{
|
||
|
public:
|
||
|
|
||
|
double maxh;
|
||
|
double fineness; // 0 .. coarse, 1 .. fine
|
||
|
int secondorder;
|
||
|
char * meshsize_filename;
|
||
|
int quad_dominated;
|
||
|
|
||
|
Ng_Meshing_Parameters();
|
||
|
};
|
||
|
|
||
|
|
||
|
enum Ng_Result { NG_OK = 0,
|
||
|
NG_SURFACE_INPUT_ERROR = 1,
|
||
|
NG_VOLUME_FAILURE = 2,
|
||
|
NG_STL_INPUT_ERROR = 3,
|
||
|
NG_SURFACE_FAILURE = 4,
|
||
|
NG_FILE_NOT_FOUND = 5 };
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// initialize, deconstruct Netgen library:
|
||
|
void Ng_Init ();
|
||
|
void Ng_Exit ();
|
||
|
|
||
|
|
||
|
|
||
|
// Generates new mesh structure
|
||
|
Ng_Mesh * Ng_NewMesh ();
|
||
|
void Ng_DeleteMesh (Ng_Mesh * mesh);
|
||
|
|
||
|
// feeds points, surface elements and volume elements to the mesh
|
||
|
void Ng_AddPoint (Ng_Mesh * mesh, double * x);
|
||
|
void Ng_AddSurfaceElement (Ng_Mesh * mesh, Ng_Surface_Element_Type et,
|
||
|
int * pi);
|
||
|
void Ng_AddVolumeElement (Ng_Mesh * mesh, Ng_Volume_Element_Type et,
|
||
|
int * pi);
|
||
|
|
||
|
// ask for number of points, surface and volume elements
|
||
|
int Ng_GetNP (Ng_Mesh * mesh);
|
||
|
int Ng_GetNSE (Ng_Mesh * mesh);
|
||
|
int Ng_GetNE (Ng_Mesh * mesh);
|
||
|
|
||
|
|
||
|
// return point coordinates
|
||
|
void Ng_GetPoint (Ng_Mesh * mesh, int num, double * x);
|
||
|
|
||
|
// return surface and volume element in pi
|
||
|
Ng_Surface_Element_Type
|
||
|
Ng_GetSurfaceElement (Ng_Mesh * mesh, int num, int * pi);
|
||
|
|
||
|
Ng_Volume_Element_Type
|
||
|
Ng_GetVolumeElement (Ng_Mesh * mesh, int num, int * pi);
|
||
|
|
||
|
|
||
|
// Defines MeshSize Functions
|
||
|
void Ng_RestrictMeshSizeGlobal (Ng_Mesh * mesh, double h);
|
||
|
void Ng_RestrictMeshSizePoint (Ng_Mesh * mesh, double * p, double h);
|
||
|
void Ng_RestrictMeshSizeBox (Ng_Mesh * mesh, double * pmin, double * pmax, double h);
|
||
|
|
||
|
// generates volume mesh from surface mesh
|
||
|
Ng_Result Ng_GenerateVolumeMesh (Ng_Mesh * mesh, Ng_Meshing_Parameters * mp);
|
||
|
|
||
|
void Ng_SaveMesh(Ng_Mesh * mesh, const char* filename);
|
||
|
Ng_Mesh * Ng_LoadMesh(const char* filename);
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// **********************************************************
|
||
|
// ** 2D Meshing **
|
||
|
// **********************************************************
|
||
|
|
||
|
|
||
|
// feeds points and boundary to mesh
|
||
|
|
||
|
void Ng_AddPoint_2D (Ng_Mesh * mesh, double * x);
|
||
|
void Ng_AddBoundarySeg_2D (Ng_Mesh * mesh, int pi1, int pi2);
|
||
|
|
||
|
// ask for number of points, elements and boundary segments
|
||
|
int Ng_GetNP_2D (Ng_Mesh * mesh);
|
||
|
int Ng_GetNE_2D (Ng_Mesh * mesh);
|
||
|
int Ng_GetNSeg_2D (Ng_Mesh * mesh);
|
||
|
|
||
|
// return point coordinates
|
||
|
void Ng_GetPoint_2D (Ng_Mesh * mesh, int num, double * x);
|
||
|
|
||
|
// return 2d triangles
|
||
|
void Ng_GetElement_2D (Ng_Mesh * mesh, int num, int * pi, int * matnum = NULL);
|
||
|
|
||
|
// return 2d boundary segment
|
||
|
void Ng_GetSegment_2D (Ng_Mesh * mesh, int num, int * pi, int * matnum = NULL);
|
||
|
|
||
|
|
||
|
// load 2d netgen spline geometry
|
||
|
Ng_Geometry_2D * Ng_LoadGeometry_2D (const char * filename);
|
||
|
|
||
|
// generate 2d mesh, mesh is allocated by function
|
||
|
Ng_Result Ng_GenerateMesh_2D (Ng_Geometry_2D * geom,
|
||
|
Ng_Mesh ** mesh,
|
||
|
Ng_Meshing_Parameters * mp);
|
||
|
|
||
|
void Ng_HP_Refinement (Ng_Geometry_2D * geom,
|
||
|
Ng_Mesh * mesh,
|
||
|
int levels);
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// **********************************************************
|
||
|
// ** STL Meshing **
|
||
|
// **********************************************************
|
||
|
|
||
|
|
||
|
// loads geometry from STL file
|
||
|
Ng_STL_Geometry * Ng_STL_LoadGeometry (const char * filename, int binary = 0);
|
||
|
|
||
|
|
||
|
// generate new STL Geometry
|
||
|
Ng_STL_Geometry * Ng_STL_NewGeometry ();
|
||
|
|
||
|
|
||
|
// fills STL Geometry
|
||
|
// positive orientation
|
||
|
// normal vector may be null-pointer
|
||
|
void Ng_STL_AddTriangle (Ng_STL_Geometry * geom,
|
||
|
double * p1, double * p2, double * p3,
|
||
|
double * nv = NULL);
|
||
|
|
||
|
// add (optional) edges :
|
||
|
void Ng_STL_AddEdge (Ng_STL_Geometry * geom,
|
||
|
double * p1, double * p2);
|
||
|
|
||
|
// after adding triangles (and edges) initialize
|
||
|
Ng_Result Ng_STL_InitSTLGeometry (Ng_STL_Geometry * geom);
|
||
|
|
||
|
// automatically generates edges:
|
||
|
Ng_Result Ng_STL_MakeEdges (Ng_STL_Geometry * geom,
|
||
|
Ng_Mesh* mesh,
|
||
|
Ng_Meshing_Parameters * mp);
|
||
|
|
||
|
|
||
|
// generates mesh, empty mesh must be already created.
|
||
|
Ng_Result Ng_STL_GenerateSurfaceMesh (Ng_STL_Geometry * geom,
|
||
|
Ng_Mesh * mesh,
|
||
|
Ng_Meshing_Parameters * mp);
|
||
|
|
||
|
|
||
|
#ifdef ACIS
|
||
|
|
||
|
// **********************************************************
|
||
|
// ** ACIS Meshing **
|
||
|
// **********************************************************
|
||
|
|
||
|
/// Data type for NETGEN STL geomty
|
||
|
typedef void * Ng_ACIS_Geometry;
|
||
|
|
||
|
// loads geometry from STL file
|
||
|
Ng_ACIS_Geometry * Ng_ACIS_LoadGeometry (const char * filename);
|
||
|
|
||
|
// generates mesh, empty mesh must be already created.
|
||
|
Ng_Result Ng_ACIS_GenerateSurfaceMesh (Ng_ACIS_Geometry * geom,
|
||
|
Ng_Mesh * mesh,
|
||
|
Ng_Meshing_Parameters * mp);
|
||
|
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#endif
|