Salome HOME
Merge updates of translations files
[modules/smesh.git] / src / StdMeshersGUI / StdMeshersGUI_StdHypothesisCreator.cxx
index 9595e67a0084357e32d576c2984d5bbd1caed484..0a033c0335ffa6b3b4715be869982c90ecf62419 100644 (file)
@@ -1,23 +1,23 @@
-//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
 //
-//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
-//  This library is free software; you can redistribute it and/or
-//  modify it under the terms of the GNU Lesser General Public
-//  License as published by the Free Software Foundation; either
-//  version 2.1 of the License.
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
 //
-//  This library is distributed in the hope that it will be useful,
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-//  Lesser General Public License for more details.
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
 //
-//  You should have received a copy of the GNU Lesser General Public
-//  License along with this library; if not, write to the Free Software
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //  File   : StdMeshersGUI_StdHypothesisCreator.cxx
 //  Author : Alexander SOLOVYOV, Open CASCADE S.A.S.
@@ -29,6 +29,7 @@
 #include <SMESHGUI_SpinBox.h>
 #include <SMESHGUI_HypothesesUtils.h>
 #include <SMESHGUI_Utils.h>
+#include <SMESHGUI_GEOMGenUtils.h>
 
 #include <SMESH_TypeFilter.hxx>
 #include <SMESH_NumberFilter.hxx>
@@ -284,8 +285,8 @@ namespace {
   /*!
    * \brief creates a filter for selection of shapes of given dimension
     * \param dim - dimension
-    * \param subShapeType - required type of subshapes, number of which must be \a nbSubShapes
-    * \param nbSubShapes - number of subshapes of given type
+    * \param subShapeType - required type of sub-shapes, number of which must be \a nbSubShapes
+    * \param nbSubShapes - number of sub-shapes of given type
     * \param closed - required closeness flag of a shape
     * \retval SUIT_SelectionFilter* - created filter
    */
@@ -342,8 +343,9 @@ namespace {
   {
     StdMeshersGUI_ObjectReferenceParamWdg* w =
       new StdMeshersGUI_ObjectReferenceParamWdg( filter, 0, /*multiSel=*/true);
-    w->SetObjects( objEntries );
+    //RNV: Firstly, activate selection, then set objects
     w->activateSelection();
+    w->SetObjects( objEntries );
     return w;
   }
 
@@ -390,7 +392,8 @@ bool StdMeshersGUI_StdHypothesisCreator::checkParams( QString& msg ) const
     ok = ( w->IsObjectSelected() );
     if ( !ok ) w->SetObject( CORBA::Object::_nil() );
     int nbAssocVert = ( hypType() == "ProjectionSource1D" ? 1 : 2 );
-    for ( int i = 0; ok && i < nbAssocVert; i += 2)
+    int nbNonEmptyAssoc = 0;
+    for ( int i = 0; ok && i < nbAssocVert*2; i += 2)
     {
       QString srcV, tgtV;
       StdMeshersGUI_ObjectReferenceParamWdg* w1 =
@@ -405,8 +408,26 @@ bool StdMeshersGUI_StdHypothesisCreator::checkParams( QString& msg ) const
         w1->SetObject( CORBA::Object::_nil() );
         w2->SetObject( CORBA::Object::_nil() );
       }
+      nbNonEmptyAssoc += !srcV.isEmpty();
+    }
+    if ( ok && nbNonEmptyAssoc == 1 && nbAssocVert == 2 )
+    {
+      // only one pair of VERTEXes is given for a FACE,
+      // then the FACE must have only one VERTEX
+      GEOM::GEOM_Object_var face = w->GetObject< GEOM::GEOM_Object >();
+
+      GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
+      _PTR(Study)         aStudy = SMESH::GetActiveStudyDocument();
+      GEOM::GEOM_IShapesOperations_var shapeOp;
+      if ( !geomGen->_is_nil() && aStudy )
+        shapeOp = geomGen->GetIShapesOperations( aStudy->StudyId() );
+      if ( !shapeOp->_is_nil() )
+      {
+        GEOM::ListOfLong_var vertices =
+          shapeOp->GetAllSubShapesIDs (face, GEOM::VERTEX, /*isSorted=*/false);
+        ok = ( vertices->length() == 1 );
+      }
     }
-
     // Uninstall filters of StdMeshersGUI_ObjectReferenceParamWdg
     if ( ok )
       deactivateObjRefParamWdg( customWidgets() );
@@ -423,14 +444,7 @@ bool StdMeshersGUI_StdHypothesisCreator::checkParams( QString& msg ) const
       widget< StdMeshersGUI_LayerDistributionParamWdg >( 0 );
     ok = ( w && w->IsOk() );
   }
