Salome HOME
0020168: EDF SMESH 953: uncomplete selection with filter 'belong on geom'
authordmv <dmv@opencascade.com>
Fri, 20 Feb 2009 11:40:28 +0000 (11:40 +0000)
committerdmv <dmv@opencascade.com>
Fri, 20 Feb 2009 11:40:28 +0000 (11:40 +0000)
src/Controls/SMESH_Controls.cxx

index aeb348b05e80ba3c41179098da7d194e01208b50..932a2473b260a949f0a554409ebc0e5a9f66a978 100644 (file)
@@ -2882,10 +2882,13 @@ void ElementsOnShape::process (const SMDS_MeshElement* theElemPtr)
   SMDS_ElemIteratorPtr aNodeItr = theElemPtr->nodesIterator();
   bool isSatisfy = myAllNodesFlag;
 
+  gp_XYZ centerXYZ (0, 0, 0);
+
   while (aNodeItr->more() && (isSatisfy == myAllNodesFlag))
   {
     SMDS_MeshNode* aNode = (SMDS_MeshNode*)aNodeItr->next();
     gp_Pnt aPnt (aNode->X(), aNode->Y(), aNode->Z());
+    centerXYZ += aPnt.XYZ();
 
     switch (myCurShapeType)
     {
@@ -2928,6 +2931,14 @@ void ElementsOnShape::process (const SMDS_MeshElement* theElemPtr)
     }
   }
 
+  if (isSatisfy && myCurShapeType == TopAbs_SOLID) { // Check the center point for volumes MantisBug 0020168
+    centerXYZ /= theElemPtr->NbNodes();
+    gp_Pnt aCenterPnt (centerXYZ);
+    myCurSC.Perform(aCenterPnt, myToler);
+    if ( !(myCurSC.State() == TopAbs_IN || myCurSC.State() == TopAbs_ON))
+      isSatisfy = false;
+  }
+
   if (isSatisfy)
     myIds.Add(theElemPtr->GetID());
 }