Salome HOME
Merge remote-tracking branch 'origin/V8_3_BR' into ngr/python3_dev
authorGilles DAVID <gilles-g.david@edf.fr>
Tue, 18 Apr 2017 13:43:53 +0000 (15:43 +0200)
committerGilles DAVID <gilles-g.david@edf.fr>
Tue, 18 Apr 2017 13:57:30 +0000 (15:57 +0200)
Conflicts:
src/Tools/ZCracksPlug/casTests/launchCas.py
src/Tools/padder/spadderpy/gui/inputdialog.py
src/Tools/padder/spadderpy/gui/plugindialog.py
src/Tools/padder/unittests/usecase_meshJobManager.py

24 files changed:
CMakeLists.txt
doc/salome/gui/SMESH/input/skew.doc
resources/CMakeLists.txt
resources/mesh_hide.png [new file with mode: 0644]
resources/mesh_show.png [new file with mode: 0644]
src/SMESH/SMESH_Gen.cxx
src/SMESH/SMESH_Hypothesis.cxx
src/SMESHGUI/SMESHGUI.cxx
src/SMESHGUI/SMESH_images.ts
src/SMESHUtils/SMESH_TypeDefs.hxx
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.cxx
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.h
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.i
src/Tools/ZCracksPlug/__init__.py
src/Tools/ZCracksPlug/casTests/launchCas.py
src/Tools/ZCracksPlug/main.py
src/Tools/ZCracksPlug/output.py
src/Tools/ZCracksPlug/utilityFunctions.py
src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.cxx
src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.hxx
src/Tools/padder/spadderpy/gui/inputdialog.py
src/Tools/padder/spadderpy/gui/inputframe.ui
src/Tools/padder/spadderpy/gui/plugindialog.py
src/Tools/padder/unittests/usecase_meshJobManager.py

index a2d069f668e871e1e1e6c96ed20d1a258cff1e40..ef42ec11a15c27be58e43f59c1df56dc18f78d42 100755 (executable)
@@ -31,11 +31,11 @@ ENDIF(WIN32)
 STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
 
 SET(${PROJECT_NAME_UC}_MAJOR_VERSION 8)