-  else if ( hypType() == "QuadrangleParams" )
-  {
-    //StdMeshersGUI_SubShapeSelectorWdg* w =
-    //  widget< StdMeshersGUI_SubShapeSelectorWdg >( 0 );
-    //ok = ( w->GetListSize() > 0 );
-    //StdMeshersGUI_QuadrangleParamWdg* w =
-    //  widget< StdMeshersGUI_QuadrangleParamWdg >( 1 );
-  }
+
   return ok;
 }
 
@@ -452,7 +466,7 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
   }
 
   QString valueStr = stdParamValues( params );
-  QStringList aVariablesList = getVariablesFromDlg();
+  //QStringList aVariablesList = getVariablesFromDlg();
 
   if( res && !params.isEmpty() )
   {
@@ -461,18 +475,18 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
       StdMeshers::StdMeshers_LocalLength_var h =
         StdMeshers::StdMeshers_LocalLength::_narrow( hypothesis() );
 
+      h->SetVarParameter( params[0].text(), "SetLength" );
       h->SetLength( params[0].myValue.toDouble() );
-      h->SetParameters(aVariablesList.join(":").toLatin1().constData());
+      h->SetVarParameter( params[1].text(), "SetPrecision" );
       h->SetPrecision( params[1].myValue.toDouble() );
-      h->SetParameters(aVariablesList.join(":").toLatin1().constData());
     }
     else if( hypType()=="MaxLength" )
     {
       StdMeshers::StdMeshers_MaxLength_var h =
         StdMeshers::StdMeshers_MaxLength::_narrow( hypothesis() );
 
+      h->SetVarParameter( params[0].text(), "SetLength" );
       h->SetLength( params[0].myValue.toDouble() );
-      h->SetParameters(aVariablesList.join(":").toLatin1().constData());
       h->SetUsePreestimatedLength( widget< QCheckBox >( 1 )->isChecked() );
       if ( !h->HavePreestimatedLength() && !h->_is_equivalent( initParamsHypothesis() )) {
         StdMeshers::StdMeshers_MaxLength_var hInit =
@@ -485,8 +499,8 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
       StdMeshers::StdMeshers_SegmentLengthAroundVertex_var h =
         StdMeshers::StdMeshers_SegmentLengthAroundVertex::_narrow( hypothesis() );
 
+      h->SetVarParameter( params[0].text(), "SetLength" );
       h->SetLength( params[0].myValue.toDouble() );
-      h->SetParameters(aVariablesList.join(":").toLatin1().constData());
     }
     else if( hypType()=="Arithmetic1D" )
     {
@@ -496,10 +510,10 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
       StdMeshersGUI_SubShapeSelectorWdg* w = 
         widget< StdMeshersGUI_SubShapeSelectorWdg >( 2 );
 
+      h->SetVarParameter( params[0].text(), "SetStartLength" );
       h->SetStartLength( params[0].myValue.toDouble() );
-      h->SetParameters(aVariablesList.join(":").toLatin1().constData());
+      h->SetVarParameter( params[1].text(), "SetEndLength" );
       h->SetEndLength( params[1].myValue.toDouble() );
-      h->SetParameters(aVariablesList.join(":").toLatin1().constData());
       if (w) {
         h->SetReversedEdges( w->GetListOfIDs() );
         h->SetObjectEntry( w->GetMainShapeEntry() );
@@ -517,7 +531,6 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
         widget< StdMeshersGUI_SubShapeSelectorWdg >( 1 );
 
       if (w1) {
-        h->SetParameters(aVariablesList.join(":").toLatin1().constData());
         h->SetPoints( w1->GetListOfPoints() );
         h->SetNbSegments( w1->GetListOfSegments() );
       }
@@ -530,7 +543,7 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
     {
       StdMeshers::StdMeshers_MaxElementArea_var h =
         StdMeshers::StdMeshers_MaxElementArea::_narrow( hypothesis() );
-      h->SetParameters(aVariablesList.join(":").toLatin1().constData());
+      h->SetVarParameter( params[0].text(), "SetMaxElementArea" );
       h->SetMaxElementArea( params[0].myValue.toDouble() );
     }
     else if( hypType()=="MaxElementVolume" )
@@ -538,8 +551,8 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
       StdMeshers::StdMeshers_MaxElementVolume_var h =
         StdMeshers::StdMeshers_MaxElementVolume::_narrow( hypothesis() );
 
+      h->SetVarParameter( params[0].text(), "SetMaxElementVolume" );
       h->SetMaxElementVolume( params[0].myValue.toDouble() );
-      h->SetParameters(aVariablesList.join(":").toLatin1().constData());
     }
     else if( hypType()=="StartEndLength" )
     {
@@ -549,10 +562,10 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
       StdMeshersGUI_SubShapeSelectorWdg* w = 
         widget< StdMeshersGUI_SubShapeSelectorWdg >( 2 );
 
+      h->SetVarParameter( params[0].text(), "SetStartLength" );
       h->SetStartLength( params[0].myValue.toDouble() );
-      h->SetParameters(aVariablesList.join(":").toLatin1().constData());
+      h->SetVarParameter( params[1].text(), "SetEndLength" );
       h->SetEndLength( params[1].myValue.toDouble() );
-      h->SetParameters(aVariablesList.join(":").toLatin1().constData());
       if (w) {
         h->SetReversedEdges( w->GetListOfIDs() );
         h->SetObjectEntry( w->GetMainShapeEntry() );
@@ -562,7 +575,7 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
     {
       StdMeshers::StdMeshers_Deflection1D_var h =
         StdMeshers::StdMeshers_Deflection1D::_narrow( hypothesis() );
-      h->SetParameters(aVariablesList.join(":").toLatin1().constData());
+      h->SetVarParameter( params[0].text(), "SetDeflection" );
       h->SetDeflection( params[0].myValue.toDouble() );
     }
     else if( hypType()=="AutomaticLength" )
@@ -570,6 +583,7 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
       StdMeshers::StdMeshers_AutomaticLength_var h =
         StdMeshers::StdMeshers_AutomaticLength::_narrow( hypothesis() );
 
+      h->SetVarParameter( params[0].text(), "SetFineness" );
       h->SetFineness( params[0].myValue.toDouble() );
     }
     else if( hypType()=="NumberOfLayers" )
@@ -577,8 +591,8 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
       StdMeshers::StdMeshers_NumberOfLayers_var h =
         StdMeshers::StdMeshers_NumberOfLayers::_narrow( hypothesis() );
 
+      h->SetVarParameter( params[0].text(), "SetNumberOfLayers" );
       h->SetNumberOfLayers( params[0].myValue.toInt() );
-      h->SetParameters(aVariablesList.join(":").toLatin1().constData());
     }
     else if( hypType()=="LayerDistribution" )
     {
@@ -588,16 +602,14 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
         widget< StdMeshersGUI_LayerDistributionParamWdg >( 0 );
       
       h->SetLayerDistribution( w->GetHypothesis() );
-      h->SetParameters(w->GetHypothesis()->GetParameters());
-      w->GetHypothesis()->ClearParameters();
     }
     else if( hypType()=="NumberOfLayers2D" )
     {
       StdMeshers::StdMeshers_NumberOfLayers2D_var h =
         StdMeshers::StdMeshers_NumberOfLayers2D::_narrow( hypothesis() );
 
+      h->SetVarParameter( params[0].text(), "SetNumberOfLayers" );
       h->SetNumberOfLayers( params[0].myValue.toInt() );
-      h->SetParameters(aVariablesList.join(":").toLatin1().constData());
     }
     else if( hypType()=="LayerDistribution2D" )
     {
@@ -607,8 +619,6 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
         widget< StdMeshersGUI_LayerDistributionParamWdg >( 0 );
       
       h->SetLayerDistribution( w->GetHypothesis() );
-      h->SetParameters(w->GetHypothesis()->GetParameters());
-      w->GetHypothesis()->ClearParameters();
     }
     else if( hypType()=="ProjectionSource1D" )
     {
@@ -666,6 +676,42 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
       QCheckBox* toCopyGroups = widget< QCheckBox >( 2 );
       h->SetCopySourceMesh( toCopyMesh->isChecked(), toCopyGroups->isChecked());
     }
+    else if( hypType()=="ViscousLayers" )
+    {
+      StdMeshers::StdMeshers_ViscousLayers_var h =
+        StdMeshers::StdMeshers_ViscousLayers::_narrow( hypothesis() );
+
+      h->SetVarParameter( params[0].text(), "SetTotalThickness" );
+      h->SetTotalThickness( params[0].myValue.toDouble() );
+      h->SetVarParameter( params[1].text(), "SetNumberLayers" );
+      h->SetNumberLayers  ( params[1].myValue.toInt() );
+      h->SetVarParameter( params[2].text(), "SetStretchFactor" );
+      h->SetStretchFactor ( params[2].myValue.toDouble() );
+
+      if ( StdMeshersGUI_SubShapeSelectorWdg* idsWg = 
+           widget< StdMeshersGUI_SubShapeSelectorWdg >( 3 ))
+      {
+        h->SetIgnoreFaces( idsWg->GetListOfIDs() );
+      }
+    }
+    else if( hypType()=="ViscousLayers2D" )
+    {
+      StdMeshers::StdMeshers_ViscousLayers2D_var h =
+        StdMeshers::StdMeshers_ViscousLayers2D::_narrow( hypothesis() );
+
+      h->SetVarParameter( params[0].text(), "SetTotalThickness" );
+      h->SetTotalThickness( params[0].myValue.toDouble() );
+      h->SetVarParameter( params[1].text(), "SetNumberLayers" );
+      h->SetNumberLayers  ( params[1].myValue.toInt() );
+      h->SetVarParameter( params[2].text(), "SetStretchFactor" );
+      h->SetStretchFactor ( params[2].myValue.toDouble() );
+
+      if ( StdMeshersGUI_SubShapeSelectorWdg* idsWg = 
+           widget< StdMeshersGUI_SubShapeSelectorWdg >( 3 ))
+      {
+        h->SetIgnoreEdges( idsWg->GetListOfIDs() );
+      }
+    }
     else if( hypType()=="QuadrangleParams" )
     {
       StdMeshers::StdMeshers_QuadrangleParams_var h =
@@ -690,15 +736,15 @@ QString StdMeshersGUI_StdHypothesisCreator::storeParams() const
 //================================================================================
 /*!
  * \brief Return parameter values as SMESHGUI_GenericHypothesisCreator::StdParam
 * \param p - list of parameters
 * \retval bool - success flag
 *
 * Is called from SMESHGUI_GenericHypothesisCreator::buildStdFrame().
 * Parameters will be shown using "standard" controls:
 *   Int by QtxIntSpinBox
 *   Double by SMESHGUI_SpinBox
 *   String by QLineEdit
 * getCustomWidget() allows to redefine control for a parameter
+ * \param p - list of parameters
+ * \retval bool - success flag
+ *
+ * Is called from SMESHGUI_GenericHypothesisCreator::buildStdFrame().
+ * Parameters will be shown using "standard" controls:
+ *   Int by QtxIntSpinBox
+ *   Double by SMESHGUI_SpinBox
+ *   String by QLineEdit
+ * getCustomWidget() allows to redefine control for a parameter
  */
 //================================================================================
 
@@ -717,25 +763,24 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
     p.append( item );
     customWidgets()->append(0);
   }
-  
+
   SMESH::SMESH_Hypothesis_var hyp = initParamsHypothesis();
-  SMESH::ListOfParameters_var aParameters = hyp->GetLastParameters();
+  //SMESH::ListOfParameters_var aParameters = hyp->GetLastParameters();
 
   if( hypType()=="LocalLength" )
   {
     StdMeshers::StdMeshers_LocalLength_var h =
       StdMeshers::StdMeshers_LocalLength::_narrow( hyp );
-    
+
     item.myName = tr("SMESH_LOCAL_LENGTH_PARAM");
-    if(!initVariableName(aParameters,item,0))
+    if(!initVariableName( hyp, item, "SetLength"))
       item.myValue = h->GetLength();
     p.append( item );     
-    
+
     item.myName = tr("SMESH_LOCAL_LENGTH_PRECISION");
-    if(!initVariableName(aParameters,item,1))
+    if(!initVariableName( hyp, item, "SetPrecision"))
       item.myValue = h->GetPrecision(); 
     p.append( item );
-    
   }
   else if( hypType()=="MaxLength" )
   {
@@ -753,7 +798,7 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
     }
 
     item.myName = tr("SMESH_LOCAL_LENGTH_PARAM");
-    if(!initVariableName(aParameters,item,0))
+    if(!initVariableName( hyp, item, "SetLength"))
       item.myValue = h->GetLength();
     p.append( item );
     customWidgets()->append(0);
@@ -777,7 +822,7 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
       StdMeshers::StdMeshers_SegmentLengthAroundVertex::_narrow( hyp );
 
     item.myName = tr("SMESH_LOCAL_LENGTH_PARAM");
-    if(!initVariableName(aParameters,item,0))
+    if(!initVariableName( hyp, item, "SetLength"))
       item.myValue = h->GetLength();
     
     p.append( item );
@@ -788,14 +833,14 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
       StdMeshers::StdMeshers_Arithmetic1D::_narrow( hyp );
 
     item.myName = tr( "SMESH_START_LENGTH_PARAM" );
-    if(!initVariableName(aParameters,item,0))
+    if(!initVariableName( hyp, item, "SetStartLength" ))
       item.myValue = h->GetLength( true );
     p.append( item );
 
     customWidgets()->append (0);
 
     item.myName = tr( "SMESH_END_LENGTH_PARAM" );
-    if(!initVariableName(aParameters,item,1))
+    if(!initVariableName( hyp, item, "SetEndLength" ))
       item.myValue = h->GetLength( false );
     p.append( item );
 
@@ -859,7 +904,7 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
       StdMeshers::StdMeshers_MaxElementArea::_narrow( hyp );
 
     item.myName = tr( "SMESH_MAX_ELEMENT_AREA_PARAM" );
-    if(!initVariableName(aParameters,item,0))
+    if(!initVariableName( hyp, item, "SetMaxElementArea" ))
       item.myValue = h->GetMaxElementArea();
     p.append( item );
     
@@ -870,7 +915,7 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
       StdMeshers::StdMeshers_MaxElementVolume::_narrow( hyp );
 
     item.myName = tr( "SMESH_MAX_ELEMENT_VOLUME_PARAM" );
-    if(!initVariableName(aParameters,item,0))
+    if(!initVariableName( hyp, item, "SetMaxElementVolume" ))
       item.myValue = h->GetMaxElementVolume();
     p.append( item );
   }
@@ -881,13 +926,13 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
 
     item.myName = tr( "SMESH_START_LENGTH_PARAM" );
 
-    if(!initVariableName(aParameters,item,0)) 
+    if(!initVariableName( hyp, item, "SetStartLength" )) 
       item.myValue = h->GetLength( true );
     p.append( item );
     customWidgets()->append(0);
 
     item.myName = tr( "SMESH_END_LENGTH_PARAM" );
-    if(!initVariableName(aParameters,item,1)) 
+    if(!initVariableName( hyp, item, "SetEndLength" )) 
       item.myValue = h->GetLength( false );
     p.append( item );
     customWidgets()->append(0);
@@ -913,7 +958,7 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
       StdMeshers::StdMeshers_Deflection1D::_narrow( hyp );
     
     item.myName = tr( "SMESH_DEFLECTION1D_PARAM" );
-    if(!initVariableName(aParameters,item,0)) 
+    if(!initVariableName( hyp, item, "SetDeflection" )) 
       item.myValue = h->GetDeflection();
     p.append( item );
   }
