+//================================================================================
+/*!
+ * \brief Finds shapes preferable over _shape due to sub-mesh order
+ */
+//================================================================================
+
+void SMESH_HypoFilter::IsMoreLocalThanPredicate::findPreferable()
+{
+ const int shapeID = _mesh.GetMeshDS()->ShapeToIndex( _shape );
+ const TListOfListOfInt& listOfShapeIDList = _mesh.GetMeshOrder();
+ TListOfListOfInt::const_iterator listsIt = listOfShapeIDList.begin();
+ for ( ; listsIt != listOfShapeIDList.end(); ++listsIt )
+ {
+ const TListOfInt& idList = *listsIt;
+ TListOfInt::const_iterator idIt =
+ std::find( idList.begin(), idList.end(), shapeID );
+ if ( idIt != idList.end() && *idIt != idList.front() )
+ {
+ for ( --idIt; true; --idIt )
+ {
+ const TopoDS_Shape& shape = _mesh.GetMeshDS()->IndexToShape( *idIt );
+ if ( !shape.IsNull())
+ _preferableShapes.Add( shape );
+
+ if ( idIt == idList.begin() )
+ break;
+ }
+ }
+ }
+}
+