Salome HOME
PAL10196. Rename GetGroupNames() -> GetGroupNamesAndTypes(), add checkFamilyId()
authoreap <eap@opencascade.com>
Tue, 11 Oct 2005 13:39:02 +0000 (13:39 +0000)
committereap <eap@opencascade.com>
Tue, 11 Oct 2005 13:39:02 +0000 (13:39 +0000)
src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx
src/DriverMED/DriverMED_R_SMESHDS_Mesh.h

index 3777d65..8388327 100644 (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);
           }
         }
 
@@ -337,10 +339,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());
                   }
                 }
               } // for (TInt iPG = 0; iPG < nbPolygons; iPG++)
@@ -425,10 +428,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());
                   }
                 }
               } // for (int iPE = 0; iPE < nbPolyedres; iPE++)
@@ -661,10 +665,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());
                 }
               }
             }
@@ -712,10 +717,10 @@ 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++)
@@ -725,12 +730,11 @@ list<string> DriverMED_R_SMESHDS_Mesh::GetGroupNames()
     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 );
         }
 //    }
     }
@@ -748,7 +752,7 @@ 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 *>::const_iterator anElemsIter = anElements.begin();
@@ -846,3 +850,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 );
+}
+
index fe1322b..cb72bcc 100644 (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);
@@ -50,6 +52,15 @@ class DriverMED_R_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
   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;