@@ -936,50 +981,37 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
       StdMeshers::StdMeshers_NumberOfLayers::_narrow( hyp );
 
     item.myName = tr( "SMESH_NUMBER_OF_LAYERS" );
-    if(!initVariableName(aParameters,item,0))     
+    if(!initVariableName( hyp, item, "SetNumberOfLayers" ))     
       item.myValue = (int) h->GetNumberOfLayers();
     p.append( item );
   }
-  else if( hypType()=="LayerDistribution" ) {
+  else if( hypType()=="LayerDistribution" )
+  {
     StdMeshers::StdMeshers_LayerDistribution_var h =
       StdMeshers::StdMeshers_LayerDistribution::_narrow( hyp );
     
     item.myName = tr( "SMESH_LAYERS_DISTRIBUTION" ); p.append( item );
-    
-    //Set into not published hypo last variables
-    QStringList aLastVarsList;
-    for(int i = 0;i<aParameters->length();i++) 
-      aLastVarsList.append(QString(aParameters[i].in()));
-
-    if(!aLastVarsList.isEmpty())
-      h->GetLayerDistribution()->SetLastParameters(aLastVarsList.join(":").toLatin1().constData());
-    
+    initVariableName( hyp, item, "SetLayerDistribution" );
     customWidgets()->append
       ( new StdMeshersGUI_LayerDistributionParamWdg( h->GetLayerDistribution(), hypName(), dlg()));
   }
-  else if( hypType()=="NumberOfLayers2D" ) {
+  else if( hypType()=="NumberOfLayers2D" )
+  {
     StdMeshers::StdMeshers_NumberOfLayers2D_var h =
       StdMeshers::StdMeshers_NumberOfLayers2D::_narrow( hyp );
     
     item.myName = tr( "SMESH_NUMBER_OF_LAYERS" );
-    if(!initVariableName(aParameters,item,0))     
+    if(!initVariableName( hyp, item, "SetNumberOfLayers" ))     
       item.myValue = (int) h->GetNumberOfLayers();
     p.append( item );
   }
-  else if( hypType()=="LayerDistribution2D" ) {
+  else if( hypType()=="LayerDistribution2D" )
+  {
     StdMeshers::StdMeshers_LayerDistribution2D_var h =
       StdMeshers::StdMeshers_LayerDistribution2D::_narrow( hyp );
 
     item.myName = tr( "SMESH_LAYERS_DISTRIBUTION" ); p.append( item );
-    
-    //Set into not published hypo last variables
-    QStringList aLastVarsList;
-    for(int i = 0;i<aParameters->length();i++) 
-      aLastVarsList.append(QString(aParameters[i].in()));
-
-    if(!aLastVarsList.isEmpty())
-      h->GetLayerDistribution()->SetLastParameters(aLastVarsList.join(":").toLatin1().constData());
-    
+    initVariableName( hyp, item, "SetLayerDistribution" );
     customWidgets()->append
       ( new StdMeshersGUI_LayerDistributionParamWdg( h->GetLayerDistribution(), hypName(), dlg()));
   }
@@ -992,7 +1024,7 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
     customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 1 ),
                                                h->GetSourceEdge()));
     item.myName = tr( "SMESH_SOURCE_MESH" ); p.append( item );
