]> SALOME platform Git repositories - plugins/netgenplugin.git/commitdiff
Salome HOME
0021405: EDF 1965 SMESH:
authoreap <eap@opencascade.com>
Tue, 1 Nov 2011 10:25:17 +0000 (10:25 +0000)
committereap <eap@opencascade.com>
Tue, 1 Nov 2011 10:25:17 +0000 (10:25 +0000)
  In fillNgMesh(), add a node on VERTEX only if a VERTEX is shared by a not meshed EDGE

src/NETGENPlugin/NETGENPlugin_Mesher.cxx

index a7a1cb76fa6189f22225d0a22469c3cf4573d705..325b3c7370ec5bec3c1edec16ff5c62d948fcf92 100644 (file)
@@ -860,9 +860,23 @@ bool NETGENPlugin_Mesher::fillNgMesh(const netgen::OCCGeometry&     occgeom,
 
     case TopAbs_VERTEX: { // VERTEX
       // --------------------------
-      SMDS_NodeIteratorPtr nodeIt = smDS->GetNodes();
-      if ( nodeIt->more() )
-        ngNodeId( nodeIt->next(), ngMesh, nodeNgIdMap );
+      // issue 21405. Add node only if a VERTEX is shared by a not meshed EDGE,
+      // else netgen removes a free node and nodeVector becomes invalid
+      PShapeIteratorPtr ansIt = helper.GetAncestors( sm->GetSubShape(),
+                                                     *sm->GetFather(),
+                                                     TopAbs_EDGE );
+      bool toAdd = false;
+      while ( const TopoDS_Shape* e = ansIt->next() )
+      {
+        SMESH_subMesh* eSub = helper.GetMesh()->GetSubMesh( *e );
+        if (( toAdd = eSub->IsEmpty() )) break;
+      }
+      if ( toAdd )
+      {
+        SMDS_NodeIteratorPtr nodeIt = smDS->GetNodes();
+        if ( nodeIt->more() )
+          ngNodeId( nodeIt->next(), ngMesh, nodeNgIdMap );
+      }
       break;
     }
     default:;