From 85ce2501861082c42cc409453164d4f600e13107 Mon Sep 17 00:00:00 2001 From: dmv Date: Fri, 20 Feb 2009 11:39:09 +0000 Subject: [PATCH] 0020168: EDF SMESH 953: uncomplete selection with filter 'belong on geom' --- src/Controls/SMESH_Controls.cxx | 11 +++++++++++ 1 file changed, 11 insertions(+) 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()); } -- 2.39.2