-    customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( MESH ),
+    customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( SMESH::MESH ),
                                                h->GetSourceMesh()));
     item.myName = tr( "SMESH_SOURCE_VERTEX" ); p.append( item );
     customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
@@ -1010,7 +1042,7 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
     customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 2 ),
                                                h->GetSourceFace()));
     item.myName = tr( "SMESH_SOURCE_MESH" ); p.append( item );
-    customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( MESH ),
+    customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( SMESH::MESH ),
                                                h->GetSourceMesh()));
     item.myName = tr( "SMESH_SOURCE_VERTEX1" ); p.append( item );
     customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
@@ -1034,7 +1066,7 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
     customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 3, TopAbs_FACE, 6, true ),
                                                h->GetSource3DShape()));
     item.myName = tr( "SMESH_SOURCE_MESH" ); p.append( item );
-    customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( MESH ),
+    customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( SMESH::MESH ),
                                                h->GetSourceMesh()));
     item.myName = tr( "SMESH_SOURCE_VERTEX1" ); p.append( item );
     customWidgets()->append( newObjRefParamWdg( filterForShapeOfDim( 0 ),
@@ -1059,7 +1091,7 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
     h->GetCopySourceMesh(toCopyMesh, toCopyGroups);
 
     item.myName = tr( "SMESH_SOURCE_EDGES" ); p.append( item );
-    customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( GROUP_EDGE ), 
+    customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( SMESH::GROUP_EDGE ), 
                                                 groupEntries));
 
     item.myName = tr( "SMESH_COPY_MESH" ); p.append( item );
