PAL10196. Rename GetGroupNames() -> GetGroupNamesAndTypes(), add checkFamilyId()

This commit is contained in:
eap 2005-10-18 12:47:00 +00:00
parent c278e57c77
commit d7407cdcae
2 changed files with 50 additions and 18 deletions

View File

@ -184,6 +184,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
if(MYDEBUG) MESSAGE(aGroupName);
aFamily->AddGroupName(aGroupName);
}
aFamily->SetId( aFamId );
myFamilies[aFamId] = aFamily;
}
}
@ -231,6 +232,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
EBooleen anIsNodeNum = aNodeInfo->IsElemNum();
TInt aNbElems = aNodeInfo->GetNbElem();
if(MYDEBUG) MESSAGE("Perform - aNodeInfo->GetNbElem() = "<<aNbElems<<"; anIsNodeNum = "<<anIsNodeNum);
DriverMED_FamilyPtr aFamily = myFamilies.begin()->second;
for(TInt iElem = 0; iElem < aNbElems; iElem++){
double aCoords[3] = {0.0, 0.0, 0.0};
for(TInt iDim = 0; iDim < 3; iDim++)
@ -247,10 +249,10 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
// Save reference to this node from its family
TInt aFamNum = aNodeInfo->GetFamNum(iElem);
if (myFamilies.find(aFamNum) != myFamilies.end())
if ( checkFamilyID ( aFamily, aFamNum ))
{
myFamilies[aFamNum]->AddElement(aNode);
myFamilies[aFamNum]->SetType(SMDSAbs_Node);
aFamily->AddElement(aNode);
aFamily->SetType(SMDSAbs_Node);
}
}
@ -343,6 +345,8 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
SMDS_MeshElement* anElement = NULL;
TInt aFamNum = aCellInfo->GetFamNum(iElem);
try{
//MESSAGE("Try to create element # " << iElem << " with id = "
// << aCellInfo->GetElemNum(iElem));
switch(aGeom){
case eSEG2:
case eSEG3:
@ -491,10 +495,11 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
if (aResult < DRS_WARN_RENUMBER)
aResult = DRS_WARN_RENUMBER;
}
if (myFamilies.find(aFamNum) != myFamilies.end()) {
if ( checkFamilyID ( aFamily, aFamNum ))
{
// Save reference to this element from its family
myFamilies[aFamNum]->AddElement(anElement);
myFamilies[aFamNum]->SetType(anElement->GetType());
aFamily->AddElement(anElement);
aFamily->SetType(anElement->GetType());
}
}
}
@ -542,25 +547,24 @@ list<string> DriverMED_R_SMESHDS_Mesh::GetMeshNames(Status& theStatus)
return aMeshNames;
}
list<string> DriverMED_R_SMESHDS_Mesh::GetGroupNames()
list<TNameAndType> DriverMED_R_SMESHDS_Mesh::GetGroupNamesAndTypes()
{
list<string> aResult;
set<string> aResGroupNames;
list<TNameAndType> aResult;
set<TNameAndType> aResGroupNames;
map<int, DriverMED_FamilyPtr>::iterator aFamsIter = myFamilies.begin();
for (; aFamsIter != myFamilies.end(); aFamsIter++)
{
DriverMED_FamilyPtr aFamily = (*aFamsIter).second;
const MED::TStringSet& aGroupNames = aFamily->GetGroupNames();
set<string>::iterator aGrNamesIter = aGroupNames.begin();
set<string>::const_iterator aGrNamesIter = aGroupNames.begin();
for (; aGrNamesIter != aGroupNames.end(); aGrNamesIter++)
{
string aName = *aGrNamesIter;
TNameAndType aNameAndType = make_pair( *aGrNamesIter, aFamily->GetType() );
// Check, if this is a Group or SubMesh name
//if (aName.substr(0, 5) == string("Group")) {
if (aResGroupNames.find(aName) == aResGroupNames.end()) {
aResGroupNames.insert(aName);
aResult.push_back(aName);
if ( aResGroupNames.insert( aNameAndType ).second ) {
aResult.push_back( aNameAndType );
}
// }
}
@ -578,10 +582,10 @@ void DriverMED_R_SMESHDS_Mesh::GetGroup(SMESHDS_Group* theGroup)
for (; aFamsIter != myFamilies.end(); aFamsIter++)
{
DriverMED_FamilyPtr aFamily = (*aFamsIter).second;
if (aFamily->MemberOf(aGroupName))
if (aFamily->GetType() == theGroup->GetType() && aFamily->MemberOf(aGroupName))
{
const set<const SMDS_MeshElement *>& anElements = aFamily->GetElements();
set<const SMDS_MeshElement *>::iterator anElemsIter = anElements.begin();
set<const SMDS_MeshElement *>::const_iterator anElemsIter = anElements.begin();
const SMDS_MeshElement * element = 0;
for (; anElemsIter != anElements.end(); anElemsIter++)
{
@ -607,7 +611,7 @@ void DriverMED_R_SMESHDS_Mesh::GetSubMesh (SMESHDS_SubMesh* theSubMesh,
if (aFamily->MemberOf(aName))
{
const set<const SMDS_MeshElement *>& anElements = aFamily->GetElements();
set<const SMDS_MeshElement *>::iterator anElemsIter = anElements.begin();
set<const SMDS_MeshElement *>::const_iterator anElemsIter = anElements.begin();
if (aFamily->GetType() == SMDSAbs_Node)
{
for (; anElemsIter != anElements.end(); anElemsIter++)
@ -676,3 +680,20 @@ void DriverMED_R_SMESHDS_Mesh::CreateAllSubMeshes ()
}
}
}
/*!
* \brief Ensure aFamily to have required ID
* \param aFamily - a family to check and update
* \param anID - an ID aFamily should have
* \retval bool - true if successful
*/
bool DriverMED_R_SMESHDS_Mesh::checkFamilyID(DriverMED_FamilyPtr & aFamily, int anID) const
{
if ( !aFamily || aFamily->GetId() != anID ) {
map<int, DriverMED_FamilyPtr>::const_iterator i_fam = myFamilies.find(anID);
if ( i_fam == myFamilies.end() )
return false;
aFamily = i_fam->second;
}
return ( aFamily->GetId() == anID );
}

View File

@ -36,12 +36,14 @@ class SMESHDS_Mesh;
class SMESHDS_Group;
class SMESHDS_SubMesh;
typedef std::pair< std::string, SMDSAbs_ElementType > TNameAndType;
class DriverMED_R_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
{
public:
virtual Status Perform();
std::list<std::string> GetGroupNames();
std::list< TNameAndType > GetGroupNamesAndTypes();
void GetGroup(SMESHDS_Group* theGroup);
void CreateAllSubMeshes();
void GetSubMesh(SMESHDS_SubMesh* theSubMesh, const int theId);
@ -49,6 +51,15 @@ class DriverMED_R_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
std::list<std::string> GetMeshNames(Status& theStatus);
void SetMeshName(std::string theMeshName);
private:
/*!
* \brief Ensure aFamily has required ID
* \param aFamily - a family to check
* \param anID - an ID aFamily should have
* \retval bool - true if successful
*/
bool checkFamilyID(DriverMED_FamilyPtr & aFamily, int anID) const;
private:
std::string myMeshName;
std::map<int, DriverMED_FamilyPtr> myFamilies;