// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
//
//
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)
}
// 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())
MED::PFamilyInfo anInfo;
string aValue = aStr.str();
- if(myId == 0){
+ if(myId == 0 || myGroupAttributVal == 0){
anInfo = theWrapper->CrFamilyInfo(theMeshInfo,
aValue,
myId,
}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,
* 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();
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;
}
-
+ }
}
//=============================================================================