mirror of
https://github.com/NGSolve/netgen.git
synced 2025-01-31 07:10:34 +05:00
Merge remote-tracking branch 'origin/master' into boundarylayer_fixes
This commit is contained in:
commit
38c45f57cb
@ -38,6 +38,8 @@ namespace ngcore
|
||||
|
||||
|
||||
|
||||
// feature check macro for transition from INT to IVec
|
||||
#define NGCORE_HAS_IVEC
|
||||
|
||||
/// N integers
|
||||
template <int N, typename T = int>
|
||||
|
@ -111,6 +111,7 @@ namespace netgen
|
||||
int operator[] (size_t i) const { return ptr[i]-POINTINDEX_BASE; }
|
||||
};
|
||||
|
||||
/*
|
||||
class Ng_Edges
|
||||
{
|
||||
public:
|
||||
@ -130,6 +131,7 @@ namespace netgen
|
||||
size_t Size() const { return num; }
|
||||
int operator[] (size_t i) const { return ptr[i]; }
|
||||
};
|
||||
*/
|
||||
|
||||
class Ng_Facets
|
||||
{
|
||||
@ -151,8 +153,10 @@ namespace netgen
|
||||
int GetIndex() const { return index-1; }
|
||||
Ng_Points points; // all points
|
||||
Ng_Vertices vertices;
|
||||
Ng_Edges edges;
|
||||
Ng_Faces faces;
|
||||
// Ng_Edges edges;
|
||||
FlatArray<T_EDGE2> edges;
|
||||
// Ng_Faces faces;
|
||||
FlatArray<T_FACE2> faces;
|
||||
Ng_Facets facets;
|
||||
bool is_curved;
|
||||
};
|
||||
|
@ -57,14 +57,19 @@ NGX_INLINE DLL_HEADER Ng_Element Ngx_Mesh :: GetElement<0> (size_t nr) const
|
||||
ret.vertices.num = 1;
|
||||
ret.vertices.ptr = (int*)&el.pnum;
|
||||
|
||||
/*
|
||||
ret.edges.num = 0;
|
||||
ret.edges.ptr = NULL;
|
||||
|
||||
*/
|
||||
ret.edges.Assign ( FlatArray<T_EDGE2> (0, nullptr) );
|
||||
/*
|
||||
ret.faces.num = 0;
|
||||
ret.faces.ptr = NULL;
|
||||
*/
|
||||
ret.faces.Assign ( { 0, nullptr } );
|
||||
|
||||
ret.facets.num = 1;
|
||||
ret.facets.base = 1;
|
||||
ret.facets.base = POINTINDEX_BASE;
|
||||
ret.facets.ptr = (int*)&el.pnum;
|
||||
|
||||
if (mesh->GetDimension() == 1)
|
||||
@ -107,11 +112,17 @@ NGX_INLINE DLL_HEADER Ng_Element Ngx_Mesh :: GetElement<1> (size_t nr) const
|
||||
ret.vertices.num = 2;
|
||||
ret.vertices.ptr = (int*)&(el[0]);
|
||||
|
||||
/*
|
||||
ret.edges.num = 1;
|
||||
ret.edges.ptr = mesh->GetTopology().GetSegmentElementEdgesPtr (nr);
|
||||
*/
|
||||
ret.edges.Assign ( FlatArray<T_EDGE2> (1, const_cast<T_EDGE2*>( mesh->GetTopology().GetSegmentElementEdgesPtr (nr))));
|
||||
|
||||
/*
|
||||
ret.faces.num = 0;
|
||||
ret.faces.ptr = NULL;
|
||||
*/
|
||||
ret.faces.Assign ( { 0, nullptr });
|
||||
|
||||
if (mesh->GetDimension() == 3)
|
||||
{
|
||||
@ -123,7 +134,7 @@ NGX_INLINE DLL_HEADER Ng_Element Ngx_Mesh :: GetElement<1> (size_t nr) const
|
||||
{
|
||||
ret.facets.num = 1;
|
||||
ret.facets.base = 0;
|
||||
ret.facets.ptr = ret.edges.ptr;
|
||||
ret.facets.ptr = ret.edges.Data();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -157,23 +168,27 @@ NGX_INLINE DLL_HEADER Ng_Element Ngx_Mesh :: GetElement<2> (size_t nr) const
|
||||
ret.vertices.num = el.GetNV();
|
||||
ret.vertices.ptr = (int*)&(el[0]);
|
||||
|
||||
/*
|
||||
ret.edges.num = MeshTopology::GetNEdges (el.GetType());
|
||||
ret.edges.ptr = mesh->GetTopology().GetSurfaceElementEdgesPtr (nr);
|
||||
|
||||
*/
|
||||
ret.edges.Assign (mesh->GetTopology().GetEdges (SurfaceElementIndex(nr)));
|
||||
/*
|
||||
ret.faces.num = MeshTopology::GetNFaces (el.GetType());
|
||||
ret.faces.ptr = mesh->GetTopology().GetSurfaceElementFacesPtr (nr);
|
||||
|
||||
*/
|
||||
ret.faces.Assign ( { 1, const_cast<int*>(mesh->GetTopology().GetSurfaceElementFacesPtr (nr)) });
|
||||
if (mesh->GetDimension() == 3)
|
||||
{
|
||||
ret.facets.num = ret.faces.num;
|
||||
ret.facets.num = ret.faces.Size();
|
||||
ret.facets.base = 0;
|
||||
ret.facets.ptr = ret.faces.ptr;
|
||||
ret.facets.ptr = ret.faces.Data();
|
||||
}
|
||||
else
|
||||
{
|
||||
ret.facets.num = ret.edges.num;
|
||||
ret.facets.num = ret.edges.Size();
|
||||
ret.facets.base = 0;
|
||||
ret.facets.ptr = ret.edges.ptr;
|
||||
ret.facets.ptr = ret.edges.Data();
|
||||
}
|
||||
ret.is_curved = el.IsCurved();
|
||||
return ret;
|
||||
@ -194,15 +209,21 @@ NGX_INLINE DLL_HEADER Ng_Element Ngx_Mesh :: GetElement<3> (size_t nr) const
|
||||
ret.vertices.num = el.GetNV();
|
||||
ret.vertices.ptr = (int*)&(el[0]);
|
||||
|
||||
/*
|
||||
ret.edges.num = MeshTopology::GetNEdges (el.GetType());
|
||||
ret.edges.ptr = mesh->GetTopology().GetElementEdgesPtr (nr);
|
||||
*/
|
||||
ret.edges.Assign (mesh->GetTopology().GetEdges (ElementIndex(nr)));
|
||||
|
||||
/*
|
||||
ret.faces.num = MeshTopology::GetNFaces (el.GetType());
|
||||
ret.faces.ptr = mesh->GetTopology().GetElementFacesPtr (nr);
|
||||
*/
|
||||
ret.faces.Assign (mesh->GetTopology().GetFaces (ElementIndex(nr)));
|
||||
|
||||
ret.facets.num = ret.faces.num;
|
||||
ret.facets.num = ret.faces.Size();
|
||||
ret.facets.base = 0;
|
||||
ret.facets.ptr = ret.faces.ptr;
|
||||
ret.facets.ptr = ret.faces.Data();
|
||||
|
||||
ret.is_curved = el.IsCurved();
|
||||
return ret;
|
||||
|
@ -666,11 +666,33 @@ namespace netgen
|
||||
if (triangulation.IsNull())
|
||||
{
|
||||
BRepTools::Clean (geom.shape);
|
||||
BRepMesh_IncrementalMesh (geom.shape, 0.01, true);
|
||||
// BRepMesh_IncrementalMesh (geom.shape, 0.01, true);
|
||||
|
||||
// https://dev.opencascade.org/doc/overview/html/occt_user_guides__mesh.html
|
||||
IMeshTools_Parameters aMeshParams;
|
||||
aMeshParams.Deflection = 0.01;
|
||||
aMeshParams.Angle = 0.5;
|
||||
aMeshParams.Relative = Standard_False;
|
||||
aMeshParams.InParallel = Standard_True;
|
||||
aMeshParams.MinSize = Precision::Confusion();
|
||||
aMeshParams.InternalVerticesMode = Standard_True;
|
||||
aMeshParams.ControlSurfaceDeflection = Standard_True;
|
||||
|
||||
BRepMesh_IncrementalMesh aMesher (geom.shape, aMeshParams);
|
||||
const Standard_Integer aStatus = aMesher.GetStatusFlags();
|
||||
if (aStatus != 0)
|
||||
cout << "BRepMesh_IncrementalMesh.status = " << aStatus << endl;
|
||||
|
||||
triangulation = BRep_Tool::Triangulation (face, loc);
|
||||
}
|
||||
|
||||
if(triangulation.IsNull())
|
||||
throw Exception("OCC-Triangulation could not be built. Do you have a bounded shape?");
|
||||
{
|
||||
if (geom.shape.Infinite())
|
||||
throw Exception("Cannot generate mesh for an infinite geometry");
|
||||
else
|
||||
throw Exception("OCC-Triangulation could not be built");
|
||||
}
|
||||
|
||||
BRepAdaptor_Surface sf(face, Standard_True);
|
||||
// one prop for evaluating and one for derivatives
|
||||
|
@ -1219,7 +1219,26 @@ DLL_HEADER void ExportNgOCCShapes(py::module &m)
|
||||
{
|
||||
BRepTools::Clean (shape);
|
||||
double deflection = 0.01;
|
||||
BRepMesh_IncrementalMesh (shape, deflection, true);
|
||||
|
||||
// BRepMesh_IncrementalMesh mesher(shape, deflection,Standard_True, 0.01, true);
|
||||
// mesher.Perform();
|
||||
|
||||
|
||||
// https://dev.opencascade.org/doc/overview/html/occt_user_guides__mesh.html
|
||||
// from Standard_Boolean meshing_imeshtools_parameters()
|
||||
IMeshTools_Parameters aMeshParams;
|
||||
aMeshParams.Deflection = 0.01;
|
||||
aMeshParams.Angle = 0.5;
|
||||
aMeshParams.Relative = Standard_False;
|
||||
aMeshParams.InParallel = Standard_True;
|
||||
aMeshParams.MinSize = Precision::Confusion();
|
||||
aMeshParams.InternalVerticesMode = Standard_True;
|
||||
aMeshParams.ControlSurfaceDeflection = Standard_True;
|
||||
|
||||
BRepMesh_IncrementalMesh aMesher (shape, aMeshParams);
|
||||
const Standard_Integer aStatus = aMesher.GetStatusFlags();
|
||||
// cout << "status = " << aStatus << endl;
|
||||
|
||||
// triangulation = BRep_Tool::Triangulation (face, loc);
|
||||
|
||||
std::vector<double> p[3];
|
||||
|
Loading…
Reference in New Issue
Block a user