X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FStdMeshersGUI%2FStdMeshersGUI_NbSegmentsCreator.cxx;h=51369a80d63dc7e4bce895134b7c1a179cb43596;hp=fa4eb1dcc19f93aba7715d911075fc99ce650bb5;hb=HEAD;hpb=6ae3c2c26f6e42a48246e314ab92c36656f7c667;ds=sidebyside diff --git a/src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.cxx b/src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.cxx index fa4eb1dcc..d60a9a9bd 100644 --- a/src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.cxx +++ b/src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2024 CEA, EDF, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -36,6 +36,7 @@ #include #include #include +#include // IDL includes #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis) @@ -65,6 +66,7 @@ StdMeshersGUI_NbSegmentsCreator::StdMeshersGUI_NbSegmentsCreator() myNbSeg( 0 ), myDistr( 0 ), myScale( 0 ), + myBeta( 0 ), myTable( 0 ), #ifndef DISABLE_PLOT2DVIEWER myPreview( 0 ), @@ -73,6 +75,7 @@ StdMeshersGUI_NbSegmentsCreator::StdMeshersGUI_NbSegmentsCreator() myConvBox( 0 ), myConv( 0 ), myLScale( 0 ), + myLBeta( 0 ), myLTable( 0 ), myLExpr( 0 ), myInfo( 0 ), @@ -94,9 +97,11 @@ bool StdMeshersGUI_NbSegmentsCreator::checkParams( QString& msg ) const readParamsFromHypo( data_old ); readParamsFromWidgets( data_new ); bool res = storeParamsToHypo( data_new ); - storeParamsToHypo( data_old ); res = myNbSeg->isValid( msg, true ) && res; res = myScale->isValid( msg, true ) && res; + res = myBeta->isValid( msg, true ) && res; + if ( !res ) + storeParamsToHypo( data_old ); return res; } @@ -150,6 +155,7 @@ QFrame* StdMeshersGUI_NbSegmentsCreator::buildFrame() types.append( tr( "SMESH_DISTR_SCALE" ) ); types.append( tr( "SMESH_DISTR_TAB" ) ); types.append( tr( "SMESH_DISTR_EXPR" ) ); + types.append( tr( "SMESH_DISTR_BETALAW" ) ); myDistr->addItems( types ); myGroupLayout->addWidget( myDistr, row, 1 ); row++; @@ -237,6 +243,14 @@ QFrame* StdMeshersGUI_NbSegmentsCreator::buildFrame() lay->setStretchFactor( myReversedEdgesHelper, 1 ); } + // 7) Beta Law distribution + myGroupLayout->addWidget(myLBeta = new QLabel(tr("SMESH_NB_SEGMENTS_BETA_PARAM"), GroupC1), row, 0); + myBeta = new SMESHGUI_SpinBoxForbiddendRange(GroupC1); + myBeta->RangeStepAndValidator(-1E+5, 1E+5, 0.00001, "parametric_precision"); + myBeta->SetForbiddenRange(-1.0, 1.0); + myGroupLayout->addWidget(myBeta, row, 1); + row++; + connect( myNbSeg, SIGNAL( valueChanged( const QString& ) ), this, SLOT( onValueChanged() ) ); connect( myDistr, SIGNAL( activated( int ) ), this, SLOT( onValueChanged() ) ); connect( myTable, SIGNAL( valueChanged( int, int ) ), this, SLOT( onValueChanged() ) ); @@ -270,6 +284,8 @@ void StdMeshersGUI_NbSegmentsCreator::retrieveParams() const myTable->setData( data.myTable ); myExpr->setText( data.myExpr ); + myBeta->setValue(data.myBeta); + if ( dlg() ) dlg()->setMinimumSize( dlg()->minimumSizeHint().width(), dlg()->minimumSizeHint().height() ); } @@ -287,20 +303,21 @@ QString StdMeshersGUI_NbSegmentsCreator::storeParams() const Regular, //!< equidistant distribution Scale, //!< scale distribution TabFunc, //!< distribution with density function presented by table - ExprFunc //!< distribution with density function presented by expression + ExprFunc, //!< distribution with density function presented by expression + BetaLaw //!< distribution with density function presented by expression }; bool hasConv = false; switch ( data.myDistrType ) { case Regular : valStr += tr("SMESH_DISTR_REGULAR"); break; - case Scale : - valStr += tr("SMESH_NB_SEGMENTS_SCALE_PARAM") + " = " + QString::number( data.myScale );\ + case Scale : + valStr += tr("SMESH_NB_SEGMENTS_SCALE_PARAM") + " = " + QString::number( data.myScale ); break; case TabFunc : { //valStr += tr("SMESH_TAB_FUNC"); bool param = true; - for( int i=0; i < data.myTable.length(); i++, param = !param ) { + for( CORBA::ULong i = 0; i < data.myTable.length(); i++, param = !param ) { if ( param ) valStr += "["; valStr += QString::number( data.myTable[ i ]); @@ -313,6 +330,10 @@ QString StdMeshersGUI_NbSegmentsCreator::storeParams() const valStr += data.myExpr; hasConv = true; break; + + case BetaLaw: + valStr += tr("SMESH_NB_SEGMENTS_BETA_PARAM") + " = " + QString::number(data.myBeta); + break; } if ( hasConv ) { @@ -365,6 +386,7 @@ bool StdMeshersGUI_NbSegmentsCreator::readParamsFromHypo( NbSegmentsHypothesisDa h_data.myExpr = distr==3 ? h->GetExpressionFunction() : "1"; h_data.myConv = distr==2 || distr==3 ? h->ConversionMode() : 1; /*cut negative by default*/ + h_data.myBeta = distr==4 ? h->GetBeta() : 1.01; return true; } @@ -378,21 +400,22 @@ bool StdMeshersGUI_NbSegmentsCreator::storeParamsToHypo( const NbSegmentsHypothe try { if( isCreation() ) - SMESH::SetName( SMESH::FindSObject( h ), h_data.myName.toLatin1().data() ); + SMESH::SetName( SMESH::FindSObject( h ), h_data.myName.toUtf8().data() ); - h->SetVarParameter( h_data.myNbSegVarName.toLatin1().constData(), "SetNumberOfSegments" ); + h->SetVarParameter( h_data.myNbSegVarName.toUtf8().constData(), "SetNumberOfSegments" ); h->SetNumberOfSegments( h_data.myNbSeg ); - int distr = h_data.myDistrType; - h->SetDistrType( distr ); + int distr = h_data.myDistrType; + if ( distr == 0 ) + h->SetDistrType( distr ); // this is actually needed at non-uniform -> uniform switch if( distr==1 ) { - h->SetVarParameter( h_data.myScaleVarName.toLatin1().constData(), "SetScaleFactor" ); + h->SetVarParameter( h_data.myScaleVarName.toUtf8().constData(), "SetScaleFactor" ); h->SetScaleFactor( h_data.myScale ); } if( distr==2 || distr==3 ) h->SetConversionMode( h_data.myConv ); - if( distr==1 || distr==2 || distr==3 ) { + if( distr==1 || distr==2 || distr==3 || distr == 4) { h->SetReversedEdges( myDirectionWidget->GetListOfIDs() ); h->SetObjectEntry( myDirectionWidget->GetMainShapeEntry() ); } @@ -401,10 +424,16 @@ bool StdMeshersGUI_NbSegmentsCreator::storeParamsToHypo( const NbSegmentsHypothe h->SetTableFunction( h_data.myTable ); if( distr==3 ) - h->SetExpressionFunction( h_data.myExpr.toLatin1().data() ); + h->SetExpressionFunction( h_data.myExpr.toUtf8().data() ); //setting of function must follow after setConversionMode, because otherwise //the function will be checked with old conversion mode, so that it may occurs //unexpected errors for user + + if(distr == 4) + { + h->SetDistrType(distr); + h->SetBeta(h_data.myBeta); + } } catch(const SALOME::SALOME_Exception& ex) { @@ -423,6 +452,7 @@ bool StdMeshersGUI_NbSegmentsCreator::readParamsFromWidgets( NbSegmentsHypothesi h_data.myDistrType = myDistr->currentIndex(); h_data.myConv = myConv->checkedId(); h_data.myScale = myScale->value(); + h_data.myBeta = myBeta->value(); myTable->data( h_data.myTable ); h_data.myExpr = myExpr->text(); return true; @@ -445,25 +475,25 @@ void StdMeshersGUI_NbSegmentsCreator::onValueChanged() myTable->setData( arr ); //update data in table } - myScale->setShown( distr==1 ); - myLScale->setShown( distr==1 ); - myReversedEdgesBox->setShown( distr!=0 ); + myScale->setVisible( distr==1 ); + myLScale->setVisible( distr==1 ); + myReversedEdgesBox->setVisible( distr!=0 ); if ( myReversedEdgesHelper ) { myReversedEdgesHelper->Clear(); - myReversedEdgesHelper->setShown( distr!=0 ); + myReversedEdgesHelper->setVisible( distr!=0 ); } myDirectionWidget->ShowPreview( distr!=0 ); bool isFunc = distr==2 || distr==3; #ifndef DISABLE_PLOT2DVIEWER - myPreview->setShown( isFunc ); + myPreview->setVisible( isFunc ); #endif - myConvBox->setShown( isFunc ); + myConvBox->setVisible( isFunc ); - myTable->setShown( distr==2 ); - myExpr->setShown( distr==3 ); - myLExpr->setShown( distr==3 ); - myInfo->setShown( distr==3); + myTable->setVisible( distr==2 ); + myExpr->setVisible( distr==3 ); + myLExpr->setVisible( distr==3 ); + myInfo->setVisible( distr==3); #ifndef DISABLE_PLOT2DVIEWER //change of preview @@ -481,6 +511,11 @@ void StdMeshersGUI_NbSegmentsCreator::onValueChanged() myPreview->setConversion( StdMeshersGUI_DistrPreview::Conversion( myConv->checkedId() ) ); #endif + // Beta Law UI elements + const bool isBetaLaw = distr == 4; + myBeta->setVisible(isBetaLaw); + myLBeta->setVisible(isBetaLaw); + if ( (QtxComboBox*)sender() == myDistr && dlg() ) { QApplication::instance()->processEvents(); myGroupLayout->invalidate();