@@ -1084,7 +1116,7 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
     h->GetCopySourceMesh(toCopyMesh, toCopyGroups);
 
     item.myName = tr( "SMESH_SOURCE_FACES" ); p.append( item );
-    customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( GROUP_FACE ), 
+    customWidgets()->append( newObjRefParamWdg( new SMESH_TypeFilter( SMESH::GROUP_FACE ), 
                                                 groupEntries));
 
     item.myName = tr( "SMESH_COPY_MESH" ); p.append( item );
@@ -1099,6 +1131,84 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
     aQCheckBox->setEnabled( toCopyMesh );
     customWidgets()->append( aQCheckBox );
   }
+  else if( hypType()=="ViscousLayers" )
+  {
+    StdMeshers::StdMeshers_ViscousLayers_var h =
+      StdMeshers::StdMeshers_ViscousLayers::_narrow( hyp );
+
+    item.myName = tr( "SMESH_TOTAL_THICKNESS" );
+    if(!initVariableName( hyp, item, "SetTotalThickness" ))
+      item.myValue = h->GetTotalThickness();
+    p.append( item );
+    customWidgets()->append (0);
+
+    item.myName = tr( "SMESH_NUMBER_OF_LAYERS" );
+    if(!initVariableName( hyp, item, "SetNumberLayers" ))
+      item.myValue = h->GetNumberLayers();
+    p.append( item );
+    customWidgets()->append (0);
+
+    item.myName = tr( "SMESH_STRETCH_FACTOR" );
+    if(!initVariableName( hyp, item, "SetStretchFactor" ))
+      item.myValue = h->GetStretchFactor();
+    p.append( item );
+    customWidgets()->append (0);
+
+    QString aMainEntry = SMESHGUI_GenericHypothesisCreator::getMainShapeEntry();
+    if ( !aMainEntry.isEmpty() )
+    {
+      item.myName = tr( "SMESH_FACES_WO_LAYERS" );
+      p.append( item );
+
+      StdMeshersGUI_SubShapeSelectorWdg* idsWg =
+        new StdMeshersGUI_SubShapeSelectorWdg(0,TopAbs_FACE);
+
+      idsWg->SetGeomShapeEntry( aMainEntry );
+      idsWg->SetMainShapeEntry( aMainEntry );
+      idsWg->SetListOfIDs( h->GetIgnoreFaces() );
+      idsWg->showPreview( true );
+      customWidgets()->append ( idsWg );
+    }
+  }
+  else if( hypType()=="ViscousLayers2D" )
+  {
+    StdMeshers::StdMeshers_ViscousLayers2D_var h =
+      StdMeshers::StdMeshers_ViscousLayers2D::_narrow( hyp );
+
+    item.myName = tr( "SMESH_TOTAL_THICKNESS" );
+    if(!initVariableName( hyp, item, "SetTotalThickness" ))
+      item.myValue = h->GetTotalThickness();
+    p.append( item );
+    customWidgets()->append (0);
+
+    item.myName = tr( "SMESH_NUMBER_OF_LAYERS" );
+    if(!initVariableName( hyp, item, "SetNumberLayers" ))
+      item.myValue = h->GetNumberLayers();
+    p.append( item );
+    customWidgets()->append (0);
+
+    item.myName = tr( "SMESH_STRETCH_FACTOR" );
+    if(!initVariableName( hyp, item, "SetStretchFactor" ))
+      item.myValue = h->GetStretchFactor();
+    p.append( item );
+    customWidgets()->append (0);
+
+    QString aMainEntry = SMESHGUI_GenericHypothesisCreator::getMainShapeEntry();
+    if ( !aMainEntry.isEmpty() )
+    {
+      item.myName = tr( "SMESH_EDGES_WO_LAYERS" );
+      p.append( item );
+
+      StdMeshersGUI_SubShapeSelectorWdg* idsWg =
+        new StdMeshersGUI_SubShapeSelectorWdg(0,TopAbs_EDGE);
+
+      idsWg->SetGeomShapeEntry( aMainEntry );
+      idsWg->SetMainShapeEntry( aMainEntry );
+      idsWg->SetListOfIDs( h->GetIgnoreEdges() );
+      idsWg->showPreview( true );
+      customWidgets()->append ( idsWg );
+    }
+  }
   else if (hypType() == "QuadrangleParams")
   {
     StdMeshers::StdMeshers_QuadrangleParams_var h =
@@ -1108,9 +1218,8 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
     p.append(item);
 
     StdMeshersGUI_SubShapeSelectorWdg* aDirectionWidget =
-      new StdMeshersGUI_SubShapeSelectorWdg();
+      new StdMeshersGUI_SubShapeSelectorWdg(0, TopAbs_VERTEX);
     aDirectionWidget->SetMaxSize(1);
-    aDirectionWidget->SetSubShType(TopAbs_VERTEX);
     QString anEntry = SMESHGUI_GenericHypothesisCreator::getShapeEntry();
     QString aMainEntry = SMESHGUI_GenericHypothesisCreator::getMainShapeEntry();
     if (anEntry == "")
@@ -1148,49 +1257,59 @@ bool StdMeshersGUI_StdHypothesisCreator::stdParams( ListOfStdParams& p ) const
 //================================================================================
 /*!
  * \brief tune "standard" control
 * \param w - control widget
 * \param int - parameter index
 \param w - control widget
 \param int - parameter index
  */
 //================================================================================
 
 void StdMeshersGUI_StdHypothesisCreator::attuneStdWidget (QWidget* w, const int) const
 {
   SMESHGUI_SpinBox* sb = w->inherits( "SMESHGUI_SpinBox" ) ? ( SMESHGUI_SpinBox* )w : 0;
-  if( hypType()=="LocalLength" &&  sb )
+  if ( sb )
   {
-    if (sb->objectName() == tr("SMESH_LOCAL_LENGTH_PARAM"))
+    if( hypType()=="LocalLength" )
+    {
+      if (sb->objectName() == tr("SMESH_LOCAL_LENGTH_PARAM"))
+        sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "length_precision" );
+      else if (sb->objectName() == tr("SMESH_LOCAL_LENGTH_PRECISION"))
+        sb->RangeStepAndValidator( 0.0, 1.0, 0.05, "len_tol_precision" );
+    }
+    else if( hypType()=="Arithmetic1D" )
+    {
+      sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "parametric_precision" );
+    }
+    else if( hypType()=="MaxLength" )
+    {
       sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "length_precision" );
-    else if (sb->objectName() == tr("SMESH_LOCAL_LENGTH_PRECISION"))
-      sb->RangeStepAndValidator( 0.0, 1.0, 0.05, "len_tol_precision" );
-  }
-  else if( hypType()=="Arithmetic1D" && sb )
-  {
-    sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "parametric_precision" );
-  }
-  else if( hypType()=="MaxLength" && sb )
-  {
-    sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "length_precision" );
-    sb->setEnabled( !widget< QCheckBox >( 1 )->isChecked() );
-  }
-  else if( hypType()=="MaxElementArea" && sb )
-  {
-    sb->RangeStepAndValidator( VALUE_SMALL_2, VALUE_MAX_2, 1.0, "area_precision" );
-  }
-  else if( hypType()=="MaxElementVolume" && sb )
-  {
-    sb->RangeStepAndValidator( VALUE_SMALL_3, VALUE_MAX_3, 1.0, "vol_precision" );
-  }
-  else if( hypType()=="StartEndLength" && sb )
-  {
-    sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "length_precision" );
-  }
-  else if( hypType()=="Deflection1D" && sb )
-  {
-    sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "parametric_precision" );
-  }
-  else if ( sb ) // default validator for possible ancestors
-  {
-    sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "length_precision" );
+      sb->setEnabled( !widget< QCheckBox >( 1 )->isChecked() );
+    }
+    else if( hypType()=="MaxElementArea" )
+    {
+      sb->RangeStepAndValidator( VALUE_SMALL_2, VALUE_MAX_2, 1.0, "area_precision" );
+    }
+    else if( hypType()=="MaxElementVolume" )
+    {
+      sb->RangeStepAndValidator( VALUE_SMALL_3, VALUE_MAX_3, 1.0, "vol_precision" );
+    }
+    else if( hypType()=="StartEndLength" )
+    {
+      sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "length_precision" );
+    }
+    else if( hypType()=="Deflection1D" )
+    {
+      sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "parametric_precision" );
+    }
+    else if( hypType().startsWith( "ViscousLayers" ))
+    {
+      if (sb->objectName() == tr("SMESH_STRETCH_FACTOR"))
+        sb->RangeStepAndValidator( 1.0, VALUE_MAX, 0.1, "parametric_precision" );
+      else
+        sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "length_precision" );
+    }
+    else // default validator for possible ancestors
+    {
+      sb->RangeStepAndValidator( VALUE_SMALL, VALUE_MAX, 1.0, "length_precision" );
+    }
   }
 }
 