-SET(${PROJECT_NAME_UC}_MINOR_VERSION 2)
+SET(${PROJECT_NAME_UC}_MINOR_VERSION 3)
 SET(${PROJECT_NAME_UC}_PATCH_VERSION 0)
 SET(${PROJECT_NAME_UC}_VERSION
   ${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
-SET(${PROJECT_NAME_UC}_VERSION_DEV 1)
+SET(${PROJECT_NAME_UC}_VERSION_DEV 0)
 
 # Common CMake macros
 # ===================
index 036c70d83aaf7e9a655c1f646e0c97286e16cd28..01f3c5feaf6f530ce4fe54955736c57585e24de3 100644 (file)
@@ -3,8 +3,8 @@
 \page skew_page Skew
 
 \n \b Skew mesh quality criterion reflects the angle between the lines
-that join opposite sides of a quadrangle element or the greatesr angle
-between three medians in triangle elements. This mesh quality
+that join opposite sides of a quadrangle element or the greatest angle
+between a median and a midline in a triangle element. This mesh quality
 criterion can be applied to elements composed of 4 and 3 nodes
 (quadrangles and triangles).
 
index da52e07836d4198b4fabc59d36fcea51f54c1780..d2801c905efd76ec6449a9fe71667736a261fc43 100755 (executable)
@@ -226,6 +226,8 @@ SET(SMESH_RESOURCES_FILES
   mesh_extmeth_surf_offset_smooth.png
   mesh_extmeth_face_offset.png
   mesh_quality.png
+  mesh_show.png
+  mesh_hide.png
 )
 
 INSTALL(FILES ${SMESH_RESOURCES_FILES} DESTINATION ${SALOME_SMESH_INSTALL_RES_DATA})
diff --git a/resources/mesh_hide.png b/resources/mesh_hide.png
new file mode 100644 (file)
index 0000000..31c505d
Binary files /dev/null and b/resources/mesh_hide.png differ
diff --git a/resources/mesh_show.png b/resources/mesh_show.png
new file mode 100644 (file)
index 0000000..61ebe47
Binary files /dev/null and b/resources/mesh_show.png differ
index f9a89fed733342110e7d2e8145af34ae4e84eeac..bd5654c89588eb1bd05ddde3ae963e978e7cd8eb 100644 (file)
@@ -73,6 +73,19 @@ SMESH_Gen::SMESH_Gen()
   //vtkDebugLeaks::SetExitError(0);
 }
 
+namespace
+{
+  // a structure used to nullify SMESH_Gen field of SMESH_Hypothesis,
+  // which is needed for SMESH_Hypothesis not deleted before ~SMESH_Gen()
+  struct _Hyp : public SMESH_Hypothesis
+  {
+    void NullifyGen()
+    {
+      _gen = 0;
+    }
+  };
+}
+
 //=============================================================================
 /*!
  * Destructor
@@ -84,9 +97,16 @@ SMESH_Gen::~SMESH_Gen()
   std::map < int, StudyContextStruct * >::iterator i_sc = _mapStudyContext.begin();
   for ( ; i_sc != _mapStudyContext.end(); ++i_sc )
   {
-    delete i_sc->second->myDocument;
-    delete i_sc->second;
-  }  
+    StudyContextStruct* context = i_sc->second;
+    std::map < int, SMESH_Hypothesis * >::iterator i_hyp = context->mapHypothesis.begin();
+    for ( ; i_hyp != context->mapHypothesis.end(); ++i_hyp )
+    {
+      if ( _Hyp* h = static_cast< _Hyp*>( i_hyp->second ))
+        h->NullifyGen();
+    }
+    delete context->myDocument;
+    delete context;
+  }
 }
 
 //=============================================================================
index 2d1e10c165906c40776ccded4f72a2fcf5e6eb45..c4107fb3892bed30a88f0b640277375422e4640c 100644 (file)
 //  Author : Paul RASCLE, EDF
 //  Module : SMESH
 //
-#include "SMESH_Hypothesis.hxx"
 
-#include "SMESHDS_Mesh.hxx"
 #include "SMESH_Gen.hxx"
-#include "SMESH_Mesh.hxx"
-#include "SMESH_subMesh.hxx"
 
-#include "utilities.h"
+#include "SMESHDS_Mesh.hxx"
+#include "SMESH_Hypothesis.hxx"
+#include "SMESH_Mesh.hxx"
 
 using namespace std;
 
 //=============================================================================
 /*!
- * 
+ *
  */
 //=============================================================================
 
@@ -63,8 +61,11 @@ SMESH_Hypothesis::SMESH_Hypothesis(int hypId,
 
 SMESH_Hypothesis::~SMESH_Hypothesis()
 {
-  StudyContextStruct* myStudyContext = _gen->GetStudyContext(_studyId);
-  myStudyContext->mapHypothesis[_hypId] = 0;
+  if ( _gen )
+  {
+    StudyContextStruct* myStudyContext = _gen->GetStudyContext(_studyId);
+    myStudyContext->mapHypothesis[_hypId] = 0;
+  }
 }
 
 //=============================================================================
@@ -77,20 +78,20 @@ int SMESH_Hypothesis::GetDim() const
 {
   int dim = 0;
   switch (_type)
-    {
-    case ALGO_1D: dim = 1; break;
-    case ALGO_2D: dim = 2; break;
-    case ALGO_3D: dim = 3; break;
-    case ALGO_0D: dim = 0; break;
-    case PARAM_ALGO:
-      dim = ( _param_algo_dim < 0 ) ? -_param_algo_dim : _param_algo_dim; break;
-    }
+  {
+  case ALGO_1D: dim = 1; break;
+  case ALGO_2D: dim = 2; break;
+  case ALGO_3D: dim = 3; break;
+  case ALGO_0D: dim = 0; break;
+  case PARAM_ALGO:
+    dim = ( _param_algo_dim < 0 ) ? -_param_algo_dim : _param_algo_dim; break;
+  }
   return dim;
 }
 
 //=============================================================================
 /*!
- *  
+ *
  */
 //=============================================================================
 
index 0f08808d0b766c228c18f766da8f73620e4d7964..526b6c6500b2b1b0e4a8d2567e86a45669ec2d7e 100644 (file)
@@ -4020,8 +4020,8 @@ void SMESHGUI::initialize( CAM_Application* app )
   createSMESHAction( SMESHOp::OpPropertiesArea,   "MEASURE_AREA",     "ICON_MEASURE_AREA" );
   createSMESHAction( SMESHOp::OpPropertiesVolume, "MEASURE_VOLUME",   "ICON_MEASURE_VOLUME" );
 
-  createSMESHAction( SMESHOp::OpHide,     "HIDE" );
-  createSMESHAction( SMESHOp::OpShow,     "SHOW" );
+  createSMESHAction( SMESHOp::OpHide,     "HIDE", "ICON_HIDE" );
+  createSMESHAction( SMESHOp::OpShow,     "SHOW", "ICON_SHOW" );
   createSMESHAction( SMESHOp::OpShowOnly, "DISPLAY_ONLY" );
 
   createSMESHAction( SMESHOp::OpSortChild, "SORT_CHILD_ITEMS" );
index fde04d78c00dff0795c0639ed7e9bb84c04ea338..9531e409fada3f9ad40e3e40d09df9c7ae7453da 100644 (file)
             <source>ICON_MEASURE_BND_BOX</source>
             <translation>mesh_bounding_box.png</translation>
         </message>
+        <message>
+            <source>ICON_SHOW</source>
+            <translation>mesh_show.png</translation>
+        </message>
+        <message>
+            <source>ICON_HIDE</source>
+            <translation>mesh_hide.png</translation>
+        </message>
     </context>
 </TS>
index 77c095cc17be56cee81a2854fa400945cf35d4be..c9be990f65b274515dd082b134ac98494fa3619a 100644 (file)
@@ -169,6 +169,7 @@ struct SMESH_TNodeXYZ : public gp_XYZ
   double SquareDistance(const SMDS_MeshNode* n) const { return (SMESH_TNodeXYZ( n )-*this).SquareModulus(); }
   bool operator==(const SMESH_TNodeXYZ& other) const { return _node == other._node; }
 };
+typedef SMESH_TNodeXYZ SMESH_NodeXYZ;
 
 //--------------------------------------------------
 /*!
index f356bd9ba0666a8df044fe52c23bde4ba552f706..231dd33b5eb7a132013d734008dc5fdcad81441f 100644 (file)
@@ -610,6 +610,148 @@ const char* SMESH_Swig::AddSubMeshOnShape(const char* theMeshEntry,
   return "";
 }
 
+/*!
+  \brief Gets window with specified identifier
+  \internal
+  \param id window identifier
+  \return pointer on the window
+*/
+
+SUIT_ViewWindow* getWnd( const int id )
+{
+  SUIT_ViewWindow* resWnd = 0;
+  SUIT_Session* aSession          = SUIT_Session::session();
+  SUIT_Application* anApplication = aSession->activeApplication();
+  SalomeApp_Application* app    = dynamic_cast<SalomeApp_Application*>(anApplication);
+  if ( app ) {
+    ViewManagerList vmlist = app->viewManagers();
+    foreach( SUIT_ViewManager* vm, vmlist ) {
+      QVector<SUIT_ViewWindow*> vwlist = vm->getViews();
+      foreach ( SUIT_ViewWindow* vw, vwlist ) {
+        if ( id == vw->getId() ) {
+          resWnd = vw;
+          break;
+        }
+      }
+    }
+  }
+  return resWnd;
+}
+
+class TGetActorAspect: public SALOME_Event
+{
+public:
+  typedef actorAspect TResult;
+  TResult myResult;
+  const char* _entry;
+  int _wid;
+  TGetActorAspect( const char* Mesh_Entry, int viewId )
+  {
+    _entry = Mesh_Entry;
+    _wid = viewId;
+  }
+  virtual void Execute()
+    {
+      SMESH_Actor* anActor;
+      if (_wid)
+        {
+          SUIT_ViewWindow* w = getWnd(_wid);
+          anActor = SMESH::FindActorByEntry( w, _entry );
+        }
+      else
+        anActor = SMESH::FindActorByEntry( _entry );
+      if ( !anActor )
+        {
+          MESSAGE("GetActorAspect: no actor corresponding to: " << _entry);
+          return;
+        }
+      anActor->GetSufaceColor(myResult.surfaceColor.r,
+                              myResult.surfaceColor.g,
+                              myResult.surfaceColor.b,
+                              myResult.surfaceColor.delta);
+      anActor->GetVolumeColor(myResult.volumeColor.r,
+                              myResult.volumeColor.g,
+                              myResult.volumeColor.b,
+                              myResult.volumeColor.delta);
+      anActor->GetEdgeColor(myResult.edgeColor.r,
+                            myResult.edgeColor.g,
+                            myResult.edgeColor.b);
+      anActor->GetNodeColor(myResult.nodeColor.r,
+                            myResult.nodeColor.g,
+                            myResult.nodeColor.b);
+      myResult.opacity= anActor->GetOpacity();
+      MESSAGE("opacity: " << myResult.opacity);
+    }
+};
+
+actorAspect SMESH_Swig::GetActorAspect( const char* Mesh_Entry, int viewId )
+{
+  return ProcessEvent(new TGetActorAspect( Mesh_Entry, viewId));
+}
+
+void SMESH_Swig::SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId )
+{
+  class TSetActorAspect: public SALOME_Event
+  {
+  public:
+    const char* _entry;
+    actorAspect _actorPres;
+    int _wid;
+    TSetActorAspect(const actorAspect& actorPres, const char* Mesh_Entry, int viewId )
+    {
+      _entry = Mesh_Entry;
+      _actorPres = actorPres;
+      _wid = viewId;
+    }
+    virtual void Execute()
+    {
+      SMESH_Actor* anActor;
+      if (_wid)
+        {
+          SUIT_ViewWindow* w = getWnd(_wid);
+          anActor = SMESH::FindActorByEntry( w, _entry );
+        }
+      else
+        anActor = SMESH::FindActorByEntry( _entry );
+      if ( !anActor )
+        {
+          MESSAGE("SetActorAspect: no actor corresponding to: " << _entry);
+          return;
+        }
+      anActor->SetSufaceColor(_actorPres.surfaceColor.r,
+                              _actorPres.surfaceColor.g,
+                              _actorPres.surfaceColor.b,
+                              _actorPres.surfaceColor.delta);
+      anActor->SetVolumeColor(_actorPres.volumeColor.r,
+                              _actorPres.volumeColor.g,
+                              _actorPres.volumeColor.b,
+                              _actorPres.volumeColor.delta);
+      anActor->SetEdgeColor(_actorPres.edgeColor.r,
+                            _actorPres.edgeColor.g,
+                            _actorPres.edgeColor.b);
+      anActor->SetNodeColor(_actorPres.nodeColor.r,
+                            _actorPres.nodeColor.g,
+                            _actorPres.nodeColor.b);
+      anActor->SetOpacity(_actorPres.opacity);
+      if (_wid)
+        {
+          SUIT_ViewWindow* w = getWnd(_wid);
+          w->repaint();
+        }
+      else
+        {
+          SUIT_Session* aSession          = SUIT_Session::session();
+          SUIT_Application* anApplication = aSession->activeApplication();
+          SalomeApp_Application* anApp    = dynamic_cast<SalomeApp_Application*>(anApplication);
+          SUIT_ViewManager* vman          = anApp->getViewManager(VTKViewer_Viewer::Type(),true);
+          vman->getActiveView()->repaint();
+        }
+    }
+  };
+
+  ProcessVoidEvent(new TSetActorAspect(actorPres, Mesh_Entry, viewId));
+}
+
 void SMESH_Swig::CreateAndDisplayActor( const char* Mesh_Entry )
 {
   //  SMESH_Actor* Mesh = smeshGUI->ReadScript(aM);
index c6c948fcf37e2b2b41db4b90d98f1a9b1183f225..86682ff5b79baa3465050fe6d74d9862fefae85e 100644 (file)
@@ -58,6 +58,37 @@ enum
     Ball       = BallSelection
   };
 
