]> SALOME platform Git repositories - plugins/gmshplugin.git/commitdiff
Salome HOME
Fix double nodes
authoreap <eap@opencascade.com>
Mon, 6 Jun 2022 11:44:04 +0000 (14:44 +0300)
committereap <eap@opencascade.com>
Mon, 6 Jun 2022 11:44:04 +0000 (14:44 +0300)
src/GMSHPlugin/GMSHPlugin_Mesher.cxx

index 336816386c6e751176dc9e403c01bb5ce66a5051..0222b03e840ca6d182d016faeee2670c2cfd9191 100644 (file)
@@ -486,8 +486,14 @@ const SMDS_MeshNode* GMSHPlugin_Mesher::Node( const MVertex* v, bool checkMap )
 
 SMESHDS_SubMesh* GMSHPlugin_Mesher::HasSubMesh( const TopoDS_Shape& s )
 {
-  SMESHDS_SubMesh*  sm = _mesh->GetMeshDS()->MeshElements( s );
-  return ( sm && sm->NbElements() > 0 ) ? sm : nullptr;
+  if ( SMESHDS_SubMesh*  sm = _mesh->GetMeshDS()->MeshElements( s ))
+  {
+    if ( s.ShapeType() == TopAbs_VERTEX )
+      return ( sm->NbNodes() > 0 ) ? sm : nullptr;
+    else
+      return ( sm->NbElements() > 0 ) ? sm : nullptr;
+  }
+  return nullptr;
 }
 
 //================================================================================
@@ -514,6 +520,8 @@ void GMSHPlugin_Mesher::FillSMesh()
       sm->SetIsAlwaysComputed(true); // prevent from displaying errors
       continue;
     }
+    if ( HasSubMesh( topoVertex ))
+      continue; // a meshed sub-mesh
 
     // FILL SMESH FOR topoVertex
     //nodes
@@ -673,6 +681,8 @@ void GMSHPlugin_Mesher::FillSMesh()
         sm->SetIsAlwaysComputed(true); // prevent from displaying errors
         continue;
       }
+      if ( HasSubMesh( topoFace ))
+        continue; // a meshed sub-mesh
     }
     bool isCompound = getBoundsOfShapes( gFace, topoFaces );
 
@@ -716,13 +726,16 @@ void GMSHPlugin_Mesher::FillSMesh()
     else
       topoFace = *((TopoDS_Face*)gFace->getNativePtr());
 
+    if ( HasSubMesh( topoFace ))
+      continue; // a meshed sub-mesh
+
     // check if there is a meshed sub-mesh on FACE boundary
     bool hasSubMesh = false;
     for ( TopExp_Explorer edgeIt( topoFace, TopAbs_EDGE ); edgeIt.More(); edgeIt.Next() )
     {
       if (( hasSubMesh = HasSubMesh( edgeIt.Current() )))
         break;
-    }      
+    }
 
     //elements
     std::vector<MVertex*> verts;