Salome HOME
Color Number (Color Group) parameter is returned for compatibility
[modules/smesh.git] / src / DriverMED / DriverMED_Family.cxx
index ebd21783d30a864de549c566bd9099a05e60e2ea..25646c67c45a768ae471f0ae52ead8a38a70ef78 100644 (file)
@@ -129,6 +129,16 @@ DriverMED_Family
   return myElements.empty(); 
 }
 
+bool CompareColors( const SALOMEDS::Color& theColor, const SALOMEDS::Color& theRefColor )
+{
+  if( fabs( theColor.R - theRefColor.R ) < 0.01 &&
+      fabs( theColor.G - theRefColor.G ) < 0.01 &&
+      fabs( theColor.B - theRefColor.B ) < 0.01 )
+    return true;
+
+  return false;
+}
+
 //=============================================================================
 /*!
  *  Split each group from list <aGroups> on some parts (families)
@@ -201,11 +211,37 @@ DriverMED_Family
   }
 
   // Process groups
-  SMESHDS_GroupBasePtrList::const_iterator aGroupsIter = theGroups.begin();
-  for (; aGroupsIter != theGroups.end(); aGroupsIter++)
+  SMESHDS_GroupBasePtrList::const_iterator aGroupsIter;
+
+  int id = 0;
+  ColorMap aColorMap;
+  for (aGroupsIter = theGroups.begin(); aGroupsIter != theGroups.end(); aGroupsIter++)
+  {
+    Quantity_Color aQColor = (*aGroupsIter)->GetColor();
+    SALOMEDS::Color aColor;
+    aColor.R = aQColor.Red();
+    aColor.G = aQColor.Green();
+    aColor.B = aQColor.Blue();
+
+    bool isFound = false;
+    for (ColorMap::iterator aColorIter = aColorMap.begin(); aColorIter != aColorMap.end(); aColorIter++)
+    {
+      SALOMEDS::Color aRefColor = aColorIter->second;
+      if( CompareColors( aColor, aRefColor ) )
+      {
+       isFound = true;
+       break;
+      }
+    }
+
+    if( !isFound )
+      aColorMap[ id++ ] = aColor;
+  }
+
+  for (aGroupsIter = theGroups.begin(); aGroupsIter != theGroups.end(); aGroupsIter++)
   {
     DriverMED_FamilyPtr aFam2 (new DriverMED_Family);
-    aFam2->Init(*aGroupsIter);
+    aFam2->Init(*aGroupsIter, aColorMap);
 
     DriverMED_FamilyPtrList::iterator aFamsIter = aFamilies.begin();
     while (aFamsIter != aFamilies.end())
@@ -321,7 +357,7 @@ DriverMED_Family::GetFamilyInfo(const MED::PWrapper& theWrapper,
 
   MED::PFamilyInfo anInfo;
   string aValue = aStr.str();
-  if(myId == 0){
+  if(myId == 0 || myGroupAttributVal == 0){
     anInfo = theWrapper->CrFamilyInfo(theMeshInfo,
                                      aValue,
                                      myId,
@@ -329,8 +365,7 @@ DriverMED_Family::GetFamilyInfo(const MED::PWrapper& theWrapper,
   }else{
     MED::TStringVector anAttrDescs (1, "");  // 1 attribute with empty description,
     MED::TIntVector anAttrIds (1, myId);        // Id=0,
-    MED::TIntVector anAttrVals (1);
-    anAttrVals[0] = myGroupAttributVal != 0? myGroupAttributVal: myId;
+    MED::TIntVector anAttrVals (1, myGroupAttributVal);
     anInfo = theWrapper->CrFamilyInfo(theMeshInfo,
                                      aValue,
                                      myId,
@@ -365,7 +400,7 @@ DriverMED_Family::GetFamilyInfo(const MED::PWrapper& theWrapper,
  *  Initialize the tool by SMESHDS_GroupBase
  */
 //=============================================================================
-void DriverMED_Family::Init (SMESHDS_GroupBase* theGroup)
+void DriverMED_Family::Init (SMESHDS_GroupBase* theGroup, const ColorMap& theColorMap)
 {
   // Elements
   myElements.clear();
@@ -384,11 +419,22 @@ void DriverMED_Family::Init (SMESHDS_GroupBase* theGroup)
 
   myGroupAttributVal = 0;
   
-  if (theGroup->GetColorGroup()!=0)
+  ColorMap::const_iterator aColorIter = theColorMap.begin();
+  for (; aColorIter != theColorMap.end(); aColorIter++)
+  {
+    Quantity_Color aGroupQColor = theGroup->GetColor();
+    SALOMEDS::Color aGroupColor;
+    aGroupColor.R = aGroupQColor.Red();
+    aGroupColor.G = aGroupQColor.Green();
+    aGroupColor.B = aGroupQColor.Blue();
+
+    SALOMEDS::Color aColor = aColorIter->second;
+    if( CompareColors( aGroupColor, aColor ) )
     {
-      myGroupAttributVal = theGroup->GetColorGroup();
+      myGroupAttributVal = aColorIter->first;
+      break;
     }
-
+  }
 }
 
 //=============================================================================