Fix for PAL7758(Incorrect work of "Lying on Geom" filter for faces).

LyingOnGeom::Contains(...) improved.
This commit is contained in:
mzn 2005-01-20 11:50:07 +00:00
parent 090aff0726
commit 3fa31cc01e

View File

@ -268,28 +268,17 @@ bool Controls::LyingOnGeom::Contains( SMESHDS_Mesh* theMeshDS,
if (IsContains(theMeshDS, theShape, theElem, theFindShapeEnum, theAvoidShapeEnum)) if (IsContains(theMeshDS, theShape, theElem, theFindShapeEnum, theAvoidShapeEnum))
return true; return true;
if ( SMESHDS_SubMesh* aSubMesh = theMeshDS->MeshElements( theShape ) ) TopTools_IndexedMapOfShape aSubShapes;
{ TopExp::MapShapes( theShape, aSubShapes );
SMDS_NodeIteratorPtr aNodeIt = aSubMesh->GetNodes();
while ( aNodeIt->more() )
{
const SMDS_MeshNode* aNode = static_cast<const SMDS_MeshNode*>(aNodeIt->next());
SMDS_ElemIteratorPtr anElemIt = aNode->GetInverseElementIterator();
while ( anElemIt->more() )
{
const SMDS_MeshElement* anElement = static_cast<const SMDS_MeshElement*>(anElemIt->next());
if (anElement == theElem)
return true;
}
}
}
TopExp_Explorer anExp( theShape,TopAbs_VERTEX,theAvoidShapeEnum ); for (int i = 1; i <= aSubShapes.Extent(); i++)
while( anExp.More() )
{ {
const TopoDS_Shape& aShape = anExp.Current(); const TopoDS_Shape& aShape = aSubShapes.FindKey(i);
if( SMESHDS_SubMesh* aSubMesh = theMeshDS->MeshElements( aShape ) ){ if( SMESHDS_SubMesh* aSubMesh = theMeshDS->MeshElements( aShape ) ){
if( aSubMesh->Contains( theElem ) )
return true;
SMDS_NodeIteratorPtr aNodeIt = aSubMesh->GetNodes(); SMDS_NodeIteratorPtr aNodeIt = aSubMesh->GetNodes();
while ( aNodeIt->more() ) while ( aNodeIt->more() )
{ {
@ -303,7 +292,6 @@ bool Controls::LyingOnGeom::Contains( SMESHDS_Mesh* theMeshDS,
} }
} }
} }
anExp.Next();
} }
return false; return false;
} }