0020028: EDF 842 SMESH : Can't export to med a mesh with same names

for one group of nodes and one group of faces

avoid duplicated group names within one type of elements only
This commit is contained in:
eap 2009-12-25 11:22:10 +00:00
parent 72982ad122
commit 163dc9b8fd

View File

@ -1029,12 +1029,15 @@ bool SMESH_Mesh::GetAutoColor() throw(SALOME_Exception)
bool SMESH_Mesh::HasDuplicatedGroupNamesMED() bool SMESH_Mesh::HasDuplicatedGroupNamesMED()
{ {
set<string> aGroupNames; //set<string> aGroupNames; // Corrected for Mantis issue 0020028
for ( map<int, SMESH_Group*>::iterator it = _mapGroup.begin(); it != _mapGroup.end(); it++ ) { map< SMDSAbs_ElementType, set<string> > aGroupNames;
for ( map<int, SMESH_Group*>::iterator it = _mapGroup.begin(); it != _mapGroup.end(); it++ )
{
SMESH_Group* aGroup = it->second; SMESH_Group* aGroup = it->second;
SMDSAbs_ElementType aType = aGroup->GetGroupDS()->GetType();
string aGroupName = aGroup->GetName(); string aGroupName = aGroup->GetName();
aGroupName.resize(MAX_MED_GROUP_NAME_LENGTH); aGroupName.resize(MAX_MED_GROUP_NAME_LENGTH);
if (!aGroupNames.insert(aGroupName).second) if (!aGroupNames[aType].insert(aGroupName).second)
return true; return true;
} }
@ -1067,17 +1070,19 @@ void SMESH_Mesh::ExportMED(const char *file,
} }
// Pass groups to writer. Provide unique group names. // Pass groups to writer. Provide unique group names.
set<string> aGroupNames; //set<string> aGroupNames; // Corrected for Mantis issue 0020028
map< SMDSAbs_ElementType, set<string> > aGroupNames;
char aString [256]; char aString [256];
int maxNbIter = 10000; // to guarantee cycle finish int maxNbIter = 10000; // to guarantee cycle finish
for ( map<int, SMESH_Group*>::iterator it = _mapGroup.begin(); it != _mapGroup.end(); it++ ) { for ( map<int, SMESH_Group*>::iterator it = _mapGroup.begin(); it != _mapGroup.end(); it++ ) {
SMESH_Group* aGroup = it->second; SMESH_Group* aGroup = it->second;
SMESHDS_GroupBase* aGroupDS = aGroup->GetGroupDS(); SMESHDS_GroupBase* aGroupDS = aGroup->GetGroupDS();
if ( aGroupDS ) { if ( aGroupDS ) {
SMDSAbs_ElementType aType = aGroupDS->GetType();
string aGroupName0 = aGroup->GetName(); string aGroupName0 = aGroup->GetName();
aGroupName0.resize(MAX_MED_GROUP_NAME_LENGTH); aGroupName0.resize(MAX_MED_GROUP_NAME_LENGTH);
string aGroupName = aGroupName0; string aGroupName = aGroupName0;
for (int i = 1; !aGroupNames.insert(aGroupName).second && i < maxNbIter; i++) { for (int i = 1; !aGroupNames[aType].insert(aGroupName).second && i < maxNbIter; i++) {
sprintf(&aString[0], "GR_%d_%s", i, aGroupName0.c_str()); sprintf(&aString[0], "GR_%d_%s", i, aGroupName0.c_str());
aGroupName = aString; aGroupName = aString;
aGroupName.resize(MAX_MED_GROUP_NAME_LENGTH); aGroupName.resize(MAX_MED_GROUP_NAME_LENGTH);