]> SALOME platform Git repositories - plugins/ghs3dplugin.git/commitdiff
Salome HOME
0020042: EDF 864 SMESH: Mesh of holes (GHS3D/BLSurf)
authoreap <eap@opencascade.com>
Wed, 6 May 2009 16:02:06 +0000 (16:02 +0000)
committereap <eap@opencascade.com>
Wed, 6 May 2009 16:02:06 +0000 (16:02 +0000)
     fix findShapeID() for case of outer shell of solid bounding a hole

src/GHS3DPlugin_GHS3D.cxx

index 195de5cbc0765b68d0109638b14570a6c9741513..d7bf596c4fa378a352d0132ad6855c2bc80fdc55 100644 (file)
@@ -546,11 +546,23 @@ static int findShapeID(SMESH_Mesh&          mesh,
     if ( toMeshHoles )
       return meshDS->ShapeToIndex( solid1 );
 
-    // - are we at a hole boundary face?
+    // - Are we at a hole boundary face?
     if ( shells(1).IsSame( BRepTools::OuterShell( solid1 )) )
-      return meshDS->ShapeToIndex( solid1 ); // - no
+    { // - No, but maybe a hole is bound by two shapes? Does shells(1) touches another shell?
+      bool touch = false;
+      TopExp_Explorer eExp( shells(1), TopAbs_EDGE );
+      // check if any edge of shells(1) belongs to another shell
+      for ( ; eExp.More() && !touch; eExp.Next() ) {
+        ansIt = mesh.GetAncestors( eExp.Current() );
+        for ( ; ansIt.More() && !touch; ansIt.Next() ) {
+          if ( ansIt.Value().ShapeType() == TopAbs_SHELL )
+            touch = ( !ansIt.Value().IsSame( shells(1) ));
+        }
+      }
+      if (!touch)
+        return meshDS->ShapeToIndex( solid1 );
+    }
   }
-
   // find orientation of geom face within the first solid
   TopExp_Explorer fExp( solid1, TopAbs_FACE );
   for ( ; fExp.More(); fExp.Next() )