From af9ba5c34050a1173441e8b2f68d9ee68405d4dc Mon Sep 17 00:00:00 2001 From: dmv Date: Tue, 11 Mar 2008 10:14:24 +0000 Subject: [PATCH] NPAL14803 Colors in MED Save&Reload presistance --- src/DriverMED/DriverMED_Family.cxx | 12 ++++++- src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx | 12 +++++++ src/SMESHDS/SMESHDS_GroupBase.cxx | 39 ++++++++++++++++------ 3 files changed, 51 insertions(+), 12 deletions(-) diff --git a/src/DriverMED/DriverMED_Family.cxx b/src/DriverMED/DriverMED_Family.cxx index 16363f8e6..b95f4b1cb 100644 --- a/src/DriverMED/DriverMED_Family.cxx +++ b/src/DriverMED/DriverMED_Family.cxx @@ -382,7 +382,17 @@ void DriverMED_Family::Init (SMESHDS_GroupBase* theGroup) myGroupNames.insert(string(theGroup->GetStoreName())); Quantity_Color aColor = theGroup->GetColor(); - myGroupAttributVal = aColor.Hue(); + double aRed = aColor.Red(); + double aGreen = aColor.Green(); + double aBlue = aColor.Blue(); + int aR = aRed*255; + int aG = aGreen*255; + int aB = aBlue*255; + cout << "aRed = " << aR << endl; + cout << "aGreen = " << aG << endl; + cout << "aBlue = " << aB << endl; + myGroupAttributVal = (int)(aR*1000000 + aG*1000 + aB); + cout << "myGroupAttributVal = " << myGroupAttributVal << endl; } //============================================================================= diff --git a/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx b/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx index e500ed3ad..ed6c28b97 100644 --- a/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx +++ b/src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx @@ -113,10 +113,19 @@ DriverMED_R_SMESHDS_Mesh TInt aNbGrp = aFamilyInfo->GetNbGroup(); if(MYDEBUG) MESSAGE("belong to " << aNbGrp << " groups"); + bool isAttrOk = false; + if(aFamilyInfo->GetNbAttr() == aNbGrp) + isAttrOk = true; for (TInt iGr = 0; iGr < aNbGrp; iGr++) { string aGroupName = aFamilyInfo->GetGroupName(iGr); + if(isAttrOk){ + TInt anAttrVal = aFamilyInfo->GetAttrVal(iGr); + aFamily->SetGroupAttributVal(anAttrVal); + } + if(MYDEBUG) MESSAGE(aGroupName); aFamily->AddGroupName(aGroupName); + } aFamily->SetId( aFamId ); myFamilies[aFamId] = aFamily; @@ -793,6 +802,9 @@ void DriverMED_R_SMESHDS_Mesh::GetGroup(SMESHDS_Group* theGroup) { element = *anElemsIter; theGroup->SMDSGroup().Add(element); + int aGroupAttrVal = aFamily->GetGroupAttributVal(); + if( aGroupAttrVal != 0) + theGroup->SetColorGroup(aGroupAttrVal); } if ( element ) theGroup->SetType( theGroup->SMDSGroup().GetType() ); diff --git a/src/SMESHDS/SMESHDS_GroupBase.cxx b/src/SMESHDS/SMESHDS_GroupBase.cxx index 1fc450002..90b91add6 100644 --- a/src/SMESHDS/SMESHDS_GroupBase.cxx +++ b/src/SMESHDS/SMESHDS_GroupBase.cxx @@ -169,13 +169,22 @@ void SMESHDS_GroupBase::SetType(SMDSAbs_ElementType theType) void SMESHDS_GroupBase::SetColorGroup(int theColorGroup) { - if( theColorGroup < 0 || theColorGroup > 360 ) - { - MESSAGE("SMESHDS_GroupBase::SetColorGroup : Value must be in range [0,360]"); - return; - } - - Quantity_Color aColor( (double)theColorGroup, 1.0, 1.0, Quantity_TOC_HLS ); + cout << "theColorGroup = " << theColorGroup << endl; + + int aRed = ( theColorGroup/1000000 ); + int aGreen = ( theColorGroup -aRed*1000000)/1000; + int aBlue = ( theColorGroup - aRed*1000000 - aGreen*1000 ); + cout << "aRed = " << aRed << endl; + cout << "aGreen = " << aGreen << endl; + cout << "aBlue = " << aBlue << endl; + double aR = aRed/255.0; + double aG = aGreen/255.0; + double aB = aBlue/255.0; + cout << "aR = " << aR << endl; + cout << "aG = " << aG << endl; + cout << "aB = " << aB << endl; + + Quantity_Color aColor( aR, aG, aB, Quantity_TOC_RGB ); SetColor( aColor ); } @@ -187,9 +196,17 @@ void SMESHDS_GroupBase::SetColorGroup(int theColorGroup) int SMESHDS_GroupBase::GetColorGroup() const { Quantity_Color aColor = GetColor(); - double aHue = aColor.Hue(); - if( aHue < 0 ) - return 0; - return (int)( aHue ); + double aRed = aColor.Red(); + double aGreen = aColor.Green(); + double aBlue = aColor.Blue(); + int aR = aRed*255; + int aG = aGreen*255; + int aB = aBlue*255; + cout << "aRed = " << aR << endl; + cout << "aGreen = " << aG << endl; + cout << "aBlue = " << aB << endl; + int aRet = (int)(aR*1000000 + aG*1000 + aB); + + return aRet; } -- 2.39.2