+typedef struct
+{
+  double r, g, b;
+  int delta;
+} surfaceColorStruct;
+
+typedef struct
+{
+  double r, g, b;
+  int delta;
+} volumeColorStruct;
+
+typedef struct
+{
+  double r, g, b;
+} edgeColorStruct;
+
+typedef struct
+{
+  double r, g, b;
+} nodeColorStruct;
+
+struct actorAspect
+{
+  surfaceColorStruct surfaceColor;
+  volumeColorStruct volumeColor;
+  edgeColorStruct edgeColor;
+  nodeColorStruct nodeColor;
+  double opacity;
+};
+
 class SMESH_SWIG_EXPORT SMESH_Swig
 {
 public:
@@ -94,6 +125,9 @@ public:
    */
   void                       SetMeshIcon( const char*, const bool, const bool );
 
+  actorAspect                GetActorAspect(const char* Mesh_Entry, int viewId = 0 );
+  void                       SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId = 0  );
+
   // --------------------- for the test purposes -----------------------
   int  getSelectionMode();
   void select( const char *id, std::vector<int> ids, bool append = false );
index 73c08a5f1efc1faa930b6784887641c84a937496..ac732d4672e8f64d8626a71b65cd20528cbd8f98 100644 (file)
@@ -68,6 +68,37 @@ enum
     Ball
   };
 
+typedef struct
+{
+  double r, g, b;
+  int delta;
+} surfaceColorStruct;
+
+typedef struct
+{
+  double r, g, b;
+  int delta;
+} volumeColorStruct;
+
+typedef struct
+{
+  double r, g, b;
+} edgeColorStruct;
+
+typedef struct
+{
+  double r, g, b;
+} nodeColorStruct;
+
+struct actorAspect
+{
+  surfaceColorStruct surfaceColor;
+  volumeColorStruct volumeColor;
+  edgeColorStruct edgeColor;
+  nodeColorStruct nodeColor;
+  double opacity;
+};
+
 class SMESH_Swig
 {
  public:
@@ -97,6 +128,9 @@ class SMESH_Swig
   void CreateAndDisplayActor( const char* Mesh_Entry );
   void EraseActor( const char* Mesh_Entry, const bool allViewers = false );
 
+  actorAspect GetActorAspect(const char* Mesh_Entry, int viewId = 0 );
+  void SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId = 0 );
+
   // --------------------- for the test purposes -----------------------
   int  getSelectionMode();
   void select( const char *id, std::vector<int> ids, bool append = false );
index b06743239d89cb19450d834bcd7e059821ab6dad..967dc97cf00d65775ff9be8ede697db90a2845d0 100644 (file)
@@ -2,15 +2,20 @@ import sys, os, shutil, pickle, tempfile
 from Zcracks import main, genereCrack, Zset
 from Zcracks import utilityFunctions as uF
 
