From: dmv Date: Fri, 20 Feb 2009 11:39:09 +0000 (+0000) Subject: 0020168: EDF SMESH 953: uncomplete selection with filter 'belong on geom' X-Git-Tag: V5_1_1a1~2 X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=commitdiff_plain;h=85ce2501861082c42cc409453164d4f600e13107 0020168: EDF SMESH 953: uncomplete selection with filter 'belong on geom' --- diff --git a/src/Controls/SMESH_Controls.cxx b/src/Controls/SMESH_Controls.cxx index 8ba13a8f1..d00783422 100644 --- a/src/Controls/SMESH_Controls.cxx +++ b/src/Controls/SMESH_Controls.cxx @@ -3190,10 +3190,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) { @@ -3236,6 +3239,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()); }