mirror of
https://github.com/NGSolve/netgen.git
synced 2025-05-10 12:40:49 +05:00
Merge 9d8da1560435d87c65ed775663e235ca901cfb99 into 971f7c6b073e67b183fa405f2f97f2f35cc8b301
This commit is contained in:
commit
650fa0eb28
@ -23,7 +23,7 @@ namespace ngcore
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool dummy = [](){
|
static bool dummy = [](){
|
||||||
SetLibraryVersion("netgen", NETGEN_VERSION);
|
SetLibraryVersion("netgen", VersionInfo(NETGEN_VERSION));
|
||||||
return true;
|
return true;
|
||||||
}();
|
}();
|
||||||
} // namespace ngcore
|
} // namespace ngcore
|
||||||
|
@ -18,37 +18,41 @@ namespace ngcore
|
|||||||
VersionInfo() = default;
|
VersionInfo() = default;
|
||||||
VersionInfo(std::string vstring)
|
VersionInfo(std::string vstring)
|
||||||
{
|
{
|
||||||
|
try {
|
||||||
minor_ = release = patch = 0;
|
minor_ = release = patch = 0;
|
||||||
git_hash = "";
|
git_hash = "";
|
||||||
if(vstring.substr(0,1) == "v")
|
if(vstring.substr(0,1) == "v")
|
||||||
vstring = vstring.substr(1,vstring.size()-1);
|
vstring = vstring.substr(1,vstring.size()-1);
|
||||||
auto dot = vstring.find('.');
|
auto dot = vstring.find('.');
|
||||||
mayor_ = std::stoi(vstring.substr(0,dot));
|
mayor_ = std::stoi(vstring.substr(0,dot));
|
||||||
if(dot == size_t(-1)) vstring = "";
|
if(dot == std::string::npos) vstring = "";
|
||||||
else vstring = vstring.substr(dot+1, vstring.size()-dot-1);
|
else vstring = vstring.substr(dot+1, vstring.size()-dot-1);
|
||||||
if(!vstring.empty())
|
if(!vstring.empty())
|
||||||
{
|
{
|
||||||
dot = vstring.find('.');
|
dot = vstring.find('.');
|
||||||
minor_ = std::stoi(vstring.substr(0,dot));
|
minor_ = std::stoi(vstring.substr(0,dot));
|
||||||
if (dot == size_t(-1)) vstring = "";
|
if (dot == std::string::npos) vstring = "";
|
||||||
else vstring = vstring.substr(dot+1, vstring.size()-dot-1);
|
else vstring = vstring.substr(dot+1, vstring.size()-dot-1);
|
||||||
if(!vstring.empty())
|
if(!vstring.empty())
|
||||||
{
|
{
|
||||||
dot = vstring.find('-');
|
dot = vstring.find('-');
|
||||||
release = std::stoi(vstring.substr(0,dot));
|
release = std::stoi(vstring.substr(0,dot));
|
||||||
if(dot == size_t(-1)) vstring = "";
|
if(dot == std::string::npos) vstring = "";
|
||||||
else vstring = vstring.substr(dot+1,vstring.size()-dot-1);
|
else vstring = vstring.substr(dot+1,vstring.size()-dot-1);
|
||||||
if(!vstring.empty())
|
if(!vstring.empty())
|
||||||
{
|
{
|
||||||
dot = vstring.find('-');
|
dot = vstring.find('-');
|
||||||
patch = std::stoi(vstring.substr(0,dot));
|
patch = std::stoi(vstring.substr(0,dot));
|
||||||
if(dot == size_t(-1)) vstring = "";
|
if(dot == std::string::npos) vstring = "";
|
||||||
else vstring = vstring.substr(dot+1, vstring.size()-dot-1);
|
else vstring = vstring.substr(dot+1, vstring.size()-dot-1);
|
||||||
if(!vstring.empty())
|
if(!vstring.empty())
|
||||||
git_hash = vstring;
|
git_hash = vstring;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
catch (const std::invalid_argument&)
|
||||||
|
{}
|
||||||
}
|
}
|
||||||
VersionInfo(const char* cstr) : VersionInfo(std::string(cstr)) { }
|
VersionInfo(const char* cstr) : VersionInfo(std::string(cstr)) { }
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ target_sources(nglib PRIVATE
|
|||||||
nginterface.cpp nginterface_v2.cpp
|
nginterface.cpp nginterface_v2.cpp
|
||||||
read_fnf_mesh.cpp readtetmesh.cpp readuser.cpp writeabaqus.cpp writediffpack.cpp
|
read_fnf_mesh.cpp readtetmesh.cpp readuser.cpp writeabaqus.cpp writediffpack.cpp
|
||||||
writedolfin.cpp writeelmer.cpp writefeap.cpp writefluent.cpp writegmsh.cpp writejcm.cpp
|
writedolfin.cpp writeelmer.cpp writefeap.cpp writefluent.cpp writegmsh.cpp writejcm.cpp
|
||||||
writepermas.cpp writetecplot.cpp writetet.cpp writetochnog.cpp writeuser.cpp
|
writepermas.cpp writetecplot.cpp writetet.cpp writetochnog.cpp writeuser.cpp writevtk.cpp
|
||||||
wuchemnitz.cpp writegmsh2.cpp writeOpenFOAM15x.cpp rw_cgns.cpp
|
wuchemnitz.cpp writegmsh2.cpp writeOpenFOAM15x.cpp rw_cgns.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -40,8 +40,9 @@ namespace netgen
|
|||||||
"VRML Format", ".*",
|
"VRML Format", ".*",
|
||||||
"Gmsh Format", ".gmsh",
|
"Gmsh Format", ".gmsh",
|
||||||
"Gmsh2 Format", ".gmsh2",
|
"Gmsh2 Format", ".gmsh2",
|
||||||
|
"VTK Format", ".vtk",
|
||||||
"OpenFOAM 1.5+ Format", "*",
|
"OpenFOAM 1.5+ Format", "*",
|
||||||
"OpenFOAM 1.5+ Compressed", "*",
|
"OpenFOAM 1.5+ Compressed", "*",
|
||||||
"JCMwave Format", ".jcm",
|
"JCMwave Format", ".jcm",
|
||||||
"TET Format", ".tet",
|
"TET Format", ".tet",
|
||||||
"CGNS Format", ".cgns",
|
"CGNS Format", ".cgns",
|
||||||
@ -130,6 +131,9 @@ bool WriteUserFormat (const filesystem::path & format,
|
|||||||
else if (format == "Gmsh2 Format")
|
else if (format == "Gmsh2 Format")
|
||||||
WriteGmsh2Format (mesh, geom, filename);
|
WriteGmsh2Format (mesh, geom, filename);
|
||||||
|
|
||||||
|
else if (format == "VTK Format")
|
||||||
|
WriteVtkFormat (mesh, filename);
|
||||||
|
|
||||||
// Philippose - 25/10/2009
|
// Philippose - 25/10/2009
|
||||||
// Added OpenFOAM 1.5+ Mesh export capability
|
// Added OpenFOAM 1.5+ Mesh export capability
|
||||||
else if (format == "OpenFOAM 1.5+ Format")
|
else if (format == "OpenFOAM 1.5+ Format")
|
||||||
|
@ -73,6 +73,9 @@ void WriteGmsh2Format (const Mesh & mesh,
|
|||||||
const NetgenGeometry & geom,
|
const NetgenGeometry & geom,
|
||||||
const filesystem::path & filename);
|
const filesystem::path & filename);
|
||||||
|
|
||||||
|
extern
|
||||||
|
void WriteVtkFormat (const Mesh & mesh,
|
||||||
|
const string & filename);
|
||||||
|
|
||||||
// Philippose - 25/10/2009
|
// Philippose - 25/10/2009
|
||||||
// Added OpenFOAM 1.5+ Mesh Export support
|
// Added OpenFOAM 1.5+ Mesh Export support
|
||||||
|
136
libsrc/interface/writevtk.cpp
Normal file
136
libsrc/interface/writevtk.cpp
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
/*************************************
|
||||||
|
* Write Gmsh file
|
||||||
|
* First issue the 04/26/2004 by Paul CARRICO (paul.carrico@free.fr)
|
||||||
|
* At the moment, the GMSH format is available for
|
||||||
|
* linear tetrahedron elements i.e. in 3D
|
||||||
|
* (based on Neutral Format)
|
||||||
|
*
|
||||||
|
* Second issue the 05/05/2004 by Paul CARRICO
|
||||||
|
* Thanks to Joachim Schoeberl for the correction of a minor bug
|
||||||
|
* the 2 initial Gmsh Format (i.e. volume format and surface format) are group together)
|
||||||
|
* in only one file
|
||||||
|
**************************************/
|
||||||
|
|
||||||
|
#include <mystdlib.h>
|
||||||
|
|
||||||
|
#include <myadt.hpp>
|
||||||
|
#include <linalg.hpp>
|
||||||
|
#include <csg.hpp>
|
||||||
|
#include <meshing.hpp>
|
||||||
|
|
||||||
|
namespace netgen
|
||||||
|
{
|
||||||
|
#include "writeuser.hpp"
|
||||||
|
|
||||||
|
extern MeshingParameters mparam;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* VTK mesh format
|
||||||
|
* points, elements, surface elements
|
||||||
|
*/
|
||||||
|
|
||||||
|
void WriteVtkFormat (const Mesh & mesh,
|
||||||
|
const string & filename)
|
||||||
|
{
|
||||||
|
ofstream outfile (filename.c_str());
|
||||||
|
outfile.precision(6);
|
||||||
|
outfile.setf (ios::fixed, ios::floatfield);
|
||||||
|
outfile.setf (ios::showpoint);
|
||||||
|
|
||||||
|
int np = mesh.GetNP(); /// number of point
|
||||||
|
int ne = mesh.GetNE(); /// number of element
|
||||||
|
int nse = mesh.GetNSE(); /// number of surface element (BC)
|
||||||
|
|
||||||
|
outfile << "# vtk DataFile Version 2.0\n";
|
||||||
|
outfile << "Created with netgen\n";
|
||||||
|
outfile << "ASCII\n";
|
||||||
|
outfile << "DATASET UNSTRUCTURED_GRID\n";
|
||||||
|
|
||||||
|
outfile << "POINTS " << np << " double\n";
|
||||||
|
for (int i=0; i<np; i++)
|
||||||
|
{
|
||||||
|
auto & p = mesh.Point(i+1);
|
||||||
|
outfile << p[0] << " " << p[1] << " " << p[2] << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<int> types;
|
||||||
|
std::vector<int> domains;
|
||||||
|
if (ne > 0)
|
||||||
|
{
|
||||||
|
unsigned int size = 0;
|
||||||
|
for (int i=0; i<ne; i++)
|
||||||
|
size += mesh.VolumeElement(i+1).GetNV() + 1; // only save "linear" corners
|
||||||
|
|
||||||
|
outfile << "CELLS " << ne << " " << size << "\n";
|
||||||
|
for (int i=0; i<ne; i++)
|
||||||
|
{
|
||||||
|
auto& el = mesh.VolumeElement(i+1);
|
||||||
|
domains.push_back(el.GetIndex());
|
||||||
|
switch (el.GetType())
|
||||||
|
{
|
||||||
|
case TET:
|
||||||
|
case TET10: // reorder to follow VTK convention & zero based indices
|
||||||
|
outfile << 4 << " " << el[0]-1 << " " << el[1]-1 << " " << el[3]-1 << " " << el[2]-1 << "\n";
|
||||||
|
types.push_back(10);
|
||||||
|
break;
|
||||||
|
case PRISM: // reorder to follow VTK convention & zero based indices
|
||||||
|
outfile << 6 << " "
|
||||||
|
<< el[0]-1 << " " << el[2]-1 << " " << el[1]-1 << " "
|
||||||
|
<< el[3]-1 << " " << el[5]-1 << " " << el[4]-1 << "\n";
|
||||||
|
types.push_back(13);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw ngcore::Exception("Unexpected element type");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unsigned int size = 0;
|
||||||
|
for (int i=0; i<nse; i++)
|
||||||
|
size += mesh.SurfaceElement(i+1).GetNV() + 1;
|
||||||
|
|
||||||
|
outfile << "CELLS " << nse << " " << size << "\n";
|
||||||
|
for (int i=0; i<nse; i++)
|
||||||
|
{
|
||||||
|
auto& el = mesh.SurfaceElement(i+1);
|
||||||
|
domains.push_back(el.GetIndex());
|
||||||
|
switch (el.GetType())
|
||||||
|
{
|
||||||
|
case TRIG:
|
||||||
|
case TRIG6:
|
||||||
|
outfile << 3 << " " << el[0]-1 << " " << el[1]-1 << " " << el[2]-1 << "\n";
|
||||||
|
types.push_back(5);
|
||||||
|
break;
|
||||||
|
case QUAD:
|
||||||
|
outfile << 4 << " " << el[0]-1 << " " << el[1]-1 << " " << el[2]-1 << " " << el[3]-1 << "\n";
|
||||||
|
types.push_back(9);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw ngcore::Exception("Unexpected element type");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
outfile << "CELL_TYPES " << types.size() << "\n";
|
||||||
|
for (auto type_id: types)
|
||||||
|
{
|
||||||
|
outfile << type_id << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
outfile << "CELL_DATA " << domains.size() << "\n";
|
||||||
|
outfile << "SCALARS scalars int 1\n";
|
||||||
|
outfile << "LOOKUP_TABLE default\n";
|
||||||
|
for (auto id: domains)
|
||||||
|
{
|
||||||
|
outfile << id << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
outfile.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
1548
nglib/mynglib.cpp
Normal file
1548
nglib/mynglib.cpp
Normal file
File diff suppressed because it is too large
Load Diff
497
nglib/nglib.cpp
497
nglib/nglib.cpp
@ -17,15 +17,15 @@
|
|||||||
#include <stlgeom.hpp>
|
#include <stlgeom.hpp>
|
||||||
#include <geometry2d.hpp>
|
#include <geometry2d.hpp>
|
||||||
#include <meshing.hpp>
|
#include <meshing.hpp>
|
||||||
#include <../meshing/soldata.hpp>
|
|
||||||
|
|
||||||
#include <nginterface.h>
|
#include <../interface/writeuser.hpp>
|
||||||
|
|
||||||
|
|
||||||
namespace netgen {
|
namespace netgen {
|
||||||
extern void MeshFromSpline2D (SplineGeometry2d & geometry,
|
extern void MeshFromSpline2D (SplineGeometry2d & geometry,
|
||||||
shared_ptr<Mesh> & mesh,
|
shared_ptr<Mesh> & mesh,
|
||||||
MeshingParameters & mp);
|
MeshingParameters & mp);
|
||||||
|
extern void Optimize2d(Mesh & mesh, MeshingParameters & mp);
|
||||||
extern MeshingParameters mparam;
|
extern MeshingParameters mparam;
|
||||||
DLL_HEADER extern STLParameters stlparam;
|
DLL_HEADER extern STLParameters stlparam;
|
||||||
}
|
}
|
||||||
@ -37,7 +37,6 @@ namespace netgen {
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
namespace netgen
|
namespace netgen
|
||||||
{
|
{
|
||||||
@ -56,6 +55,11 @@ namespace netgen {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// Bryn Lloyd - get rid of warning about macro redefinition (previously defined in mydefs.hpp)
|
||||||
|
#if defined(NGLIB_API)
|
||||||
|
#undef NGLIB_API
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace nglib {
|
namespace nglib {
|
||||||
#include "nglib.h"
|
#include "nglib.h"
|
||||||
}
|
}
|
||||||
@ -66,19 +70,42 @@ using namespace netgen;
|
|||||||
|
|
||||||
namespace nglib
|
namespace nglib
|
||||||
{
|
{
|
||||||
inline void NOOP_Deleter(void *) { ; }
|
inline void NOOP_Deleter(void *) { ; }
|
||||||
|
|
||||||
|
class NullStreambuf : public std::streambuf
|
||||||
// initialize, deconstruct Netgen library:
|
|
||||||
NGLIB_API void Ng_Init ()
|
|
||||||
{
|
{
|
||||||
mycout = &cout;
|
char dummyBuffer[64];
|
||||||
myerr = &cerr;
|
protected:
|
||||||
// netgen::testout->SetOutStream (new ofstream ("test.out"));
|
virtual int overflow(int c)
|
||||||
// testout = new ofstream ("test.out");
|
{
|
||||||
|
setp(dummyBuffer, dummyBuffer + sizeof(dummyBuffer));
|
||||||
|
return (c == traits_type::eof()) ? '\0' : c;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// initialize, deconstruct Netgen library:
|
||||||
|
NGLIB_API void Ng_Init (bool cout_to_null, bool cerr_to_null, bool testout_to_null)
|
||||||
|
{
|
||||||
|
static ostream* null_stream = new ostream(new NullStreambuf);
|
||||||
|
mycout = cout_to_null ? null_stream : &cout;
|
||||||
|
myerr = cerr_to_null ? null_stream : &cerr;
|
||||||
|
testout = testout_to_null ? null_stream : new ofstream("test.out");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API void Ng_GetStatus(char ** str, double & percent)
|
||||||
|
{
|
||||||
|
::netgen::MyStr s;
|
||||||
|
::netgen::GetStatus(s, percent);
|
||||||
|
*str = new char[s.Length() + 1];
|
||||||
|
strcpy(*str, s.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API void Ng_SetTerminate(bool abort)
|
||||||
|
{
|
||||||
|
::netgen::multithread.terminate = abort ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Clean-up functions before ending usage of nglib
|
// Clean-up functions before ending usage of nglib
|
||||||
@ -139,6 +166,25 @@ namespace nglib
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API void Ng_ExportMesh(Ng_Mesh * ng_mesh, Ng_Export_Formats format, const char* filename)
|
||||||
|
{
|
||||||
|
Mesh * mesh = (Mesh*)ng_mesh;
|
||||||
|
switch (format)
|
||||||
|
{
|
||||||
|
case NG_GMSH:
|
||||||
|
WriteUserFormat( "Gmsh Format", *mesh, filename ); break;
|
||||||
|
case NG_GMSH2:
|
||||||
|
WriteUserFormat( "Gmsh2 Format", *mesh, filename ); break;
|
||||||
|
case NG_VTK:
|
||||||
|
WriteUserFormat( "VTK Format", *mesh, filename ); break;
|
||||||
|
case NG_FLUENT:
|
||||||
|
WriteUserFormat( "Fluent Format", *mesh, filename ); break;
|
||||||
|
case NG_ABAQUS:
|
||||||
|
WriteUserFormat( "Abaqus Format", *mesh, filename ); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Merge another mesh file into the currently loaded one
|
// Merge another mesh file into the currently loaded one
|
||||||
NGLIB_API Ng_Result Ng_MergeMesh( Ng_Mesh* mesh, const char* filename)
|
NGLIB_API Ng_Result Ng_MergeMesh( Ng_Mesh* mesh, const char* filename)
|
||||||
@ -198,18 +244,82 @@ namespace nglib
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Manually lock a specific point
|
||||||
|
NGLIB_API void Ng_AddLockedPoint(Ng_Mesh * mesh, int pi)
|
||||||
|
{
|
||||||
|
Mesh * m = (Mesh*)mesh;
|
||||||
|
m->AddLockedPoint(pi);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API void Ng_ClearFaceDescriptors (Ng_Mesh * ng_mesh)
|
||||||
|
{
|
||||||
|
Mesh * mesh = (Mesh*)ng_mesh;
|
||||||
|
mesh->ClearFaceDescriptors();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API int Ng_AddFaceDescriptor (Ng_Mesh * ng_mesh, int surfnr, int domin, int domout, int bcp)
|
||||||
|
{
|
||||||
|
Mesh * mesh = (Mesh*)ng_mesh;
|
||||||
|
int nfd = mesh->GetNFD();
|
||||||
|
|
||||||
|
int faceind = 0;
|
||||||
|
for (int j = 1; j <= nfd; j++)
|
||||||
|
{
|
||||||
|
if (mesh->GetFaceDescriptor(j).SurfNr() == surfnr
|
||||||
|
&& mesh->GetFaceDescriptor(j).BCProperty() == bcp
|
||||||
|
&& mesh->GetFaceDescriptor(j).DomainIn() == domin
|
||||||
|
&& mesh->GetFaceDescriptor(j).DomainOut() == domout)
|
||||||
|
{
|
||||||
|
faceind = j;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!faceind)
|
||||||
|
{
|
||||||
|
faceind = mesh->AddFaceDescriptor (FaceDescriptor(surfnr, domin, domout, 0));
|
||||||
|
mesh->GetFaceDescriptor(faceind).SetBCProperty (bcp);
|
||||||
|
}
|
||||||
|
return faceind;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API void Ng_SetupFacedescriptors (Ng_Mesh * mesh, int maxbc)
|
||||||
|
{
|
||||||
|
Mesh * m = (Mesh*)mesh;
|
||||||
|
m->ClearFaceDescriptors();
|
||||||
|
for (int i = 1; i <= maxbc; i++)
|
||||||
|
m->AddFaceDescriptor (FaceDescriptor (i, 0, 0, i));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Manually add a surface element of a given type to an existing mesh object
|
// Manually add a surface element of a given type to an existing mesh object
|
||||||
NGLIB_API void Ng_AddSurfaceElement (Ng_Mesh * mesh, Ng_Surface_Element_Type et,
|
NGLIB_API void Ng_AddSurfaceElement (Ng_Mesh * mesh, Ng_Surface_Element_Type et,
|
||||||
int * pi)
|
int * pi, int facenr)
|
||||||
{
|
{
|
||||||
|
int n = 3;
|
||||||
|
switch (et)
|
||||||
|
{
|
||||||
|
case NG_TRIG:
|
||||||
|
n = 3; break;
|
||||||
|
case NG_QUAD:
|
||||||
|
n = 4; break;
|
||||||
|
case NG_QUAD6:
|
||||||
|
n = 6; break;
|
||||||
|
case NG_TRIG6:
|
||||||
|
n = 6; break;
|
||||||
|
case NG_QUAD8:
|
||||||
|
n = 8; break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
Mesh * m = (Mesh*)mesh;
|
Mesh * m = (Mesh*)mesh;
|
||||||
Element2d el (3);
|
Element2d el (n);
|
||||||
el.SetIndex (1);
|
el.SetIndex (facenr);
|
||||||
el.PNum(1) = pi[0];
|
for (int i=0; i<n; ++i)
|
||||||
el.PNum(2) = pi[1];
|
el.PNum(i+1) = pi[i];
|
||||||
el.PNum(3) = pi[2];
|
|
||||||
m->AddSurfaceElement (el);
|
m->AddSurfaceElement (el);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,21 +328,33 @@ namespace nglib
|
|||||||
|
|
||||||
// Manually add a volume element of a given type to an existing mesh object
|
// Manually add a volume element of a given type to an existing mesh object
|
||||||
NGLIB_API void Ng_AddVolumeElement (Ng_Mesh * mesh, Ng_Volume_Element_Type et,
|
NGLIB_API void Ng_AddVolumeElement (Ng_Mesh * mesh, Ng_Volume_Element_Type et,
|
||||||
int * pi)
|
int * pi, int domain)
|
||||||
{
|
{
|
||||||
|
int n = 4;
|
||||||
|
switch (et)
|
||||||
|
{
|
||||||
|
case NG_TET:
|
||||||
|
n = 4; break;
|
||||||
|
case NG_PYRAMID:
|
||||||
|
n = 5; break;
|
||||||
|
case NG_PRISM:
|
||||||
|
n = 6; break;
|
||||||
|
case NG_HEX:
|
||||||
|
n = 8; break;
|
||||||
|
case NG_TET10:
|
||||||
|
n = 10; break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
Mesh * m = (Mesh*)mesh;
|
Mesh * m = (Mesh*)mesh;
|
||||||
Element el (4);
|
Element el (n);
|
||||||
el.SetIndex (1);
|
el.SetIndex (domain);
|
||||||
el.PNum(1) = pi[0];
|
for (int i=0; i<n; ++i)
|
||||||
el.PNum(2) = pi[1];
|
el.PNum(i+1) = pi[i];
|
||||||
el.PNum(3) = pi[2];
|
|
||||||
el.PNum(4) = pi[3];
|
|
||||||
m->AddVolumeElement (el);
|
m->AddVolumeElement (el);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Obtain the number of points in the mesh
|
// Obtain the number of points in the mesh
|
||||||
NGLIB_API int Ng_GetNP (Ng_Mesh * mesh)
|
NGLIB_API int Ng_GetNP (Ng_Mesh * mesh)
|
||||||
{
|
{
|
||||||
@ -270,11 +392,23 @@ namespace nglib
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API bool Ng_GetFaceDescriptor (Ng_Mesh * mesh, int facenr, int &surfnr, int &domin, int &domout, int &bcp)
|
||||||
|
{
|
||||||
|
Mesh * m = (Mesh*)mesh;
|
||||||
|
if (facenr <= m->GetNFD())
|
||||||
|
{
|
||||||
|
surfnr = m->GetFaceDescriptor(facenr).SurfNr();
|
||||||
|
domin = m->GetFaceDescriptor(facenr).DomainIn();
|
||||||
|
domout = m->GetFaceDescriptor(facenr).DomainOut();
|
||||||
|
bcp = m->GetFaceDescriptor(facenr).BCProperty();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Return the surface element at a given index "pi"
|
// Return the surface element at a given index "pi"
|
||||||
NGLIB_API Ng_Surface_Element_Type
|
NGLIB_API Ng_Surface_Element_Type
|
||||||
Ng_GetSurfaceElement (Ng_Mesh * mesh, int num, int * pi)
|
Ng_GetSurfaceElement (Ng_Mesh * mesh, int num, int * pi, int * facenr)
|
||||||
{
|
{
|
||||||
const Element2d & el = ((Mesh*)mesh)->SurfaceElement(num);
|
const Element2d & el = ((Mesh*)mesh)->SurfaceElement(num);
|
||||||
for (int i = 1; i <= el.GetNP(); i++)
|
for (int i = 1; i <= el.GetNP(); i++)
|
||||||
@ -297,6 +431,8 @@ namespace nglib
|
|||||||
default:
|
default:
|
||||||
et = NG_TRIG; break; // for the compiler
|
et = NG_TRIG; break; // for the compiler
|
||||||
}
|
}
|
||||||
|
if (facenr)
|
||||||
|
*facenr = el.GetIndex();
|
||||||
return et;
|
return et;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,7 +441,7 @@ namespace nglib
|
|||||||
|
|
||||||
// Return the volume element at a given index "pi"
|
// Return the volume element at a given index "pi"
|
||||||
NGLIB_API Ng_Volume_Element_Type
|
NGLIB_API Ng_Volume_Element_Type
|
||||||
Ng_GetVolumeElement (Ng_Mesh * mesh, int num, int * pi)
|
Ng_GetVolumeElement (Ng_Mesh * mesh, int num, int * pi, int * domain)
|
||||||
{
|
{
|
||||||
const Element & el = ((Mesh*)mesh)->VolumeElement(num);
|
const Element & el = ((Mesh*)mesh)->VolumeElement(num);
|
||||||
for (int i = 1; i <= el.GetNP(); i++)
|
for (int i = 1; i <= el.GetNP(); i++)
|
||||||
@ -316,10 +452,13 @@ namespace nglib
|
|||||||
case 4: et = NG_TET; break;
|
case 4: et = NG_TET; break;
|
||||||
case 5: et = NG_PYRAMID; break;
|
case 5: et = NG_PYRAMID; break;
|
||||||
case 6: et = NG_PRISM; break;
|
case 6: et = NG_PRISM; break;
|
||||||
|
case 8: et = NG_HEX; break;
|
||||||
case 10: et = NG_TET10; break;
|
case 10: et = NG_TET10; break;
|
||||||
default:
|
default:
|
||||||
et = NG_TET; break; // for the compiler
|
et = NG_TET; break; // for the compiler
|
||||||
}
|
}
|
||||||
|
if (domain)
|
||||||
|
*domain = el.GetIndex();
|
||||||
return et;
|
return et;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -379,6 +518,24 @@ namespace nglib
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Optimize existing mesh
|
||||||
|
NGLIB_API Ng_Result Ng_OptimizeVolume(Ng_Mesh *mesh, Ng_Meshing_Parameters *mp)
|
||||||
|
{
|
||||||
|
Mesh * m = (Mesh*)mesh;
|
||||||
|
|
||||||
|
mp->Transfer_Parameters();
|
||||||
|
|
||||||
|
m->CalcLocalH(mparam.grading);
|
||||||
|
|
||||||
|
RemoveIllegalElements(*m);
|
||||||
|
OptimizeVolume(mparam, *m);
|
||||||
|
|
||||||
|
return NG_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ------------------ 2D Meshing Functions ------------------------- */
|
/* ------------------ 2D Meshing Functions ------------------------- */
|
||||||
NGLIB_API void Ng_AddPoint_2D (Ng_Mesh * mesh, double * x)
|
NGLIB_API void Ng_AddPoint_2D (Ng_Mesh * mesh, double * x)
|
||||||
{
|
{
|
||||||
@ -390,14 +547,16 @@ namespace nglib
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
NGLIB_API void Ng_AddBoundarySeg_2D (Ng_Mesh * mesh, int pi1, int pi2)
|
NGLIB_API void Ng_AddBoundarySeg_2D (Ng_Mesh * mesh, int pi1, int pi2, int domain_in, int domain_out)
|
||||||
{
|
{
|
||||||
Mesh * m = (Mesh*)mesh;
|
Mesh * m = (Mesh*)mesh;
|
||||||
|
|
||||||
Segment seg;
|
Segment seg;
|
||||||
seg[0] = pi1;
|
seg[0] = pi1;
|
||||||
seg[1] = pi2;
|
seg[1] = pi2;
|
||||||
m->AddSegment (seg);
|
seg.domin = domain_in;
|
||||||
|
seg.domout = domain_out;
|
||||||
|
m->AddSegment(seg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -498,6 +657,73 @@ namespace nglib
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API Ng_Geometry_2D * Ng_NewGeometry_2D ()
|
||||||
|
{
|
||||||
|
SplineGeometry2d * geom = new SplineGeometry2d();
|
||||||
|
return (Ng_Geometry_2D *)geom;
|
||||||
|
}
|
||||||
|
|
||||||
|
NGLIB_API void Ng_DeleteGeometry_2D (Ng_Geometry_2D * geom)
|
||||||
|
{
|
||||||
|
if (geom)
|
||||||
|
{
|
||||||
|
SplineGeometry2d* spline_geom = (SplineGeometry2d*)geom;
|
||||||
|
delete spline_geom;
|
||||||
|
geom = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NGLIB_API void Ng_AppendPoint_2D (Ng_Geometry_2D* geom, double * x, double h)
|
||||||
|
{
|
||||||
|
if (geom)
|
||||||
|
{
|
||||||
|
SplineGeometry2d* spline_geom = (SplineGeometry2d*)geom;
|
||||||
|
Point<2> p(x[0],x[1]);
|
||||||
|
spline_geom->AppendPoint(p, h);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NGLIB_API void Ng_AppendLineSegment_2D (Ng_Geometry_2D* geom, int n1, int n2,
|
||||||
|
int leftdomain, int rightdomain, double h)
|
||||||
|
{
|
||||||
|
if (geom)
|
||||||
|
{
|
||||||
|
SplineGeometry2d* spline_geom = (SplineGeometry2d*)geom;
|
||||||
|
// zero-offset!
|
||||||
|
LineSeg<2>* line = new LineSeg<2>(spline_geom->geompoints[n1-1], spline_geom->geompoints[n2-1]);
|
||||||
|
SplineSegExt* seg = new SplineSegExt(*line);
|
||||||
|
seg->leftdom = leftdomain;
|
||||||
|
seg->rightdom = rightdomain;
|
||||||
|
seg->hmax = h;
|
||||||
|
seg->copyfrom = -1;
|
||||||
|
seg->bc = 1;
|
||||||
|
spline_geom->AppendSegment(seg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NGLIB_API void Ng_AppendSplinSegment_2D (Ng_Geometry_2D* geom, int n1, int n2, int n3,
|
||||||
|
int leftdomain, int rightdomain, double h)
|
||||||
|
{
|
||||||
|
if (geom)
|
||||||
|
{
|
||||||
|
SplineGeometry2d* spline_geom = (SplineGeometry2d*)geom;
|
||||||
|
// zero-offset!
|
||||||
|
NgArray<Point<2> > pts;
|
||||||
|
pts.Append(spline_geom->geompoints[n1-1]);
|
||||||
|
pts.Append(spline_geom->geompoints[n2-1]);
|
||||||
|
pts.Append(spline_geom->geompoints[n3-1]);
|
||||||
|
auto line = new BSplineSeg<2,3>(pts);
|
||||||
|
//SplineSeg3<2>* line = new SplineSeg3<2>(spline_geom->geompoints[n1-1], spline_geom->geompoints[n2-1], spline_geom->geompoints[n3-1]);
|
||||||
|
SplineSegExt* seg = new SplineSegExt(*line);
|
||||||
|
seg->leftdom = leftdomain;
|
||||||
|
seg->rightdom = rightdomain;
|
||||||
|
seg->hmax = h;
|
||||||
|
seg->copyfrom = -1;
|
||||||
|
seg->bc = 1;
|
||||||
|
spline_geom->AppendSegment(seg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
NGLIB_API Ng_Result Ng_GenerateMesh_2D (Ng_Geometry_2D * geom,
|
NGLIB_API Ng_Result Ng_GenerateMesh_2D (Ng_Geometry_2D * geom,
|
||||||
Ng_Mesh ** mesh,
|
Ng_Mesh ** mesh,
|
||||||
Ng_Meshing_Parameters * mp)
|
Ng_Meshing_Parameters * mp)
|
||||||
@ -508,15 +734,24 @@ namespace nglib
|
|||||||
|
|
||||||
shared_ptr<Mesh> m(new Mesh, &NOOP_Deleter);
|
shared_ptr<Mesh> m(new Mesh, &NOOP_Deleter);
|
||||||
MeshFromSpline2D (*(SplineGeometry2d*)geom, m, mparam);
|
MeshFromSpline2D (*(SplineGeometry2d*)geom, m, mparam);
|
||||||
// new shared_ptr<Mesh> (m); // hack to keep mesh m alive
|
|
||||||
|
|
||||||
cout << m->GetNSE() << " elements, " << m->GetNP() << " points" << endl;
|
|
||||||
|
|
||||||
*mesh = (Ng_Mesh*)m.get();
|
*mesh = (Ng_Mesh*)m.get();
|
||||||
return NG_OK;
|
return NG_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API Ng_Result Ng_OptimizeMesh_2D(Ng_Mesh *mesh, Ng_Meshing_Parameters * mp)
|
||||||
|
{
|
||||||
|
Mesh * m = (Mesh*)mesh;
|
||||||
|
|
||||||
|
mp->Transfer_Parameters();
|
||||||
|
|
||||||
|
m->CalcLocalH(mparam.grading);
|
||||||
|
|
||||||
|
Optimize2d(*m, mparam);
|
||||||
|
|
||||||
|
return NG_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
NGLIB_API void Ng_HP_Refinement (Ng_Geometry_2D * geom,
|
NGLIB_API void Ng_HP_Refinement (Ng_Geometry_2D * geom,
|
||||||
@ -601,6 +836,16 @@ namespace nglib
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API void Ng_STL_DeleteGeometry (Ng_STL_Geometry * geom)
|
||||||
|
{
|
||||||
|
if (geom)
|
||||||
|
{
|
||||||
|
STLGeometry* geometry = (STLGeometry*)geom;
|
||||||
|
geometry->Clear();
|
||||||
|
delete geometry;
|
||||||
|
geometry = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// after adding triangles (and edges) initialize
|
// after adding triangles (and edges) initialize
|
||||||
@ -631,7 +876,8 @@ namespace nglib
|
|||||||
// automatically generates edges:
|
// automatically generates edges:
|
||||||
NGLIB_API Ng_Result Ng_STL_MakeEdges (Ng_STL_Geometry * geom,
|
NGLIB_API Ng_Result Ng_STL_MakeEdges (Ng_STL_Geometry * geom,
|
||||||
Ng_Mesh* mesh,
|
Ng_Mesh* mesh,
|
||||||
Ng_Meshing_Parameters * mp)
|
Ng_Meshing_Parameters * mp,
|
||||||
|
Ng_STL_Parameters * stlp)
|
||||||
{
|
{
|
||||||
STLGeometry* stlgeometry = (STLGeometry*)geom;
|
STLGeometry* stlgeometry = (STLGeometry*)geom;
|
||||||
Mesh* me = (Mesh*)mesh;
|
Mesh* me = (Mesh*)mesh;
|
||||||
@ -642,6 +888,7 @@ namespace nglib
|
|||||||
// object
|
// object
|
||||||
//MeshingParameters mparam;
|
//MeshingParameters mparam;
|
||||||
mp->Transfer_Parameters();
|
mp->Transfer_Parameters();
|
||||||
|
if (stlp) stlp->Transfer_Parameters();
|
||||||
|
|
||||||
me -> SetGlobalH (mparam.maxh);
|
me -> SetGlobalH (mparam.maxh);
|
||||||
me -> SetLocalH (stlgeometry->GetBoundingBox().PMin() - Vec3d(10, 10, 10),
|
me -> SetLocalH (stlgeometry->GetBoundingBox().PMin() - Vec3d(10, 10, 10),
|
||||||
@ -677,7 +924,8 @@ namespace nglib
|
|||||||
// generates mesh, empty mesh be already created.
|
// generates mesh, empty mesh be already created.
|
||||||
NGLIB_API Ng_Result Ng_STL_GenerateSurfaceMesh (Ng_STL_Geometry * geom,
|
NGLIB_API Ng_Result Ng_STL_GenerateSurfaceMesh (Ng_STL_Geometry * geom,
|
||||||
Ng_Mesh* mesh,
|
Ng_Mesh* mesh,
|
||||||
Ng_Meshing_Parameters * mp)
|
Ng_Meshing_Parameters * mp,
|
||||||
|
Ng_STL_Parameters * stlp)
|
||||||
{
|
{
|
||||||
STLGeometry* stlgeometry = (STLGeometry*)geom;
|
STLGeometry* stlgeometry = (STLGeometry*)geom;
|
||||||
Mesh* me = (Mesh*)mesh;
|
Mesh* me = (Mesh*)mesh;
|
||||||
@ -688,6 +936,7 @@ namespace nglib
|
|||||||
// object
|
// object
|
||||||
//MeshingParameters mparam;
|
//MeshingParameters mparam;
|
||||||
mp->Transfer_Parameters();
|
mp->Transfer_Parameters();
|
||||||
|
if (stlp) stlp->Transfer_Parameters();
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -787,9 +1036,9 @@ namespace nglib
|
|||||||
|
|
||||||
closeedgeenable = 0;
|
closeedgeenable = 0;
|
||||||
closeedgefact = 2.0;
|
closeedgefact = 2.0;
|
||||||
|
|
||||||
minedgelenenable = 0;
|
minedgelenenable = 0;
|
||||||
minedgelen = 1e-4;
|
minedgelen = 1e-4;
|
||||||
|
|
||||||
second_order = 0;
|
second_order = 0;
|
||||||
quad_dominated = 0;
|
quad_dominated = 0;
|
||||||
@ -801,6 +1050,9 @@ namespace nglib
|
|||||||
|
|
||||||
optsteps_2d = 3;
|
optsteps_2d = 3;
|
||||||
optsteps_3d = 3;
|
optsteps_3d = 3;
|
||||||
|
|
||||||
|
optimize3d = "cmdmustm";
|
||||||
|
optimize2d = "smsmsmSmSmSm";
|
||||||
|
|
||||||
invert_tets = 0;
|
invert_tets = 0;
|
||||||
invert_trigs = 0;
|
invert_trigs = 0;
|
||||||
@ -815,39 +1067,7 @@ namespace nglib
|
|||||||
// Reset the local meshing parameters to the default values
|
// Reset the local meshing parameters to the default values
|
||||||
NGLIB_API void Ng_Meshing_Parameters :: Reset_Parameters()
|
NGLIB_API void Ng_Meshing_Parameters :: Reset_Parameters()
|
||||||
{
|
{
|
||||||
uselocalh = 1;
|
(*this) = Ng_Meshing_Parameters();
|
||||||
|
|
||||||
maxh = 1000;
|
|
||||||
minh = 0;
|
|
||||||
|
|
||||||
fineness = 0.5;
|
|
||||||
grading = 0.3;
|
|
||||||
|
|
||||||
elementsperedge = 2.0;
|
|
||||||
elementspercurve = 2.0;
|
|
||||||
|
|
||||||
closeedgeenable = 0;
|
|
||||||
closeedgefact = 2.0;
|
|
||||||
|
|
||||||
minedgelenenable = 0;
|
|
||||||
minedgelen = 1e-4;
|
|
||||||
|
|
||||||
second_order = 0;
|
|
||||||
quad_dominated = 0;
|
|
||||||
|
|
||||||
meshsize_filename = 0;
|
|
||||||
|
|
||||||
optsurfmeshenable = 1;
|
|
||||||
optvolmeshenable = 1;
|
|
||||||
|
|
||||||
optsteps_2d = 3;
|
|
||||||
optsteps_3d = 3;
|
|
||||||
|
|
||||||
invert_tets = 0;
|
|
||||||
invert_trigs = 0;
|
|
||||||
|
|
||||||
check_overlap = 1;
|
|
||||||
check_overlapping_boundary = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -874,6 +1094,9 @@ namespace nglib
|
|||||||
mparam.meshsizefilename = "";
|
mparam.meshsizefilename = "";
|
||||||
mparam.optsteps2d = optsteps_2d;
|
mparam.optsteps2d = optsteps_2d;
|
||||||
mparam.optsteps3d = optsteps_3d;
|
mparam.optsteps3d = optsteps_3d;
|
||||||
|
|
||||||
|
if (strlen(optimize2d) > 0) mparam.optimize2d = optimize2d;
|
||||||
|
if (strlen(optimize3d) > 0) mparam.optimize3d = optimize3d;
|
||||||
|
|
||||||
mparam.inverttets = invert_tets;
|
mparam.inverttets = invert_tets;
|
||||||
mparam.inverttrigs = invert_trigs;
|
mparam.inverttrigs = invert_trigs;
|
||||||
@ -881,6 +1104,72 @@ namespace nglib
|
|||||||
mparam.checkoverlap = check_overlap;
|
mparam.checkoverlap = check_overlap;
|
||||||
mparam.checkoverlappingboundary = check_overlapping_boundary;
|
mparam.checkoverlappingboundary = check_overlapping_boundary;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API Ng_STL_Parameters :: Ng_STL_Parameters()
|
||||||
|
{
|
||||||
|
yangle = 30;
|
||||||
|
contyangle = 20;
|
||||||
|
|
||||||
|
chartangle = 10; // original = 15
|
||||||
|
outerchartangle = 80; // original = 70;
|
||||||
|
|
||||||
|
usesearchtree = 0;
|
||||||
|
|
||||||
|
atlasminh = 1.0; // original = 1E-4
|
||||||
|
|
||||||
|
resthatlasenable = 1;
|
||||||
|
resthatlasfac = 2;
|
||||||
|
|
||||||
|
resthchartdistenable = 1;
|
||||||
|
resthchartdistfac = 0.3; // original = 1.2
|
||||||
|
|
||||||
|
resthedgeangleenable = 0;
|
||||||
|
resthedgeanglefac = 1;
|
||||||
|
|
||||||
|
resthsurfmeshcurvenable = 1;
|
||||||
|
resthsurfmeshcurvfac = 1;
|
||||||
|
|
||||||
|
resthlinelengthenable = 1;
|
||||||
|
resthlinelengthfac = 0.2; // original = 0.5
|
||||||
|
|
||||||
|
resthcloseedgefac = 1;
|
||||||
|
resthcloseedgeenable = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API void Ng_STL_Parameters :: Transfer_Parameters()
|
||||||
|
{
|
||||||
|
stlparam.yangle = yangle;
|
||||||
|
stlparam.contyangle = contyangle;
|
||||||
|
|
||||||
|
stlparam.chartangle = chartangle;
|
||||||
|
stlparam.outerchartangle = outerchartangle;
|
||||||
|
|
||||||
|
stlparam.usesearchtree = usesearchtree;
|
||||||
|
|
||||||
|
stlparam.atlasminh = atlasminh;
|
||||||
|
|
||||||
|
stlparam.resthatlasenable = resthatlasenable;
|
||||||
|
stlparam.resthatlasfac = resthatlasfac;
|
||||||
|
|
||||||
|
stlparam.resthchartdistenable = resthchartdistenable;
|
||||||
|
stlparam.resthchartdistfac = resthchartdistfac;
|
||||||
|
|
||||||
|
stlparam.resthedgeangleenable = resthedgeangleenable;
|
||||||
|
stlparam.resthedgeanglefac = resthedgeanglefac;
|
||||||
|
|
||||||
|
stlparam.resthsurfmeshcurvenable = resthsurfmeshcurvenable;
|
||||||
|
stlparam.resthsurfmeshcurvfac = resthsurfmeshcurvfac;
|
||||||
|
|
||||||
|
stlparam.resthlinelengthenable = resthlinelengthenable;
|
||||||
|
stlparam.resthlinelengthfac = resthlinelengthfac;
|
||||||
|
|
||||||
|
// stlparam.resthcloseedgeenable = resthcloseedgeenable;
|
||||||
|
// stlparam.resthcloseedgefac = resthcloseedgefac;
|
||||||
|
}
|
||||||
// ------------------ End - Meshing Parameters related functions --------------------
|
// ------------------ End - Meshing Parameters related functions --------------------
|
||||||
|
|
||||||
|
|
||||||
@ -897,7 +1186,7 @@ namespace nglib
|
|||||||
|
|
||||||
|
|
||||||
NGLIB_API void Ng_2D_Generate_SecondOrder(Ng_Geometry_2D * geom,
|
NGLIB_API void Ng_2D_Generate_SecondOrder(Ng_Geometry_2D * geom,
|
||||||
Ng_Mesh * mesh)
|
Ng_Mesh * mesh)
|
||||||
{
|
{
|
||||||
( (SplineGeometry2d*)geom ) -> GetRefinement().MakeSecondOrder( * (Mesh*) mesh );
|
( (SplineGeometry2d*)geom ) -> GetRefinement().MakeSecondOrder( * (Mesh*) mesh );
|
||||||
}
|
}
|
||||||
@ -906,7 +1195,7 @@ namespace nglib
|
|||||||
|
|
||||||
|
|
||||||
NGLIB_API void Ng_STL_Generate_SecondOrder(Ng_STL_Geometry * geom,
|
NGLIB_API void Ng_STL_Generate_SecondOrder(Ng_STL_Geometry * geom,
|
||||||
Ng_Mesh * mesh)
|
Ng_Mesh * mesh)
|
||||||
{
|
{
|
||||||
((STLGeometry*)geom)->GetRefinement().MakeSecondOrder(*(Mesh*) mesh);
|
((STLGeometry*)geom)->GetRefinement().MakeSecondOrder(*(Mesh*) mesh);
|
||||||
}
|
}
|
||||||
@ -915,7 +1204,7 @@ namespace nglib
|
|||||||
|
|
||||||
|
|
||||||
NGLIB_API void Ng_CSG_Generate_SecondOrder (Ng_CSG_Geometry * geom,
|
NGLIB_API void Ng_CSG_Generate_SecondOrder (Ng_CSG_Geometry * geom,
|
||||||
Ng_Mesh * mesh)
|
Ng_Mesh * mesh)
|
||||||
{
|
{
|
||||||
((CSGeometry*)geom)->GetRefinement().MakeSecondOrder(*(Mesh*) mesh);
|
((CSGeometry*)geom)->GetRefinement().MakeSecondOrder(*(Mesh*) mesh);
|
||||||
}
|
}
|
||||||
@ -931,11 +1220,56 @@ namespace nglib
|
|||||||
// ------------------ Begin - Uniform Mesh Refinement functions ---------------------
|
// ------------------ Begin - Uniform Mesh Refinement functions ---------------------
|
||||||
NGLIB_API void Ng_Uniform_Refinement (Ng_Mesh * mesh)
|
NGLIB_API void Ng_Uniform_Refinement (Ng_Mesh * mesh)
|
||||||
{
|
{
|
||||||
Refinement ref(*((Mesh*)mesh)->GetGeometry());
|
Refinement ref(*((Mesh*)mesh)->GetGeometry());
|
||||||
ref.Refine ( * (Mesh*) mesh );
|
ref.Refine ( * (Mesh*) mesh );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API void Ng_SetRefinementFlag (Ng_Mesh * ng_mesh, int ei, int flag)
|
||||||
|
{
|
||||||
|
Mesh * mesh = (Mesh*) ng_mesh;
|
||||||
|
|
||||||
|
if (mesh->GetDimension() == 3)
|
||||||
|
{
|
||||||
|
mesh->VolumeElement(ei).SetRefinementFlag (flag != 0);
|
||||||
|
mesh->VolumeElement(ei).SetStrongRefinementFlag (flag >= 10);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mesh->SurfaceElement(ei).SetRefinementFlag (flag != 0);
|
||||||
|
mesh->SurfaceElement(ei).SetStrongRefinementFlag (flag >= 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API void Ng_SetSurfaceRefinementFlag (Ng_Mesh * ng_mesh, int ei, int flag)
|
||||||
|
{
|
||||||
|
Mesh * mesh = (Mesh*) ng_mesh;
|
||||||
|
|
||||||
|
if (mesh->GetDimension() == 3)
|
||||||
|
{
|
||||||
|
mesh->SurfaceElement(ei).SetRefinementFlag (flag != 0);
|
||||||
|
mesh->SurfaceElement(ei).SetStrongRefinementFlag (flag >= 10);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API void Ng_Refine (Ng_Mesh * ng_mesh)
|
||||||
|
{
|
||||||
|
Mesh * mesh = (Mesh*) ng_mesh;
|
||||||
|
BisectionOptions biopt;
|
||||||
|
biopt.usemarkedelements = 1;
|
||||||
|
biopt.refine_p = 0; // only h-refinement
|
||||||
|
biopt.refine_hp = 0;
|
||||||
|
|
||||||
|
Refinement ref(*((Mesh*)mesh)->GetGeometry());
|
||||||
|
ref.Bisect(*(Mesh*)mesh, biopt);
|
||||||
|
|
||||||
|
// \todo not sure if this is needed?
|
||||||
|
//mesh -> UpdateTopology();
|
||||||
|
//mesh -> GetCurvedElements().SetIsHighOrder (false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
NGLIB_API void Ng_2D_Uniform_Refinement (Ng_Geometry_2D * geom,
|
NGLIB_API void Ng_2D_Uniform_Refinement (Ng_Geometry_2D * geom,
|
||||||
@ -946,7 +1280,6 @@ namespace nglib
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
NGLIB_API void Ng_STL_Uniform_Refinement (Ng_STL_Geometry * geom,
|
NGLIB_API void Ng_STL_Uniform_Refinement (Ng_STL_Geometry * geom,
|
||||||
Ng_Mesh * mesh)
|
Ng_Mesh * mesh)
|
||||||
{
|
{
|
||||||
@ -1037,11 +1370,3 @@ void Ng_SetSolutionData (Ng_SolutionData * soldata)
|
|||||||
}
|
}
|
||||||
void Ng_InitSolutionData (Ng_SolutionData * soldata) { ; }
|
void Ng_InitSolutionData (Ng_SolutionData * soldata) { ; }
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Force linking libinterface to libnglib
|
|
||||||
#include <../interface/writeuser.hpp>
|
|
||||||
void MyDummyToForceLinkingLibInterface(Mesh &mesh, NetgenGeometry &geom)
|
|
||||||
{
|
|
||||||
netgen::WriteUserFormat("", mesh, /* geom, */ "");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
155
nglib/nglib.h
155
nglib/nglib.h
@ -25,8 +25,8 @@
|
|||||||
|
|
||||||
// Philippose - 14.02.2009
|
// Philippose - 14.02.2009
|
||||||
// Modifications for creating a DLL in Windows
|
// Modifications for creating a DLL in Windows
|
||||||
#ifdef WIN32
|
#if defined(WIN32)
|
||||||
#ifdef nglib_EXPORTS
|
#if defined(NGLIB_EXPORTS) || defined(nglib_EXPORTS)
|
||||||
#define NGLIB_API __declspec(dllexport)
|
#define NGLIB_API __declspec(dllexport)
|
||||||
#else
|
#else
|
||||||
#define NGLIB_API __declspec(dllimport)
|
#define NGLIB_API __declspec(dllimport)
|
||||||
@ -67,7 +67,7 @@ enum Ng_Surface_Element_Type
|
|||||||
|
|
||||||
/// Currently implemented volume element types
|
/// Currently implemented volume element types
|
||||||
enum Ng_Volume_Element_Type
|
enum Ng_Volume_Element_Type
|
||||||
{ NG_TET = 1, NG_PYRAMID = 2, NG_PRISM = 3, NG_TET10 = 4 };
|
{ NG_TET = 1, NG_PYRAMID = 2, NG_PRISM = 3, NG_TET10 = 4, NG_HEX = 5 };
|
||||||
|
|
||||||
/// Values returned by Netgen functions
|
/// Values returned by Netgen functions
|
||||||
enum Ng_Result
|
enum Ng_Result
|
||||||
@ -116,6 +116,9 @@ public:
|
|||||||
int optsteps_3d; //!< Number of optimize steps to use for 3-D mesh optimization
|
int optsteps_3d; //!< Number of optimize steps to use for 3-D mesh optimization
|
||||||
int optsteps_2d; //!< Number of optimize steps to use for 2-D mesh optimization
|
int optsteps_2d; //!< Number of optimize steps to use for 2-D mesh optimization
|
||||||
|
|
||||||
|
const char* optimize3d; //!< Optimization strategy (s=swap shape, c=collapse, d=divide, m=move, M=cheap move)
|
||||||
|
const char* optimize2d; //!< Optimization strategy (s=swap topological, S=swap shape, c=collapse, m=move)
|
||||||
|
|
||||||
// Philippose - 13/09/2010
|
// Philippose - 13/09/2010
|
||||||
// Added a couple more parameters into the meshing parameters list
|
// Added a couple more parameters into the meshing parameters list
|
||||||
// from Netgen into Nglib
|
// from Netgen into Nglib
|
||||||
@ -176,6 +179,49 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class NGLIB_API Ng_STL_Parameters
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Algorithm may be somewhat like Canny edge detector
|
||||||
|
// on mesh?
|
||||||
|
double yangle; // 30
|
||||||
|
double contyangle; // 30
|
||||||
|
|
||||||
|
// I think this is used to split surface into patches/charts,
|
||||||
|
//which are flattened to use 2d meshing routines.
|
||||||
|
double chartangle; // 15
|
||||||
|
double outerchartangle; // 70
|
||||||
|
|
||||||
|
int usesearchtree; // 0
|
||||||
|
|
||||||
|
double atlasminh; // 1e-4
|
||||||
|
|
||||||
|
// Factors which influence the local mesh size
|
||||||
|
// as a relation to some metric, e.g. curvature,
|
||||||
|
// line length, etc.
|
||||||
|
// TODO: document each of these properly
|
||||||
|
int resthatlasenable; // 1
|
||||||
|
double resthatlasfac; // 2
|
||||||
|
|
||||||
|
int resthchartdistenable; // 1
|
||||||
|
double resthchartdistfac; // 0.3
|
||||||
|
|
||||||
|
int resthedgeangleenable; // 0
|
||||||
|
double resthedgeanglefac; // 1
|
||||||
|
|
||||||
|
int resthsurfmeshcurvenable; // 0
|
||||||
|
double resthsurfmeshcurvfac; // 0.5
|
||||||
|
|
||||||
|
int resthlinelengthenable; // 1
|
||||||
|
double resthlinelengthfac; // 0.5
|
||||||
|
|
||||||
|
int resthcloseedgeenable; // 1
|
||||||
|
double resthcloseedgefac; // 1.0
|
||||||
|
|
||||||
|
Ng_STL_Parameters();
|
||||||
|
|
||||||
|
void Transfer_Parameters();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// *** Functions Exported by this Library *************
|
// *** Functions Exported by this Library *************
|
||||||
@ -189,7 +235,7 @@ public:
|
|||||||
program before beginning to use the other Netgen
|
program before beginning to use the other Netgen
|
||||||
specific functions.
|
specific functions.
|
||||||
*/
|
*/
|
||||||
NGLIB_API void Ng_Init ();
|
NGLIB_API void Ng_Init (bool cout_to_null = false, bool cerr_to_null = false, bool testout_to_null = false);
|
||||||
|
|
||||||
|
|
||||||
/*! \brief Exit the Netgen meshing kernel in a clean manner
|
/*! \brief Exit the Netgen meshing kernel in a clean manner
|
||||||
@ -200,6 +246,16 @@ NGLIB_API void Ng_Init ();
|
|||||||
NGLIB_API void Ng_Exit ();
|
NGLIB_API void Ng_Exit ();
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Get current status, e.g. info string and percent
|
||||||
|
*/
|
||||||
|
NGLIB_API void Ng_GetStatus(char ** str, double & percent);
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Set abort flag
|
||||||
|
*/
|
||||||
|
NGLIB_API void Ng_SetTerminate(bool abort);
|
||||||
|
|
||||||
|
|
||||||
/*! \brief Create a new (and empty) Netgen Mesh Structure
|
/*! \brief Create a new (and empty) Netgen Mesh Structure
|
||||||
|
|
||||||
This function creates a new Netgen Mesh, initialises
|
This function creates a new Netgen Mesh, initialises
|
||||||
@ -254,6 +310,13 @@ NGLIB_API void Ng_SaveMesh(Ng_Mesh * mesh, const char* filename);
|
|||||||
NGLIB_API Ng_Mesh * Ng_LoadMesh(const char* filename);
|
NGLIB_API Ng_Mesh * Ng_LoadMesh(const char* filename);
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Save mesh in various external formats, e.g. fluent, gmsh, gmsh2, vtk, ...
|
||||||
|
|
||||||
|
*/
|
||||||
|
enum Ng_Export_Formats { NG_GMSH = 1, NG_GMSH2 = 2, NG_VTK = 3, NG_FLUENT = 4, NG_ABAQUS = 5 };
|
||||||
|
NGLIB_API void Ng_ExportMesh(Ng_Mesh * mesh, Ng_Export_Formats format, const char* filename);
|
||||||
|
|
||||||
|
|
||||||
/*! \brief Merge a Netgen VOL Mesh from disk into an existing mesh in memory
|
/*! \brief Merge a Netgen VOL Mesh from disk into an existing mesh in memory
|
||||||
|
|
||||||
A Netgen mesh saved in the internal VOL format can be merged
|
A Netgen mesh saved in the internal VOL format can be merged
|
||||||
@ -308,6 +371,27 @@ NGLIB_API Ng_Result Ng_MergeMesh(Ng_Mesh * mesh1, Ng_Mesh * mesh2);
|
|||||||
NGLIB_API void Ng_AddPoint (Ng_Mesh * mesh, double * x);
|
NGLIB_API void Ng_AddPoint (Ng_Mesh * mesh, double * x);
|
||||||
|
|
||||||
|
|
||||||
|
/*! Add locked point which should not get modified by optimization routines
|
||||||
|
|
||||||
|
*/
|
||||||
|
NGLIB_API void Ng_AddLockedPoint(Ng_Mesh * mesh, int pi);
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Remove any existing face descriptors
|
||||||
|
*/
|
||||||
|
NGLIB_API int Ng_AddFaceDescriptor (Ng_Mesh * ng_mesh, int surfnr, int domin, int domout, int bcp);
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Remove any existing face descriptors
|
||||||
|
*/
|
||||||
|
NGLIB_API void Ng_ClearFaceDescriptors (Ng_Mesh * ng_mesh);
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Generate simple facedescriptors, with facenr==bc, from 1...maxbc
|
||||||
|
*/
|
||||||
|
NGLIB_API void Ng_SetupFacedescriptors(Ng_Mesh * mesh, int maxbc);
|
||||||
|
|
||||||
|
|
||||||
/*! \brief Add a surface element to a given Netgen Mesh Structure
|
/*! \brief Add a surface element to a given Netgen Mesh Structure
|
||||||
|
|
||||||
This function allows the top-level code to directly add individual
|
This function allows the top-level code to directly add individual
|
||||||
@ -327,8 +411,9 @@ NGLIB_API void Ng_AddPoint (Ng_Mesh * mesh, double * x);
|
|||||||
#Ng_Surface_Element_Type
|
#Ng_Surface_Element_Type
|
||||||
\param pi Pointer to an array of integers containing the indices of the
|
\param pi Pointer to an array of integers containing the indices of the
|
||||||
points which constitute the surface element being added
|
points which constitute the surface element being added
|
||||||
|
\param facenr Index of face descriptor. Used e.g. to attach boundary condition types to surface elements
|
||||||
*/
|
*/
|
||||||
NGLIB_API void Ng_AddSurfaceElement (Ng_Mesh * mesh, Ng_Surface_Element_Type et, int * pi);
|
NGLIB_API void Ng_AddSurfaceElement (Ng_Mesh * mesh, Ng_Surface_Element_Type et, int * pi, int facenr=1);
|
||||||
|
|
||||||
|
|
||||||
/*! \brief Add a volume element to a given Netgen Mesh Structure
|
/*! \brief Add a volume element to a given Netgen Mesh Structure
|
||||||
@ -352,8 +437,8 @@ NGLIB_API void Ng_AddSurfaceElement (Ng_Mesh * mesh, Ng_Surface_Element_Type et,
|
|||||||
points which constitute the volume element being added
|
points which constitute the volume element being added
|
||||||
|
|
||||||
*/
|
*/
|
||||||
NGLIB_API void Ng_AddVolumeElement (Ng_Mesh * mesh, Ng_Volume_Element_Type et, int * pi);
|
NGLIB_API void Ng_AddVolumeElement (Ng_Mesh * mesh, Ng_Volume_Element_Type et, int * pi, int domain=1);
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@ -467,6 +552,12 @@ NGLIB_API void Ng_RestrictMeshSizeBox (Ng_Mesh * mesh, double * pmin, double * p
|
|||||||
*/
|
*/
|
||||||
NGLIB_API Ng_Result Ng_GenerateVolumeMesh (Ng_Mesh * mesh, Ng_Meshing_Parameters * mp);
|
NGLIB_API Ng_Result Ng_GenerateVolumeMesh (Ng_Mesh * mesh, Ng_Meshing_Parameters * mp);
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Improve quality of an existing 3D Volume Mesh
|
||||||
|
|
||||||
|
*/
|
||||||
|
NGLIB_API Ng_Result Ng_OptimizeVolume(Ng_Mesh *mesh, Ng_Meshing_Parameters *mp);
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@ -529,13 +620,15 @@ NGLIB_API int Ng_GetNE (Ng_Mesh * mesh);
|
|||||||
NGLIB_API void Ng_GetPoint (Ng_Mesh * mesh, int num, double * x);
|
NGLIB_API void Ng_GetPoint (Ng_Mesh * mesh, int num, double * x);
|
||||||
|
|
||||||
|
|
||||||
|
// return bcp and surfnr for specified face descriptor (facenr)
|
||||||
|
NGLIB_API bool Ng_GetFaceDescriptor (Ng_Mesh * mesh, int facenr, int &surfnr, int &domin, int &domout, int &bcp);
|
||||||
|
|
||||||
// return surface and volume element in pi
|
// return surface and volume element in pi
|
||||||
NGLIB_API Ng_Surface_Element_Type
|
NGLIB_API Ng_Surface_Element_Type
|
||||||
Ng_GetSurfaceElement (Ng_Mesh * mesh, int num, int * pi);
|
Ng_GetSurfaceElement (Ng_Mesh * mesh, int num, int * pi, int * facenr = nullptr);
|
||||||
|
|
||||||
NGLIB_API Ng_Volume_Element_Type
|
NGLIB_API Ng_Volume_Element_Type
|
||||||
Ng_GetVolumeElement (Ng_Mesh * mesh, int num, int * pi);
|
Ng_GetVolumeElement (Ng_Mesh * mesh, int num, int * pi, int * domain = nullptr);
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
||||||
@ -548,9 +641,20 @@ Ng_GetVolumeElement (Ng_Mesh * mesh, int num, int * pi);
|
|||||||
|
|
||||||
|
|
||||||
// feeds points and boundary to mesh
|
// feeds points and boundary to mesh
|
||||||
|
NGLIB_API Ng_Geometry_2D * Ng_NewGeometry_2D();
|
||||||
|
|
||||||
|
NGLIB_API void Ng_DeleteGeometry_2D(Ng_Geometry_2D * geom);
|
||||||
|
|
||||||
|
NGLIB_API void Ng_AppendPoint_2D(Ng_Geometry_2D* geom, double * x, double h);
|
||||||
|
|
||||||
|
NGLIB_API void Ng_AppendLineSegment_2D(Ng_Geometry_2D* geom, int pi1, int pi2,
|
||||||
|
int leftdomain, int rightdomain, double h);
|
||||||
|
|
||||||
|
NGLIB_API void Ng_AppendSplinSegment_2D(Ng_Geometry_2D* geom, int pi1, int pi2, int pi3,
|
||||||
|
int leftdomain, int rightdomain, double h);
|
||||||
|
|
||||||
NGLIB_API void Ng_AddPoint_2D (Ng_Mesh * mesh, double * x);
|
NGLIB_API void Ng_AddPoint_2D (Ng_Mesh * mesh, double * x);
|
||||||
NGLIB_API void Ng_AddBoundarySeg_2D (Ng_Mesh * mesh, int pi1, int pi2);
|
NGLIB_API void Ng_AddBoundarySeg_2D (Ng_Mesh * mesh, int pi1, int pi2, int domain_in = -1, int domain_out = -1);
|
||||||
|
|
||||||
// ask for number of points, elements and boundary segments
|
// ask for number of points, elements and boundary segments
|
||||||
NGLIB_API int Ng_GetNP_2D (Ng_Mesh * mesh);
|
NGLIB_API int Ng_GetNP_2D (Ng_Mesh * mesh);
|
||||||
@ -561,11 +665,10 @@ NGLIB_API int Ng_GetNSeg_2D (Ng_Mesh * mesh);
|
|||||||
NGLIB_API void Ng_GetPoint_2D (Ng_Mesh * mesh, int num, double * x);
|
NGLIB_API void Ng_GetPoint_2D (Ng_Mesh * mesh, int num, double * x);
|
||||||
|
|
||||||
// return 2d elements
|
// return 2d elements
|
||||||
NGLIB_API Ng_Surface_Element_Type
|
NGLIB_API Ng_Surface_Element_Type Ng_GetElement_2D (Ng_Mesh * mesh, int num, int * pi, int * matnum = nullptr);
|
||||||
Ng_GetElement_2D (Ng_Mesh * mesh, int num, int * pi, int * matnum = NULL);
|
|
||||||
|
|
||||||
// return 2d boundary segment
|
// return 2d boundary segment
|
||||||
NGLIB_API void Ng_GetSegment_2D (Ng_Mesh * mesh, int num, int * pi, int * matnum = NULL);
|
NGLIB_API void Ng_GetSegment_2D (Ng_Mesh * mesh, int num, int * pi, int * matnum = nullptr);
|
||||||
|
|
||||||
|
|
||||||
// load 2d netgen spline geometry
|
// load 2d netgen spline geometry
|
||||||
@ -575,7 +678,11 @@ NGLIB_API Ng_Geometry_2D * Ng_LoadGeometry_2D (const char * filename);
|
|||||||
NGLIB_API Ng_Result Ng_GenerateMesh_2D (Ng_Geometry_2D * geom,
|
NGLIB_API Ng_Result Ng_GenerateMesh_2D (Ng_Geometry_2D * geom,
|
||||||
Ng_Mesh ** mesh,
|
Ng_Mesh ** mesh,
|
||||||
Ng_Meshing_Parameters * mp);
|
Ng_Meshing_Parameters * mp);
|
||||||
|
|
||||||
|
// functions added to make Optimize2d mesh accessible from nglib
|
||||||
|
NGLIB_API Ng_Result Ng_OptimizeMesh_2D(Ng_Mesh *mesh, Ng_Meshing_Parameters * mp);
|
||||||
|
|
||||||
|
|
||||||
NGLIB_API void Ng_HP_Refinement (Ng_Geometry_2D * geom,
|
NGLIB_API void Ng_HP_Refinement (Ng_Geometry_2D * geom,
|
||||||
Ng_Mesh * mesh,
|
Ng_Mesh * mesh,
|
||||||
int levels);
|
int levels);
|
||||||
@ -595,14 +702,16 @@ NGLIB_API Ng_STL_Geometry * Ng_STL_LoadGeometry (const char * filename, int bina
|
|||||||
|
|
||||||
// generate new STL Geometry
|
// generate new STL Geometry
|
||||||
NGLIB_API Ng_STL_Geometry * Ng_STL_NewGeometry ();
|
NGLIB_API Ng_STL_Geometry * Ng_STL_NewGeometry ();
|
||||||
|
|
||||||
|
|
||||||
|
NGLIB_API void Ng_STL_DeleteGeometry (Ng_STL_Geometry * geom);
|
||||||
|
|
||||||
// fills STL Geometry
|
// fills STL Geometry
|
||||||
// positive orientation
|
// positive orientation
|
||||||
// normal vector may be null-pointer
|
// normal vector may be null-pointer
|
||||||
NGLIB_API void Ng_STL_AddTriangle (Ng_STL_Geometry * geom,
|
NGLIB_API void Ng_STL_AddTriangle (Ng_STL_Geometry * geom,
|
||||||
double * p1, double * p2, double * p3,
|
double * p1, double * p2, double * p3,
|
||||||
double * nv = NULL);
|
double * nv = nullptr);
|
||||||
|
|
||||||
// add (optional) edges :
|
// add (optional) edges :
|
||||||
NGLIB_API void Ng_STL_AddEdge (Ng_STL_Geometry * geom,
|
NGLIB_API void Ng_STL_AddEdge (Ng_STL_Geometry * geom,
|
||||||
@ -614,13 +723,15 @@ NGLIB_API Ng_Result Ng_STL_InitSTLGeometry (Ng_STL_Geometry * geom);
|
|||||||
// automatically generates edges:
|
// automatically generates edges:
|
||||||
NGLIB_API Ng_Result Ng_STL_MakeEdges (Ng_STL_Geometry * geom,
|
NGLIB_API Ng_Result Ng_STL_MakeEdges (Ng_STL_Geometry * geom,
|
||||||
Ng_Mesh* mesh,
|
Ng_Mesh* mesh,
|
||||||
Ng_Meshing_Parameters * mp);
|
Ng_Meshing_Parameters * mp,
|
||||||
|
Ng_STL_Parameters * stlp = nullptr);
|
||||||
|
|
||||||
|
|
||||||
// generates mesh, empty mesh must be already created.
|
// generates mesh, empty mesh must be already created.
|
||||||
NGLIB_API Ng_Result Ng_STL_GenerateSurfaceMesh (Ng_STL_Geometry * geom,
|
NGLIB_API Ng_Result Ng_STL_GenerateSurfaceMesh (Ng_STL_Geometry * geom,
|
||||||
Ng_Mesh * mesh,
|
Ng_Mesh * mesh,
|
||||||
Ng_Meshing_Parameters * mp);
|
Ng_Meshing_Parameters * mp,
|
||||||
|
Ng_STL_Parameters * stlp = nullptr);
|
||||||
|
|
||||||
|
|
||||||
#ifdef ACIS
|
#ifdef ACIS
|
||||||
@ -656,6 +767,14 @@ NGLIB_API Ng_Result Ng_ACIS_GenerateSurfaceMesh (Ng_ACIS_Geometry * geom,
|
|||||||
NGLIB_API void Ng_Uniform_Refinement (Ng_Mesh * mesh);
|
NGLIB_API void Ng_Uniform_Refinement (Ng_Mesh * mesh);
|
||||||
|
|
||||||
|
|
||||||
|
// non-uniform mesh refinement
|
||||||
|
NGLIB_API void Ng_SetRefinementFlag (Ng_Mesh * ng_mesh, int ei, int flag);
|
||||||
|
|
||||||
|
NGLIB_API void Ng_SetSurfaceRefinementFlag (Ng_Mesh * ng_mesh, int ei, int flag);
|
||||||
|
|
||||||
|
NGLIB_API void Ng_Refine (Ng_Mesh * ng_mesh);
|
||||||
|
|
||||||
|
|
||||||
// uniform mesh refinement with geometry adaption:
|
// uniform mesh refinement with geometry adaption:
|
||||||
|
|
||||||
NGLIB_API void Ng_2D_Uniform_Refinement (Ng_Geometry_2D * geom,
|
NGLIB_API void Ng_2D_Uniform_Refinement (Ng_Geometry_2D * geom,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user