+os.environ['QT_QPA_PLATFORM_PLUGIN_PATH']=os.path.join(os.environ['QTDIR'],'plugins','platforms')
+
+if 'MESHGEMSHOME' in os.environ:
+  meshgemsdir=os.environ['MESHGEMSHOME']
+  if len(meshgemsdir) > 0:
+    meshgems=meshgemsdir.split(os.sep)[-1]
+    uF.removeFromSessionPath('LD_LIBRARY_PATH', meshgems)
+
 #commande="/bin/bash -c ""source $HOME/zebulon/Z8.6.6_NEW/do_config_bash"""
 #os.system(commande)
 
 def IHM():
 
-  try:
-    from PyQt5.QtWidgets import QApplication
-  except:
-    from PyQt4.QtGui import QApplication
+  from PyQt5.QtWidgets import QApplication
 
   app = QApplication(sys.argv)
   myapp = main.ShipHolderApplication()
@@ -31,8 +36,7 @@ def SCRIPT(dataFile=None, data=None, dim=3, names=None):
 
   print(data)
 
-  tmpdir=tempfile.mkdtemp()
-  uF.removeFromSessionPath('LD_LIBRARY_PATH', 'Meshgems-2111')
+  tmpdir=tempfile.mkdtemp(prefix='tmpZcracks')
 
   if names==None: names={'saneGeoName':'salome_sane', 'crackGeoName':'salome_crack', 'crackedGeoName':'salome_cracked'}
 
index 3522ee67e1583d24a2107b1a8e9d3a928c95b5fd..592305cce677585d3e9ceb3417ede4d1d66cdb90 100644 (file)
@@ -18,13 +18,13 @@ import string
 
 #tmpdir = "/local00/home/B27118/projets/Zcracks/Zcracks/casTests/tmpdir"
 #if not os.path.isdir(tmpdir): os.mkdir(tmpdir)
-tmpdir=tempfile.mktemp(prefix='tmpZcracks')
+tmpdir=tempfile.mkdtemp(prefix='tmpZcracks')
 print("tmpdir=", tmpdir)
 
-meshgemsdir=os.environ('MESHGEMSHOME')
-if len(meshgemsdir) > 0:
-  meshgems=string.split(meshgemsdir,os.sep)[-1]
-  uF.removeFromSessionPath('LD_LIBRARY_PATH', meshgems)
+#meshgemsdir=os.environ('MESHGEMSHOME')
+#if len(meshgemsdir) > 0:
+  #meshgems=string.split(meshgemsdir,os.sep)[-1]
+  #uF.removeFromSessionPath('LD_LIBRARY_PATH', meshgems)
 
 def LAUNCH(listCas=[]):
   if not isinstance(listCas, list): listCas=[listCas]
@@ -194,7 +194,7 @@ def LAUNCH(listCas=[]):
 
   OK=[]
   NOOK=[]
-  for s in list(synthese.keys()):
+  for s in synthese:
     if synthese[s]:
       OK.append(s)
     else:
index 347c7c0ada26148e9af2b378287c1fffd2b943a0..fb75c82e1f386965d7f8875451d58bdebfb3cd27 100644 (file)
@@ -1,13 +1,9 @@
 import sys, pickle, tempfile, shutil
 from os import path, getpid, environ, remove, system
 
-try:
-  from PyQt5.QtCore import *
-  from PyQt5.QtGui import *
-  from PyQt5.QtWidgets import *
-except:
-  from PyQt4.QtCore import *
-  from PyQt4.QtGui import *
+from PyQt5.QtCore import *
+from PyQt5.QtGui import *
+from PyQt5.QtWidgets import *
 
 from . import utilityFunctions as uF
 from . import genereCrack, Zset, output, zcracks_ui
@@ -21,8 +17,6 @@ from .zcracks_ui import Ui_Zui
 #  ---------------------
 
 
-uF.removeFromSessionPath('LD_LIBRARY_PATH', 'Meshgems-2111')
-
 def stringToFloat(string, typ=float):
   if str(string).replace(' ','')=='':
     out=[]
@@ -78,25 +72,6 @@ class ShipHolderApplication(QGroupBox):
 
     self.verbose=1
 
-    #self.connect(self.ui.CBQuad, SIGNAL("toggled(bool)"),self.pressQuad)
-    #self.connect(self.ui.btReset, SIGNAL("clicked()"),self.pressReset)
-    #self.connect(self.ui.btCancel, SIGNAL("clicked()"),self.pressCancel)
-    #self.connect(self.ui.btApply, SIGNAL("clicked()"),self.pressApply)
-    #self.connect(self.ui.btApplyClose, SIGNAL("clicked()"),self.pressApplyClose)
-    #self.connect(self.ui.btLoad, SIGNAL("clicked()"),self.pressCharger)
-    #self.connect(self.ui.btSave, SIGNAL("clicked()"),self.pressSauver)
-    #self.connect(self.ui.btLoadCracked, SIGNAL("clicked()"),self.pressLoadCracked)
-    #self.connect(self.ui.btLoadSane, SIGNAL("clicked()"),self.pressLoadSane)
-
-    #self.connect(self.ui.btGrVol, SIGNAL("clicked()"),self.pressLoadGroupVOL)
-    #self.connect(self.ui.btGrFace, SIGNAL("clicked()"),self.pressLoadGroupFACE)
-    #self.connect(self.ui.btGrEdge, SIGNAL("clicked()"),self.pressLoadGroupEDGE)
-    #self.connect(self.ui.btGrNode, SIGNAL("clicked()"),self.pressLoadGroupNODE)
-    #self.connect(self.ui.btGrAll, SIGNAL("clicked()"),self.pressLoadGroupALL)
-    #self.connect(self.ui.btVisu, SIGNAL("clicked()"),self.pressVisu)
-
-    #self.connect(self.ui.CBAdvanced, SIGNAL("toggled(bool)"),self.pressAdvanced)
-
     self.ui.CBQuad.toggled.connect(self.pressQuad)
     self.ui.btReset.clicked.connect(self.pressReset)
     self.ui.btCancel.clicked.connect(self.pressCancel)
@@ -144,9 +119,9 @@ class ShipHolderApplication(QGroupBox):
   def pressQuad(self):
     if self.ui.CBQuad.isChecked():
       self.ui.CBBarsoum.setEnabled(True)
-      self.ui.valGradation.setText(QString('2.3'))
+      self.ui.valGradation.setText('2.3')
     else:
