X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FStdMeshersGUI%2FStdMeshersGUI_Parameters.cxx;h=06c6540c87b754aaf4b22d9a2fea4b5bd6810e01;hb=e884fc2507d46c805b15dfa633f4326c821c2d8c;hp=7d52876d96b7567e8858da08939ee21e5a823b59;hpb=8672ad3e7621ac25fffa8517599afa84ffea509a;p=modules%2Fsmesh.git diff --git a/src/StdMeshersGUI/StdMeshersGUI_Parameters.cxx b/src/StdMeshersGUI/StdMeshersGUI_Parameters.cxx index 7d52876d9..06c6540c8 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_Parameters.cxx +++ b/src/StdMeshersGUI/StdMeshersGUI_Parameters.cxx @@ -26,9 +26,13 @@ #include "StdMeshersGUI_Parameters.h" -//#include "SMESHGUI_SpinBox.h" // for the sake of COORD_MAX, COORD_MIN definition - #include +#include +#include +#include + +#include +//#include using namespace std; @@ -53,6 +57,7 @@ bool StdMeshersGUI_Parameters::HasParameters (const QString& hypType) (hypType.compare("MaxElementVolume") == 0) || (hypType.compare("StartEndLength") == 0) || (hypType.compare("Deflection1D") == 0) || + (hypType.compare("AutomaticLength") == 0) || (hypType.compare("Arithmetic1D") == 0)); } @@ -125,17 +130,26 @@ void StdMeshersGUI_Parameters::SetInitValue( SMESHGUI_aParameterPtr param, } } -//======================================================================= -//function : GetParameters -//purpose : -//======================================================================= +//================================================================================ +/*! + * \brief Macros to comfortably create SMESHGUI_aParameterPtr of different types + */ +//================================================================================ // SMESHGUI_doubleParameter( initValue, label, bottom, top, step, decimals ) #define DOUBLE_PARAM(v,l,b,t,s,d) SMESHGUI_aParameterPtr(new SMESHGUI_doubleParameter(v,l,b,t,s,d)) #define INT_PARAM(v,l,b,t) SMESHGUI_aParameterPtr(new SMESHGUI_intParameter(v,l,b,t)) #define ENUM_PARAM(v,i,l) SMESHGUI_aParameterPtr(new SMESHGUI_enumParameter(v,i,l)) -#define STR_PARAM(i,l) SMESHGUI_aParameterPtr(new SMESHGUI_strParameter(i,l)) -#define BOOL_PARAM(i,l) SMESHGUI_aParameterPtr(new SMESHGUI_boolParameter(i,l)) +#define STR_PARAM(i,l,preview) SMESHGUI_aParameterPtr(new SMESHGUI_strParameter(i,l,preview)) +#define BOOL_PARAM(i,l,preview) SMESHGUI_aParameterPtr(new SMESHGUI_boolParameter(i,l,preview)) + +//================================================================================ +/*! + * \brief Fill parameter list with default values + * \param hypType - The name of hypothesis type + * \param paramList - The list to fill + */ +//================================================================================ void StdMeshersGUI_Parameters::GetParameters (const QString& hypType, list & paramList ) @@ -183,7 +197,7 @@ void StdMeshersGUI_Parameters::GetParameters (const QString& hyp paramList.push_back ( DOUBLE_PARAM (1.0, QObject::tr("SMESH_NB_SEGMENTS_SCALE_PARAM"), VALUE_SMALL, VALUE_MAX, 0.1, 6 )); - SMESHGUI_tableParameter* tab = new SMESHGUI_tableParameter( 0.0, QObject::tr( "SMESH_TAB_FUNC" ) ); + SMESHGUI_tableParameter* tab = new SMESHGUI_tableParameter( 0.0, QObject::tr( "SMESH_TAB_FUNC" ), true ); tab->setRowCount( 5 ); tab->setColCount( 2 ); //default size of table: 5x2 @@ -198,10 +212,10 @@ void StdMeshersGUI_Parameters::GetParameters (const QString& hyp paramList.push_back ( SMESHGUI_aParameterPtr( tab ) ); //4-th parameter in list - paramList.push_back ( STR_PARAM ( "", QObject::tr( "SMESH_EXPR_FUNC" ) ) ); + paramList.push_back ( STR_PARAM ( "", QObject::tr( "SMESH_EXPR_FUNC" ), true ) ); //5-th parameter in list - paramList.push_back ( BOOL_PARAM ( false, QObject::tr( "SMESH_EXP_MODE" ) ) ); + paramList.push_back ( BOOL_PARAM ( false, QObject::tr( "SMESH_EXP_MODE" ), true ) ); } else if (hypType.compare("Arithmetic1D") == 0) { @@ -239,12 +253,23 @@ void StdMeshersGUI_Parameters::GetParameters (const QString& hyp QObject::tr("SMESH_DEFLECTION1D_PARAM"), VALUE_SMALL, VALUE_MAX, 1, 6)); } + else if (hypType.compare("AutomaticLength") == 0) + { + SMESHGUI_aParameter * param = + new StdMeshersGUI_doubleSliderParameter ( QObject::tr("SMESH_FINENESS_PARAM"), + "0 ", " 1", + 0.0, 0.0, 1.0, 0.05); + paramList.push_back( SMESHGUI_aParameterPtr( param )); + } } - -//======================================================================= -//function : GetParameters -//purpose : -//======================================================================= + +//================================================================================ +/*! + * \brief Fill parameter list with real values the hypothesis has + * \param theHyp - The hypothesis to retrieve parameter values from + * \param paramList - The list to fill + */ +//================================================================================ void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr theHyp, list & paramList ) @@ -291,7 +316,7 @@ void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr the { char* expr_func = NOS->GetExpressionFunction(); SetInitValue( *anIt, expr_func ); - delete expr_func; + //delete expr_func; } anIt++; @@ -330,18 +355,29 @@ void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr the StdMeshers::StdMeshers_Deflection1D::_narrow(theHyp); SetInitValue( paramList.back(), hyp->GetDeflection()) ; } + else if (hypType.compare("AutomaticLength") == 0) + { + StdMeshers::StdMeshers_AutomaticLength_var hyp = + StdMeshers::StdMeshers_AutomaticLength::_narrow(theHyp); + SetInitValue( paramList.back(), hyp->GetFineness()); + } } -//======================================================================= -//function : GetParameters -//purpose : -//======================================================================= -void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr hyp, - list & paramList, +//================================================================================ +/*! + * \brief Return parameter values as a string + * \param hyp - not used + * \param paramList - list of parameter values + * \param params - output string + */ +//================================================================================ + +void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr , + const list& paramList, QString& params) { params = ""; - list::iterator paramIt = paramList.begin(); + list::const_iterator paramIt = paramList.begin(); for ( ; paramIt != paramList.end(); paramIt++) { if (params.compare("")) params += " ; "; @@ -376,6 +412,15 @@ void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr //purpose : //======================================================================= +//================================================================================ +/*! + * \brief Set parameter values from the list into a hypothesis + * \param theHyp - The hypothesis to modify + * \param paramList - list of parameter values + * \retval bool - true if any parameter value changed + */ +//================================================================================ + bool StdMeshersGUI_Parameters::SetParameters(SMESH::SMESH_Hypothesis_ptr theHyp, const list & paramList ) { @@ -474,6 +519,104 @@ bool StdMeshersGUI_Parameters::SetParameters(SMESH::SMESH_Hypothesis_ptr modified = paramList.front()->GetNewDouble( value ); hyp->SetDeflection( value ); } + else if (hypType.compare("AutomaticLength") == 0) + { + StdMeshers::StdMeshers_AutomaticLength_var hyp = + StdMeshers::StdMeshers_AutomaticLength::_narrow(theHyp); + double value = hyp->GetFineness() ; + modified = paramList.front()->GetNewDouble( value ); + hyp->SetFineness( value ); + } return modified ; } - + +//================================================================================ +/*! + * \brief Widget: slider with left and right labels + */ +//================================================================================ + +class StdMeshersGUI_SliderWith2Lables: public QHBox +{ +public: + StdMeshersGUI_SliderWith2Lables( const QString& leftLabel, + const QString& rightLabel, + QWidget * parent =0, + const char * name=0 ); + QSlider * getSlider() const { return _slider; } +private: + QSlider * _slider; +}; + +StdMeshersGUI_SliderWith2Lables::StdMeshersGUI_SliderWith2Lables( const QString& leftLabel, + const QString& rightLabel, + QWidget * parent, + const char * name ) + :QHBox(parent,name) +{ + if ( !leftLabel.isEmpty() ) + (new QLabel( this ))->setText( leftLabel ); + + _slider = new QSlider( Horizontal, this ); + + if ( !rightLabel.isEmpty() ) + (new QLabel( this ))->setText( rightLabel ); +} + +//================================================================================ +/*! + * \brief Constructor + * \param label - main label + * \param leftLabel - label to the left of slider + * \param rightLabel - label to the right of slider + * \param initValue - initial slider value + * \param bottom - least slider value + * \param top - maximal slider value + * \param precision - slider value precision + */ +//================================================================================ + +StdMeshersGUI_doubleSliderParameter:: +StdMeshersGUI_doubleSliderParameter (const QString& label, + const QString& leftLabel, + const QString& rightLabel, + const double initValue, + const double bottom, + const double top , + const double precision) + :SMESHGUI_doubleParameter(initValue,label,bottom,top,precision), + _leftLabel(leftLabel), _rightLabel(rightLabel) +{ +} + +QWidget* StdMeshersGUI_doubleSliderParameter::CreateWidget( QWidget* parent ) const +{ + return new StdMeshersGUI_SliderWith2Lables( _leftLabel, _rightLabel, parent ); +} + +void StdMeshersGUI_doubleSliderParameter::InitializeWidget( QWidget* aWidget) const +{ + StdMeshersGUI_SliderWith2Lables * paramWidget = + dynamic_cast (aWidget); + if ( paramWidget && paramWidget->getSlider() ) + { + QSlider * slider = paramWidget->getSlider(); + slider->setRange( 0, toInt( _top )); + slider->setValue( toInt( _initValue )); + } +} + +void StdMeshersGUI_doubleSliderParameter::TakeValue( QWidget* aWidget) +{ + StdMeshersGUI_SliderWith2Lables * paramWidget = + dynamic_cast (aWidget); + if ( paramWidget && paramWidget->getSlider() ) + { + int val = paramWidget->getSlider()->value(); + _newValue = Bottom() + val * Step(); + } +} +int StdMeshersGUI_doubleSliderParameter::toInt( double val ) const +{ + return (int) ceil(( val - _bottom ) / _step ); +}