@@ -1265,7 +1384,10 @@ QString StdMeshersGUI_StdHypothesisCreator::hypTypeName( const QString& t ) cons
     types.insert( "LayerDistribution2D", "LAYER_DISTRIBUTION" );
     types.insert( "SegmentLengthAroundVertex", "SEGMENT_LENGTH_AROUND_VERTEX" );
     types.insert( "MaxLength", "MAX_LENGTH" );
+    types.insert( "ViscousLayers", "VISCOUS_LAYERS" );
+    types.insert( "ViscousLayers2D", "VISCOUS_LAYERS" );
     types.insert( "QuadrangleParams", "QUADRANGLE_PARAMS" );
+    types.insert( "CartesianParameters3D", "CARTESIAN_PARAMS" );
   }
 
   QString res;
@@ -1423,13 +1545,13 @@ void StdMeshersGUI_StdHypothesisCreator::valueChanged( QWidget* paramWidget)
  */
 //================================================================================
 
-bool StdMeshersGUI_StdHypothesisCreator::initVariableName(SMESH::ListOfParameters_var theParameters
-                                                          StdParam &theParams, 
-                                                          int order) const
+bool StdMeshersGUI_StdHypothesisCreator::initVariableName(SMESH::SMESH_Hypothesis_var theHyp
+                                                          StdParam &                  theParams, 
+                                                          const char*                 theMethod) const
 {
-  QString aVaribaleName = (theParameters->length() > order) ? QString(theParameters[order].in()) : QString("");
+  QString aVaribaleName = getVariableName( theMethod );
   theParams.isVariable = !aVaribaleName.isEmpty();
-  if(theParams.isVariable) 
+  if (theParams.isVariable)
     theParams.myValue = aVaribaleName;
 
   return theParams.isVariable;