-      self.ui.valGradation.setText(QString('1.3'))
+      self.ui.valGradation.setText('1.3')
       self.ui.CBBarsoum.setChecked(False)
       self.ui.CBBarsoum.setEnabled(False)
 
@@ -162,10 +137,10 @@ class ShipHolderApplication(QGroupBox):
       tab=onglet.findChildren(QTableWidget)[0]
       for irow in range(tab.rowCount()):
         if tab.item(irow,0) != None:
-          tab.item(irow,0).setText(QString(''))
-    self.ui.valGradation.setText(QString('1.3'))
-    self.ui.valLayers.setText(QString('5'))
-    self.ui.valIterations.setText(QString('2'))
+          tab.item(irow,0).setText('')
+    self.ui.valGradation.setText('1.3')
+    self.ui.valLayers.setText('6')
+    self.ui.valIterations.setText('2')
     self.ui.CBIs2D.setChecked(False)
     self.ui.CBRefine.setChecked(False)
 
@@ -257,7 +232,7 @@ class ShipHolderApplication(QGroupBox):
       fileNames = fileDiag.selectedFiles()
       filedef = fileNames[0]
       filedef = addExtension(str(filedef), 'med')
-      self.ui.valCrackedName.setText(QString(filedef))
+      self.ui.valCrackedName.setText(filedef)
 
 
   def pressLoadSane(self):
@@ -268,7 +243,7 @@ class ShipHolderApplication(QGroupBox):
     if fileDiag.exec_() :
       fileNames = fileDiag.selectedFiles()
       filedef = fileNames[0]
-      self.ui.valSaneName.setText(QString(filedef))
+      self.ui.valSaneName.setText(filedef)
 
 
   def pressCharger(self):
@@ -287,23 +262,15 @@ class ShipHolderApplication(QGroupBox):
 
       for cont, obj in enumerate(self.lineEditObjects):
         if self.lineEditTypes[cont] in [float, int]:
-          obj.setText(QString(self.data['TXT'+self.lineEditNames[cont]]))
+          obj.setText(self.data['TXT'+self.lineEditNames[cont]])
         else:
-          obj.setText(QString(self.data[self.lineEditNames[cont]]))
+          obj.setText(self.data[self.lineEditNames[cont]])
 
       self.ui.CBQuad.setChecked(True if 'quad' in list(self.data.keys()) and self.data['quad'] else False)
       self.ui.CBBarsoum.setChecked(True if 'barsoum' in list(self.data.keys()) and self.data['barsoum'] else False)
       self.ui.CBIs2D.setChecked(True if 'is2D' in list(self.data.keys()) and self.data['is2D'] else False)
       self.ui.CBRefine.setChecked(True if 'refine' in list(self.data.keys()) and self.data['refine'] else False)
 
-
-
-
-
-      #if self.data['quad']: self.ui.CBQuad.setChecked(True)
-      #if self.data['barsoum']: self.ui.CBBarsoum.setChecked(True)
-      #if self.data['is2D']: self.ui.CBIs2D.setChecked(True)
-      #if self.data['refine']: self.ui.CBRefine.setChecked(True)
       self.setTableParameters()
 
 
@@ -451,7 +418,7 @@ class ShipHolderApplication(QGroupBox):
         if tab.item(irow,0) == None:
           item = QTableWidgetItem()
           tab.setItem(irow, 0, item)
-        tab.item(irow,0).setText(QString(self.data['TXTcrack'][str(self.ui.tabWidget.tabText(iongl))][str(label)]))
+        tab.item(irow,0).setText(self.data['TXTcrack'][str(self.ui.tabWidget.tabText(iongl))][str(label)])
       if str(self.ui.tabWidget.tabText(iongl)) == self.data['TXTcrack']['actif']:
         self.ui.tabWidget.setCurrentWidget(onglet)
 
@@ -475,19 +442,19 @@ class ShipHolderApplication(QGroupBox):
 
       for group in objetSain.GetGroups():
         if (self.GroupToLoad in ['VOL','ALL']) and (group.GetType()==SMESH.VOLUME):
-          groupsVOL+=group.GetName().replace(' ','')+" "
+          groupsVOL+=self.cleanGroupName(group)
           nGr+=1
 
         if (self.GroupToLoad in ['FACE','ALL']) and (group.GetType()==SMESH.FACE):
-          groupsFAC+=group.GetName().replace(' ','')+" "
+          groupsFAC+=self.cleanGroupName(group)
           nGr+=1
 
         if (self.GroupToLoad in ['EDGE','ALL']) and (group.GetType()==SMESH.EDGE):
-          groupsEDG+=group.GetName().replace(' ','')+" "
+          groupsEDG+=self.cleanGroupName(group)
           nGr+=1
 
         if (self.GroupToLoad in ['NODE','ALL']) and (group.GetType()==SMESH.NODE):
-          groupsNOD+=group.GetName().replace(' ','')+" "
+          groupsNOD+=self.cleanGroupName(group)
           nGr+=1
 
       if groupsVOL!='':  self.ui.valGrVol.setText(groupsVOL)
@@ -503,6 +470,24 @@ class ShipHolderApplication(QGroupBox):
         remove(f)
       except:
         pass
+        
+  def cleanGroupName(self, group):
+    name=group.GetName()
+    while name.endswith(' '): name=name[:-1]
+    if ' ' in name: 
+      message('A','%s group has a space in its name --> ignored' %name)
+      return('')
+    else:
+      return(name+" ")
+      
+  def checkNamesSpaces(self, names):
+    if type(names) is str: names=[names]
+    ok=True
+    for n in names:
+      if ' ' in n:
+        message('E','%s has a space in its name, please remove it' %n, goOn=True)
+        ok=False
+    return(ok)
 
 
 #  ---------------------------------
index 8a316b0ddbeb82ca75c21e9e6daf101fdbd1644b..00b31f59f1f4c6fb804933e8e1b19e9c1fdab72d 100644 (file)
@@ -22,9 +22,9 @@ class output():
       pass
     f = open(self.tmpFile,'w')
     f.write('\n      ------------------------------\n')
-    f.write('     |   BIENVENU DANS L\'INTERFACE  |\n')
+    f.write('     |  BIENVENUE DANS L\'INTERFACE  |\n')
     f.write('     |      ZCRACKS DE SALOME       |\n')
-    f.write('     |        VERSION ALPHA         |\n')
+    f.write('     |        VERSION BETA          |\n')
     f.write('       ------------------------------\n\n')
     f.close()
 
