]> SALOME platform Git repositories - modules/smesh.git/commitdiff
Salome HOME
SALOME Forum bug: http://www.salome-platform.org/forum/forum_10/967838025
authoreap <eap@opencascade.com>
Fri, 23 Aug 2013 16:22:51 +0000 (16:22 +0000)
committereap <eap@opencascade.com>
Fri, 23 Aug 2013 16:22:51 +0000 (16:22 +0000)
Do not report a compute error if a degenerated EDGE is not computed

src/SMESH/SMESH_Gen.cxx

index d515351393d12d2ad617c0f2e3be0162697c2e38..f5a0deab031cebd7478409d2bbc22cd1580c5ee5 100644 (file)
@@ -43,6 +43,7 @@
 #include "Utils_ExceptHandlers.hxx"
 
 #include <TopoDS_Iterator.hxx>
+#include <TopoDS.hxx>
 
 #include "memoire.h"
 
@@ -65,7 +66,7 @@ SMESH_Gen::SMESH_Gen()
 {
   MESSAGE("SMESH_Gen::SMESH_Gen");
   _localId = 0;
-  _hypId = 0;
+  _hypId   = 0;
   _segmentation = _nbSegments = 10;
   SMDS_Mesh::_meshList.clear();
   MESSAGE(SMDS_Mesh::_meshList.size());
@@ -163,12 +164,13 @@ bool SMESH_Gen::Compute(SMESH_Mesh &          aMesh,
       SMESH_subMesh* smToCompute = smIt->next();
 
       // do not mesh vertices of a pseudo shape
-      const TopAbs_ShapeEnum aShType = smToCompute->GetSubShape().ShapeType();
-      if ( !aMesh.HasShapeToMesh() && aShType == TopAbs_VERTEX )
+      const TopoDS_Shape&        shape = smToCompute->GetSubShape();
+      const TopAbs_ShapeEnum shapeType = shape.ShapeType();
+      if ( !aMesh.HasShapeToMesh() && shapeType == TopAbs_VERTEX )
         continue;
 
       // check for preview dimension limitations
-      if ( aShapesId && GetShapeDim( aShType ) > (int)aDim )
+      if ( aShapesId && GetShapeDim( shapeType ) > (int)aDim )
       {
         // clear compute state not to show previous compute errors
         //  if preview invoked less dimension less than previous
@@ -185,8 +187,9 @@ bool SMESH_Gen::Compute(SMESH_Mesh &          aMesh,
         _sm_current = NULL;
       }
 
-      // we check all the submeshes here and detect if any of them failed to compute
-      if (smToCompute->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE)
+      // we check all the sub-meshes here and detect if any of them failed to compute
+      if (smToCompute->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE &&
+          ( shapeType != TopAbs_EDGE || !SMESH_Algo::isDegenerated( TopoDS::Edge( shape ))))
         ret = false;
       else if ( aShapesId )
         aShapesId->insert( smToCompute->GetId() );
@@ -346,9 +349,9 @@ bool SMESH_Gen::Compute(SMESH_Mesh &          aMesh,
         sm = *subIt;
         if ( sm->GetComputeState() == SMESH_subMesh::READY_TO_COMPUTE)
         {
-          const TopAbs_ShapeEnum aShType = sm->GetSubShape().ShapeType();
+          const TopAbs_ShapeEnum shapeType = sm->GetSubShape().ShapeType();
           // check for preview dimension limitations
-          if ( aShapesId && GetShapeDim( aShType ) > (int)aDim )
+          if ( aShapesId && GetShapeDim( shapeType ) > (int)aDim )
             continue;
 
           if (_compute_canceled)
@@ -449,12 +452,12 @@ bool SMESH_Gen::Evaluate(SMESH_Mesh &          aMesh,
       SMESH_subMesh* smToCompute = smIt->next();
 
       // do not mesh vertices of a pseudo shape
-      const TopAbs_ShapeEnum aShType = smToCompute->GetSubShape().ShapeType();
-      //if ( !aMesh.HasShapeToMesh() && aShType == TopAbs_VERTEX )
+      const TopAbs_ShapeEnum shapeType = smToCompute->GetSubShape().ShapeType();
+      //if ( !aMesh.HasShapeToMesh() && shapeType == TopAbs_VERTEX )
       //  continue;
       if ( !aMesh.HasShapeToMesh() ) {
-        if( aShType == TopAbs_VERTEX || aShType == TopAbs_WIRE ||
-            aShType == TopAbs_SHELL )
+        if( shapeType == TopAbs_VERTEX || shapeType == TopAbs_WIRE ||
+            shapeType == TopAbs_SHELL )
           continue;
       }
 
@@ -521,8 +524,6 @@ bool SMESH_Gen::Evaluate(SMESH_Mesh &          aMesh,
         const int aShapeDim = GetShapeDim( aSubShape );
         if ( aShapeDim < 1 ) continue;
 
-        //const TopAbs_ShapeEnum aShType = smToCompute->GetSubShape().ShapeType();
-
         SMESH_HypoFilter filter( SMESH_HypoFilter::IsAlgo() );
         filter
           .And( SMESH_HypoFilter::IsApplicableTo( aSubShape ))