-// 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
#include <SMESHGUI_Utils.h>
#include <SMESHGUI_HypothesesUtils.h>
#include <SMESHGUI_SpinBox.h>
+#include <SMESHGUI_SpinBoxForbiddendRange.h>
// IDL includes
#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
myNbSeg( 0 ),
myDistr( 0 ),
myScale( 0 ),
+ myBeta( 0 ),
myTable( 0 ),
#ifndef DISABLE_PLOT2DVIEWER
myPreview( 0 ),
myConvBox( 0 ),
myConv( 0 ),
myLScale( 0 ),
+ myLBeta( 0 ),
myLTable( 0 ),
myLExpr( 0 ),
myInfo( 0 ),
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;
}
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++;
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() ) );
myTable->setData( data.myTable );
myExpr->setText( data.myExpr );
+ myBeta->setValue(data.myBeta);
+
if ( dlg() )
dlg()->setMinimumSize( dlg()->minimumSizeHint().width(), dlg()->minimumSizeHint().height() );
}
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 ]);
valStr += data.myExpr;
hasConv = true;
break;
+
+ case BetaLaw:
+ valStr += tr("SMESH_NB_SEGMENTS_BETA_PARAM") + " = " + QString::number(data.myBeta);
+ break;
}
if ( hasConv )
{
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;
}
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() );
}
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)
{
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;
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
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();