Salome HOME
Merge branch 'OCCT780'
[modules/smesh.git] / src / StdMeshersGUI / StdMeshersGUI_NbSegmentsCreator.cxx
index fa4eb1dcc19f93aba7715d911075fc99ce650bb5..d60a9a9bd204b7c1a8eb94e8dc90b818d47a6bda 100644 (file)
@@ -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 <SMESHGUI_Utils.h>
 #include <SMESHGUI_HypothesesUtils.h>
 #include <SMESHGUI_SpinBox.h>
+#include <SMESHGUI_SpinBoxForbiddendRange.h>
 
 // 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();