X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FStdMeshersGUI%2FStdMeshersGUI_Parameters.cxx;h=7d52876d96b7567e8858da08939ee21e5a823b59;hb=9d28d73b09e96b23cf9937afa17474f98508df18;hp=0af344fb2650d03296c254a57d7d77398d67c77b;hpb=0bcee2eb2843d59c812ee87678520304226f1ade;p=modules%2Fsmesh.git diff --git a/src/StdMeshersGUI/StdMeshersGUI_Parameters.cxx b/src/StdMeshersGUI/StdMeshersGUI_Parameters.cxx index 0af344fb2..7d52876d9 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_Parameters.cxx +++ b/src/StdMeshersGUI/StdMeshersGUI_Parameters.cxx @@ -26,10 +26,20 @@ #include "StdMeshersGUI_Parameters.h" +//#include "SMESHGUI_SpinBox.h" // for the sake of COORD_MAX, COORD_MIN definition + #include using namespace std; +#define VALUE_MAX 1.0e+15 // COORD_MAX +#define VALUE_MAX_2 (VALUE_MAX*VALUE_MAX) +#define VALUE_MAX_3 (VALUE_MAX*VALUE_MAX*VALUE_MAX) + +#define VALUE_SMALL 1.0e-15 +#define VALUE_SMALL_2 (VALUE_SMALL*VALUE_SMALL) +#define VALUE_SMALL_3 (VALUE_SMALL*VALUE_SMALL*VALUE_SMALL) + //======================================================================= //function : HasParameters //purpose : @@ -55,7 +65,25 @@ void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param, int initValue) { SMESHGUI_intParameter* p = dynamic_cast(param.get()); - if ( p ) p->InitValue() = initValue; + if ( p ) + { + p->InitValue() = initValue; + return; + } + + SMESHGUI_enumParameter* q = dynamic_cast(param.get()); + if( q ) + { + q->InitValue() = initValue; + return; + } + + SMESHGUI_boolParameter* b = dynamic_cast(param.get()); + if( b ) + { + b->InitValue() = (bool)initValue; + return; + } } //======================================================================= @@ -82,6 +110,21 @@ void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param, if ( p ) p->InitValue() = initValue; } +//======================================================================= +//function : SetInitValue +//purpose : +//======================================================================= +void StdMeshersGUI_Parameters::SetInitValue( SMESHGUI_aParameterPtr param, + SMESH::double_array& initValue) +{ + SMESHGUI_tableParameter* p = dynamic_cast(param.get()); + if( p ) + { + p->setRowCount( initValue.length()/2 ); + p->setData( initValue ); + } +} + //======================================================================= //function : GetParameters //purpose : @@ -90,6 +133,9 @@ void StdMeshersGUI_Parameters::SetInitValue(SMESHGUI_aParameterPtr param, // 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)) void StdMeshersGUI_Parameters::GetParameters (const QString& hypType, list & paramList ) @@ -100,49 +146,98 @@ void StdMeshersGUI_Parameters::GetParameters (const QString& hyp { paramList.push_back( DOUBLE_PARAM (1.0, QObject::tr("SMESH_LOCAL_LENGTH_PARAM"), - 1E-3, 999.999, 1.0, 6)); + VALUE_SMALL, VALUE_MAX, 1.0, 6)); } else if (hypType.compare("NumberOfSegments") == 0) { + //0-th parameter in list paramList.push_back ( INT_PARAM (3, QObject::tr("SMESH_NB_SEGMENTS_PARAM"), 1, 9999 )); + QStringList types; + types.append( QObject::tr( "SMESH_DISTR_REGULAR" ) ); + types.append( QObject::tr( "SMESH_DISTR_SCALE" ) ); + types.append( QObject::tr( "SMESH_DISTR_TAB" ) ); + types.append( QObject::tr( "SMESH_DISTR_EXPR" ) ); + //string description of distribution types + + SMESHGUI_enumParameter* type = new SMESHGUI_enumParameter( types, 0, QObject::tr( "SMESH_DISTR_TYPE" ) ); + SMESHGUI_dependParameter::ShownMap& aMap = type->shownMap(); + aMap[0].append( 0 ); // if DistrType=0 (regular), then number of segments and types are shown (0-th and 1-th) + aMap[0].append( 1 ); + aMap[1].append( 0 ); // if DistrType=1 (scale), then number of segments, types and scale are shown + aMap[1].append( 1 ); + aMap[1].append( 2 ); + aMap[2].append( 0 ); // if DistrType=2 (table), then number of segments, types, table and exponent are shown + aMap[2].append( 1 ); + aMap[2].append( 3 ); + aMap[2].append( 5 ); + aMap[3].append( 0 ); // if DistrType=3 (expression), then number of segments, types, expression and exponent are shown + aMap[3].append( 1 ); + aMap[3].append( 4 ); + aMap[3].append( 5 ); + //1-th parameter in list + paramList.push_back ( SMESHGUI_aParameterPtr( type ) ); + + //2-th parameter in list + 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" ) ); + tab->setRowCount( 5 ); + tab->setColCount( 2 ); + //default size of table: 5x2 + + tab->setColName( 0, "t" ); + tab->setColName( 1, "f(t)" ); + tab->setValidator( 0, 0.0, 1.0, 3 ); + tab->setValidator( 1, 1E-7, 1E+300, 3 ); + tab->setEditRows( true ); + + //3-th parameter in list + paramList.push_back ( SMESHGUI_aParameterPtr( tab ) ); + + //4-th parameter in list + paramList.push_back ( STR_PARAM ( "", QObject::tr( "SMESH_EXPR_FUNC" ) ) ); + + //5-th parameter in list + paramList.push_back ( BOOL_PARAM ( false, QObject::tr( "SMESH_EXP_MODE" ) ) ); } else if (hypType.compare("Arithmetic1D") == 0) { paramList.push_back( DOUBLE_PARAM ( 1.0, QObject::tr("SMESH_START_LENGTH_PARAM"), - 1E-3, 999.999, 1, 6)); + VALUE_SMALL, VALUE_MAX, 1, 6)); paramList.push_back( DOUBLE_PARAM ( 10.0, QObject::tr("SMESH_END_LENGTH_PARAM"), - 1E-3, 999.999, 1, 6)); + VALUE_SMALL, VALUE_MAX, 1, 6)); } else if (hypType.compare("MaxElementArea") == 0) { paramList.push_back( DOUBLE_PARAM (1.0, QObject::tr("SMESH_MAX_ELEMENT_AREA_PARAM"), - 1.E-6, 999999.999, 1.0, 6)); + VALUE_SMALL_2, VALUE_MAX_2, 1.0, 6)); } else if (hypType.compare("MaxElementVolume") == 0) { paramList.push_back( DOUBLE_PARAM ( 1.0, QObject::tr("SMESH_MAX_ELEMENT_VOLUME_PARAM"), - 1.E-9, 1.E9, 1.0, 6)); + VALUE_SMALL_3, VALUE_MAX_3, 1.0, 6)); } else if (hypType.compare("StartEndLength") == 0) { paramList.push_back( DOUBLE_PARAM ( 1.0, QObject::tr("SMESH_START_LENGTH_PARAM"), - 1.0E-3, 999.999, 1, 6)); + VALUE_SMALL, VALUE_MAX, 1, 6)); paramList.push_back( DOUBLE_PARAM ( 10.0, QObject::tr("SMESH_END_LENGTH_PARAM"), - 1.0E-3, 999.999, 1, 6)); + VALUE_SMALL, VALUE_MAX, 1, 6)); } else if (hypType.compare("Deflection1D") == 0) { paramList.push_back( DOUBLE_PARAM ( 1.0, QObject::tr("SMESH_DEFLECTION1D_PARAM"), - 1.0E-3, 999.999, 1, 6)); + VALUE_SMALL, VALUE_MAX, 1, 6)); } } @@ -174,7 +269,34 @@ void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr the { StdMeshers::StdMeshers_NumberOfSegments_var NOS = StdMeshers::StdMeshers_NumberOfSegments::_narrow(theHyp); - SetInitValue( paramList.front(), (int) NOS->GetNumberOfSegments()); + + list::iterator anIt = paramList.begin(); + SetInitValue( *anIt, (int) NOS->GetNumberOfSegments()); anIt++; + int DType = (int) NOS->GetDistrType(); + SetInitValue( *anIt, DType ); anIt++; + + if( DType==1 ) + SetInitValue( *anIt, NOS->GetScaleFactor()); + anIt++; + + if( DType==2 ) + { + SMESH::double_array* tab_func = NOS->GetTableFunction(); + SetInitValue( *anIt, *tab_func ); + delete tab_func; + } + anIt++; + + if( DType==3 ) + { + char* expr_func = NOS->GetExpressionFunction(); + SetInitValue( *anIt, expr_func ); + delete expr_func; + } + anIt++; + + if( DType==2 || DType==3 ) + SetInitValue( *anIt, (bool)NOS->IsExponentMode()); } else if (hypType.compare("Arithmetic1D") == 0) { @@ -223,20 +345,28 @@ void StdMeshersGUI_Parameters::GetParameters (SMESH::SMESH_Hypothesis_ptr for ( ; paramIt != paramList.end(); paramIt++) { if (params.compare("")) params += " ; "; - if ((*paramIt)->GetType() == SMESHGUI_aParameter::DOUBLE ) { + SMESHGUI_aParameter::Type t = (*paramIt)->GetType(); + if( t==SMESHGUI_aParameter::DOUBLE ) + { double aDoubleValue = 0.; (*paramIt)->GetNewDouble(aDoubleValue); params += QString::number(aDoubleValue); } - else if ((*paramIt)->GetType() == SMESHGUI_aParameter::TEXT ) { + else if( t==SMESHGUI_aParameter::STRING || t==SMESHGUI_aParameter::ENUM ) + { QString aStrValue( "" ); (*paramIt)->GetNewText(aStrValue); params += aStrValue.simplifyWhiteSpace(); } - else { + else if( t==SMESHGUI_aParameter::TABLE ) + { + params += "TABLE"; + } + else + { int aIntValue = 0; (*paramIt)->GetNewInt(aIntValue); - params += QString::number(aIntValue);; + params += QString::number(aIntValue); } } } @@ -267,9 +397,32 @@ bool StdMeshersGUI_Parameters::SetParameters(SMESH::SMESH_Hypothesis_ptr { StdMeshers::StdMeshers_NumberOfSegments_var NOS = StdMeshers::StdMeshers_NumberOfSegments::_narrow(theHyp); - int NbSeg = NOS->GetNumberOfSegments(); - modified = paramList.front()->GetNewInt( NbSeg ); - NOS->SetNumberOfSegments(NbSeg); + + list::const_iterator anIt = paramList.begin(); + int NbSeg, DType; + double Scale; + SMESH::double_array TabF; + QString exprF; + int expType; + + modified = (*anIt)->GetNewInt( NbSeg ); anIt++; + modified = (*anIt)->GetNewInt( DType ) || modified; anIt++; + modified = (*anIt)->GetNewDouble( Scale ) || modified; anIt++; + SMESHGUI_aParameterPtr p = *anIt; + ((SMESHGUI_tableParameter*)p.get())->data( TabF ); anIt++; modified = true; + modified = (*anIt)->GetNewText( exprF ) || modified; anIt++; + modified = (*anIt)->GetNewInt( expType ) || modified; + + NOS->SetNumberOfSegments( NbSeg ); + NOS->SetDistrType( DType ); + if( DType==1 ) + NOS->SetScaleFactor( Scale ); + if( DType==2 ) + NOS->SetTableFunction( TabF ); + if( DType==3 ) + NOS->SetExpressionFunction( CORBA::string_dup( exprF.latin1() ) ); + if( DType==2 || DType==3 ) + NOS->SetExponentMode( (bool)expType ); } else if (hypType.compare("Arithmetic1D") == 0) {