From 6722eec5f53c7415b4dbfca58c7578a2cf2ec876 Mon Sep 17 00:00:00 2001 From: rnv Date: Mon, 26 Sep 2011 10:41:06 +0000 Subject: [PATCH] Implementation of the issue 21285: EDF 1877 SMESH: Color of groups is only visible on one side. --- doc/salome/gui/SMESH/images/colors_size.png | Bin 28249 -> 20286 bytes doc/salome/gui/SMESH/input/colors_size.doc | 5 +- resources/SalomeApp.xml.in | 3 +- src/OBJECT/SMESH_Actor.cxx | 31 ++++--- src/OBJECT/SMESH_Actor.h | 9 +- src/OBJECT/SMESH_ActorDef.h | 9 +- src/OBJECT/SMESH_ActorUtils.cxx | 19 ++++ src/OBJECT/SMESH_ActorUtils.h | 8 ++ src/SMESHGUI/SMESHGUI.cxx | 86 +++++++++++------- src/SMESHGUI/SMESHGUI_GroupDlg.cxx | 8 +- .../SMESHGUI_Preferences_ColorDlg.cxx | 34 ++++--- src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h | 9 +- src/SMESHGUI/SMESHGUI_VTKUtils.cxx | 14 +-- src/SMESHGUI/SMESH_msg_en.ts | 4 +- 14 files changed, 153 insertions(+), 86 deletions(-) diff --git a/doc/salome/gui/SMESH/images/colors_size.png b/doc/salome/gui/SMESH/images/colors_size.png index 53b14620cb6e6fe19d7f8b27ca50cc2a9dd3d66c..83121a791a0864c1e08ba574b4322c6b848aa407 100755 GIT binary patch literal 20286 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�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 literal 28249 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 diff --git a/doc/salome/gui/SMESH/input/colors_size.doc b/doc/salome/gui/SMESH/input/colors_size.doc index aa244579b..33c673363 100644 --- a/doc/salome/gui/SMESH/input/colors_size.doc +++ b/doc/salome/gui/SMESH/input/colors_size.doc @@ -9,8 +9,9 @@ parameters:
  • Elements
    • -
    • Fill - color of surface of elements (seen in Shading mode).
    • -
    • Back Face - color of interior surface of elements.
    • +
    • Surface color - color of surface of elements (seen in Shading mode).
    • +
    • Back surface color - color of interior surface of elements. Use slider to select this color. This color +generated on base of the Surface color by changing it's brightness and saturation.
    • Outline - color of borders of elements.
    • 0D slements - color of 0D elements.
    • Size of 0D slements - size of 0D elements.
    • diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index 664c824b5..bc565c375 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -29,9 +29,8 @@ - + - diff --git a/src/OBJECT/SMESH_Actor.cxx b/src/OBJECT/SMESH_Actor.cxx index e867630dc..e32067023 100644 --- a/src/OBJECT/SMESH_Actor.cxx +++ b/src/OBJECT/SMESH_Actor.cxx @@ -40,6 +40,8 @@ #include "SUIT_Session.h" #include "SUIT_ResourceMgr.h" +#include + #ifndef DISABLE_PLOT2DVIEWER #include #endif @@ -146,12 +148,15 @@ SMESH_ActorDef::SMESH_ActorDef() //----------------------------------------- vtkFloatingPointType anRGB[3] = {1,1,1}; mySurfaceProp = vtkProperty::New(); - SMESH::GetColor( "SMESH", "fill_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) ); - mySurfaceProp->SetColor( anRGB[0], anRGB[1], anRGB[2] ); + QColor ffc, bfc; + int delta; + SMESH::GetColor( "SMESH", "fill_color", ffc, delta, "0,170,255|-100" ) ; + mySurfaceProp->SetColor( ffc.red() / 255. , ffc.green() / 255. , ffc.blue() / 255. ); + myDeltaBrightness = delta; myBackSurfaceProp = vtkProperty::New(); - SMESH::GetColor( "SMESH", "backface_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 0, 255 ) ); - myBackSurfaceProp->SetColor( anRGB[0], anRGB[1], anRGB[2] ); + bfc = Qtx::mainColorToSecondary(ffc, delta); + myBackSurfaceProp->SetColor( bfc.red() / 255. , bfc.green() / 255. , bfc.blue() / 255. ); my2DActor = SMESH_DeviceActor::New(); my2DActor->SetUserMatrix(aMatrix); @@ -1749,27 +1754,23 @@ vtkFloatingPointType SMESH_ActorDef::GetOpacity(){ } -void SMESH_ActorDef::SetSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){ +void SMESH_ActorDef::SetSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b, int delta){ mySurfaceProp->SetColor(r,g,b); if( SMESH_GroupObj* aGroupObj = dynamic_cast( myVisualObj.get() ) ) if( aGroupObj->GetElementType() == SMDSAbs_Face || aGroupObj->GetElementType() == SMDSAbs_Volume ) myNameActor->SetBackgroundColor(r,g,b); + + myDeltaBrightness = delta; + QColor bfc = Qtx::mainColorToSecondary(QColor(int(r*255),int(g*255),int(b*255)), delta); + myBackSurfaceProp->SetColor( bfc.red() / 255. , bfc.green() / 255. , bfc.blue() / 255. ); Modified(); } -void SMESH_ActorDef::GetSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){ +void SMESH_ActorDef::GetSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b, int& delta){ ::GetColor(mySurfaceProp,r,g,b); my2DExtProp->SetColor(1.0-r,1.0-g,1.0-b); -} - -void SMESH_ActorDef::SetBackSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){ - myBackSurfaceProp->SetColor(r,g,b); - Modified(); -} - -void SMESH_ActorDef::GetBackSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){ - ::GetColor(myBackSurfaceProp,r,g,b); + delta = myDeltaBrightness; } void SMESH_ActorDef::SetEdgeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){ diff --git a/src/OBJECT/SMESH_Actor.h b/src/OBJECT/SMESH_Actor.h index 202541bb1..cdd4b3e44 100644 --- a/src/OBJECT/SMESH_Actor.h +++ b/src/OBJECT/SMESH_Actor.h @@ -61,12 +61,9 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor const char* theName, int theIsClear); - virtual void SetSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b) = 0; - virtual void GetSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b) = 0; - - virtual void SetBackSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b) = 0; - virtual void GetBackSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b) = 0; - + virtual void SetSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b, int delta ) = 0; + virtual void GetSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b, int& delta ) = 0; + virtual void SetEdgeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b) = 0; virtual void GetEdgeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b) = 0; diff --git a/src/OBJECT/SMESH_ActorDef.h b/src/OBJECT/SMESH_ActorDef.h index 682748007..5cac53691 100644 --- a/src/OBJECT/SMESH_ActorDef.h +++ b/src/OBJECT/SMESH_ActorDef.h @@ -104,11 +104,8 @@ class SMESH_ActorDef : public SMESH_Actor virtual void SetOpacity(vtkFloatingPointType theValue); virtual vtkFloatingPointType GetOpacity(); - virtual void SetSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b); - virtual void GetSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b); - - virtual void SetBackSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b); - virtual void GetBackSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b); + virtual void SetSufaceColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b, int delta ); + virtual void GetSufaceColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b, int& delta); virtual void SetEdgeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b); virtual void GetEdgeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b); @@ -293,6 +290,8 @@ class SMESH_ActorDef : public SMESH_Actor #endif bool myIsFacesOriented; + + int myDeltaBrightness; VTK::MarkerTexture myMarkerTexture; diff --git a/src/OBJECT/SMESH_ActorUtils.cxx b/src/OBJECT/SMESH_ActorUtils.cxx index 3ddfdc590..ee0a31efd 100644 --- a/src/OBJECT/SMESH_ActorUtils.cxx +++ b/src/OBJECT/SMESH_ActorUtils.cxx @@ -35,6 +35,8 @@ #include #endif +#include + #include "utilities.h" @@ -137,6 +139,23 @@ namespace SMESH b = ib / 255.; } + + void + GetColor( const QString& theSect, + const QString& theName, + QColor& color, + int& delta, + QString def) + { + + SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr(); + if ( mgr ) { + QString str = mgr->stringValue( theSect, theName, def ); + Qtx::stringToBiColor(str,color,delta); + } + } + + #ifndef DISABLE_PLOT2DVIEWER //======================================================================= /** diff --git a/src/OBJECT/SMESH_ActorUtils.h b/src/OBJECT/SMESH_ActorUtils.h index 29ce4618d..e98d0f5de 100644 --- a/src/OBJECT/SMESH_ActorUtils.h +++ b/src/OBJECT/SMESH_ActorUtils.h @@ -67,6 +67,14 @@ SMESHOBJECT_EXPORT vtkFloatingPointType&, const QColor& = QColor() ); + SMESHOBJECT_EXPORT + void + GetColor( const QString& theSect, + const QString& theName, + QColor& color, + int& delta, + QString def); + SMESHOBJECT_EXPORT void WriteUnstructuredGrid(vtkUnstructuredGrid* theGrid, diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 2fab51464..7e69c5680 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -787,8 +787,12 @@ anActor->SetEdgeColor( aColor.R, aColor.G, aColor.B ); else if( aGroupObject->GetType() == SMESH::ELEM0D ) anActor->Set0DColor( aColor.R, aColor.G, aColor.B ); - else - anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B ); + else { + QColor c; + int delta; + SMESH::GetColor("SMESH", "fill_color", c, delta, "0,170,255|-100"); + anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B, delta ); + } } } } @@ -1029,6 +1033,7 @@ } case 1132:{ QColor c, e, b, n, c0D, o; + int delta; int size0D = 0; int Edgewidth = 0; vtkFloatingPointType Shrink = 0.0; @@ -1045,7 +1050,7 @@ if(IObject->hasEntry()){ if(SMESH_Actor *anActor = SMESH::FindActorByEntry(IObject->getEntry())){ vtkFloatingPointType color[3]; - anActor->GetSufaceColor(color[0], color[1], color[2]); + anActor->GetSufaceColor(color[0], color[1], color[2],delta); int c0 = int (color[0] * 255); int c1 = int (color[1] * 255); int c2 = int (color[2] * 255); @@ -1058,13 +1063,6 @@ c2 = int (edgecolor[2] * 255); e.setRgb(c0, c1, c2); - vtkFloatingPointType backfacecolor[3]; - anActor->GetBackSufaceColor(backfacecolor[0], backfacecolor[1], backfacecolor[2]); - c0 = int (backfacecolor[0] * 255); - c1 = int (backfacecolor[1] * 255); - c2 = int (backfacecolor[2] * 255); - b.setRgb(c0, c1, c2); - vtkFloatingPointType nodecolor[3]; anActor->GetNodeColor(nodecolor[0], nodecolor[1], nodecolor[2]); c0 = int (nodecolor[0] * 255); @@ -1113,7 +1111,7 @@ aDlg->SetColor(1, c); aDlg->SetColor(2, e); aDlg->SetColor(3, n); - aDlg->SetColor(4, b); + aDlg->SetDeltaBrightness(delta); aDlg->SetColor(5, c0D); aDlg->SetColor(6, o); aDlg->SetIntValue(1, Edgewidth); @@ -1136,6 +1134,7 @@ QColor backfacecolor = aDlg->GetColor(4); QColor color0D = aDlg->GetColor(5); QColor faces_orientation_color = aDlg->GetColor(6); + int delta = aDlg->GetDeltaBrightness(); /* Point marker */ theMarkerMap[ aStudy->StudyId() ] = aDlg->getCustomMarkerMap(); @@ -1148,11 +1147,8 @@ /* actor color and backface color */ anActor->SetSufaceColor(vtkFloatingPointType (color.red()) / 255., vtkFloatingPointType (color.green()) / 255., - vtkFloatingPointType (color.blue()) / 255.); - anActor->SetBackSufaceColor(vtkFloatingPointType (backfacecolor.red()) / 255., - vtkFloatingPointType (backfacecolor.green()) / 255., - vtkFloatingPointType (backfacecolor.blue()) / 255.); - + vtkFloatingPointType (color.blue()) / 255., + delta); /* edge color */ anActor->SetEdgeColor(vtkFloatingPointType (edgecolor.red()) / 255., vtkFloatingPointType (edgecolor.green()) / 255., @@ -4505,11 +4501,13 @@ void SMESHGUI::createPreferences() int elemGroup = addPreference( tr( "PREF_GROUP_ELEMENTS" ), meshTab ); setPreferenceProperty( elemGroup, "columns", 2 ); - addPreference( tr( "PREF_FILL" ), elemGroup, LightApp_Preferences::Color, "SMESH", "fill_color" ); + int ColorId = addPreference( tr( "PREF_FILL" ), elemGroup, LightApp_Preferences::BiColor, "SMESH", "fill_color" ); addPreference( tr( "PREF_OUTLINE" ), elemGroup, LightApp_Preferences::Color, "SMESH", "outline_color" ); - addPreference( tr( "PREF_BACKFACE" ), elemGroup, LightApp_Preferences::Color, "SMESH", "backface_color" ); addPreference( tr( "PREF_COLOR_0D" ), elemGroup, LightApp_Preferences::Color, "SMESH", "elem0d_color" ); + + setPreferenceProperty( ColorId, "text", tr("PREF_BACKFACE") ); + int grpGroup = addPreference( tr( "PREF_GROUP_GROUPS" ), meshTab ); setPreferenceProperty( grpGroup, "columns", 2 ); @@ -5086,18 +5084,17 @@ void SMESHGUI::storeVisualParameters (int savePoint) // Colors (surface:edge:) vtkFloatingPointType r, g, b; - - aSmeshActor->GetSufaceColor(r, g, b); + int delta; + + aSmeshActor->GetSufaceColor(r, g, b, delta); QString colorStr ("surface"); colorStr += gDigitsSep; colorStr += QString::number(r); colorStr += gDigitsSep; colorStr += QString::number(g); colorStr += gDigitsSep; colorStr += QString::number(b); - aSmeshActor->GetBackSufaceColor(r, g, b); - colorStr += gDigitsSep; colorStr += "backsurface"; - colorStr += gDigitsSep; colorStr += QString::number(r); - colorStr += gDigitsSep; colorStr += QString::number(g); - colorStr += gDigitsSep; colorStr += QString::number(b); + colorStr += gDigitsSep; colorStr += "backsurface"; + colorStr += gDigitsSep; colorStr += QString::number(delta); + aSmeshActor->GetEdgeColor(r, g, b); colorStr += gDigitsSep; colorStr += "edge"; @@ -5462,17 +5459,42 @@ void SMESHGUI::restoreVisualParameters (int savePoint) // Colors else if (paramNameStr == "Colors") { QStringList colors = val.split(gDigitsSep, QString::SkipEmptyParts); - if (colors.count() == 16) { + if (colors.count() == 16 || colors.count() == 14 ) { if (colors[0] != "surface" || colors[4] != "backsurface" || - colors[8] != "edge" || colors[12] != "node") { + (colors[8] != "edge" && colors[6] != "edge" ) || (colors[12] != "node" && colors[10] != "node")) { MESSAGE("Invalid order of data in Colors, must be: " - "surface:r:g:b:backsurface:r:g:b:edge:r:g:b:node:r:g:b"); + "surface:r:g:b:backsurface:r:g:b:edge:r:g:b:node:r:g:b or surface:r:g:b:backsurface:delta:edge:r:g:b:node:r:g:b"); } else { - aSmeshActor->SetSufaceColor(colors[1].toFloat(), colors[2].toFloat(), colors[3].toFloat()); - aSmeshActor->SetBackSufaceColor(colors[5].toFloat(), colors[6].toFloat(), colors[7].toFloat()); - aSmeshActor->SetEdgeColor(colors[9].toFloat(), colors[10].toFloat(), colors[11].toFloat()); - aSmeshActor->SetNodeColor(colors[13].toFloat(), colors[14].toFloat(), colors[15].toFloat()); + int delta = 0; + float er,eg,eb; + float nr,ng,nb; + //Old case backsurface color is independent + if( colors.count() == 16 ) { + QColor ffc; + SMESH::GetColor( "SMESH", "fill_color", ffc, delta, "0,170,255|-100" ) ; + er = colors[9].toFloat(); + eg = colors[10].toFloat(); + eb = colors[11].toFloat(); + + nr = colors[13].toFloat(); + ng = colors[14].toFloat(); + nb = colors[15].toFloat(); + } else { + //New case backsurface color depends on surface color + delta = colors[5].toInt(); + + er = colors[7].toFloat(); + eg = colors[8].toFloat(); + eb = colors[9].toFloat(); + + nr = colors[11].toFloat(); + ng = colors[12].toFloat(); + nb = colors[13].toFloat(); + } + aSmeshActor->SetSufaceColor(colors[1].toFloat(), colors[2].toFloat(), colors[3].toFloat(), delta); + aSmeshActor->SetEdgeColor(er,eg,eb); + aSmeshActor->SetNodeColor(nr,ng,nb); } } } diff --git a/src/SMESHGUI/SMESHGUI_GroupDlg.cxx b/src/SMESHGUI/SMESHGUI_GroupDlg.cxx index d61b9397f..7e40421f1 100644 --- a/src/SMESHGUI/SMESHGUI_GroupDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_GroupDlg.cxx @@ -1121,7 +1121,13 @@ bool SMESHGUI_GroupDlg::onApply() case 0: anActor->SetNodeColor( aColor.R, aColor.G, aColor.B ); break; case 1: anActor->SetEdgeColor( aColor.R, aColor.G, aColor.B ); break; case 2: - case 3: anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B ); break; + case 3: + { + QColor c; + int delta; + SMESH::GetColor("SMESH", "fill_color", c , delta, "0,170,255|-100"); + anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B, delta ); break; + } } } } diff --git a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx b/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx index f035c5699..e411e7049 100644 --- a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx @@ -80,11 +80,10 @@ SMESHGUI_Preferences_ColorDlg::SMESHGUI_Preferences_ColorDlg( SMESHGUI* theModul ButtonGroup1Layout->setSpacing( SPACING ); ButtonGroup1Layout->setMargin( MARGIN ); - QLabel* TextLabel_Fill = new QLabel( tr( "Fill" ), ButtonGroup1 ); - btnFillColor = new QtxColorButton( ButtonGroup1 ); + QLabel* TextLabel_Fill = new QLabel( tr( "Surface color" ), ButtonGroup1 ); - QLabel* TextLabel_BackFace = new QLabel( tr( "Back Face" ), ButtonGroup1 ); - btnBackFaceColor = new QtxColorButton( ButtonGroup1 ); + toolSurfColor = new QtxBiColorTool(ButtonGroup1); + toolSurfColor->setText("Back surface color"); QLabel* TextLabel_Outine = new QLabel( tr( "Outline" ), ButtonGroup1 ); btnOutlineColor = new QtxColorButton( ButtonGroup1 ); @@ -117,9 +116,7 @@ SMESHGUI_Preferences_ColorDlg::SMESHGUI_Preferences_ColorDlg( SMESHGUI* theModul SpinBox_Shrink->setButtonSymbols( QSpinBox::PlusMinus ); ButtonGroup1Layout->addWidget( TextLabel_Fill, 0, 0 ); - ButtonGroup1Layout->addWidget( btnFillColor, 0, 1 ); - ButtonGroup1Layout->addWidget( TextLabel_BackFace, 0, 2 ); - ButtonGroup1Layout->addWidget( btnBackFaceColor, 0, 3 ); + ButtonGroup1Layout->addWidget( toolSurfColor, 0, 1, 1, 3 ); ButtonGroup1Layout->addWidget( TextLabel_Outine, 1, 0 ); ButtonGroup1Layout->addWidget( btnOutlineColor, 1, 1 ); ButtonGroup1Layout->addWidget( TextLabel_0DElements_Color, 1, 2 ); @@ -309,10 +306,9 @@ void SMESHGUI_Preferences_ColorDlg::ActivateThisDialog() void SMESHGUI_Preferences_ColorDlg::SetColor( int type, const QColor& color ) { switch ( type ) { - case 1 : btnFillColor->setColor( color ); break; // fill + case 1 : toolSurfColor->setMainColor( color ); break; // fill case 2 : btnOutlineColor->setColor( color ); break; // outline case 3 : btnNodeColor->setColor( color ); break; // node - case 4 : btnBackFaceColor->setColor( color ); break; // back face case 5 : btn0DElementsColor->setColor( color ); break; // 0d elements case 6 : btnOrientationColor->setColor( color ); break; // orientation of faces default: break; @@ -327,10 +323,9 @@ QColor SMESHGUI_Preferences_ColorDlg::GetColor( int type ) { QColor color; switch ( type ) { - case 1 : color = btnFillColor->color(); break; // fill + case 1 : color = toolSurfColor->mainColor(); break; // fill case 2 : color = btnOutlineColor->color(); break; // outline case 3 : color = btnNodeColor->color(); break; // node - case 4 : color = btnBackFaceColor->color(); break; // back face case 5 : color = btn0DElementsColor->color(); break; // 0d elements case 6 : color = btnOrientationColor->color(); break; // orientation of faces default: break; @@ -484,6 +479,23 @@ int SMESHGUI_Preferences_ColorDlg::getCustomMarkerID() const return MarkerWidget->getCustomMarkerID(); } +//================================================================================= +// function : SetDeltaBrightness(int) +// purpose : +//================================================================================= +void SMESHGUI_Preferences_ColorDlg::SetDeltaBrightness(int delta) +{ + toolSurfColor->setDelta(delta); +} +//================================================================================= +// function : GetDeltaBrightness() +// purpose : +//================================================================================= +int SMESHGUI_Preferences_ColorDlg::GetDeltaBrightness() +{ + return toolSurfColor->delta(); +} + //================================================================================= // function : keyPressEvent() // purpose : diff --git a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h b/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h index e34a9ed81..05eef6924 100644 --- a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h +++ b/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h @@ -32,6 +32,7 @@ // SALOME GUI includes #include +#include // Qt includes #include @@ -63,6 +64,9 @@ public: void setCustomMarkerMap( VTK::MarkerMap ); VTK::MarkerMap getCustomMarkerMap(); + void SetDeltaBrightness(int); + int GetDeltaBrightness(); + void setStandardMarker( VTK::MarkerType, VTK::MarkerScale ); void setCustomMarker( int ); VTK::MarkerType getMarkerType() const; @@ -82,9 +86,8 @@ private slots: private: SMESHGUI* mySMESHGUI; - - QtxColorButton* btnFillColor; - QtxColorButton* btnBackFaceColor; + + QtxBiColorTool* toolSurfColor; QtxColorButton* btnOutlineColor; QtxColorButton* btn0DElementsColor; SalomeApp_IntSpinBox* SpinBox_0DElements_Size; diff --git a/src/SMESHGUI/SMESHGUI_VTKUtils.cxx b/src/SMESHGUI/SMESHGUI_VTKUtils.cxx index 11b6204b0..46e7e5c96 100644 --- a/src/SMESHGUI/SMESHGUI_VTKUtils.cxx +++ b/src/SMESHGUI/SMESHGUI_VTKUtils.cxx @@ -610,14 +610,14 @@ namespace SMESH SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( SMESH::SObjectToObject( aSObj )); if(!CORBA::is_nil(aGroup) && anActor) { + QColor c;int delta; + SMESH::GetColor( "SMESH", "fill_color", c, delta, "0,170,255|-100" ); SALOMEDS::Color aColor = aGroup->GetColor(); - if( !( aColor.R > 0 || aColor.G > 0 || aColor.B > 0 ) ) + if( !( aColor.R > 0 || aColor.G > 0 || aColor.B > 0 )) { - int r = 0, g = 0, b = 0; - SMESH::GetColor( "SMESH", "fill_color", r, g, b, QColor( 0, 170, 255 ) ); - aColor.R = (float)r / 255.0; - aColor.G = (float)g / 255.0; - aColor.B = (float)b / 255.0; + aColor.R = (float)c.red() / 255.0; + aColor.G = (float)c.green() / 255.0; + aColor.B = (float)c.blue() / 255.0; aGroup->SetColor( aColor ); } if( aGroup->GetType() == SMESH::NODE ) @@ -627,7 +627,7 @@ namespace SMESH else if( aGroup->GetType() == SMESH::ELEM0D ) anActor->Set0DColor( aColor.R, aColor.G, aColor.B ); else - anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B ); + anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B, delta ); } } } diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index 746685cee..60db88cc7 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -3550,7 +3550,7 @@ Please, create VTK viewer and try again PREF_BACKFACE - Back face + Back surface color PREF_COLOR @@ -3594,7 +3594,7 @@ Please, create VTK viewer and try again PREF_FILL - Fill + Surface color PREF_NOTIFY_MODE -- 2.39.2