Salome HOME
52609: Geometric progression works wrong with "Reversed edges" option used + Propagation
[modules/smesh.git] / src / Controls / SMESH_Controls.cxx
index 9cfbc313ea2de35b00092cfce6a22dfdcc5972cd..42c668044def6d2b04df05bb2536ab948c218c0e 100644 (file)
@@ -4087,39 +4087,39 @@ bool ElementsOnShape::IsSatisfy (long elemId)
   if ( !elem || myClassifiers.empty() )
     return false;
 
-  for ( size_t i = 0; i < myClassifiers.size(); ++i )
+  bool isSatisfy = myAllNodesFlag, isNodeOut;
+
+  gp_XYZ centerXYZ (0, 0, 0);
+
+  SMDS_ElemIteratorPtr aNodeItr = elem->nodesIterator();
+  while (aNodeItr->more() && (isSatisfy == myAllNodesFlag))
   {
-    SMDS_ElemIteratorPtr aNodeItr = elem->nodesIterator();
-    bool isSatisfy = myAllNodesFlag, isNodeOut;
-    
-    gp_XYZ centerXYZ (0, 0, 0);
+    SMESH_TNodeXYZ aPnt( aNodeItr->next() );
+    centerXYZ += aPnt;
 
-    while (aNodeItr->more() && (isSatisfy == myAllNodesFlag))
+    isNodeOut = true;
+    if ( !getNodeIsOut( aPnt._node, isNodeOut ))
     {
-      const SMDS_MeshNode* n = (const SMDS_MeshNode*) aNodeItr->next();
-      if ( !getNodeIsOut( n, isNodeOut ))
-      {
-        SMESH_TNodeXYZ aPnt( n );
-        centerXYZ += aPnt;
+      for ( size_t i = 0; i < myClassifiers.size() && isNodeOut; ++i )
         isNodeOut = myClassifiers[i]->IsOut( aPnt );
-        setNodeIsOut( n, isNodeOut );
-      }
-      isSatisfy = !isNodeOut;
+
+      setNodeIsOut( aPnt._node, isNodeOut );
     }
+    isSatisfy = !isNodeOut;
+  }
 
-    // Check the center point for volumes MantisBug 0020168
-    if (isSatisfy &&
-        myAllNodesFlag &&
-        myClassifiers[i]->ShapeType() == TopAbs_SOLID)
-    {
-      centerXYZ /= elem->NbNodes();
+  // Check the center point for volumes MantisBug 0020168
+  if (isSatisfy &&
+      myAllNodesFlag &&
+      myClassifiers[0]->ShapeType() == TopAbs_SOLID)
+  {
+    centerXYZ /= elem->NbNodes();
+    isSatisfy = false;
+    for ( size_t i = 0; i < myClassifiers.size() && !isSatisfy; ++i )
       isSatisfy = ! myClassifiers[i]->IsOut( centerXYZ );
-    }
-    if ( isSatisfy )
-      return true;
   }
 
-  return false;
+  return isSatisfy;
 }
 
 TopAbs_ShapeEnum ElementsOnShape::TClassifier::ShapeType() const