-// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2021 CEA/DEN, EDF R&D, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
#include <meshing.hpp>
//#include <meshtype.hpp>
namespace netgen {
-#ifdef NETGEN_V5
- extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, MeshingParameters&, int, int);
-#else
- extern int OCCGenerateMesh (OCCGeometry&, Mesh*&, int, int, char*);
-#endif
+ NETGENPLUGIN_DLL_HEADER
extern MeshingParameters mparam;
extern void OCCSetLocalMeshSize(OCCGeometry & geom, Mesh & mesh);
}
//=============================================================================
NETGENPlugin_NETGEN_2D_ONLY::NETGENPlugin_NETGEN_2D_ONLY(int hypId,
- int studyId,
SMESH_Gen* gen)
- : SMESH_2D_Algo(hypId, studyId, gen)
+ : SMESH_2D_Algo(hypId, gen)
{
_name = "NETGEN_2D_ONLY";
NETGENPlugin_NETGEN_2D_ONLY::~NETGENPlugin_NETGEN_2D_ONLY()
{
- MESSAGE("NETGENPlugin_NETGEN_2D_ONLY::~NETGENPlugin_NETGEN_2D_ONLY");
+ //MESSAGE("NETGENPlugin_NETGEN_2D_ONLY::~NETGENPlugin_NETGEN_2D_ONLY");
}
//=============================================================================
int nbHyps = bool(_hypMaxElementArea) + bool(_hypLengthFromEdges) + bool(_hypParameters );
if ( nbHyps > 1 )
- aStatus = HYP_CONCURENT;
+ aStatus = HYP_CONCURRENT;
else if ( hasVL )
error( StdMeshers_ViscousLayers2D::CheckHypothesis( aMesh, aShape, aStatus ));
else
return ( aStatus == HYP_OK );
}
-namespace
-{
- void limitSize( netgen::Mesh* ngMesh,
- const double maxh )
- {
- // get bnd box
- netgen::Point3d pmin, pmax;
- ngMesh->GetBox( pmin, pmax, 0 );
- const double dx = pmax.X() - pmin.X();
- const double dy = pmax.Y() - pmin.Y();
- const double dz = pmax.Z() - pmin.Z();
-
- const int nbX = Max( 2, int( dx / maxh * 3 ));
- const int nbY = Max( 2, int( dy / maxh * 3 ));
- const int nbZ = Max( 2, int( dz / maxh * 3 ));
-
- if ( ! & ngMesh->LocalHFunction() )
- ngMesh->SetLocalH( pmin, pmax, 0.1 );
-
- netgen::Point3d p;
- for ( int i = 0; i <= nbX; ++i )
- {
- p.X() = pmin.X() + i * dx / nbX;
- for ( int j = 0; j <= nbY; ++j )
- {
- p.Y() = pmin.Y() + j * dy / nbY;
- for ( int k = 0; k <= nbZ; ++k )
- {
- p.Z() = pmin.Z() + k * dz / nbZ;
- ngMesh->RestrictLocalH( p, maxh );
- }
- }
- }
- }
-}
+// namespace
+// {
+// void limitSize( netgen::Mesh* ngMesh,
+// const double maxh )
+// {
+// // get bnd box
+// netgen::Point3d pmin, pmax;
+// ngMesh->GetBox( pmin, pmax, 0 );
+// const double dx = pmax.X() - pmin.X();
+// const double dy = pmax.Y() - pmin.Y();
+// const double dz = pmax.Z() - pmin.Z();
+
+// const int nbX = Max( 2, int( dx / maxh * 3 ));
+// const int nbY = Max( 2, int( dy / maxh * 3 ));
+// const int nbZ = Max( 2, int( dz / maxh * 3 ));
+
+// if ( ! & ngMesh->LocalHFunction() )
+// ngMesh->SetLocalH( pmin, pmax, 0.1 );
+
+// netgen::Point3d p;
+// for ( int i = 0; i <= nbX; ++i )
+// {
+// p.X() = pmin.X() + i * dx / nbX;
+// for ( int j = 0; j <= nbY; ++j )
+// {
+// p.Y() = pmin.Y() + j * dy / nbY;
+// for ( int k = 0; k <= nbZ; ++k )
+// {
+// p.Z() = pmin.Z() + k * dz / nbZ;
+// ngMesh->RestrictLocalH( p, maxh );
+// }
+// }
+// }
+// }
+// }
//=============================================================================
/*!
netgen::mparam.minh = aMesher.GetDefaultMinSize( aShape, netgen::mparam.maxh );
}
// set local size depending on curvature and NOT closeness of EDGEs
+#ifdef NETGEN_V6
+ const double factor = *netgen::mparam.closeedgefac;
+ netgen::mparam.closeedgefac = std::nullopt;
+#else
+ const double factor = netgen::occparam.resthcloseedgefac;
netgen::occparam.resthcloseedgeenable = false;
//netgen::occparam.resthcloseedgefac = 1.0 + netgen::mparam.grading;
+#endif
occgeoComm.face_maxh = netgen::mparam.maxh;
netgen::OCCSetLocalMeshSize( occgeoComm, *ngMeshes[0] );
occgeoComm.emap.Clear();
occgeoComm.vmap.Clear();
// set local size according to size of existing segments
- const double factor = netgen::occparam.resthcloseedgefac;
TopTools_IndexedMapOfShape edgeMap;
TopExp::MapShapes( aMesh.GetShapeToMesh(), TopAbs_EDGE, edgeMap );
for ( int iE = 1; iE <= edgeMap.Extent(); ++iE )
{
const TopoDS_Shape& edge = edgeMap( iE );
- if ( SMESH_Algo::isDegenerated( TopoDS::Edge( edge ))/* ||
- helper.IsSubShape( edge, aShape )*/)
+ if ( SMESH_Algo::isDegenerated( TopoDS::Edge( edge )))
continue;
SMESHDS_SubMesh* smDS = meshDS->MeshElements( edge );
if ( !smDS ) continue;
ngMeshes[0]->RestrictLocalH( pi, factor * ( n1 - n2 ).Modulus() );
}
}
+
+ // set local size defined on shapes
+ aMesher.SetLocalSize( occgeoComm, *ngMeshes[0] );
+ aMesher.SetLocalSizeForChordalError( occgeoComm, *ngMeshes[0] );
+ try {
+ ngMeshes[0]->LoadLocalMeshSize( mparam.meshsizefilename );
+ } catch (NgException & ex) {
+ return error( COMPERR_BAD_PARMETERS, ex.What() );
+ }
}
netgen::mparam.uselocalh = toOptimize; // restore as it is used at surface optimization
// get all EDGEs of a FACE
// ------------------------
TSideVector wires =
- StdMeshers_FaceSide::GetFaceWires( F, aMesh, ignoreMediumNodes, faceErr, proxyMesh );
+ StdMeshers_FaceSide::GetFaceWires( F, aMesh, ignoreMediumNodes, faceErr, &helper, proxyMesh );
if ( faceErr && !faceErr->IsOK() )
continue;
int nbWires = wires.size();
Box<3> bb = occgeom.GetBoundingBox();
bb.Increase (bb.Diam()/10);
ngMesh->SetLocalH (bb.PMin(), bb.PMax(), mparam.grading);
+ aMesher.SetLocalSize( occgeom, *ngMesh );
+ aMesher.SetLocalSizeForChordalError( occgeoComm, *ngMesh );
+ try {
+ ngMesh->LoadLocalMeshSize( mparam.meshsizefilename );
+ } catch (NgException & ex) {
+ return error( COMPERR_BAD_PARMETERS, ex.What() );
+ }
}
nodeVec.clear();
try {
OCC_CATCH_SIGNALS;
-#ifdef NETGEN_V5
- err = netgen::OCCGenerateMesh(occgeom, ngMesh, netgen::mparam, startWith, endWith);
-#else
- char *optstr = 0;
- err = netgen::OCCGenerateMesh(occgeom, ngMesh, startWith, endWith, optstr);
-#endif
+ err = ngLib.GenerateMesh(occgeom, startWith, endWith, ngMesh);
+
if ( netgen::multithread.terminate )
return false;
if ( err )
}
if ( j > elem.GetNP() )
{
- SMDS_MeshFace* face = 0;
if ( elem.GetType() == TRIG )
- face = helper.AddFace(nodes[0],nodes[1],nodes[2]);
+ helper.AddFace(nodes[0],nodes[1],nodes[2]);
else
- face = helper.AddFace(nodes[0],nodes[1],nodes[2],nodes[3]);
+ helper.AddFace(nodes[0],nodes[1],nodes[2],nodes[3]);
}
}