index 34e46f8574f83cc3dda689c6a01cfb134df5a8de..997f02f7c7f3c1856c711843997c7a57a0b18750 100644 (file)
@@ -178,7 +178,13 @@ def extendElsets(meshFile, outFile=None):
   smesh = smeshBuilder.New(theStudy)
 
   ([mesh], status) = smesh.CreateMeshesFromMED(meshFile)
-
+  
+  if mesh.NbVolumes()>0: 
+    case2D=False
+    mesh.Reorient2DBy3D( [ mesh ], mesh, 1 )
+  else:
+    case2D=True
+    
   mesh=cleanGroups(mesh)
 
   # Node color status
@@ -339,91 +345,6 @@ def getMaxAspectRatio(tmpdir):
   return(float(maxAR))
 
 
-#def extendElsets(meshFile):
-  #if not path.isfile(meshFile):
-    #message('E','Mesh med file is not valid')
-    #return(-1)
-
-  #import SMESH, salome
-  ##salome.salome_init()
-  #theStudy = salome.myStudy
-  #from salome.smesh import smeshBuilder
-  #smesh = smeshBuilder.New(theStudy)
-
-  #([mesh], status) = smesh.CreateMeshesFromMED(meshFile)
-
-  ## Node color status
-  #nodeList=mesh.GetNodesId()
-  #colorList=[0]*len(nodeList)
-
-  ## Init using SIDE0 SIDE1
-  #for group in mesh.GetGroups():
-    #if group.GetType()==SMESH.FACE :
-      #color=0
-      #if group.GetName()[0:4]=='SIDE0' :
-        #color=1
-      #elif group.GetName()[0:4]=='SIDE1' :
-        #color=2
-      #else : continue
-      ## Get faces
-      #faces=group.GetIDs()
-      ## Set faces nodes to given color
-      #for face_id in faces :
-        #for face_node_id in mesh.GetElemNodes(face_id) :
-          #colorList[face_node_id-1]=color
-
-  ## Propagates color using elem connectivity
-  ## Always propagates max color
-  #volElemList=mesh.GetElementsByType(SMESH.VOLUME)
-  #ifChanged=True
-  #while ifChanged :
-    #ifChanged=False
-    #minColor=100
-    #maxColor=0
-    #for elemId in volElemList:
-      #for elemNodeId in mesh.GetElemNodes(elemId) :
-        #nodeColor=colorList[elemNodeId-1]
-        #if nodeColor<minColor : minColor=nodeColor
-        #if nodeColor>maxColor : maxColor=nodeColor
-      #if minColor!=maxColor :
-        #ifChanged = True
-        #for elemNodeId in mesh.GetElemNodes(elemId) :
-          #colorList[elemNodeId-1]=maxColor
-
-  #velem0 = []
-  #velem1 = []
-  #for elemId in volElemList:
-    #elemNodesId=mesh.GetElemNodes(elemId)
-    #elemColor=colorList[elemNodesId[0]-1]
-    #if(elemColor==1) : velem0.append(elemId)
-    #if(elemColor==2) : velem1.append(elemId)
-
-  #mesh.MakeGroupByIds('SIDE_co',SMESH.VOLUME,velem0)
-  #mesh.MakeGroupByIds('SIDE_ext',SMESH.VOLUME,velem1)
-
-  #surfElemList=mesh.GetElementsByType(SMESH.FACE)
-  #selem0 = []
-  #selem1 = []
-  #nbelem0=0
-  #nbelem1=0
-
-  #for elemId in surfElemList:
-    #elemNodesId=mesh.GetElemNodes(elemId)
-    #elemColor=colorList[elemNodesId[0]-1]
-    #if(elemColor==1) : selem0.append(elemId)
-    #if(elemColor==2) : selem1.append(elemId)
-
-  #mesh.MakeGroupByIds('SIDE_co',SMESH.FACE,selem0)
-  #mesh.MakeGroupByIds('SIDE_ext',SMESH.FACE,selem1)
-
-  #maxAR=0.
-  #for elem in volElemList:
-    #maxAR=max(mesh.GetAspectRatio(elem),maxAR)
-  #for elem in surfElemList:
-    #maxAR=max(mesh.GetAspectRatio(elem),maxAR)
-
-  #mesh.ExportMED(meshFile, 0, SMESH.MED_V2_2, 1, None ,1)
-  #return(maxAR)
 
 
 def removeFromSessionPath(envVar, patern):
