Salome HOME
Protect from a distorted block (test 3D_mesh_HEXA3D/B7 on 32bit platform)
authoreap <eap@opencascade.com>
Mon, 7 Feb 2011 12:23:57 +0000 (12:23 +0000)
committereap <eap@opencascade.com>
Mon, 7 Feb 2011 12:23:57 +0000 (12:23 +0000)
src/StdMeshers/StdMeshers_Prism_3D.cxx

index 8a5efd7171f0e43e9ca3fdd45e9bb33bae21d0fd..8998a294986d56db759ef0af39a559e399e594e7 100644 (file)
@@ -1329,6 +1329,17 @@ bool StdMeshers_PrismAsBlock::Init(SMESH_MesherHelper* helper,
   if ( !GetWallFaces( Mesh(), shape3D, botSM->GetSubShape(), orderedEdges, nbEInW, wallFaces))
     return error(COMPERR_BAD_SHAPE, "Can't find side faces");
 
+  // Protect from a distorted block (test 3D_mesh_HEXA3D/B7 on 32bit platform)
+  // check that all wall faces have an edge common with the top face
+  {
+    list< TopoDS_Face >::iterator faceIt = wallFaces.begin();
+    for ( ; faceIt != wallFaces.end(); ++faceIt )
+      for (TopExp_Explorer edge(*faceIt, TopAbs_EDGE); edge.More(); edge.Next()) {
+        if ( !helper->IsSubShape( edge.Current(), topSM->GetSubShape() ))
+          return error(COMPERR_BAD_SHAPE);
+      }
+  }
+
   // Find columns of wall nodes and calculate edges' lengths
   // --------------------------------------------------------