INT PAL 0052968: 'Mesh Information' dialog shows incorrect color of group built from geometry (edited)

This commit is contained in:
mpa 2015-11-30 13:31:21 +03:00
parent 8348eecb6b
commit aac6ba83a9
8 changed files with 47 additions and 13 deletions

View File

@ -32,6 +32,8 @@
using namespace std; using namespace std;
Quantity_Color SMESHDS_GroupBase::myDefaultColor = Quantity_Color( 0.0, 0.0, 0.0, Quantity_TOC_RGB );
//============================================================================= //=============================================================================
/*! /*!
* *
@ -44,7 +46,7 @@ SMESHDS_GroupBase::SMESHDS_GroupBase (const int theID,
myID(theID), myMesh(theMesh), myType(theType), myStoreName(""), myID(theID), myMesh(theMesh), myType(theType), myStoreName(""),
myCurIndex(0), myCurID(-1) myCurIndex(0), myCurID(-1)
{ {
myColor = Quantity_Color( 0.0, 0.0, 0.0, Quantity_TOC_RGB ); myColor = myDefaultColor;
} }
//============================================================================= //=============================================================================

View File

@ -85,6 +85,9 @@ class SMESHDS_EXPORT SMESHDS_GroupBase
int GetColorGroup() const; int GetColorGroup() const;
static void SetDefaultColor (const Quantity_Color& theColor)
{ myDefaultColor = theColor;}
protected: protected:
const SMDS_MeshElement* findInMesh (const int theID) const; const SMDS_MeshElement* findInMesh (const int theID) const;
void resetIterator(); void resetIterator();
@ -105,6 +108,8 @@ class SMESHDS_EXPORT SMESHDS_GroupBase
int myCurIndex; int myCurIndex;
int myCurID; int myCurID;
SMDS_ElemIteratorPtr myIterator; SMDS_ElemIteratorPtr myIterator;
static Quantity_Color myDefaultColor;
}; };
#endif #endif

View File

@ -1951,7 +1951,7 @@ SalomeApp_Module( "SMESH" )
nbSeg = aResourceMgr->integerValue( "SMESH", "nb_segments_per_edge", 15 ); nbSeg = aResourceMgr->integerValue( "SMESH", "nb_segments_per_edge", 15 );
myComponentSMESH->SetDefaultNbSegments( nbSeg ); myComponentSMESH->SetDefaultNbSegments( nbSeg );
const char* options[] = { "historical_python_dump", "forget_mesh_on_hyp_modif" }; const char* options[] = { "historical_python_dump", "forget_mesh_on_hyp_modif", "default_grp_color" };
for ( size_t i = 0; i < sizeof(options)/sizeof(char*); ++i ) for ( size_t i = 0; i < sizeof(options)/sizeof(char*); ++i )
if ( aResourceMgr->hasValue( "SMESH", options[i] )) if ( aResourceMgr->hasValue( "SMESH", options[i] ))
{ {
@ -5376,7 +5376,7 @@ void SMESHGUI::preferencesChanged( const QString& sect, const QString& name )
int nbSeg = aResourceMgr->integerValue( "SMESH", "nb_segments_per_edge", 15 ); int nbSeg = aResourceMgr->integerValue( "SMESH", "nb_segments_per_edge", 15 );
myComponentSMESH->SetDefaultNbSegments( nbSeg ); myComponentSMESH->SetDefaultNbSegments( nbSeg );
} }
else if ( name == "historical_python_dump" || name == "forget_mesh_on_hyp_modif") else if ( name == "historical_python_dump" || name == "forget_mesh_on_hyp_modif" || name == "default_grp_color" )
{ {
QString val = aResourceMgr->stringValue( "SMESH", name ); QString val = aResourceMgr->stringValue( "SMESH", name );
myComponentSMESH->SetOption( name.toLatin1().constData(), val.toLatin1().constData() ); myComponentSMESH->SetOption( name.toLatin1().constData(), val.toLatin1().constData() );

View File

@ -30,7 +30,6 @@
#include "SMESHGUI.h" #include "SMESHGUI.h"
#include "SMESHGUI_Utils.h" #include "SMESHGUI_Utils.h"
#include "SMESHGUI_GEOMGenUtils.h" #include "SMESHGUI_GEOMGenUtils.h"
#include <SMESH_ActorUtils.h>
#include <GeometryGUI.h> #include <GeometryGUI.h>
#include <GEOM_SelectionFilter.h> #include <GEOM_SelectionFilter.h>
@ -351,17 +350,9 @@ bool SMESHGUI_GroupOnShapeOp::onApply()
//printf( "apply() %s %s\n", (*geomID).latin1(), name.latin1() ); //printf( "apply() %s %s\n", (*geomID).latin1(), name.latin1() );
group = mesh->CreateGroupFromGEOM( elemType, name.toLatin1().data(), geom ); group = mesh->CreateGroupFromGEOM( elemType, name.toLatin1().data(), geom );
if( !group->_is_nil() ) { if( !group->_is_nil() )
// set default color for created group
QColor c = SMESH::GetColor( "SMESH", "default_grp_color" );
SALOMEDS::Color aColor;
aColor.R = c.redF();
aColor.G = c.greenF();
aColor.B = c.blueF();
group->SetColor(aColor);
if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( group ) ) if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( group ) )
anEntryList.append( aSObject->GetID().c_str() ); anEntryList.append( aSObject->GetID().c_str() );
}
} }
} }
SMESHGUI::Modified(); SMESHGUI::Modified();

View File

@ -31,6 +31,7 @@
#include "SMESHGUI_Utils.h" #include "SMESHGUI_Utils.h"
#include "SMESHGUI_VTKUtils.h" #include "SMESHGUI_VTKUtils.h"
#include "SMESH_TypeFilter.hxx" #include "SMESH_TypeFilter.hxx"
#include <SMESH_ActorUtils.h>
#include <LightApp_Application.h> #include <LightApp_Application.h>
#include <LightApp_SelectionMgr.h> #include <LightApp_SelectionMgr.h>
@ -232,6 +233,8 @@ void SMESHGUI_GroupOpDlg::Init()
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
aViewWindow->SetSelectionMode(ActorSelection); aViewWindow->SetSelectionMode(ActorSelection);
mySelectionMgr->installFilter(new SMESH_TypeFilter (SMESH::GROUP)); mySelectionMgr->installFilter(new SMESH_TypeFilter (SMESH::GROUP));
setDefaultGroupColor();
} }
/*! /*!
@ -447,6 +450,14 @@ SALOMEDS::Color SMESHGUI_GroupOpDlg::getColor() const
return aColor; return aColor;
} }
/*!
\brief Set default color for group
*/
void SMESHGUI_GroupOpDlg::setDefaultGroupColor()
{
myColorBtn->setColor( SMESH::GetColor( "SMESH", "default_grp_color", QColor( 255, 170, 0 ) ) );
}
/*! /*!
\brief SLOT, called when selection is changed. Current implementation does \brief SLOT, called when selection is changed. Current implementation does
nothing. The method should be redefined in derived classes to update nothing. The method should be redefined in derived classes to update
@ -505,6 +516,7 @@ void SMESHGUI_GroupOpDlg::reset()
{ {
myNameEdit->setText(""); myNameEdit->setText("");
myNameEdit->setFocus(); myNameEdit->setFocus();
setDefaultGroupColor();
} }
/*! /*!

View File

@ -88,6 +88,7 @@ protected:
SMESH::ListOfGroups* convert( const QList<SMESH::SMESH_GroupBase_var>& ); SMESH::ListOfGroups* convert( const QList<SMESH::SMESH_GroupBase_var>& );
SALOMEDS::Color getColor() const; SALOMEDS::Color getColor() const;
void setDefaultGroupColor();
void setIsApplyAndClose( const bool theFlag ); void setIsApplyAndClose( const bool theFlag );
bool isApplyAndClose() const; bool isApplyAndClose() const;

View File

@ -953,6 +953,22 @@ void SMESH_Gen_i::SetOption(const char* name, const char* value)
msgToGUI = "preferences/SMESH/forget_mesh_on_hyp_modif/"; msgToGUI = "preferences/SMESH/forget_mesh_on_hyp_modif/";
msgToGUI += myToForgetMeshDataOnHypModif ? "true" : "false"; msgToGUI += myToForgetMeshDataOnHypModif ? "true" : "false";
} }
else if ( strcmp(name, "default_grp_color") == 0 )
{
vector<int> color;
string str = value;
if ( str.at(0) == '#' && str.length() == 7 ) // color should be presented as a string (#aaaaaa, for example)
str = str.substr(1);
for ( int i = 0; i < str.length()/2; i++ )
if ( str.at(i*2) >= '0' && str.at(i*2) <= 'f' && str.at(i*2+1) >= '0' && str.at(i*2+1) <= 'f' )
color.push_back( strtol( str.substr( i*2, 2 ).c_str(), NULL, 16 ) );
if ( color.size() == 3 ) { // color must have three valid component
SMESHDS_GroupBase::SetDefaultColor( Quantity_Color( color[0]/255., color[1]/255., color[2]/255., Quantity_TOC_RGB ) );
myDefaultGroupColor = value;
msgToGUI = "preferences/SMESH/default_grp_color/";
msgToGUI += value;
}
}
// update preferences in case if SetOption() is invoked from python console // update preferences in case if SetOption() is invoked from python console
if ( !msgToGUI.empty() ) if ( !msgToGUI.empty() )
@ -983,6 +999,10 @@ char* SMESH_Gen_i::GetOption(const char* name)
{ {
return CORBA::string_dup( myToForgetMeshDataOnHypModif ? "true" : "false" ); return CORBA::string_dup( myToForgetMeshDataOnHypModif ? "true" : "false" );
} }
if ( strcmp(name, "default_grp_color") == 0 )
{
return CORBA::string_dup( myDefaultGroupColor.c_str() );
}
} }
return CORBA::string_dup( "" ); return CORBA::string_dup( "" );
} }

View File

@ -679,6 +679,9 @@ private:
SALOMEDS::Study_var myCurrentStudy; // Current study SALOMEDS::Study_var myCurrentStudy; // Current study
CORBA::Boolean myIsEmbeddedMode; // Current mode CORBA::Boolean myIsEmbeddedMode; // Current mode
// Default color of groups
std::string myDefaultGroupColor;
// To load full mesh data from study at hyp modification or not // To load full mesh data from study at hyp modification or not
bool myToForgetMeshDataOnHypModif; bool myToForgetMeshDataOnHypModif;