+ return myMeshInfo;
+}
+
+//================================================================================
+/*!
+ * \brief Fill ids of elements. And return their number.
+ * \a ids must be pre-allocated using nb of elements of type == GetType()
+ */
+//================================================================================
+
+int SMESHDS_GroupOnFilter::getElementIds( void* ids, size_t idSize ) const
+{
+ SMESHDS_GroupOnFilter* me = const_cast<SMESHDS_GroupOnFilter*>( this );
+
+ char* curID = (char*) ids;
+ SMDS_ElemIteratorPtr elIt = GetElements();
+ if ( elIt->more() )
+ {
+ if ( IsUpToDate() )
+ {
+ for ( ; elIt->more(); curID += idSize )
+ (*(int*) curID) = elIt->next()->GetID();
+ }
+ else
+ {
+ me->setChanged();
+
+ // find out nb of elements to skip w/o check before the 1st OK element
+ const SMDS_MeshElement* firstOkElem = me->setNbElemToSkip( elIt );
+
+ me->myMeshInfo.assign( SMDSEntity_Last, 0 );
+ me->myMeshInfo[ firstOkElem->GetEntityType() ]++;
+
+ (*(int*) curID) = firstOkElem->GetID();
+ for ( curID += idSize; elIt->more(); curID += idSize )
+ {
+ const SMDS_MeshElement* e = elIt->next();
+ (*(int*) curID) = e->GetID();
+ me->myMeshInfo[ e->GetEntityType() ]++;
+ }
+ }
+ }
+ me->setChanged( false );
+
+ return ( curID - (char*)ids ) / idSize;