+//=======================================================================
+//function : GetIDs
+//purpose : Returns ids of members
+//=======================================================================
+
+SMESH::long_array* SMESH_GroupOnFilter_i::GetListOfID()
+{
+ if ( myPreMeshInfo )
+ myPreMeshInfo->FullLoadFromFile();
+
+ SMESH::long_array_var aRes = new SMESH::long_array();
+ SMESHDS_GroupBase* aGroupDS = GetGroupDS();
+ if ( SMESHDS_GroupOnFilter* grDS = dynamic_cast< SMESHDS_GroupOnFilter*>( GetGroupDS() ))
+ {
+ const SMDS_MeshInfo& meshInfo = aGroupDS->GetMesh()->GetMeshInfo();
+ aRes->length( meshInfo.NbElements( aGroupDS->GetType() ));
+ if ( aRes->length() ) // else aRes[0] -> SIGSEGV
+ aRes->length( grDS->GetElementIds( &aRes[0] ));
+
+ if ( 0 < aRes->length() && aRes->length() < 100 ) // for comfortable testing ;)
+ std::sort( &aRes[0], &aRes[0] + aRes->length() );
+ }
+ MESSAGE("get list of IDs of a vague group");
+ return aRes._retn();
+}
+
+//=============================================================================
+/*!
+ * Returns statistic of mesh elements
+ * Result array of number enityties
+ * Inherited from SMESH_IDSource
+ */
+//=============================================================================
+
+SMESH::long_array* SMESH_GroupOnFilter_i::GetMeshInfo()
+{
+ if ( myPreMeshInfo )
+ return myPreMeshInfo->GetMeshInfo();
+
+ SMESH::long_array_var aRes = new SMESH::long_array();
+ aRes->length(SMESH::Entity_Last);
+ for (int i = SMESH::Entity_Node; i < SMESH::Entity_Last; i++)
+ aRes[i] = 0;
+
+ if ( SMESHDS_GroupBase* g = GetGroupDS())
+ {
+ if ( g->GetType() == SMDSAbs_Node || ( myNbNodes > -1 && g->GetTic() == myGroupDSTic))
+ aRes[ SMDSEntity_Node ] = GetNumberOfNodes();
+
+ if ( g->GetType() != SMDSAbs_Node )
+ {
+ vector< int > nbElems = static_cast< SMESHDS_GroupOnFilter* >( g )->GetMeshInfo();
+ for ( size_t i = SMESH::Entity_Node; i < SMESH::Entity_Last; i++)
+ if ( i < nbElems.size() )
+ aRes[i] = nbElems[ i ];
+ }
+ }
+
+ return aRes._retn();
+}
+