index e1cd4e7d25836c6e36aa76d0341f691b625c0830..10b5b94c86575930175ac602b2969033f1aaae46 100644 (file)
@@ -146,11 +146,12 @@ bool SPADDERPluginTester_i::testsmesh(CORBA::Long studyId)
 //
 extern "C"
 {
-  PortableServer::ObjectId * SPADDERPluginTesterEngine_factory( CORBA::ORB_ptr orb,
-                                                                PortableServer::POA_ptr poa,
-                                                                PortableServer::ObjectId * contId,
-                                                                const char *instanceName,
-                                                                const char *interfaceName)
+  SPADDERPLUGINTESTERENGINE_EXPORT PortableServer::ObjectId * 
+  SPADDERPluginTesterEngine_factory( CORBA::ORB_ptr orb,
+                                     PortableServer::POA_ptr poa,
+                                     PortableServer::ObjectId * contId,
+                                     const char *instanceName,
+                                     const char *interfaceName)
   {
     MESSAGE("PortableServer::ObjectId * SPADDERPluginTesterEngine_factory()");
     SPADDERPluginTester_i * myEngine = new SPADDERPluginTester_i(orb, poa, contId, instanceName, interfaceName);
index 36c7637fcf4c171de7462f708a6c36759c8d1469..9a2193d556c2669274b0a55df51daa6a1a9aed73 100644 (file)
 #ifndef _SPADDER_PLUGINTESTER_HXX_
 #define _SPADDER_PLUGINTESTER_HXX_
 
+#ifdef WIN32
+ #if defined SPADDERPLUGINTESTERENGINE_EXPORTS || defined SPADDERPluginTesterEngine_EXPORTS
+  #define SPADDERPLUGINTESTERENGINE_EXPORT __declspec( dllexport )
+ #else
+  #define SPADDERPLUGINTESTERENGINE_EXPORT __declspec( dllimport )
+ #endif
+#else
+ #define SPADDERPLUGINTESTERENGINE_EXPORT
+#endif
+
 // include the stubs generating from SPADDERPluginTest.idl
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SPADDERPluginTest)
 #include <SALOME_Component.hh>
 #include "SALOME_Component_i.hxx"
 
-class SPADDERPluginTester_i:
+class SPADDERPLUGINTESTERENGINE_EXPORT SPADDERPluginTester_i:
   public virtual POA_SPADDERPluginTest::SPADDERPluginTester,
   public Engines_Component_i
 {
index a5e08488c43b6a72cf6bb0608e1c07e918505724..6620020b71b899e1a5ee9c0999d28159aae9859c 100644 (file)
@@ -38,6 +38,14 @@ from salome.smesh.spadder.gui.inputdata import InputData
 DEBUG_MODE=True
 GROUPNAME_MAXLENGTH=8
 
+INPUTDATA_KEY_FILES="meshfiles"
+INPUTDATA_KEY_PARAM="parameters"
+
+PARAM_KEY_NBITER   = "NbIteration"
+PARAM_KEY_RMAXRMIN = "RmaxRmin"
+PARAM_NBITER_DEFAULT_VALUE = 10
+PARAM_RMAXRMIN_DEFAULT_VALUE = 3
+
 class InputDialog(GenericDialog):
 
     TBL_HEADER_LABEL=["Input Mesh", "Output group name"]
@@ -116,7 +124,8 @@ class InputDialog(GenericDialog):
         # name item.
 
         # Setup default values for numerical parameters
-        self.__ui.txtParamNbIter.setValue(3)
+        self.__ui.txtParamNbIter.setValue(PARAM_NBITER_DEFAULT_VALUE)
+        self.__ui.txtParamRmaxRmin.setValue(PARAM_RMAXRMIN_DEFAULT_VALUE)
 
         # Note that PADDER does not support group name longer than 8
         # characters. We apply then this limit in the gui field.
@@ -138,7 +147,7 @@ class InputDialog(GenericDialog):
             self.__ui.txtSmeshObject.setEnabled(False)
             self.__ui.btnAddInput.setEnabled(False)
         self.__selectedMesh = None
-        self.__dictInputData = {}
+        self.__dictInputFiles = {}
         self.__nbConcreteMesh = 0
         self.__nbSteelbarMesh = 0
 
@@ -231,7 +240,7 @@ class InputDialog(GenericDialog):
         """
         # if the entry already exists, we remove it to replace by a
         # new one
-        if meshName in self.__dictInputData:
+        if meshName in self.__dictInputFiles:
             self.__delInputFromMap(meshName)
 
         inputData = InputData()
@@ -240,7 +249,7 @@ class InputDialog(GenericDialog):
         inputData.meshType   = meshType
         inputData.groupName  = groupName
         # The key of the map is the mesh name
-        self.__dictInputData[meshName] = inputData
+        self.__dictInputFiles[meshName] = inputData
         if inputData.meshType == InputData.MESHTYPES.CONCRETE:
             self.__nbConcreteMesh += 1
         else:
@@ -272,7 +281,7 @@ class InputDialog(GenericDialog):
         This function removes the specified entry from the internal
         map (for data management purpose)
         """
-        inputData = self.__dictInputData.pop(meshName)
+        inputData = self.__dictInputFiles.pop(meshName)
         if inputData.meshType == InputData.MESHTYPES.CONCRETE:
             self.__nbConcreteMesh -= 1
         else:
@@ -283,33 +292,51 @@ class InputDialog(GenericDialog):
         print("nb steelbar mesh ",self.__nbSteelbarMesh)
 
 
-    def setData(self, listInputData=[]):
+    def setData(self, dictInputData={}):
         """
         This function fills the dialog widgets with values provided by
         the specified data list.
         """
         self.clear()
-        for inputData in listInputData:
+        if INPUTDATA_KEY_FILES in dictInputData:
+            listInputData = dictInputData["meshfiles"]
+            for inputData in listInputData:
 
-            meshName   = inputData.meshName
-            meshObject = inputData.meshObject
-            meshType   = inputData.meshType
-            groupName  = inputData.groupName
+                meshName = inputData.meshName
+                meshObject = inputData.meshObject
+                meshType = inputData.meshType
+                groupName = inputData.groupName
 
-            self.__addInputInGui(meshName, meshObject, meshType, groupName)
-            self.__addInputInMap(meshName, meshObject, meshType, groupName)
+                self.__addInputInGui(meshName, meshObject, meshType, groupName)
+                self.__addInputInMap(meshName, meshObject, meshType, groupName)
 
-            if not DEBUG_MODE:
-                self.onSelectSmeshObject()
+                if not DEBUG_MODE:
+                    self.onSelectSmeshObject()
+
+        if INPUTDATA_KEY_PARAM in dictInputData:
+            dictInputParameters = dictInputData[INPUTDATA_KEY_PARAM]
+            if PARAM_KEY_NBITER in dictInputParameters:
+                self.__ui.txtParamNbIter.setValue(dictInputParameters[PARAM_KEY_NBITER])
+            if PARAM_KEY_RMAXRMIN in dictInputParameters:
+                self.__ui.txtParamRminRmax.setValue(dictInputParameters[PARAM_KEY_RMAXRMIN])
 
     def getData(self):
         """
         This function returns a list of InputData that corresponds to
         the data in the dialog widgets of the current dialog.
         """
+        # Get the list of mesh files
         # Note that the values() function returns a copy of the list
         # of values.
-        return list(self.__dictInputData.values())
+        dictInputData={}
+        dictInputData[INPUTDATA_KEY_FILES] = self.__dictInputFiles.values()
+
+        # Get the list of additionnal parameters
+        dictInputParameters = {}
+        dictInputParameters[PARAM_KEY_NBITER] = self.__ui.txtParamNbIter.value()
+        dictInputParameters[PARAM_KEY_RMAXRMIN] = self.__ui.txtParamRmaxRmin.value()
+        dictInputData[INPUTDATA_KEY_PARAM] = dictInputParameters
+        return dictInputData
 
     def checkData(self):
         """
@@ -328,7 +355,6 @@ class InputDialog(GenericDialog):
 
         return True
 
-    #def setParameters(self,
 
 # ==============================================================================
 # Basic use case
index b1ba72d96d2ee81e8765f3a53ca2d71123466eb4..a8882f44cb67dd24170e0a88003e1faf02ef9f10 100644 (file)
                </property>
                <item>
                 <property name="text">
-                 <string>Béton</string>
+                 <string>Beton</string>
                 </property>
                 <property name="icon">
                  <iconset>
             </widget>
            </item>
            <item>
-            <widget class="QLabel" name="lblParamRminRmax">
+            <widget class="QLabel" name="lblParamRmaxRmin">
              <property name="text">
-              <string>Rmin / Rmax</string>
+              <string>Rmax / Rmin</string>
              </property>
             </widget>
            </item>
             <widget class="QSpinBox" name="txtParamNbIter"/>
            </item>
            <item>
-            <widget class="QDoubleSpinBox" name="txtParamRminRmax"/>
+            <widget class="QDoubleSpinBox" name="txtParamRmaxRmin"/>
            </item>
           </layout>
          </item>
index c3f30e55b4b91c165580c2d01934ee3db9c7c669..ba00df765c989578370e14397d8f0ae2f0b73fca 100644 (file)
@@ -23,7 +23,8 @@
 from qtsalome import QDialog, QIcon, Qt
 
 from salome.smesh.spadder.gui.plugindialog_ui import Ui_PluginDialog
-from salome.smesh.spadder.gui.inputdialog import InputDialog
+from salome.smesh.spadder.gui.inputdialog import InputDialog, INPUTDATA_KEY_FILES, INPUTDATA_KEY_PARAM
+from salome.smesh.spadder.gui.inputdialog import PARAM_KEY_NBITER, PARAM_KEY_RMAXRMIN
 from salome.smesh.spadder.gui.inputdata import InputData
 # __GBO__: uncomment this line and comment the previous one to use the
 # demo input dialog instead of the real one.
@@ -218,6 +219,7 @@ class PluginDialog(QDialog):
         This function clears the log area and the states of the buttons
         """
         self.__listInputData = []
+        self.__dictInputParameters = {}
         self.__ui.txtLog.clear()
         self.__setGuiState(["CAN_SELECT"])
         self.__isRunning = False
@@ -241,7 +243,10 @@ class PluginDialog(QDialog):
         windows to process the validation event (see the slot
         onProcessInput which is connected to this event).
         '''
-        self.__inputDialog.setData(self.__listInputData)
+        dictInputData = {}
+        dictInputData[INPUTDATA_KEY_FILES] = self.__listInputData
+        dictInputData[INPUTDATA_KEY_PARAM] = self.__dictInputParameters
+        self.__inputDialog.setData(dictInputData)
         self.__inputDialog.open()
 
     def onProcessInput(self):
@@ -252,7 +257,10 @@ class PluginDialog(QDialog):
         """
         # The processing simply consists in requesting the input data
         # from the dialog window.
-        self.__listInputData = self.__inputDialog.getData()
+        dictInputData = self.__inputDialog.getData()
+        self.__listInputData = dictInputData[INPUTDATA_KEY_FILES]
+        self.__dictInputParameters = dictInputData[INPUTDATA_KEY_PARAM]
+
         self.__ui.lblStatusBar.setText("Input data OK")
         self.__log("INF: Press \"Compute\" to start the job")
         self.__setGuiState(["CAN_SELECT", "CAN_COMPUTE"])
@@ -283,8 +291,16 @@ class PluginDialog(QDialog):
                 group_name = inputData.groupName)
             meshJobFileList.append(parameter)
 
+        # And to create a list of the additional parameters.
+        # WARN: the CORBA interface requires string values.
+        meshJobParameterList=[]
+        for inputParameterKey in self.__dictInputParameters:
+            value = self.__dictInputParameters[inputParameterKey]
+            parameter = MESHJOB.MeshJobParameter(name=inputParameterKey,value=str(value))
+            meshJobParameterList.append(parameter)
+
         jobManager = self.__getJobManager()
-        self.__jobid = jobManager.initialize(meshJobFileList, self.__configId)
+        self.__jobid = jobManager.initialize(meshJobFileList, meshJobParameterList, self.__configId)
         if self.__jobid < 0:
             self.__log("ERR: the job can't be initialized")
             self.__log("ERR: %s"%jobManager.getLastErrorMessage())
index 393840239d54ca1bcbdeb9df9881f6bd41ff8021..4fe3da6d91f45bcf060e8cea72607de816a596fa 100644 (file)
@@ -83,7 +83,7 @@ PADDERTESTDIR = getPadderTestDir(defaultConfig)
 # padder.cfg).
 #
 def test00_parameters():
-    """Test using a concrete mesh and a single steelbar mesh""" 
+    """Test using a concrete mesh and a single steelbar mesh"""
     file_concrete=os.path.join(spadder.getTestDataDir(),"concrete.med")
     file_steelbar=os.path.join(spadder.getTestDataDir(),"ferraill.med")
 
@@ -109,7 +109,7 @@ def test01_parameters():
                                      file_type=MESHJOB.MED_CONCRETE,
                                      group_name="concrete")
     meshJobFileList.append(param)
-    
+
     medfile = os.path.join(datadir,"ferraill.med")
     param = MESHJOB.MeshJobFile(file_name=medfile,
                                      file_type=MESHJOB.MED_STEELBAR,
@@ -121,7 +121,7 @@ def test01_parameters():
                                      file_type=MESHJOB.MED_STEELBAR,
                                      group_name="ferrtran")
     meshJobFileList.append(param)
-    
+
     return meshJobFileList
 
 def test02_parameters():
@@ -161,7 +161,7 @@ def test03_parameters():
 meshJobFileList = test03_parameters()
 
 meshJobParameterList = []
-param = MESHJOB.MeshJobParameter(name="RminRmax",value="1.5")
+param = MESHJOB.MeshJobParameter(name="RmaxRmin",value="1.5")
 meshJobParameterList.append(param)
 param = MESHJOB.MeshJobParameter(name="NbIteration",value="3")
 meshJobParameterList.append(param)
@@ -174,7 +174,7 @@ if jobid<0:
     msg = component.getLastErrorMessage()
     print("ERR: %s"%msg)
     sys.exit(1)
-    
+
 created = False
 nbiter  = 0
 while not created:
@@ -217,11 +217,11 @@ while not ended:
         ended=True
     time.sleep(0.5)
     nbiter+=1
-        
+
 if state not in end_states:
     print("ERR: jobid = "+str(jobid)+" ended abnormally with state="+str(state))
     msg = component.getLastErrorMessage()
-    print("ERR: %s"%msg)    
+    print("ERR: %s"%msg)
 else:
     print("OK:  jobid = "+str(jobid)+" ended with state="+str(state))
     meshJobResults = component.finalize(jobid)