From 48a0df2a9e4d79eea07274666d12ec13fcc1e946 Mon Sep 17 00:00:00 2001 From: rnv Date: Wed, 28 Sep 2011 08:43:35 +0000 Subject: [PATCH] Implementation of the issue 20984: EDF 1566 SMESH: Better visibility of the elements in a shrinked representation. --- doc/salome/gui/SMESH/images/colors_size.png | Bin 20286 -> 20387 bytes doc/salome/gui/SMESH/input/colors_size.doc | 3 +- resources/SalomeApp.xml.in | 3 +- src/OBJECT/SMESH_Actor.cxx | 83 ++++++++++++------ src/OBJECT/SMESH_Actor.h | 3 + src/OBJECT/SMESH_ActorDef.h | 6 ++ src/SMESHGUI/SMESHGUI.cxx | 79 ++++++++++++++--- .../SMESHGUI_Preferences_ColorDlg.cxx | 68 ++++++++++---- src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h | 3 + src/SMESHGUI/SMESH_msg_en.ts | 18 +++- 10 files changed, 207 insertions(+), 59 deletions(-) diff --git a/doc/salome/gui/SMESH/images/colors_size.png b/doc/salome/gui/SMESH/images/colors_size.png index 83121a791a0864c1e08ba574b4322c6b848aa407..14750eb291fafbfe24150275ac6233c77fd1b49f 100755 GIT binary patch literal 20387 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 literal 20286 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�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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 33c673363..1eb84f0ca 100644 --- a/doc/salome/gui/SMESH/input/colors_size.doc +++ b/doc/salome/gui/SMESH/input/colors_size.doc @@ -12,7 +12,8 @@ parameters:
  • 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.
  • +
  • Outline color - color of borders of elements.
  • +
  • Wireframe color - color of borders of elements in wireframe mode.
  • 0D slements - color of 0D elements.
  • Size of 0D slements - size of 0D elements.
  • Width - width of lines (edges and borders of elements).
  • diff --git a/resources/SalomeApp.xml.in b/resources/SalomeApp.xml.in index bc565c375..6de641a3f 100644 --- a/resources/SalomeApp.xml.in +++ b/resources/SalomeApp.xml.in @@ -30,7 +30,8 @@ - + + diff --git a/src/OBJECT/SMESH_Actor.cxx b/src/OBJECT/SMESH_Actor.cxx index e32067023..f9edd8cf3 100644 --- a/src/OBJECT/SMESH_Actor.cxx +++ b/src/OBJECT/SMESH_Actor.cxx @@ -242,7 +242,7 @@ SMESH_ActorDef::SMESH_ActorDef() myEdgeProp->SetAmbient(1.0); myEdgeProp->SetDiffuse(0.0); myEdgeProp->SetSpecular(0.0); - SMESH::GetColor( "SMESH", "outline_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) ); + SMESH::GetColor( "SMESH", "wireframe_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) ); myEdgeProp->SetColor(anRGB[0],anRGB[1],anRGB[2]); myEdgeProp->SetLineWidth(aLineWidth); @@ -379,6 +379,15 @@ SMESH_ActorDef::SMESH_ActorDef() myHighlightProp->SetPointSize(aElem0DSize); // ?? myHighlightProp->SetRepresentation(1); + myOutLineProp = vtkProperty::New(); + myOutLineProp->SetAmbient(1.0); + myOutLineProp->SetDiffuse(0.0); + myOutLineProp->SetSpecular(0.0); + SMESH::GetColor( "SMESH", "outline_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 70, 0 ) ); + myOutLineProp->SetColor(anRGB[0],anRGB[1],anRGB[2]); + myOutLineProp->SetPointSize(aElem0DSize); // ?? + myOutLineProp->SetRepresentation(1); + myPreselectProp = vtkProperty::New(); myPreselectProp->SetAmbient(1.0); myPreselectProp->SetDiffuse(0.0); @@ -1210,6 +1219,8 @@ void SMESH_ActorDef::SetShrinkFactor(vtkFloatingPointType theValue){ my2DExtActor->SetShrinkFactor(theValue); my3DActor->SetShrinkFactor(theValue); my3DExtActor->SetShrinkFactor(theValue); + my3DExtActor->SetShrinkFactor(theValue); + myHighlitableActor->SetShrinkFactor(theValue); Modified(); } @@ -1226,6 +1237,7 @@ void SMESH_ActorDef::SetShrink(){ my2DExtActor->SetShrink(); my3DActor->SetShrink(); my3DExtActor->SetShrink(); + myHighlitableActor->SetShrink(); myIsShrunk = true; Modified(); @@ -1243,6 +1255,7 @@ void SMESH_ActorDef::UnShrink(){ my2DExtActor->UnShrink(); my3DActor->UnShrink(); my3DExtActor->UnShrink(); + myHighlitableActor->UnShrink(); myIsShrunk = false; Modified(); @@ -1613,36 +1626,44 @@ bool SMESH_ActorDef::GetPointRepresentation(){ void SMESH_ActorDef::UpdateHighlight(){ - myHighlitableActor->SetVisibility(false); myHighlitableActor->SetHighlited(false); - - if(myIsHighlighted){ - myHighlitableActor->SetProperty(myHighlightProp); - }else if(myIsPreselected){ - myHighlitableActor->SetProperty(myPreselectProp); - } + myHighlitableActor->SetVisibility(false); bool anIsVisible = GetVisibility(); - if(myIsHighlighted || myIsPreselected){ - if(GetUnstructuredGrid()->GetNumberOfCells()){ - myHighlitableActor->SetHighlited(anIsVisible); - myHighlitableActor->SetVisibility(anIsVisible); - myHighlitableActor->GetExtractUnstructuredGrid()-> - SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::eCells); - myHighlitableActor->SetRepresentation(SMESH_DeviceActor::eWireframe); - }else if(myRepresentation == ePoint || GetPointRepresentation()){ - myHighlitableActor->SetHighlited(anIsVisible); - myHighlitableActor->GetExtractUnstructuredGrid()-> - SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints); + switch(myRepresentation){ + case SMESH_DeviceActor::eSurface: + case SMESH_DeviceActor::eWireframe: + { + if(myIsHighlighted) { + myHighlitableActor->SetProperty(myHighlightProp); + }else if(myIsPreselected){ + myHighlitableActor->SetProperty(myPreselectProp); + } else if(anIsVisible){ + (myRepresentation == eSurface) ? + myHighlitableActor->SetProperty(myOutLineProp) : myHighlitableActor->SetProperty(myEdgeProp); + } + if(GetUnstructuredGrid()->GetNumberOfCells()) { + myHighlitableActor->SetHighlited(anIsVisible); + myHighlitableActor->GetExtractUnstructuredGrid()-> + SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::eCells); + myHighlitableActor->SetRepresentation(SMESH_DeviceActor::eWireframe); + } myHighlitableActor->SetVisibility(anIsVisible); - myHighlitableActor->SetRepresentation(SMESH_DeviceActor::ePoint); - - VTK::MarkerType aMarkerType = GetMarkerType(); - if(aMarkerType != VTK::MT_USER) - myHighlitableActor->SetMarkerStd(aMarkerType, GetMarkerScale()); - else - myHighlitableActor->SetMarkerTexture(GetMarkerTexture(), myMarkerTexture); + break; + } + case SMESH_DeviceActor::ePoint: + { + if(myIsHighlighted) { + myNodeActor->SetProperty(myHighlightProp); + }else if(myIsPreselected) { + myNodeActor->SetProperty(myPreselectProp); + } else if(anIsVisible) { + myNodeActor->SetProperty(myNodeProp); + } + myNodeActor->SetRepresentation(SMESH_DeviceActor::ePoint); + myNodeActor->GetExtractUnstructuredGrid()->SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints); + break; } } } @@ -1787,6 +1808,16 @@ void SMESH_ActorDef::GetEdgeColor(vtkFloatingPointType& r,vtkFloatingPointType& ::GetColor(myEdgeProp,r,g,b); } +void SMESH_ActorDef::SetOutlineColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){ + myOutLineProp->SetColor(r,g,b); + Modified(); +} + +void SMESH_ActorDef::GetOutlineColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b){ + ::GetColor(myOutLineProp,r,g,b); +} + + void SMESH_ActorDef::SetNodeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b){ myNodeProp->SetColor(r,g,b); myNodeExtProp->SetColor(1.0-r,1.0-g,1.0-b); diff --git a/src/OBJECT/SMESH_Actor.h b/src/OBJECT/SMESH_Actor.h index cdd4b3e44..ac9ad973a 100644 --- a/src/OBJECT/SMESH_Actor.h +++ b/src/OBJECT/SMESH_Actor.h @@ -69,6 +69,9 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor virtual void SetNodeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b) = 0; virtual void GetNodeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b) = 0; + + virtual void SetOutlineColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b) = 0; + virtual void GetOutlineColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b) = 0; virtual void Set0DColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b) = 0; virtual void Get0DColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b) = 0; diff --git a/src/OBJECT/SMESH_ActorDef.h b/src/OBJECT/SMESH_ActorDef.h index 5cac53691..5961cbd06 100644 --- a/src/OBJECT/SMESH_ActorDef.h +++ b/src/OBJECT/SMESH_ActorDef.h @@ -110,6 +110,10 @@ class SMESH_ActorDef : public SMESH_Actor virtual void SetEdgeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b); virtual void GetEdgeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b); + virtual void SetOutlineColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b); + virtual void GetOutlineColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b); + + virtual void SetNodeColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b); virtual void GetNodeColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b); @@ -232,7 +236,9 @@ class SMESH_ActorDef : public SMESH_Actor SMESH_DeviceActor* myPickableActor; vtkProperty* myHighlightProp; + vtkProperty* myOutLineProp; vtkProperty* myPreselectProp; + SMESH_DeviceActor* myHighlitableActor; eControl myControlMode; diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 7e69c5680..3f5114ce6 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -1032,7 +1032,7 @@ return; } case 1132:{ - QColor c, e, b, n, c0D, o; + QColor c, e, b, n, c0D, o, outl, selection, preselection; int delta; int size0D = 0; int Edgewidth = 0; @@ -1077,6 +1077,27 @@ c2 = int (color0D[2] * 255); c0D.setRgb(c0, c1, c2); + vtkFloatingPointType outlineColor[3]; + anActor->GetOutlineColor(outlineColor[0], outlineColor[1], outlineColor[2]); + c0 = int (outlineColor[0] * 255); + c1 = int (outlineColor[1] * 255); + c2 = int (outlineColor[2] * 255); + outl.setRgb(c0, c1, c2); + + vtkFloatingPointType hColor[3]; + anActor->GetHighlightColor(hColor[0], hColor[1], hColor[2]); + c0 = int (hColor[0] * 255); + c1 = int (hColor[1] * 255); + c2 = int (hColor[2] * 255); + selection.setRgb(c0, c1, c2); + + vtkFloatingPointType phColor[3]; + anActor->GetPreHighlightColor(phColor[0], phColor[1], phColor[2]); + c0 = int (phColor[0] * 255); + c1 = int (phColor[1] * 255); + c2 = int (phColor[2] * 255); + preselection.setRgb(c0, c1, c2); + size0D = (int)anActor->Get0DSize(); if(size0D == 0) size0D = 1; @@ -1111,6 +1132,7 @@ aDlg->SetColor(1, c); aDlg->SetColor(2, e); aDlg->SetColor(3, n); + aDlg->SetColor(4, outl); aDlg->SetDeltaBrightness(delta); aDlg->SetColor(5, c0D); aDlg->SetColor(6, o); @@ -1119,6 +1141,8 @@ aDlg->SetIntValue(3, size0D); aDlg->SetDoubleValue(1, faces_orientation_scale); aDlg->SetBooleanValue(1, faces_orientation_3dvectors); + aDlg->SetColor(7, selection); + aDlg->SetColor(8, preselection); aDlg->setCustomMarkerMap( theMarkerMap[ aStudy->StudyId() ] ); @@ -1131,9 +1155,11 @@ QColor color = aDlg->GetColor(1); QColor edgecolor = aDlg->GetColor(2); QColor nodecolor = aDlg->GetColor(3); - QColor backfacecolor = aDlg->GetColor(4); + QColor outlinecolor = aDlg->GetColor(4); QColor color0D = aDlg->GetColor(5); QColor faces_orientation_color = aDlg->GetColor(6); + QColor selectioncolor = aDlg->GetColor(7); + QColor preSelectioncolor = aDlg->GetColor(8); int delta = aDlg->GetDeltaBrightness(); /* Point marker */ @@ -1153,6 +1179,20 @@ anActor->SetEdgeColor(vtkFloatingPointType (edgecolor.red()) / 255., vtkFloatingPointType (edgecolor.green()) / 255., vtkFloatingPointType (edgecolor.blue()) / 255.); + /* edge outline */ + anActor->SetOutlineColor(vtkFloatingPointType (outlinecolor.red()) / 255., + vtkFloatingPointType (outlinecolor.green()) / 255., + vtkFloatingPointType (outlinecolor.blue()) / 255.); + + /* selection */ + anActor->SetHighlightColor(vtkFloatingPointType (selectioncolor.red()) / 255., + vtkFloatingPointType (selectioncolor.green()) / 255., + vtkFloatingPointType (selectioncolor.blue()) / 255.); + /* pre-selection */ + anActor->SetPreHighlightColor(vtkFloatingPointType (preSelectioncolor.red()) / 255., + vtkFloatingPointType (preSelectioncolor.green()) / 255., + vtkFloatingPointType (preSelectioncolor.blue()) / 255.); + /* Shrink factor and size edges */ anActor->SetShrinkFactor(aDlg->GetIntValue(2) / 100.); @@ -4502,24 +4542,25 @@ void SMESHGUI::createPreferences() setPreferenceProperty( elemGroup, "columns", 2 ); 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_COLOR_0D" ), elemGroup, LightApp_Preferences::Color, "SMESH", "elem0d_color" ); - + + addPreference( tr( "PREF_OUTLINE" ), elemGroup, LightApp_Preferences::Color, "SMESH", "outline_color" ); + addPreference( tr( "PREF_WIREFRAME" ), elemGroup, LightApp_Preferences::Color, "SMESH", "wireframe_color" ); setPreferenceProperty( ColorId, "text", tr("PREF_BACKFACE") ); + int grpSelection = addPreference( tr( "PREF_GROUP_SELECTION" ), meshTab ); + setPreferenceProperty( grpSelection, "columns", 2 ); + addPreference( tr( "PREF_SELECTION" ), grpSelection, LightApp_Preferences::Color, "SMESH", "selection_object_color" ); + addPreference( tr( "PREF_PRE_SELECTION" ), grpSelection, LightApp_Preferences::Color, "SMESH", "highlight_color" ); + int grpGroup = addPreference( tr( "PREF_GROUP_GROUPS" ), meshTab ); setPreferenceProperty( grpGroup, "columns", 2 ); addPreference( tr( "PREF_GRP_NAMES" ), grpGroup, LightApp_Preferences::Color, "SMESH", "group_name_color" ); - //int sp = addPreference( "", elemGroup, LightApp_Preferences::Space ); - //setPreferenceProperty( sp, "hstretch", 0 ); - //setPreferenceProperty( sp, "vstretch", 0 ); - int size0d = addPreference(tr("PREF_SIZE_0D"), elemGroup, LightApp_Preferences::IntSpin, "SMESH", "elem0d_size"); - int sp = addPreference( "", elemGroup, LightApp_Preferences::Space ); int elemW = addPreference(tr("PREF_WIDTH"), elemGroup, LightApp_Preferences::IntSpin, "SMESH", "element_width"); int shrink = addPreference(tr("PREF_SHRINK_COEFF"), elemGroup, @@ -4528,9 +4569,6 @@ void SMESHGUI::createPreferences() setPreferenceProperty( size0d, "min", 1 ); setPreferenceProperty( size0d, "max", 10 ); - setPreferenceProperty( sp, "hstretch", 0 ); - setPreferenceProperty( sp, "vstretch", 0 ); - setPreferenceProperty( elemW, "min", 1 ); setPreferenceProperty( elemW, "max", 5 ); @@ -5102,6 +5140,12 @@ void SMESHGUI::storeVisualParameters (int savePoint) colorStr += gDigitsSep; colorStr += QString::number(g); colorStr += gDigitsSep; colorStr += QString::number(b); + aSmeshActor->GetOutlineColor(r, g, b); + colorStr += gDigitsSep; colorStr += "outline"; + colorStr += gDigitsSep; colorStr += QString::number(r); + colorStr += gDigitsSep; colorStr += QString::number(g); + colorStr += gDigitsSep; colorStr += QString::number(b); + aSmeshActor->GetNodeColor(r, g, b); colorStr += gDigitsSep; colorStr += "node"; colorStr += gDigitsSep; colorStr += QString::number(r); @@ -5459,16 +5503,17 @@ void SMESHGUI::restoreVisualParameters (int savePoint) // Colors else if (paramNameStr == "Colors") { QStringList colors = val.split(gDigitsSep, QString::SkipEmptyParts); - if (colors.count() == 16 || colors.count() == 14 ) { + if (colors.count() == 16 || colors.count() == 17 ) { if (colors[0] != "surface" || colors[4] != "backsurface" || (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 or surface:r:g:b:backsurface:delta: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:outline:r:g:b"); } else { int delta = 0; float er,eg,eb; float nr,ng,nb; + vtkFloatingPointType otr,otg,otb; //Old case backsurface color is independent if( colors.count() == 16 ) { QColor ffc; @@ -5480,6 +5525,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint) nr = colors[13].toFloat(); ng = colors[14].toFloat(); nb = colors[15].toFloat(); + SMESH::GetColor("SMESH", "outline_color", otr, otg, otb, QColor( 0, 70, 0 ) ); } else { //New case backsurface color depends on surface color delta = colors[5].toInt(); @@ -5491,10 +5537,15 @@ void SMESHGUI::restoreVisualParameters (int savePoint) nr = colors[11].toFloat(); ng = colors[12].toFloat(); nb = colors[13].toFloat(); + + otr = colors[14].toFloat(); + otg = colors[15].toFloat(); + otb = colors[16].toFloat(); } aSmeshActor->SetSufaceColor(colors[1].toFloat(), colors[2].toFloat(), colors[3].toFloat(), delta); aSmeshActor->SetEdgeColor(er,eg,eb); aSmeshActor->SetNodeColor(nr,ng,nb); + aSmeshActor->SetOutlineColor(otr,otg,otb); } } } diff --git a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx b/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx index e411e7049..543931c3f 100644 --- a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.cxx @@ -85,9 +85,12 @@ SMESHGUI_Preferences_ColorDlg::SMESHGUI_Preferences_ColorDlg( SMESHGUI* theModul toolSurfColor = new QtxBiColorTool(ButtonGroup1); toolSurfColor->setText("Back surface color"); - QLabel* TextLabel_Outine = new QLabel( tr( "Outline" ), ButtonGroup1 ); + QLabel* TextLabel_Outline = new QLabel( tr( "Outline color" ), ButtonGroup1 ); btnOutlineColor = new QtxColorButton( ButtonGroup1 ); + QLabel* TextLabel_Wireframe = new QLabel( tr( "Wireframe color" ), ButtonGroup1 ); + btnWireframeColor = new QtxColorButton( ButtonGroup1 ); + QLabel* TextLabel_0DElements_Color = new QLabel( tr( "0D elements" ), ButtonGroup1 ); btn0DElementsColor = new QtxColorButton( ButtonGroup1 ); @@ -117,12 +120,18 @@ SMESHGUI_Preferences_ColorDlg::SMESHGUI_Preferences_ColorDlg( SMESHGUI* theModul ButtonGroup1Layout->addWidget( TextLabel_Fill, 0, 0 ); ButtonGroup1Layout->addWidget( toolSurfColor, 0, 1, 1, 3 ); - ButtonGroup1Layout->addWidget( TextLabel_Outine, 1, 0 ); + + ButtonGroup1Layout->addWidget( TextLabel_Outline, 1, 0 ); ButtonGroup1Layout->addWidget( btnOutlineColor, 1, 1 ); - ButtonGroup1Layout->addWidget( TextLabel_0DElements_Color, 1, 2 ); - ButtonGroup1Layout->addWidget( btn0DElementsColor, 1, 3 ); - ButtonGroup1Layout->addWidget( TextLabel_0DElements_Size, 2, 0 ); - ButtonGroup1Layout->addWidget( SpinBox_0DElements_Size, 2, 1 ); + ButtonGroup1Layout->addWidget( TextLabel_Wireframe, 1, 2 ); + ButtonGroup1Layout->addWidget( btnWireframeColor, 1, 3 ); + + ButtonGroup1Layout->addWidget( TextLabel_0DElements_Color, 2, 0 ); + ButtonGroup1Layout->addWidget( btn0DElementsColor, 2, 1 ); + + ButtonGroup1Layout->addWidget( TextLabel_0DElements_Size, 2, 2 ); + ButtonGroup1Layout->addWidget( SpinBox_0DElements_Size, 2, 3 ); + ButtonGroup1Layout->addWidget( TextLabel_Width, 3, 0 ); ButtonGroup1Layout->addWidget( SpinBox_Width, 3, 1 ); ButtonGroup1Layout->addWidget( TextLabel_ShrinkCoeff, 3, 2 ); @@ -175,6 +184,23 @@ SMESHGUI_Preferences_ColorDlg::SMESHGUI_Preferences_ColorDlg( SMESHGUI* theModul ButtonGroup3Layout->addWidget( SpinBox_Orientation_Scale, 0, 3 ); ButtonGroup3Layout->addWidget( CheckBox_Orientation_3DVectors, 1, 0, 1, 4 ); + // ------------------------------- + QGroupBox* ButtonGroup4 = new QGroupBox( tr( "Selection" ), this ); + QGridLayout* ButtonGroup4Layout = new QGridLayout( ButtonGroup4 ); + ButtonGroup3Layout->setSpacing( SPACING ); + ButtonGroup3Layout->setMargin( MARGIN ); + + QLabel* TextLabel_Selection_Color = new QLabel( tr( "Selection color" ), ButtonGroup4 ); + btnSelectionColor = new QtxColorButton( ButtonGroup4 ); + + QLabel* TextLabel_Preselection_Color = new QLabel( tr( "Pre-selection color" ), ButtonGroup4 ); + btnPreselectionColor = new QtxColorButton( ButtonGroup4 ); + + ButtonGroup4Layout->addWidget( TextLabel_Selection_Color, 0, 0 ); + ButtonGroup4Layout->addWidget( btnSelectionColor, 0, 1 ); + ButtonGroup4Layout->addWidget( TextLabel_Preselection_Color, 0, 2 ); + ButtonGroup4Layout->addWidget( btnPreselectionColor, 0, 3 ); + // ------------------------------- QGroupBox* GroupButtons = new QGroupBox( this ); QHBoxLayout* GroupButtonsLayout = new QHBoxLayout( GroupButtons ); @@ -201,6 +227,9 @@ SMESHGUI_Preferences_ColorDlg::SMESHGUI_Preferences_ColorDlg( SMESHGUI* theModul topLayout->addWidget( ButtonGroup1 ); topLayout->addWidget( ButtonGroup2 ); topLayout->addWidget( ButtonGroup3 ); + // rnv: Selection and preselection colors are defined only in the Preferences + // topLayout->addWidget( ButtonGroup4 ); + ButtonGroup4->hide(); topLayout->addWidget( GroupButtons ); // ------------------------------- @@ -306,11 +335,14 @@ void SMESHGUI_Preferences_ColorDlg::ActivateThisDialog() void SMESHGUI_Preferences_ColorDlg::SetColor( int type, const QColor& color ) { switch ( type ) { - case 1 : toolSurfColor->setMainColor( color ); break; // fill - case 2 : btnOutlineColor->setColor( color ); break; // outline - case 3 : btnNodeColor->setColor( color ); break; // node - case 5 : btn0DElementsColor->setColor( color ); break; // 0d elements - case 6 : btnOrientationColor->setColor( color ); break; // orientation of faces + case 1 : toolSurfColor->setMainColor( color ); break; // fill + case 2 : btnWireframeColor->setColor( color ); break; // wireframe + case 3 : btnNodeColor->setColor( color ); break; // node + case 4 : btnOutlineColor->setColor( color ); break; // outline + case 5 : btn0DElementsColor->setColor( color ); break; // 0d elements + case 6 : btnOrientationColor->setColor( color ); break; // orientation of faces + case 7 : btnSelectionColor->setColor( color ); break; // selection color + case 8 : btnPreselectionColor->setColor( color ); break; // pre-selection color default: break; } } @@ -323,11 +355,15 @@ QColor SMESHGUI_Preferences_ColorDlg::GetColor( int type ) { QColor color; switch ( type ) { - case 1 : color = toolSurfColor->mainColor(); break; // fill - case 2 : color = btnOutlineColor->color(); break; // outline - case 3 : color = btnNodeColor->color(); break; // node - case 5 : color = btn0DElementsColor->color(); break; // 0d elements - case 6 : color = btnOrientationColor->color(); break; // orientation of faces + case 1 : color = toolSurfColor->mainColor(); break; // fill + case 2 : color = btnWireframeColor->color(); break; // outline + case 3 : color = btnNodeColor->color(); break; // node + case 4 : color = btnOutlineColor->color(); break; // node + case 5 : color = btn0DElementsColor->color(); break; // 0d elements + case 6 : color = btnOrientationColor->color(); break; // orientation of faces + case 7 : color = btnSelectionColor->color(); break; // selection color + case 8 : color = btnPreselectionColor->color(); break; // pre-selection color + default: break; } return color; diff --git a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h b/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h index 05eef6924..b2675314b 100644 --- a/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h +++ b/src/SMESHGUI/SMESHGUI_Preferences_ColorDlg.h @@ -88,6 +88,7 @@ private: SMESHGUI* mySMESHGUI; QtxBiColorTool* toolSurfColor; + QtxColorButton* btnWireframeColor; QtxColorButton* btnOutlineColor; QtxColorButton* btn0DElementsColor; SalomeApp_IntSpinBox* SpinBox_0DElements_Size; @@ -98,6 +99,8 @@ private: QtxColorButton* btnOrientationColor; SMESHGUI_SpinBox* SpinBox_Orientation_Scale; QCheckBox* CheckBox_Orientation_3DVectors; + QtxColorButton* btnPreselectionColor; + QtxColorButton* btnSelectionColor; QString myHelpFileName; }; diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index 60db88cc7..b10091049 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -3552,6 +3552,22 @@ Please, create VTK viewer and try again PREF_BACKFACE Back surface color + + PREF_WIREFRAME + Wireframe color + + + PREF_GROUP_SELECTION + Selection + + + PREF_SELECTION + Selection color + + + PREF_PRE_SELECTION + Pre-selection color + PREF_COLOR Color @@ -3706,7 +3722,7 @@ Please, create VTK viewer and try again PREF_OUTLINE - Outline + Outline color PREF_PRECISION_USE -- 2.39.2