Salome HOME
0021803: EDF 2351 : Available versions of MED in TUI function ExportMED aren't consis...
authorvsr <vsr@opencascade.com>
Mon, 13 Feb 2017 13:56:14 +0000 (16:56 +0300)
committervsr <vsr@opencascade.com>
Wed, 15 Feb 2017 07:47:24 +0000 (10:47 +0300)
Step 2: Remove deprecated MED_VERSION enumerator.

47 files changed:
idl/SMESH_Gen.idl
idl/SMESH_Mesh.idl
src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx
src/DriverMED/DriverMED_W_SMESHDS_Mesh.h
src/MEDWrapper/MED_Factory.cxx
src/MEDWrapper/MED_Factory.hxx
src/MEDWrapper/MED_V2_2_Wrapper.hxx
src/MEDWrapper/MED_Wrapper.hxx
src/MEDWrapper/mprint_version.cxx
src/SMESH/SMESH_Mesh.cxx
src/SMESH/SMESH_Mesh.hxx
src/SMESHGUI/SMESHGUI.cxx
src/SMESHGUI/SMESH_msg_en.ts
src/SMESHGUI/SMESH_msg_fr.ts
src/SMESHGUI/SMESH_msg_ja.ts
src/SMESH_I/CMakeLists.txt
src/SMESH_I/SMESH_2smeshpy.cxx
src/SMESH_I/SMESH_DumpPython.cxx [deleted file]
src/SMESH_I/SMESH_Gen_i.cxx
src/SMESH_I/SMESH_Gen_i.hxx
src/SMESH_I/SMESH_Mesh_i.cxx
src/SMESH_I/SMESH_Mesh_i.hxx
src/SMESH_I/SMESH_PythonDump.cxx [new file with mode: 0644]
src/SMESH_I/SMESH_PythonDump.hxx
src/SMESH_SWIG/smeshBuilder.py
src/Tools/ZCracksPlug/casTests/genereCube.py
src/Tools/ZCracksPlug/ellipse.py
src/Tools/ZCracksPlug/genereCrack.py
src/Tools/ZCracksPlug/rectangle.py
src/Tools/ZCracksPlug/sphere.py
src/Tools/ZCracksPlug/utilityFunctions.py
src/Tools/blocFissure/exemple2.py
src/Tools/blocFissure/gmu/construitFissureGenerale.py
src/Tools/blocFissure/gmu/creeZoneDefautDansObjetSain.py
src/Tools/blocFissure/gmu/insereFissureElliptique.py
src/Tools/blocFissure/gmu/insereFissureGenerale.py
src/Tools/blocFissure/gmu/insereFissureLongue.py
src/Tools/blocFissure/materielCasTests/cubeAngle.py
src/Tools/blocFissure/materielCasTests/cubeFin.py
src/Tools/blocFissure/materielCasTests/decoupeCylindre.py
src/Tools/blocFissure/materielCasTests/disque_perce.py
src/Tools/blocFissure/materielCasTests/eprouvetteCourbe.py
src/Tools/blocFissure/materielCasTests/eprouvetteDroite.py
src/Tools/blocFissure/materielCasTests/fissureGauche.py
src/Tools/blocFissure/materielCasTests/fissureGauche2.py
src/Tools/blocFissure/materielCasTests/vis.py
src/Tools/padder/spadderpy/gui/plugindialog.py

index 75fbe089438725870291f755776561e9d291be8d..5e03a34ee57cdd78a0bd6ed92f678a234b61d1f9 100644 (file)
@@ -406,10 +406,20 @@ module SMESH
      */
     long GetObjectId(in Object theObject);
 
+    /*!
+     * \brief Get version of MED format being used.
+     */
+    string GetMEDFileVersion();
+
     /*!
      * \brief Get MED version of the file by its name.
      */
-    boolean GetMEDVersion(in string theFileName, out MED_VERSION theVersion);
+    string GetMEDVersion(in string theFileName);
+
+    /*!
+     * \brief Check compatibility of file with MED format being used.
+     */
+    boolean CheckCompatibility(in string theFileName);
 
     /*!
      * \brief Get names of meshes defined in file with the specified name.
index 51c98282cb4bdb0e36ef3c20880394575c90d43f..51ba75dd6da7df6a37ee30eab1eb76e427527f54 100644 (file)
@@ -235,15 +235,6 @@ module SMESH
     DRS_FAIL            // general failure (exception etc.)
   };
 
-  /*!
-   * Enumeration for ExportToMED*()
-   */
-  enum MED_VERSION
-  {
-    MED_V2_1,
-    MED_V2_2
-  };
-
   /*! 
    * \brief A structure containing information about MED file
    */
@@ -634,7 +625,6 @@ module SMESH
      * - auto_groups : boolean parameter for creating/not creating
      *                 the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
      *                 the typical use is auto_groups=false.
-     * - version : defines the version of format of MED file, that will be created
      * - overwrite : boolean parameter for overwriting/not overwriting the file, if it exists
      * - autoDimension : if @c true, a space dimension of a MED mesh can be either
      *         - 1D if all mesh nodes lie on OX coordinate axis, or
@@ -644,7 +634,6 @@ module SMESH
      */
     void ExportToMEDX( in string      file, 
                        in boolean     auto_groups, 
-                       in MED_VERSION version, 
                        in boolean     overwrite,
                        in boolean     autoDimension) raises (SALOME::SALOME_Exception);
 
@@ -653,7 +642,6 @@ module SMESH
      * @params
      * - meshPart : a part of mesh to store
      * - file : name of the MED file
-     * - version : define the version of format of MED file, that will be created
      * - overwrite : boolean parameter for overwriting/not overwriting the file, if it exists
      * - autoDimension : if @c True, a space dimension for export is defined by mesh 
      *                 configuration; for example a planar mesh lying on XOY plane
@@ -670,25 +658,23 @@ module SMESH
     void ExportPartToMED( in SMESH_IDSource     meshPart,
                           in string             file,
                           in boolean            auto_groups,
-                          in MED_VERSION        version,
                           in boolean            overwrite,
                           in boolean            autoDimension,
                           in GEOM::ListOfFields fields,
                           in string             geomAssocFields ) raises (SALOME::SALOME_Exception);
 
     /*!
-     * Export Mesh to a MED Format file
+     * Export Mesh to a MED file
      * Works, just the same as ExportToMEDX, with overwrite parameter equal to true.
      * The method is kept in order to support old functionality
      */
-    void ExportToMED( in string file, in boolean auto_groups, in MED_VERSION theVersion )
+    void ExportToMED( in string file, in boolean auto_groups )
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Export Mesh to MED_V2_1 MED format
-     * Works, just the same as ExportToMEDX with MED_VERSION parameter equal to MED_V2_1
-     * and overwrite parameter equal to true
-     * The method is kept in order to support old functionality
+     * Export Mesh to MED file.
+     * This method is deprecated; it is kept only to support old functionality.
+     * Works exactly as ExportToMED method.
      */
     void ExportMED( in string file, in boolean auto_groups )
       raises (SALOME::SALOME_Exception);
@@ -700,11 +686,6 @@ module SMESH
     void ExportSAUV( in string file, in boolean auto_groups )
       raises (SALOME::SALOME_Exception);
 
-    /*!
-     * Return string representation of a MED file version comprising nbDigits
-     */
-    string GetVersionString(in MED_VERSION version, in short nbDigits);
-
     /*!
      * Export Mesh to different Formats
      * (UNV supported version is I-DEAS 10)
index 283ed6355f1e7eb8a284d5ad3d37acd52218298d..1842ec9b9bc8e1baed512383ead9e7889df2c130 100644 (file)
@@ -68,21 +68,6 @@ void DriverMED_W_SMESHDS_Mesh::SetFile(const std::string& theFileName)
   Driver_SMESHDS_Mesh::SetFile(theFileName);
 }
 
-string DriverMED_W_SMESHDS_Mesh::GetVersionString(int theNbDigits)
-{
-  TInt majeur, mineur, release;
-  majeur =  mineur = release = 0;
-  MED::GetVersionRelease(majeur, mineur, release);
-  ostringstream name;
-  if ( theNbDigits > 0 )
-    name << majeur;
-  if ( theNbDigits > 1 )
-    name << "." << mineur;
-  if ( theNbDigits > 2 )
-    name << "." << release;
-  return name.str();
-}
-
 void DriverMED_W_SMESHDS_Mesh::AddGroup(SMESHDS_GroupBase* theGroup)
 {
   myGroups.push_back(theGroup);
index 27a44bf4bd64aef7eeb342171dcad27cc07941b7..e4ae890c176d1221aea2babf4a45a5c8872506ca 100644 (file)
@@ -50,8 +50,6 @@ class MESHDRIVERMED_EXPORT DriverMED_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
   void SetFile(const std::string& theFileName);
   void SetAutoDimension(bool toFindOutDimension) { myAutoDimension = toFindOutDimension; }
 
-  static std::string GetVersionString(int theNbDigits=2);
-
   void AddGroupOfNodes();
   void AddGroupOfEdges();
   void AddGroupOfFaces();
index 34f85e894a46baed11c84c971fa9c016a4693220..a9b8bd2e71ddec77244a24326019568c3d68f21a 100644 (file)
@@ -36,110 +36,89 @@ extern "C"
 #endif
 }
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
-
 namespace MED
 {
-  enum EStatus { eBad, eDeprecated, eGood };
-
-  EStatus GetVersionId(const std::string& theFileName)
+  bool exists(const std::string& fileName)
   {
-    INITMSG(MYDEBUG,"GetVersionId - theFileName = '"<<theFileName<<"'"<<std::endl);
-
-    EStatus status = eBad;    
-
-    bool ok = true;
-    // 1. Check that file is accessible
 #ifdef WIN32
-    ok = (GetFileAttributes(xmlPath.c_str()) != INVALID_FILE_ATTRIBUTES);
+    return (GetFileAttributes(xmlPath.c_str()) != INVALID_FILE_ATTRIBUTES);
 #else
-    ok = (access(theFileName.c_str(), F_OK) == 0);
+    return (access(fileName.c_str(), F_OK) == 0);
 #endif
-    // 2. Check compatibility of hdf and med versions
-    if ( ok ) {
+  }
+
+  bool CheckCompatibility(const std::string& fileName)
+  {
+    bool ok = false;
+    // check that file is accessible
+    if ( exists(fileName) ) {
+      // check HDF5 && MED compatibility
       med_bool hdfok, medok;
-      MEDfileCompatibility(theFileName.c_str(), &hdfok, &medok);
-      ok = hdfok /*&& medok*/; // med-2.1 is KO since med-3.0.0
+      MEDfileCompatibility(fileName.c_str(), &hdfok, &medok);
+      if ( hdfok && medok ) {
+        med_idt aFid = MEDfileOpen(fileName.c_str(), MED_ACC_RDONLY);
+        if (aFid >= 0) {
+          med_int major, minor, release;
+          med_err ret = MEDfileNumVersionRd(aFid, &major, &minor, &release);
+          if (ret >= 0) {
+            int version = 100*major + minor;
+            if (version >= 202)
+              ok = true;
+          }
+        }
+        MEDfileClose(aFid);
+      }
     }
-    // 3. Try to open the file with MED API
-    if ( ok ) {
-      med_idt aFid = MEDfileOpen(theFileName.c_str(), MED_ACC_RDONLY);
+    return ok;
+  }
 
-      MSG(MYDEBUG,"GetVersionId - theFileName = '"<<theFileName<<"'; aFid = "<<aFid<<std::endl);
-      if (aFid >= 0) {
-        med_int aMajor, aMinor, aRelease;
-        med_err aRet = MEDfileNumVersionRd(aFid, &aMajor, &aMinor, &aRelease);
-        INITMSG(MYDEBUG,"GetVersionId - theFileName = '"<<theFileName<<"'; aRet = "<<aRet<<std::endl);
-        if (aRet >= 0) {
-          if (aMajor == 2 && aMinor == 1)
-            status = eDeprecated;
-          else
-            status = eGood;
-        }
-        else {
-          // VSR: simulate med 2.3.6 behavior, med file version is assumed to 2.1
-          status = eDeprecated;
-        }
+  bool GetMEDVersion(const std::string& fileName, int& major, int& minor, int& release)
+  {
+    bool ok = false;
+    major = minor = release = 0;
+    med_idt aFid = MEDfileOpen(fileName.c_str(), MED_ACC_RDONLY);
+    if (aFid >= 0) {
+      med_int _major, _minor, _release;
+      med_err ret = MEDfileNumVersionRd(aFid, &_major, &_minor, &_release);
+      if (ret == 0) {
+        major = _major;
+        minor = _minor;
+        release = _release;
+        ok = true;
       }
       MEDfileClose(aFid);
-      ok = true;
-      BEGMSG(MYDEBUG,"GetVersionId - theFileName = '"<<theFileName<<"'; status = "<<status<<std::endl);
     }
-    return status;
+    return ok;
   }
 
-  bool GetMEDVersion(const std::string& fname, int& major, int& minor, int& release)
+  std::string GetMEDVersion(const std::string& fileName)
   {
-    med_idt f = MEDfileOpen(fname.c_str(), MED_ACC_RDONLY);
-    if ( f<0 )
-      return false;
-
-    med_int aMajor, aMinor, aRelease;
-    med_err aRet = MEDfileNumVersionRd(f, &aMajor, &aMinor, &aRelease);
-    major = aMajor;
-    minor = aMinor;
-    release = aRelease;
-    MEDfileClose( f );
-    if ( aRet<0 ) {
-      // VSR: simulate med 2.3.6 behavior, med file version is assumed to 2.1
-      major = 2; minor = release = -1;
-      //return false;
+    std::string version;
+    int major, minor, release;
+    if (GetMEDVersion(fileName, major, minor, release)) {
+      std::ostringstream os;
+      os << major << "." << minor << "." << release;
+      version = os.str();
     }
-    return true;
+    return version;
   }
 
-  PWrapper CrWrapperR(const std::string& theFileName)
+  PWrapper CrWrapperR(const std::string& fileName)
   {
     PWrapper aWrapper;
-    EStatus status = GetVersionId(theFileName);
-    switch (status) {
-    case eGood:
-      aWrapper.reset(new MED::V2_2::TVWrapper(theFileName));
-      break;
-    case eDeprecated:
-      EXCEPTION(std::runtime_error,"Cannot open file '"<<theFileName<<"'. Med version 2.1 is not supported any more.");
-      break;
-    default:
-      EXCEPTION(std::runtime_error,"MED::CrWrapper - theFileName = '"<<theFileName<<"'");
-      break;
+    if (!CheckCompatibility(fileName)) {
+      EXCEPTION(std::runtime_error, "Cannot open file '"<<fileName<<"'.");
+    }
+    else {
+      aWrapper = new MED::V2_2::TVWrapper(fileName);
     }
     return aWrapper;
   }
 
-  PWrapper CrWrapperW(const std::string& theFileName)
+  PWrapper CrWrapperW(const std::string& fileName)
   {
-    EStatus status = GetVersionId(theFileName);
-
-    if (status != eGood)
-      remove(theFileName.c_str());
-    
-    PWrapper aWrapper;
-    aWrapper.reset(new MED::V2_2::TVWrapper(theFileName));
-
-    return aWrapper;
+    if (!CheckCompatibility(fileName))
+      remove(fileName.c_str());
+    return new MED::V2_2::TVWrapper(fileName);
   }
 }
index f8e8d5abc66adfc5e3e6c232f9f4ee6ce10942c4..531509fb0097f24103f4a6a5a221f0a0ebd3c637 100644 (file)
 #include "MED_WrapperDef.hxx"
 #include "MED_Wrapper.hxx"
 
+#include <string>
+
 namespace MED
 {
+  MEDWRAPPER_EXPORT
+  std::string GetMEDVersion( const std::string& );
+
   MEDWRAPPER_EXPORT
   bool GetMEDVersion( const std::string&, int&, int&, int& );
   
+  MEDWRAPPER_EXPORT
+  bool CheckCompatibility( const std::string& );
+  
   MEDWRAPPER_EXPORT
   PWrapper CrWrapperR( const std::string& );
 
index 3c56cd6ed7557ecc2cb9579d04bad290ec4870b0..49b2b26f49121cd29265c4d0c96f0b6e8d274333 100644 (file)
 
 namespace MED
 {
-  MEDWRAPPER_EXPORT
-  TInt
-  GetDESCLength();
-  
-  MEDWRAPPER_EXPORT
-  TInt
-  GetIDENTLength();
-  
-  MEDWRAPPER_EXPORT
-  TInt
-  GetNOMLength();
-  
-  MEDWRAPPER_EXPORT
-  TInt
-  GetLNOMLength();
-  
-  MEDWRAPPER_EXPORT
-  TInt
-  GetPNOMLength();
-
-  MEDWRAPPER_EXPORT
-  void
-  GetVersionRelease(TInt& majeur, TInt& mineur, TInt& release);
-
-  MEDWRAPPER_EXPORT
-  TInt
-  GetNbConn(EGeometrieElement typmai,
-                   EEntiteMaillage typent,
-                   TInt mdim);
-
   namespace V2_2
   {
     //----------------------------------------------------------------------------
index 19b29f8a860fc6efcef7db84fee2c1d6629b67f8..10a9907a76a8fda2c763783d3b30c8473c38aa42 100644 (file)
@@ -978,6 +978,10 @@ namespace MED
   public:
     SharedPtr() {}
 
+    SharedPtr(TWrapper* p):
+      boost::shared_ptr<TWrapper>(p)
+    {}
+
     template<class Y>
     explicit SharedPtr(Y * p): 
       boost::shared_ptr<TWrapper>(p) 
index 354769c1132b313670aa7b4e62d16cac67987ba7..7ade43cdcfbd361364e6995d9a0d2018612f5d1e 100644 (file)
 
 int main (int argc, char **argv)
 {
-  med_idt aFid = MEDfileOpen(argv[1],MED_ACC_RDONLY);
-  if(aFid < 0)
-    exit(1);
+  if ( argc < 2 )
+    return -1;
 
-  med_int aMajor, aMinor, aRelease;
-  med_err aRet = MEDfileNumVersionRd(aFid,&aMajor,&aMinor,&aRelease);
-  MEDfileClose(aFid);
-  if(aRet < 0) {
-    // VSR: simulate med 2.3.6 behavior, med file version is assumed to 2.1
-    aMajor=2;
-    aMinor=aRelease=-1;
+  med_idt fid = MEDfileOpen(argv[1], MED_ACC_RDONLY);
+  if (fid < 0)
+    return 1;
+
+  med_int major, minor, release;
+  med_err aRet = MEDfileNumVersionRd(fid, &major, &minor, &release);
+  MEDfileClose(fid);
+  if (aRet < 0) {
+    // VSR: simulate med 2.3.6 behavior, med file version is assumed to be 2.1 or older
+    major = 2;
+    minor = release = -1;
   }
 
-  printf("%d.%d.%d\n",aMajor,aMinor,aRelease);
+  printf("%d.%d.%d\n", major, minor, release);
+  return 0;
 }
index e0a067a6d1ab26bed194514033ca6d3978b95865..8344f7de45b1a739eb932136b91fef03e97ae85e 100644 (file)
@@ -1379,7 +1379,6 @@ bool SMESH_Mesh::HasDuplicatedGroupNamesMED()
  *  \param [in] theAutoGroups - boolean parameter for creating/not creating
  *              the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
  *              the typical use is auto_groups=false.
- *  \param [in] theVersion - defines the version of format of MED file, that will be created
  *  \param [in] meshPart - mesh data to export
  *  \param [in] theAutoDimension - if \c true, a space dimension of a MED mesh can be either
      *         - 1D if all mesh nodes lie on OX coordinate axis, or
@@ -1393,7 +1392,6 @@ bool SMESH_Mesh::HasDuplicatedGroupNamesMED()
 void SMESH_Mesh::ExportMED(const char *        file, 
                            const char*         theMeshName, 
                            bool                theAutoGroups,
-                           int                 /*theVersion*/,
                            const SMESHDS_Mesh* meshPart,
                            bool                theAutoDimension,
                            bool                theAddODOnVertices)
@@ -1474,7 +1472,7 @@ void SMESH_Mesh::ExportSAUV(const char *file,
   cmd += "from medutilities import my_remove ; my_remove(r'" + medfilename + "')";
   cmd += "\"";
   system(cmd.c_str());
-  ExportMED(medfilename.c_str(), theMeshName, theAutoGroups, 1);
+  ExportMED(medfilename.c_str(), theMeshName, theAutoGroups);
 #ifdef WIN32
   cmd = "%PYTHONBIN% ";
 #else
index 6a6953074e85bdbfbd509106740cae528ecbe56f..5110b444c287ef266863da9eb9fb05943382597e 100644 (file)
@@ -250,7 +250,6 @@ class SMESH_EXPORT SMESH_Mesh
   void ExportMED(const char *        theFile, 
                  const char*         theMeshName = NULL, 
                  bool                theAutoGroups = true, 
-                 int                 theVersion = 0,
                  const SMESHDS_Mesh* theMeshPart = 0,
                  bool                theAutoDimension = false,
                  bool                theAddODOnVertices = false)
index 31f16a61f7bf2468e1c5d30ec3549290f5266c6b..0b0679335ef210851f5f1992456984d73d7938f8 100644 (file)
@@ -234,8 +234,8 @@ namespace
     }
   #endif
     else if ( theCommandID == SMESHOp::OpImportSAUV ) {
-      filter.append( QObject::tr( "SAUV files (*.sauv*)" ) );
-      filter.append( QObject::tr( "All files (*)" ) );
+      filter.append( QObject::tr( "SAUV_FILES_FILTER" ) + " (*.sauv *.sauve)" );
+      filter.append( QObject::tr( "ALL_FILES_FILTER" ) + " (*)" );
     }
     else if ( theCommandID == SMESHOp::OpImportGMF ) {
       filter.append( QObject::tr( "GMF_ASCII_FILES_FILTER" ) + " (*.mesh)"  );
@@ -640,8 +640,7 @@ namespace
 
     // Get parameters of export operation
 
-    QString            aFilename;
-    SMESH::MED_VERSION aFormat = SMESH::MED_V2_2;
+    QString aFilename;
     // Init the parameters with the default values
     bool aIsASCII_STL   = true;
     bool toCreateGroups = false;
@@ -718,27 +717,14 @@ namespace
     }
     else if ( isMED || isSAUV ) // Export to MED or SAUV
     {
-      QMap<QString, SMESH::MED_VERSION> aFilterMap;
-      //QString v21 (aMesh->GetVersionString(SMESH::MED_V2_1, 2));
+      QStringList filters;
       if ( isMED ) {
-        QString v22 (aMesh->GetVersionString(SMESH::MED_V2_2, 2));
-        //aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v21 ) + " (*.med)", SMESH::MED_V2_1 );
-        aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v22 ) + " (*.med)", SMESH::MED_V2_2 );
+        filters << QObject::tr( "MED_FILES_FILTER" ) + " (*.med)";
       }
       else { // isSAUV
-        aFilterMap.insert("All files (*)", SMESH::MED_V2_1 );
-        aFilterMap.insert("SAUV files (*.sauv)", SMESH::MED_V2_2 );
-        aFilterMap.insert("SAUV files (*.sauve)", SMESH::MED_V2_1 );
+        filters << QObject::tr( "SAUV_FILES_FILTER" ) + " (*.sauv *.sauve)";
       }
 
-      QStringList filters;
-      QString aDefaultFilter;
-      QMap<QString, SMESH::MED_VERSION>::const_iterator it = aFilterMap.begin();
-      for ( ; it != aFilterMap.end(); ++it ) {
-        filters.push_back( it.key() );
-        if (it.value() == SMESH::MED_V2_2)
-          aDefaultFilter = it.key();
-      }
       QStringList checkBoxes;
       checkBoxes << QObject::tr("SMESH_AUTO_GROUPS") << QObject::tr("SMESH_AUTO_DIM");
 
@@ -751,7 +737,6 @@ namespace
         new SalomeApp_CheckFileDlg ( SMESHGUI::desktop(), false, checkBoxes, true, true, wdgList );
       fd->setWindowTitle( aTitle );
       fd->setNameFilters( filters );
-      fd->selectNameFilter( aDefaultFilter );
       fd->SetChecked( toCreateGroups, 0 );
       fd->SetChecked( toFindOutDim,   1 );
       if ( !anInitialPath.isEmpty() )
@@ -779,34 +764,13 @@ namespace
           aFilename = QString::null;
           break;
         }
-        aFormat = aFilterMap[fd->selectedNameFilter()];
         toOverwrite = fv->isOverwrite();
         is_ok = true;
         if ( !aFilename.isEmpty() ) {
-          // med-2.1 does not support poly elements
-          if ( aFormat==SMESH::MED_V2_1 )
-            for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) {
-              SMESH::SMESH_IDSource_var aMeshItem = (*aMeshIter).first;
-              SMESH::long_array_var nbElems = aMeshItem->GetMeshInfo();
-              if ( nbElems[ SMESH::Entity_Polygon   ] + nbElems[ SMESH::Entity_Quad_Polygon   ] +
-                   nbElems[ SMESH::Entity_Polyhedra ] + nbElems[ SMESH::Entity_Quad_Polyhedra ])
-              {
-                int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(),
-                                                    QObject::tr("SMESH_WRN_WARNING"),
-                                                    QObject::tr("SMESH_EXPORT_MED_V2_1").arg((*aMeshIter).second),
-                                                    QObject::tr("SMESH_BUT_YES"),
-                                                    QObject::tr("SMESH_BUT_NO"), 0, 1);
-                if (aRet != 0) {
-                  is_ok = false;
-                  break;
-                }
-              }
-            }
           if( !toOverwrite ) {
             // can't append to an existing using other format
-            SMESH::MED_VERSION aVersion = SMESH::MED_V2_1;
-            bool isVersionOk = SMESHGUI::GetSMESHGen()->GetMEDVersion( aFilename.toUtf8().constData(), aVersion );
-            if( !isVersionOk || aVersion != aFormat ) {
+            bool isVersionOk = SMESHGUI::GetSMESHGen()->CheckCompatibility( aFilename.toUtf8().constData() );
+            if ( !isVersionOk ) {
               int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(),
                                                   QObject::tr("SMESH_WRN_WARNING"),
                                                   QObject::tr("SMESH_EXPORT_MED_VERSION_COLLISION").arg(aFilename),
@@ -892,10 +856,10 @@ namespace
             const bool                   hasFields = ( fields.length() || !geoAssFields.isEmpty() );
             if ( !hasFields && aMeshOrGroup->_is_equivalent( aMeshItem ))
               aMeshItem->ExportToMEDX( aFilename.toUtf8().data(), toCreateGroups,
-                                       aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim );
+                                       toOverwrite && aMeshIndex == 0, toFindOutDim );
             else
               aMeshItem->ExportPartToMED( aMeshOrGroup, aFilename.toUtf8().data(), toCreateGroups,
-                                          aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim,
+                                          toOverwrite && aMeshIndex == 0, toFindOutDim,
                                           fields, geoAssFields.toLatin1().data() );
           }
         }
index ec5537169aa316a1538b9125f80885d8110c8155..4f68dc2a6a702858ddd4a268119a01d691fc5848 100644 (file)
         <source>MED_FILES_FILTER</source>
         <translation>MED files</translation>
     </message>
+    <message>
+        <source>SAUV_FILES_FILTER</source>
+        <translation>SAUV files</translation>
+    </message>
     <message>
         <source>IDEAS_FILES_FILTER</source>
         <translation>IDEAS files</translation>
         <source>TEXT_FILES_FILTER</source>
         <translation>TXT files</translation>
     </message>
-    <message>
-        <source>MED_VX_FILES_FILTER</source>
-        <translation>MED %1 files</translation>
-    </message>
     <message>
         <source>STL_FILES_FILTER</source>
         <translation>STL files</translation>
@@ -1764,13 +1764,6 @@ Do you want to continue?</translation>
         <source>SMESH_EXPORT_ONLY_GPOUP</source>
         <translation>You are going to export the group without its mesh.
 Do you want to continue?</translation>
-    </message>
-    <message>
-        <source>SMESH_EXPORT_MED_V2_1</source>
-        <translation>During export mesh with name - &quot;%1&quot; to MED 2.1
-polygons and polyhedrons elements will be missed
-For correct export use MED 2.2
-Are you sure want to export to MED 2.1?</translation>
     </message>
     <message>
         <source>SMESH_EXPORT_MED_VERSION_COLLISION</source>
index 258d8ad78da1f1793be3324091bca9023a6efe76..a8791df48f4163473c472b480490b4a3724a39ea 100755 (executable)
         <source>MED_FILES_FILTER</source>
         <translation>Fichiers MED</translation>
     </message>
+    <message>
+        <source>SAUV_FILES_FILTER</source>
+        <translation>Fichiers SAUV</translation>
+    </message>
     <message>
         <source>IDEAS_FILES_FILTER</source>
         <translation>Fichiers IDEAS</translation>
         <source>TEXT_FILES_FILTER</source>
         <translation>Fichiers TXT</translation>
     </message>
-    <message>
-        <source>MED_VX_FILES_FILTER</source>
-        <translation>Fichiers MED %1</translation>
-    </message>
     <message>
         <source>STL_FILES_FILTER</source>
         <translation>Fichiers STL</translation>
@@ -1748,13 +1748,6 @@ Voulez-vous continuer ?</translation>
         <source>SMESH_EXPORT_ONLY_GPOUP</source>
         <translation>Vous allez export le groupe sans son maillage.
 Voulez-vous continuer ?</translation>
-    </message>
-    <message>
-        <source>SMESH_EXPORT_MED_V2_1</source>
-        <translation>Les éléments polygonaux et polyèdriques seront omis 
-dans le cas d&apos;exportation du maillage &quot;%1&quot; à MED 2.1
-Utilisez MED 2.2 pour l&apos;exportation correcte.
-Voulez-vous effectuer l&apos;exportation à MED 2.1 ?</translation>
     </message>
     <message>
         <source>SMESH_EXPORT_MED_VERSION_COLLISION</source>
index d18673c16e21e2e48cc904f721b3e72710fbe496..c877ebeb7d419dc8e384cde9dee35734b4bce814 100644 (file)
       <source>MED_FILES_FILTER</source>
       <translation>MEDファイル</translation>
     </message>
+    <message>
+        <source>SAUV_FILES_FILTER</source>
+        <translation>SAUVファイル</translation>
+    </message>
     <message>
       <source>IDEAS_FILES_FILTER</source>
       <translation>IDEAS ファイル</translation>
       <source>TEXT_FILES_FILTER</source>
       <translation>TXT ファイル</translation>
     </message>
-    <message>
-      <source>MED_VX_FILES_FILTER</source>
-      <translation>ファイル MED %1</translation>
-    </message>
     <message>
       <source>STL_FILES_FILTER</source>
       <translation>STL ファイル</translation>
       <source>SMESH_EXPORT_ONLY_GPOUP</source>
       <translation>そのメッシュなしでグループのエクスポートをしようとしています。続行しますか?</translation>
     </message>
-    <message>
-      <source>SMESH_EXPORT_MED_V2_1</source>
-      <translation>多角形、多面体要素は正しいエクスポート用 MED 2.1 MED 2.2 にメッシュ '%' のエクスポートの場合省略されます。MED 2.1 をエクスポートしますか。</translation>
-    </message>
     <message>
       <source>SMESH_EXPORT_MED_VERSION_COLLISION</source>
       <translation>ファイル「%1」MED バージョンは知られていないか、選択したバージョンと一致しません。ファイルを上書きしますか。</translation>
index 155916e3842af05e79f8c00c2035d8201e1d5571..37683dacf7dec9648082d81f152c0fb4013cdd81 100644 (file)
@@ -114,7 +114,7 @@ SET(SMESHEngine_HEADERS
 SET(SMESHEngine_SOURCES
   SMESH_Gen_i.cxx
   SMESH_Gen_i_1.cxx
-  SMESH_DumpPython.cxx
+  SMESH_PythonDump.cxx
   SMESH_Mesh_i.cxx
   SMESH_subMesh_i.cxx
   SMESH_MeshEditor_i.cxx
index 17ee75746e49b91d4e0f02b86d1e43d47f08f01d..ba4b90f06192dd5b23d899447d11fa70af979062 100644 (file)
@@ -440,6 +440,18 @@ namespace {
       }
     }
   }
+
+  bool _FilterArg( const _AString& theArg  )
+  {
+    static std::list<_AString> filteredArgs;
+    static bool initialized = false;
+    if ( !initialized ) {
+      initialized = true;
+      filteredArgs.push_back( "SMESH.MED_V2_1" );
+      filteredArgs.push_back( "SMESH.MED_V2_2" );
+    }  
+    return std::find( filteredArgs.begin(), filteredArgs.end(), theArg ) != filteredArgs.end();
+  }
 }
 
 //================================================================================
@@ -1978,12 +1990,21 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
          method == "ExportToMEDX" )  // ExportToMEDX() --> ExportMED()
     {
       theCommand->SetMethod( "ExportMED" );
-      if ( theCommand->GetNbArgs() == 5 )
+      // filter out deprecated version parameter
+      vector< _AString > args;
+      for ( int i = 1; i <= theCommand->GetNbArgs(); i++ ) {
+        if ( !_FilterArg( theCommand->GetArg( i ) ) )
+          args.push_back( theCommand->GetArg( i ) );
+      }
+      theCommand->RemoveArgs();
+      for ( uint i = 0; i < args.size(); i++ )
+        theCommand->SetArg( i+1, args[i] );
+      if ( theCommand->GetNbArgs() == 4 )
       {
         // ExportToMEDX(...,autoDimension) -> ExportToMEDX(...,meshPart=None,autoDimension)
-        _AString autoDimension = theCommand->GetArg( 5 );
-        theCommand->SetArg( 5, "None" );
-        theCommand->SetArg( 6, autoDimension );
+        _AString autoDimension = theCommand->GetArg( 4 );
+        theCommand->SetArg( 4, "None" );
+        theCommand->SetArg( 5, autoDimension );
       }
     }
     else if ( method == "ExportCGNS" )
@@ -2009,6 +2030,15 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
       TCollection_AsciiString newMethod = method;
       newMethod.Remove( /*where=*/7, /*howmany=*/6 );
       theCommand->SetMethod( newMethod );
+      // filter out deprecated version parameter
+      vector< _AString > args;
+      for ( int i = 1; i <= theCommand->GetNbArgs(); i++ ) {
+        if ( !_FilterArg( theCommand->GetArg( i ) ) )
+          args.push_back( theCommand->GetArg( i ) );
+      }
+      theCommand->RemoveArgs();
+      for ( uint i = 0; i < args.size(); i++ )
+        theCommand->SetArg( i+1, args[i] );
       // make the 1st arg be the last one (or last but three for ExportMED())
       _pyID partID = theCommand->GetArg( 1 );
       int nbArgs = theCommand->GetNbArgs() - 3 * (newMethod == "ExportMED");
diff --git a/src/SMESH_I/SMESH_DumpPython.cxx b/src/SMESH_I/SMESH_DumpPython.cxx
deleted file mode 100644 (file)
index e22a87c..0000000
+++ /dev/null
@@ -1,1402 +0,0 @@
-// Copyright (C) 2007-2016  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
-//
-// 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, or (at your option) any later version.
-//
-// 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
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-//  File    : SMESH_DumpPython.cxx
-//  Created : Thu Mar 24 17:17:59 2005
-//  Author  : Julia DOROVSKIKH
-//  Module  : SMESH
-
-#include "SMESH_PythonDump.hxx"
-
-#include "SMESH_2smeshpy.hxx"
-#include "SMESH_Comment.hxx"
-#include "SMESH_Filter_i.hxx"
-#include "SMESH_Gen_i.hxx"
-#include "SMESH_MeshEditor_i.hxx"
-
-#include <SALOMEDS_wrap.hxx>
-
-#include <LDOMParser.hxx>
-#include <Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString.hxx>
-#include <TColStd_HSequenceOfInteger.hxx>
-#include <TCollection_AsciiString.hxx>
-
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
-
-#include "SMESH_TryCatch.hxx"
-
-namespace SMESH
-{
-
-  size_t TPythonDump::myCounter = 0;
-  const char theNotPublishedObjectName[] = "__NOT__Published__Object__";
-
-  TVar::TVar(CORBA::Double value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
-  TVar::TVar(CORBA::Long   value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
-  TVar::TVar(CORBA::Short  value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
-  TVar::TVar(const SMESH::double_array& value):myVals(value.length()), myIsList(true)
-  {
-    for ( size_t i = 0; i < value.length(); i++)
-      myVals[i] = SMESH_Comment(value[i]);
-  }
-
-  TPythonDump::
-  TPythonDump():myVarsCounter(0)
-  {
-    ++myCounter;
-  }
-  TPythonDump::
-  ~TPythonDump()
-  {
-    if(--myCounter == 0){
-      SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-      std::string aString = myStream.str();
-      TCollection_AsciiString aCollection(Standard_CString(aString.c_str()));
-      SALOMEDS::Study_var aStudy = aSMESHGen->GetCurrentStudy();
-      if(!aStudy->_is_nil() && !aCollection.IsEmpty())
-      {
-        const std::string & objEntry = SMESH_Gen_i::GetSMESHGen()->GetLastObjEntry();
-        if ( !objEntry.empty() )
-          aCollection += (TVar::ObjPrefix() + objEntry ).c_str();
-        aSMESHGen->AddToPythonScript(aStudy->StudyId(),aCollection);
-        if(MYDEBUG) MESSAGE(aString);
-        // prevent misuse of already treated variables
-        aSMESHGen->UpdateParameters(CORBA::Object_var().in(),"");
-      }
-    }
-  }
-
-  TPythonDump& //!< store a variable value. Write either a value or '$varID$'
-  TPythonDump::
-  operator<<(const TVar& theVarValue)
-  {
-    const std::vector< int >& varIDs = SMESH_Gen_i::GetSMESHGen()->GetLastParamIndices();
-    if ( theVarValue.myIsList )
-    {
-      myStream << "[ ";
-      for ( size_t i = 1; i <= theVarValue.myVals.size(); ++i )
-      {
-        if ( myVarsCounter < (int)varIDs.size() && varIDs[ myVarsCounter ] >= 0 )
-          myStream << TVar::Quote() << varIDs[ myVarsCounter ] << TVar::Quote();
-        else
-          myStream << theVarValue.myVals[i-1];
-        if ( i < theVarValue.myVals.size() )
-          myStream << ", ";
-        ++myVarsCounter;
-      }
-      myStream << " ]";
-    }
-    else
-    {
-      if ( myVarsCounter < (int)varIDs.size() && varIDs[ myVarsCounter ] >= 0 )
-        myStream << TVar::Quote() << varIDs[ myVarsCounter ] << TVar::Quote();
-      else
-        myStream << theVarValue.myVals[0];
-      ++myVarsCounter;
-    }
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(long int theArg){
-    myStream<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(int theArg){
-    myStream<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(double theArg){
-    myStream<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(float theArg){
-    myStream<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(const void* theArg){
-    myStream<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(const char* theArg){
-    if ( theArg )
-      myStream<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(const std::string& theArg){
-    myStream<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(const SMESH::ElementType& theArg)
-  {
-    myStream<<"SMESH.";
-    switch(theArg){
-    case ALL:    myStream<<"ALL";    break;
-    case NODE:   myStream<<"NODE";   break;
-    case EDGE:   myStream<<"EDGE";   break;
-    case FACE:   myStream<<"FACE";   break;
-    case VOLUME: myStream<<"VOLUME"; break;
-    case ELEM0D: myStream<<"ELEM0D"; break;
-    case BALL:   myStream<<"BALL";   break;
-    default:     myStream<<"__UNKNOWN__ElementType: " << theArg;
-    }
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(const SMESH::GeometryType& theArg)
-  {
-    myStream<<"SMESH.";
-    switch(theArg){
-    case Geom_POINT:      myStream<<"Geom_POINT";      break;
-    case Geom_EDGE:       myStream<<"Geom_EDGE";       break;
-    case Geom_TRIANGLE:   myStream<<"Geom_TRIANGLE";   break;
-    case Geom_QUADRANGLE: myStream<<"Geom_QUADRANGLE"; break;
-    case Geom_POLYGON:    myStream<<"Geom_POLYGON";    break;
-    case Geom_TETRA:      myStream<<"Geom_TETRA";      break;
-    case Geom_PYRAMID:    myStream<<"Geom_PYRAMID";    break;
-    case Geom_HEXA:       myStream<<"Geom_HEXA";       break;
-    case Geom_PENTA:      myStream<<"Geom_PENTA";      break;
-    case Geom_POLYHEDRA:  myStream<<"Geom_POLYHEDRA";  break;
-    case Geom_BALL:       myStream<<"Geom_BALL";       break;
-    default:    myStream<<"__UNKNOWN__GeometryType: " << theArg;
-    }
-    return *this;
-  }
-  TPythonDump&
-  TPythonDump::
-  operator<<(const SMESH::EntityType& theArg)
-  {
-    myStream<<"SMESH.";
-    switch(theArg){
-    case Entity_0D:                myStream<<"Entity_0D";                break;
-    case Entity_Edge:              myStream<<"Entity_Edge";              break;
-    case Entity_Quad_Edge:         myStream<<"Entity_Quad_Edge";         break;
-    case Entity_Triangle:          myStream<<"Entity_Triangle";          break;
-    case Entity_Quad_Triangle:     myStream<<"Entity_Quad_Triangle";     break;
-    case Entity_BiQuad_Triangle:   myStream<<"Entity_BiQuad_Triangle";   break;
-    case Entity_Quadrangle:        myStream<<"Entity_Quadrangle";        break;
-    case Entity_Quad_Quadrangle:   myStream<<"Entity_Quad_Quadrangle";   break;
-    case Entity_BiQuad_Quadrangle: myStream<<"Entity_BiQuad_Quadrangle"; break;
-    case Entity_Polygon:           myStream<<"Entity_Polygon";           break;
-    case Entity_Quad_Polygon:      myStream<<"Entity_Quad_Polygon";      break;
-    case Entity_Tetra:             myStream<<"Entity_Tetra";             break;
-    case Entity_Quad_Tetra:        myStream<<"Entity_Quad_Tetra";        break;
-    case Entity_Pyramid:           myStream<<"Entity_Pyramid";           break;
-    case Entity_Quad_Pyramid:      myStream<<"Entity_Quad_Pyramid";      break;
-    case Entity_Hexa:              myStream<<"Entity_Hexa";              break;
-    case Entity_Quad_Hexa:         myStream<<"Entity_Quad_Hexa";         break;
-    case Entity_TriQuad_Hexa:      myStream<<"Entity_TriQuad_Hexa";      break;
-    case Entity_Penta:             myStream<<"Entity_Penta";             break;
-    case Entity_Quad_Penta:        myStream<<"Entity_Quad_Penta";        break;
-    case Entity_Hexagonal_Prism:   myStream<<"Entity_Hexagonal_Prism";   break;
-    case Entity_Polyhedra:         myStream<<"Entity_Polyhedra";         break;
-    case Entity_Quad_Polyhedra:    myStream<<"Entity_Quad_Polyhedra";    break;
-    case Entity_Ball:              myStream<<"Entity_Ball";              break;
-    case Entity_Last:              myStream<<"Entity_Last";              break;
-    default:    myStream<<"__UNKNOWN__EntityType: " << theArg;
-    }
-    return *this;
-  }
-
-  template<class TArray>
-  void DumpArray(const TArray& theArray, TPythonDump & theStream)
-  {
-    if ( theArray.length() == 0 )
-    {
-      theStream << "[]";
-    }
-    else
-    {
-      theStream << "[ ";
-      for (CORBA::ULong i = 1; i <= theArray.length(); i++) {
-        theStream << theArray[i-1];
-        if ( i < theArray.length() )
-          theStream << ", ";
-      }
-      theStream << " ]";
-    }
-  }
-
-  TPythonDump&
-  TPythonDump::operator<<(const SMESH::long_array& theArg)
-  {
-    DumpArray( theArg, *this );
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::operator<<(const SMESH::double_array& theArg)
-  {
-    DumpArray( theArg, *this );
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::operator<<(const SMESH::nodes_array& theArg)
-  {
-    DumpArray( theArg, *this );
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::operator<<(const SMESH::string_array& theArray)
-  {
-    myStream << "[ ";
-    for ( CORBA::ULong i = 1; i <= theArray.length(); i++ ) {
-      myStream << "'" << theArray[i-1] << "'";
-      if ( i < theArray.length() )
-        myStream << ", ";
-    }
-    myStream << " ]";
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SALOMEDS::SObject_ptr aSObject)
-  {
-    if ( !aSObject->_is_nil() ) {
-      CORBA::String_var entry = aSObject->GetID();
-      myStream << entry.in();
-    }
-    else {
-      myStream << theNotPublishedObjectName;
-    }
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(CORBA::Object_ptr theArg)
-  {
-    SMESH_Gen_i*          aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-    SALOMEDS::Study_var      aStudy = aSMESHGen->GetCurrentStudy();
-    SALOMEDS::SObject_wrap aSObject = SMESH_Gen_i::ObjectToSObject(aStudy,theArg);
-    if(!aSObject->_is_nil()) {
-      CORBA::String_var id = aSObject->GetID();
-      myStream << id;
-    } else if ( !CORBA::is_nil(theArg)) {
-      if ( aSMESHGen->CanPublishInStudy( theArg )) // not published SMESH object
-        myStream << "smeshObj_" << size_t(theArg);
-      else
-        myStream << theNotPublishedObjectName;
-    }
-    else
-      myStream << "None";
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SMESH::SMESH_Hypothesis_ptr theArg)
-  {
-    SALOMEDS::Study_var     aStudy = SMESH_Gen_i::GetSMESHGen()->GetCurrentStudy();
-    SALOMEDS::SObject_wrap aSObject = SMESH_Gen_i::ObjectToSObject(aStudy,theArg);
-    if(aSObject->_is_nil() && !CORBA::is_nil(theArg))
-      myStream << "hyp_" << theArg->GetId();
-    else
-      *this << aSObject;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SMESH::SMESH_IDSource_ptr theArg)
-  {
-    if ( CORBA::is_nil( theArg ) )
-      return *this << "None";
-    SMESH_Gen_i*          aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-    SALOMEDS::Study_var      aStudy = aSMESHGen->GetCurrentStudy();
-    SALOMEDS::SObject_wrap aSObject = SMESH_Gen_i::ObjectToSObject(aStudy,theArg);
-    if(!aSObject->_is_nil())
-    {
-      return *this << aSObject;
-    }
-    if ( SMESH::Filter_i* filter = SMESH::DownCast<SMESH::Filter_i*>( theArg ))
-    {
-      return *this << filter;
-    }
-    if ( SMESH_MeshEditor_i::IsTemporaryIDSource( theArg ))
-    {
-      SMESH::SMESH_Mesh_var            mesh = theArg->GetMesh();
-      SMESH::long_array_var    anElementsId = theArg->GetIDs();
-      SMESH::array_of_ElementType_var types = theArg->GetTypes();
-      SMESH::ElementType               type = types->length() ? types[0] : SMESH::ALL;
-      SALOMEDS::SObject_wrap         meshSO = SMESH_Gen_i::ObjectToSObject(aStudy,mesh);
-      if ( meshSO->_is_nil() ) // don't waste memory for dumping not published objects
-        return *this << mesh << ".GetIDSource([], " << type << ")";
-      else
-        return *this << mesh << ".GetIDSource(" << anElementsId << ", " << type << ")";
-    }
-    return *this << theNotPublishedObjectName;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SMESH::FilterLibrary_i* theArg)
-  {
-    myStream<<"aFilterLibrary"<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SMESH::FilterManager_i* theArg)
-  {
-    myStream<<"aFilterManager";
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SMESH::Filter_i* theArg)
-  {
-    myStream<<"aFilter"<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SMESH::Functor_i* theArg)
-  {
-    if ( theArg ) {
-      FunctorType aFunctorType = theArg->GetFunctorType();
-      switch(aFunctorType) {
-      case FT_AspectRatio:           myStream<< "aAspectRatio";           break;
-      case FT_AspectRatio3D:         myStream<< "aAspectRatio3D";         break;
-      case FT_Warping:               myStream<< "aWarping";               break;
-      case FT_MinimumAngle:          myStream<< "aMinimumAngle";          break;
-      case FT_Taper:                 myStream<< "aTaper";                 break;
-      case FT_Skew:                  myStream<< "aSkew";                  break;
-      case FT_Area:                  myStream<< "aArea";                  break;
-      case FT_Volume3D:              myStream<< "aVolume3D";              break;
-      case FT_MaxElementLength2D:    myStream<< "aMaxElementLength2D";    break;
-      case FT_MaxElementLength3D:    myStream<< "aMaxElementLength3D";    break;
-      case FT_FreeBorders:           myStream<< "aFreeBorders";           break;
-      case FT_FreeEdges:             myStream<< "aFreeEdges";             break;
-      case FT_FreeNodes:             myStream<< "aFreeNodes";             break;
-      case FT_FreeFaces:             myStream<< "aFreeFaces";             break;
-      case FT_EqualNodes:            myStream<< "aEqualNodes";            break;
-      case FT_EqualEdges:            myStream<< "aEqualEdges";            break;
-      case FT_EqualFaces:            myStream<< "aEqualFaces";            break;
-      case FT_EqualVolumes:          myStream<< "aEqualVolumes";          break;
-      case FT_MultiConnection:       myStream<< "aMultiConnection";       break;
-      case FT_MultiConnection2D:     myStream<< "aMultiConnection2D";     break;
-      case FT_Length:                myStream<< "aLength";                break;
-      case FT_Length2D:              myStream<< "aLength2D";              break;
-      case FT_NodeConnectivityNumber:myStream<< "aNodeConnectivityNumber";break;
-      case FT_BelongToMeshGroup:     myStream<< "aBelongToMeshGroup";     break;
-      case FT_BelongToGeom:          myStream<< "aBelongToGeom";          break;
-      case FT_BelongToPlane:         myStream<< "aBelongToPlane";         break;
-      case FT_BelongToCylinder:      myStream<< "aBelongToCylinder";      break;
-      case FT_BelongToGenSurface:    myStream<< "aBelongToGenSurface";    break;
-      case FT_LyingOnGeom:           myStream<< "aLyingOnGeom";           break;
-      case FT_RangeOfIds:            myStream<< "aRangeOfIds";            break;
-      case FT_BadOrientedVolume:     myStream<< "aBadOrientedVolume";     break;
-      case FT_BareBorderVolume:      myStream<< "aBareBorderVolume";      break;
-      case FT_BareBorderFace:        myStream<< "aBareBorderFace";        break;
-      case FT_OverConstrainedVolume: myStream<< "aOverConstrainedVolume"; break;
-      case FT_OverConstrainedFace:   myStream<< "aOverConstrainedFace";   break;
-      case FT_LinearOrQuadratic:     myStream<< "aLinearOrQuadratic";     break;
-      case FT_GroupColor:            myStream<< "aGroupColor";            break;
-      case FT_ElemGeomType:          myStream<< "aElemGeomType";          break;
-      case FT_EntityType:            myStream<< "aEntityType";            break;
-      case FT_CoplanarFaces:         myStream<< "aCoplanarFaces";         break;
-      case FT_BallDiameter:          myStream<< "aBallDiameter";          break;
-      case FT_ConnectedElements:     myStream<< "aConnectedElements";     break;
-      case FT_LessThan:              myStream<< "aLessThan";              break;
-      case FT_MoreThan:              myStream<< "aMoreThan";              break;
-      case FT_EqualTo:               myStream<< "aEqualTo";               break;
-      case FT_LogicalNOT:            myStream<< "aLogicalNOT";            break;
-      case FT_LogicalAND:            myStream<< "aLogicalAND";            break;
-      case FT_LogicalOR:             myStream<< "aLogicalOR";             break;
-      case FT_Undefined:             myStream<< "anUndefined";            break;
-        //default: -- commented to have a compilation warning
-      }
-      myStream<<theArg;
-    }
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SMESH::Measurements_i* theArg)
-  {
-    myStream<<"aMeasurements";
-    return *this;
-  }
-
-
-  TPythonDump& TPythonDump:: operator<<(SMESH_Gen_i* theArg)
-  {
-    myStream << SMESHGenName(); return *this;
-  }
-
-  TPythonDump& TPythonDump::operator<<(SMESH_MeshEditor_i* theArg)
-  {
-    myStream << MeshEditorName() << "_" << ( theArg ? theArg->GetMeshId() : -1 ); return *this;
-  }
-
-  TPythonDump& TPythonDump::operator<<(const TCollection_AsciiString & theStr)
-  {
-    myStream << theStr; return *this;
-  }
-
-
-  TPythonDump& TPythonDump::operator<<(SMESH::MED_VERSION theVersion)
-  {
-    switch (theVersion) {
-    case SMESH::MED_V2_1: myStream << "SMESH.MED_V2_1"; break;
-    case SMESH::MED_V2_2: myStream << "SMESH.MED_V2_2"; break;
-    default: myStream << theVersion;
-    }
-    return *this;
-  }
-
-  TPythonDump& TPythonDump::operator<<(const SMESH::AxisStruct & theAxis)
-  {
-    *this << "SMESH.AxisStruct( "
-          << TVar( theAxis.x  ) << ", "
-          << TVar( theAxis.y  ) << ", "
-          << TVar( theAxis.z  ) << ", "
-          << TVar( theAxis.vx ) << ", "
-          << TVar( theAxis.vy ) << ", "
-          << TVar( theAxis.vz ) << " )";
-    return *this;
-  }
-
-  TPythonDump& TPythonDump::operator<<(const SMESH::DirStruct & theDir)
-  {
-    const SMESH::PointStruct & P = theDir.PS;
-    *this << "SMESH.DirStruct( SMESH.PointStruct ( "
-          << TVar( P.x ) << ", "
-          << TVar( P.y ) << ", "
-          << TVar( P.z ) << " ))";
-    return *this;
-  }
-
-  TPythonDump& TPythonDump::operator<<(const SMESH::PointStruct & P)
-  {
-    *this << "SMESH.PointStruct ( "
-          << TVar( P.x ) << ", "
-          << TVar( P.y ) << ", "
-          << TVar( P.z ) << " )";
-    return *this;
-  }
-
-  TPythonDump& TPythonDump::operator<<(const SMESH::ListOfGroups& theList)
-  {
-    DumpArray( theList, *this );
-    return *this;
-  }
-  TPythonDump& TPythonDump::operator<<(const SMESH::ListOfGroups * theList)
-  {
-    DumpArray( *theList, *this );
-    return *this;
-  }
-  TPythonDump& TPythonDump::operator<<(const GEOM::ListOfGO& theList)
-  {
-    DumpArray( theList, *this );
-    return *this;
-  }
-  TPythonDump& TPythonDump::operator<<(const GEOM::ListOfGBO& theList)
-  {
-    DumpArray( theList, *this );
-    return *this;
-  }
-  TPythonDump& TPythonDump::operator<<(const SMESH::ListOfIDSources& theList)
-  {
-    DumpArray( theList, *this );
-    return *this;
-  }
-  TPythonDump& TPythonDump::operator<<(const SMESH::CoincidentFreeBorders& theCFB)
-  {
-    // dump CoincidentFreeBorders as a list of lists, each enclosed list
-    // contains node IDs of a group of coincident free borders where
-    // each consequent triple of IDs describe a free border: (n1, n2, nLast)
-    // For example [[1, 2, 10, 20, 21, 40], [11, 12, 15, 55, 54, 41]] describes
-    // two groups of coincident free borders, each group including two borders
-
-    myStream << "[";
-    for ( CORBA::ULong i = 0; i < theCFB.coincidentGroups.length(); ++i )
-    {
-      const SMESH::FreeBordersGroup& aGRP = theCFB.coincidentGroups[ i ];
-      if ( i ) myStream << ",";
-      myStream << "[";
-      for ( CORBA::ULong iP = 0; iP < aGRP.length(); ++iP )
-      {
-        const SMESH::FreeBorderPart& aPART = aGRP[ iP ];
-        if ( 0 <= aPART.border && aPART.border < (CORBA::Long)theCFB.borders.length() )
-        {
-          if ( iP ) myStream << ", ";
-          const SMESH::FreeBorder& aBRD = theCFB.borders[ aPART.border ];
-          myStream << aBRD.nodeIDs[ aPART.node1    ] << ",";
-          myStream << aBRD.nodeIDs[ aPART.node2    ] << ",";
-          myStream << aBRD.nodeIDs[ aPART.nodeLast ];
-        }
-      }
-      myStream << "]";
-    }
-    myStream << "]";
-
-    return *this;
-  }
-
-  const char* TPythonDump::NotPublishedObjectName()
-  {
-    return theNotPublishedObjectName;
-  }
-
-  TCollection_AsciiString myLongStringStart( "TPythonDump::LongStringStart" );
-  TCollection_AsciiString myLongStringEnd  ( "TPythonDump::LongStringEnd" );
-
-  //================================================================================
-  /*!
-   * \brief Return marker of long string literal beginning
-   * \param type - a name of functionality producing the string literal
-   * \retval TCollection_AsciiString - the marker string to be written into
-   * a raw python script
-   */
-  //================================================================================
-
-  TCollection_AsciiString TPythonDump::LongStringStart(const char* type)
-  {
-    return
-      myLongStringStart +
-      (Standard_Integer) strlen(type) +
-      " " +
-      (char*) type;
-  }
-
-  //================================================================================
-  /*!
-     * \brief Return marker of long string literal end
-      * \retval TCollection_AsciiString - the marker string to be written into
-      * a raw python script
-   */
-  //================================================================================
-
-  TCollection_AsciiString TPythonDump::LongStringEnd()
-  {
-    return myLongStringEnd;
-  }
-
-  //================================================================================
-  /*!
-     * \brief Cut out a long string literal from a string
-      * \param theText - text possibly containing string literals
-      * \param theFrom - position in the text to search from
-      * \param theLongString - the retrieved literal
-      * \param theStringType - a name of functionality produced the literal
-      * \retval bool - true if a string literal found
-     *
-     * The literal is removed from theText; theFrom points position right after
-     * the removed literal
-   */
-  //================================================================================
-
-  bool  TPythonDump::CutoutLongString( TCollection_AsciiString & theText,
-                                       int                     & theFrom,
-                                       TCollection_AsciiString & theLongString,
-                                       TCollection_AsciiString & theStringType)
-  {
-    if ( theFrom < 1 || theFrom > theText.Length() )
-      return false;
-
-    // ...script \  beg marker    \ \ type \       literal              \  end marker  \ script...
-    //  "theText myLongStringStart7 Pattern!!! SALOME Mesh Pattern file myLongStringEndtextEnd"
-    //  012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
-    //  0         1         2         3         4         5         6         7         8
-
-    theFrom = theText.Location( myLongStringStart, theFrom, theText.Length() ); // = 09
-    if ( !theFrom )
-      return false;
-
-    // find where literal begins
-    int literalBeg = theFrom + myLongStringStart.Length(); // = 26
-    char* typeLenStr = (char*) theText.ToCString() + literalBeg - 1; // = "7 Pattern!!! SALO...."
-    int typeLen = atoi ( typeLenStr ); // = 7
-    while ( *typeLenStr != ' ' ) { // look for ' ' after typeLen
-      literalBeg++; // 26 -> 27
-      typeLenStr++;
-    }
-    literalBeg += typeLen + 1; // = 35
-    if ( literalBeg > theText.Length() )
-      return false;
-
-    // where literal ends (i.e. end marker begins)
-    int literalEnd = theText.Location( myLongStringEnd, literalBeg, theText.Length() ); // = 64
-    if ( !literalEnd )
-      literalEnd = theText.Length();
-
-    // literal
-    theLongString = theText.SubString( literalBeg, literalEnd - 1); // "!!! SALOME Mesh Pattern file "
-    // type
-    theStringType = theText.SubString( literalBeg - typeLen, literalBeg - 1 ); // "Pattern"
-    // cut off literal
-    literalEnd += myLongStringEnd.Length(); // = 79
-    TCollection_AsciiString textEnd = theText.SubString( literalEnd, theText.Length() ); // "textE..."
-    theText = theText.SubString( 1, theFrom - 1 ) + textEnd;
-
-    return true;
-  }
-
-  void printException( const char* text )
-  {
-#ifdef _DEBUG_
-    cout << "Exception in SMESH_Gen_i::DumpPython(): " << text << endl;
-#endif
-  }
-}
-
-//=======================================================================
-//function : RemoveTabulation
-//purpose  : 
-//=======================================================================
-void RemoveTabulation( TCollection_AsciiString& theScript )
-{
-  std::string aString( theScript.ToCString() );
-  std::string::size_type aPos = 0;
-  while( aPos < aString.length() )
-  {
-    aPos = aString.find( "\n\t", aPos );
-    if( aPos == std::string::npos )
-      break;
-    aString.replace( aPos, 2, "\n" );
-    aPos++;
-  }
-  theScript = aString.c_str();
-}
-
-//=======================================================================
-//function : DumpPython
-//purpose  :
-//=======================================================================
-Engines::TMPFile* SMESH_Gen_i::DumpPython (CORBA::Object_ptr theStudy,
-                                           CORBA::Boolean isPublished,
-                                           CORBA::Boolean isMultiFile,
-                                           CORBA::Boolean& isValidScript)
-{
-  SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow(theStudy);
-  if (CORBA::is_nil(aStudy))
-    return new Engines::TMPFile(0);
-
-  CORBA::String_var compDataType = ComponentDataType();
-  SALOMEDS::SObject_wrap aSO = aStudy->FindComponent( compDataType.in() );
-  if (CORBA::is_nil(aSO))
-    return new Engines::TMPFile(0);
-
-  // Map study entries to object names
-  Resource_DataMapOfAsciiStringAsciiString aMap;
-  Resource_DataMapOfAsciiStringAsciiString aMapNames;
-
-  SALOMEDS::ChildIterator_wrap Itr = aStudy->NewChildIterator(aSO);
-  for (Itr->InitEx(true); Itr->More(); Itr->Next()) {
-    SALOMEDS::SObject_wrap aValue = Itr->Value();
-    CORBA::String_var anID = aValue->GetID();
-    CORBA::String_var aName = aValue->GetName();
-    TCollection_AsciiString aGUIName ( (char*) aName.in() );
-    TCollection_AsciiString anEntry ( (char*) anID.in() );
-    if (aGUIName.Length() > 0) {
-      aMapNames.Bind( anEntry, aGUIName );
-      aMap.Bind( anEntry, aGUIName );
-    }
-  }
-
-  // Get trace of restored study
-  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
-  SALOMEDS::GenericAttribute_wrap anAttr =
-    aStudyBuilder->FindOrCreateAttribute(aSO, "AttributePythonObject");
-
-  SALOMEDS::AttributePythonObject_var pyAttr =
-    SALOMEDS::AttributePythonObject::_narrow(anAttr);
-  CORBA::String_var oldValue = pyAttr->GetObject();
-  TCollection_AsciiString aSavedTrace (oldValue.in());
-
-  // Add trace of API methods calls and replace study entries by names
-  TCollection_AsciiString aScript;
-  aScript += DumpPython_impl(aStudy, aMap, aMapNames, isPublished, isMultiFile,
-                             myIsHistoricalPythonDump, isValidScript, aSavedTrace);
-
-  int aLen = aScript.Length();
-  unsigned char* aBuffer = new unsigned char[aLen+1];
-  strcpy((char*)aBuffer, aScript.ToCString());
-
-  CORBA::Octet* anOctetBuf =  (CORBA::Octet*)aBuffer;
-  Engines::TMPFile_var aStreamFile = new Engines::TMPFile(aLen+1, aLen+1, anOctetBuf, 1);
-
-  bool hasNotPublishedObjects = aScript.Location( SMESH::theNotPublishedObjectName, 1, aLen);
-  isValidScript = isValidScript && !hasNotPublishedObjects;
-
-  return aStreamFile._retn();
-}
-
-//=============================================================================
-/*!
- *  AddToPythonScript
- */
-//=============================================================================
-void SMESH_Gen_i::AddToPythonScript (int theStudyID, const TCollection_AsciiString& theString)
-{
-  if (myPythonScripts.find(theStudyID) == myPythonScripts.end()) {
-    myPythonScripts[theStudyID] = new TColStd_HSequenceOfAsciiString;
-  }
-  myPythonScripts[theStudyID]->Append(theString);
-}
-
-//=============================================================================
-/*!
- *  RemoveLastFromPythonScript
- */
-//=============================================================================
-void SMESH_Gen_i::RemoveLastFromPythonScript (int theStudyID)
-{
-  if (myPythonScripts.find(theStudyID) != myPythonScripts.end()) {
-    int aLen = myPythonScripts[theStudyID]->Length();
-    myPythonScripts[theStudyID]->Remove(aLen);
-  }
-}
-
-//=======================================================================
-//function : SavePython
-//purpose  :
-//=======================================================================
-void SMESH_Gen_i::SavePython (SALOMEDS::Study_ptr theStudy)
-{
-  // Dump trace of API methods calls
-  TCollection_AsciiString aScript = GetNewPythonLines(theStudy->StudyId());
-
-  // Check contents of PythonObject attribute
-  CORBA::String_var compDataType = ComponentDataType();
-  SALOMEDS::SObject_wrap aSO = theStudy->FindComponent( compDataType.in() );
-  SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder();
-  SALOMEDS::GenericAttribute_wrap anAttr =
-    aStudyBuilder->FindOrCreateAttribute(aSO, "AttributePythonObject");
-
-  SALOMEDS::AttributePythonObject_var pyAttr =
-    SALOMEDS::AttributePythonObject::_narrow(anAttr);
-  CORBA::String_var oldValue = pyAttr->GetObject();
-  TCollection_AsciiString oldScript (oldValue.in());
-
-  if (oldScript.Length() > 0) {
-    oldScript += "\n";
-    oldScript += aScript;
-  } else {
-    oldScript = aScript;
-  }
-
-  // Store in PythonObject attribute
-  pyAttr->SetObject(oldScript.ToCString(), 1);
-
-  // Clean trace of API methods calls
-  CleanPythonTrace(theStudy->StudyId());
-}
-
-
-// impl
-
-
-//=============================================================================
-/*!
- *  FindEntries: Returns a sequence of start/end positions of entries in the string
- */
-//=============================================================================
-Handle(TColStd_HSequenceOfInteger) FindEntries (TCollection_AsciiString& theString)
-{
-  Handle(TColStd_HSequenceOfInteger) aSeq = new TColStd_HSequenceOfInteger;
-  Standard_Integer aLen = theString.Length();
-  Standard_Boolean isFound = Standard_False;
-
-  char* arr = (char*) theString.ToCString();
-  Standard_Integer i = 0, j;
-
-  while(i < aLen) {
-    int c = (int)arr[i];
-    j = i+1;
-    if ( isdigit( c )) { //Is digit?
-
-      isFound = Standard_False;
-      while((j < aLen) && ( isdigit(c) || c == ':' )) { //Check if it is an entry
-        c = (int)arr[j++];
-        if(c == ':') isFound = Standard_True;
-      }
-
-      if (isFound) {
-        int prev = (i < 1) ? 0 : (int)arr[i - 1];
-        // to distinguish from a sketcher command:
-        // last char should be a digit, not ":",
-        // previous char should not be '"'.
-        if (arr[j-2] != ':' && prev != '"') {
-          aSeq->Append(i+1); // +1 because AsciiString starts from 1
-          aSeq->Append(j-1);
-        }
-      }
-    }
-
-    i = j;
-  }
-
-  return aSeq;
-}
-
-namespace {
-
-  //================================================================================
-  /*!
-   * \brief Make a string be a valid python name
-    * \param aName - a string to fix
-    * \retval bool - true if aName was not modified
-   */
-  //================================================================================
-
-  bool fixPythonName(TCollection_AsciiString & aName)
-  {
-    bool isValidName = true;
-    int nbUnderscore = 0;
-    int p;
-    // replace not allowed chars by underscore
-    const char* name = aName.ToCString();
-    for ( p = 0; name[p]; ++p ) {
-      if ( !isalnum( name[p] ) && name[p] != '_' )
-      {
-        if ( p == 0 || p+1 == aName.Length() || name[p-1] == '_')
-        {
-          aName.Remove( p+1, 1 ); // remove __ and _ from the start and the end
-          --p;
-          name = aName.ToCString();
-        }
-        else
-        {
-          aName.SetValue( p+1, '_');
-          nbUnderscore++;
-        }
-        isValidName = false;
-      }
-    }
-    // aName must not start with a digit
-    if ( aName.IsIntegerValue() ) {
-      aName.Insert( 1, 'a' );
-      isValidName = false;
-    }
-    // shorten names like CartesianParameters3D_400_400_400_1000000_1
-    const int nbAllowedUnderscore = 3; /* changed from 2 to 3 by an user request
-                                          posted to SALOME Forum */
-    if ( aName.Length() > 20 && nbUnderscore > nbAllowedUnderscore )
-    {
-      p = aName.Location( "_", 20, aName.Length());
-      if ( p > 1 )
-        aName.Trunc( p-1 );
-    }
-    return isValidName;
-  }
-
-  //================================================================================
-  /*!
-   * \brief Return Python module names of available plug-ins.
-   */
-  //================================================================================
-
-  std::vector<std::string> getPluginNames()
-  {
-    std::vector<std::string> pluginNames;
-    std::vector< std::string > xmlPaths = SMESH_Gen::GetPluginXMLPaths();
-    LDOMParser xmlParser;
-    for ( size_t i = 0; i < xmlPaths.size(); ++i )
-    {
-      bool error = xmlParser.parse( xmlPaths[i].c_str() );
-      if ( error )
-      {
-        TCollection_AsciiString data;
-        INFOS( xmlParser.GetError(data) );
-        continue;
-      }
-      // <meshers-group name="Standard Meshers"
-      //                resources="StdMeshers"
-      //                idl-module="StdMeshers"
-      //                server-lib="StdMeshersEngine"
-      //                gui-lib="StdMeshersGUI">
-      LDOM_Document xmlDoc   = xmlParser.getDocument();
-      LDOM_NodeList nodeList = xmlDoc.getElementsByTagName( "meshers-group" );
-      for ( int i = 0; i < nodeList.getLength(); ++i )
-      {
-        LDOM_Node       node = nodeList.item( i );
-        LDOM_Element&   elem = (LDOM_Element&) node;
-        LDOMString idlModule = elem.getAttribute( "idl-module" );
-        if ( strlen( idlModule.GetString() ) > 0 )
-          pluginNames.push_back( idlModule.GetString() );
-      }
-    }
-    return pluginNames;
-  }
-}
-
-//================================================================================
-/*!
- * \brief Createa a Dump Python script
- *  \param [in] theStudy - the study to dump
- *  \param [in,out] theObjectNames - map of an entry to a study and python name
- *  \param [in] theNames -  - map of an entry to a study name
- *  \param [in] isPublished - \c true if dump of object publication in study is needed
- *  \param [in] isMultiFile - \c true if dump of each module goes to a separate file
- *  \param [in] isHistoricalDump - \c true if removed object should be dumped
- *  \param [out] aValidScript - returns \c true if the returned script seems valid
- *  \param [in,out] theSavedTrace - the dump stored in the study. It's cleared to
- *         decrease memory usage.
- *  \return TCollection_AsciiString - the result dump script.
- */
-//================================================================================
-
-TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
-                        (SALOMEDS::Study_ptr                       theStudy,
-                         Resource_DataMapOfAsciiStringAsciiString& theObjectNames,
-                         Resource_DataMapOfAsciiStringAsciiString& theNames,
-                         bool                                      isPublished,
-                         bool                                      isMultiFile,
-                         bool                                      isHistoricalDump,
-                         bool&                                     aValidScript,
-                         TCollection_AsciiString&                  theSavedTrace)
-{
-  SMESH_TRY;
-  const int aStudyID = theStudy->StudyId();
-
-  const TCollection_AsciiString aSmeshpy ( SMESH_2smeshpy::SmeshpyName() );
-  const TCollection_AsciiString aSMESHGen( SMESH_2smeshpy::GenName() );
-  const TCollection_AsciiString anOldGen ( SMESH::TPythonDump::SMESHGenName() );
-  const TCollection_AsciiString helper; // to comfortably append C strings to TCollection_AsciiString
-  const TCollection_AsciiString tab( isMultiFile ? "\t" : "" ), nt = helper + "\n" + tab;
-
-  std::list< TCollection_AsciiString > lines; // lines of a script
-  std::list< TCollection_AsciiString >::iterator linesIt;
-  
-  if ( isPublished )
-    lines.push_back(  aSMESHGen + " = smeshBuilder.New(theStudy)" );
-   else
-    lines.push_back(  aSMESHGen + " = smeshBuilder.New(None)" );
-  lines.push_back( helper + "aFilterManager = " + aSMESHGen + ".CreateFilterManager()" );
-  lines.push_back( helper + "aMeasurements = "  + aSMESHGen + ".CreateMeasurements()" );
-
-  // Treat dump trace of restored study
-  if (theSavedTrace.Length() > 0)
-  {
-    linesIt = --lines.end();
-    // Split theSavedTrace into lines
-    int from = 1, end = theSavedTrace.Length(), to;
-    while ( from < end && ( to = theSavedTrace.Location( "\n", from, end )))
-    {
-      if ( theSavedTrace.ToCString()[from-1] == '\t' )
-        ++from;
-      if ( to != from )
-        lines.push_back( theSavedTrace.SubString( from, to - 1 ));
-      from = to + 1;
-    }
-    // For the convertion of IDL API calls -> smeshBuilder.py API, "smesh" standing for SMESH_Gen
-    // was replaces with "smeshgen" (==TPythonDump::SMESHGenName()).
-    // Change "smesh" -> "smeshgen" in the trace saved before passage to smeshBuilder.py API
-    bool isNewVersion =
-      theSavedTrace.Location( anOldGen + ".", 1, theSavedTrace.Length() );
-    theSavedTrace.Clear();
-    if ( !isNewVersion )
-    {
-      const TCollection_AsciiString aSmeshCall ( "smesh." ), gen( "gen" );
-      int beg, end, from;
-      for ( ++linesIt; linesIt != lines.end(); ++linesIt )
-      {
-        TCollection_AsciiString& aSavedLine = *linesIt;
-        end = aSavedLine.Length(), from = 1;
-        while ( from < end && ( beg = aSavedLine.Location( aSmeshCall, from, end )))
-        {
-          char charBefore = ( beg == 1 ) ? ' ' : aSavedLine.Value( beg - 1 );
-          if ( isspace( charBefore ) || charBefore == '=' ) { // "smesh." is not a part of a long word
-            aSavedLine.Insert( beg + aSmeshCall.Length() - 1, gen );// "smesh" -> "smeshgen"
-            end += gen.Length();
-          }
-          from = beg + aSmeshCall.Length();
-        }
-      }
-    }
-  }
-
-  // Add new dump trace of API methods calls to script lines
-  if (myPythonScripts.find( aStudyID ) != myPythonScripts.end())
-  {
-    Handle(TColStd_HSequenceOfAsciiString) aPythonScript = myPythonScripts[ aStudyID ];
-    Standard_Integer istr, aLen = aPythonScript->Length();
-    for (istr = 1; istr <= aLen; istr++)
-      lines.push_back( aPythonScript->Value( istr ));
-  }
-
-  // Convert IDL API calls into smeshBuilder.py API.
-  // Some objects are wrapped with python classes and
-  // Resource_DataMapOfAsciiStringAsciiString holds methods returning wrapped objects
-  Resource_DataMapOfAsciiStringAsciiString anEntry2AccessorMethod;
-  std::set< TCollection_AsciiString >      aRemovedObjIDs;
-  if ( !getenv("NO_2smeshpy_conversion"))
-    SMESH_2smeshpy::ConvertScript( lines, anEntry2AccessorMethod,
-                                   theObjectNames, aRemovedObjIDs,
-                                   theStudy, isHistoricalDump );
-
-  bool importGeom = false;
-  GEOM::GEOM_Gen_ptr geom = GetGeomEngine();
-  {
-    // Add names of GEOM objects to theObjectNames to exclude same names of SMESH objects
-    GEOM::string_array_var aGeomNames = geom->GetAllDumpNames();
-    int ign = 0, nbgn = aGeomNames->length();
-    for (; ign < nbgn; ign++) {
-      TCollection_AsciiString aName = aGeomNames[ign].in();
-      theObjectNames.Bind(aName, "1");
-    }
-  }
-
-  TCollection_AsciiString anUpdatedScript;
-
-  Resource_DataMapOfAsciiStringAsciiString mapRemoved;
-  Resource_DataMapOfAsciiStringAsciiString mapEntries; // names and entries present in anUpdatedScript
-  Standard_Integer objectCounter = 0;
-  TCollection_AsciiString anEntry, aName, aGUIName, aBaseName("smeshObj_");
-
-  // Treat every script line and add it to anUpdatedScript
-  for ( linesIt = lines.begin(); linesIt != lines.end(); ++linesIt )
-  {
-    TCollection_AsciiString& aLine = *linesIt;
-    anUpdatedScript += tab;
-    {
-      //Replace characters used instead of quote marks to quote notebook variables
-      int pos = 1;
-      while (( pos = aLine.Location( 1, SMESH::TVar::Quote(), pos, aLine.Length() )))
-        aLine.SetValue( pos, '"' );
-    }
-    // Find entries to be replaced by names
-    Handle(TColStd_HSequenceOfInteger) aSeq = FindEntries(aLine);
-    const Standard_Integer aSeqLen = aSeq->Length();
-    Standard_Integer aStart = 1;
-    for (Standard_Integer i = 1; i <= aSeqLen; i += 2)
-    {
-      if ( aStart < aSeq->Value(i) )
-        anUpdatedScript += aLine.SubString( aStart, aSeq->Value(i) - 1 ); // line part before i-th entry
-      anEntry = aLine.SubString( aSeq->Value(i), aSeq->Value(i + 1) );
-      // is a GEOM object?
-      CORBA::String_var geomName = geom->GetDumpName( anEntry.ToCString() );
-      if ( !geomName.in() || !geomName.in()[0] ) {
-        // is a SMESH object
-        if ( theObjectNames.IsBound( anEntry )) {
-          // The Object is in Study
-          aName = theObjectNames.Find( anEntry );
-          // check validity of aName
-          bool isValidName = fixPythonName( aName );
-          if (theObjectNames.IsBound(aName) && anEntry != theObjectNames(aName)) {
-            // diff objects have same name - make a new name by appending a digit
-            TCollection_AsciiString aName2;
-            Standard_Integer i = 0;
-            do {
-              aName2 = aName + "_" + ++i;
-            } while (theObjectNames.IsBound(aName2) && anEntry != theObjectNames(aName2));
-            aName = aName2;
-            isValidName = false;
-          }
-          if ( !isValidName )
-            theObjectNames(anEntry) = aName;
-
-          if ( aLine.Value(1) != '#' )
-            mapEntries.Bind(anEntry, aName);
-        }
-        else
-        {
-          // Removed Object
-          do {
-            aName = aBaseName + (++objectCounter);
-          } while (theObjectNames.IsBound(aName));
-
-          if ( !aRemovedObjIDs.count( anEntry ) && aLine.Value(1) != '#')
-            mapRemoved.Bind(anEntry, aName);
-
-          theObjectNames.Bind(anEntry, aName);
-        }
-        theObjectNames.Bind(aName, anEntry); // to detect same name of diff objects
-      }
-      else
-      {
-        aName = geomName.in();
-        importGeom = true;
-      }
-      anUpdatedScript += aName;
-      aStart = aSeq->Value(i + 1) + 1;
-
-    } // loop on entries within aLine
-
-    if ( aSeqLen == 0 )
-      anUpdatedScript += aLine;
-    else if ( aSeq->Value( aSeqLen ) < aLine.Length() )
-      anUpdatedScript += aLine.SubString( aSeq->Value(aSeqLen) + 1, aLine.Length() );
-
-    anUpdatedScript += '\n';
-  }
-
-  // Make an initial part of aSript
-
-  TCollection_AsciiString initPart = "import ";
-  if ( isMultiFile )
-    initPart += "salome, ";
-  initPart += " SMESH, SALOMEDS\n";
-  initPart += "from salome.smesh import smeshBuilder\n";
-  if ( importGeom && isMultiFile )
-  {
-    initPart += ("\n## import GEOM dump file ## \n"
-                 "import string, os, sys, re, inspect\n"
-                 "thisFile   = inspect.getfile( inspect.currentframe() )\n"
-                 "thisModule = os.path.splitext( os.path.basename( thisFile ))[0]\n"
-                 "sys.path.insert( 0, os.path.dirname( thisFile ))\n"
-                 "exec(\"from \"+re.sub(\"SMESH$\",\"GEOM\",thisModule)+\" import *\")\n\n");
-  }
-  // import python files corresponding to plugins if they are used in anUpdatedScript
-  {
-    TCollection_AsciiString importStr;
-    std::vector<std::string> pluginNames = getPluginNames();
-    for ( size_t i = 0; i < pluginNames.size(); ++i )
-    {
-      // Convert access to plugin members:
-      // e.g. StdMeshers.QUAD_REDUCED -> StdMeshersBuilder.QUAD_REDUCED
-      TCollection_AsciiString pluginAccess = (pluginNames[i] + ".").c_str() ;
-      int iFrom = 1, iPos;
-      while (( iPos = anUpdatedScript.Location( pluginAccess, iFrom, anUpdatedScript.Length() )))
-      {
-        anUpdatedScript.Insert( iPos + pluginNames[i].size(), "Builder" );
-        iFrom = iPos + pluginNames[i].size() + 8;
-      }
-      // if any plugin member is used, import the plugin
-      if ( iFrom > 1 )
-        importStr += ( helper + "\n" "from salome." + pluginNames[i].c_str() +
-                       " import " + pluginNames[i].c_str() +"Builder" );
-    }
-    if ( !importStr.IsEmpty() )
-      initPart += importStr + "\n";
-  }
-
-  if ( isMultiFile )
-    initPart += "def RebuildData(theStudy):";
-  initPart += "\n";
-
-  anUpdatedScript.Prepend( initPart );
-
-  // Make a final part of aScript
-
-  // Dump object removal
-  TCollection_AsciiString removeObjPart;
-  if ( !mapRemoved.IsEmpty() ) {
-    removeObjPart += nt + "## some objects were removed";
-    removeObjPart += nt + "aStudyBuilder = theStudy.NewBuilder()";
-    Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString mapRemovedIt;
-    for ( mapRemovedIt.Initialize( mapRemoved ); mapRemovedIt.More(); mapRemovedIt.Next() ) {
-      aName   = mapRemovedIt.Value(); // python name
-      anEntry = mapRemovedIt.Key();
-      removeObjPart += nt + "SO = theStudy.FindObjectIOR(theStudy.ConvertObjectToIOR(";
-      removeObjPart += aName;
-      // for object wrapped by class of smeshBuilder.py
-      if ( anEntry2AccessorMethod.IsBound( anEntry ) )
-        removeObjPart += helper + "." + anEntry2AccessorMethod( anEntry );
-      removeObjPart += helper + "))" + nt + "if SO: aStudyBuilder.RemoveObjectWithChildren(SO)";
-    }
-  }
-
-  // Set object names
-  TCollection_AsciiString setNamePart;
-  Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString mapEntriesIt;
-  for ( mapEntriesIt.Initialize( mapEntries ); mapEntriesIt.More(); mapEntriesIt.Next() )
-  {
-    anEntry = mapEntriesIt.Key();
-    aName   = mapEntriesIt.Value(); // python name
-    if ( theNames.IsBound( anEntry ))
-    {
-      aGUIName = theNames.Find(anEntry);
-      aGUIName.RemoveAll('\''); // remove a quote from a name (issue 22360)
-      setNamePart += nt + aSMESHGen + ".SetName(" + aName;
-      if ( anEntry2AccessorMethod.IsBound( anEntry ) )
-        setNamePart += helper + "." + anEntry2AccessorMethod( anEntry );
-      setNamePart += helper + ", '" + aGUIName + "')";
-    }
-  }
-  if ( !setNamePart.IsEmpty() )
-  {
-    setNamePart.Insert( 1, nt + "## Set names of Mesh objects" );
-  }
-
-  // Store visual properties of displayed objects
-
-  TCollection_AsciiString visualPropertiesPart;
-  if (isPublished)
-  {
-    //Output the script that sets up the visual parameters.
-    CORBA::String_var compDataType = ComponentDataType();
-    CORBA::String_var script = theStudy->GetDefaultScript( compDataType.in(), tab.ToCString() );
-    if ( script.in() && script.in()[0] ) {
-      visualPropertiesPart += nt + "### Store presentation parameters of displayed objects\n";
-      visualPropertiesPart += script.in();
-    }
-  }
-
-  anUpdatedScript += removeObjPart + '\n' + setNamePart + '\n' + visualPropertiesPart;
-
-  if ( isMultiFile )
-  {
-    anUpdatedScript +=
-      "\n\tpass"
-      "\n"
-      "\nif __name__ == '__main__':"
-      "\n\tSMESH_RebuildData = RebuildData"
-      "\n\texec('import '+re.sub('SMESH$','GEOM',thisModule)+' as GEOM_dump')"
-      "\n\tGEOM_dump.RebuildData( salome.myStudy )"
-      "\n\texec('from '+re.sub('SMESH$','GEOM',thisModule)+' import * ')"
-      "\n\tSMESH_RebuildData( salome.myStudy )";
-  }
-  anUpdatedScript += "\n";
-
-  // no need now as we use 'tab' and 'nt' variables depending on isMultiFile
-  // if( !isMultiFile ) // remove unnecessary tabulation
-  //   RemoveTabulation( anUpdatedScript );
-
-  // -----------------------------------------------------------------
-  // put string literals describing patterns into separate functions
-  // -----------------------------------------------------------------
-
-  TCollection_AsciiString aLongString, aFunctionType;
-  int where = 1;
-  std::set< std::string > functionNameSet;
-  while ( SMESH::TPythonDump::CutoutLongString( anUpdatedScript, where, aLongString, aFunctionType ))
-  {
-    // make a python string literal
-    aLongString.Prepend(":\n\treturn '''\n");
-    aLongString += "\n\t'''\n\tpass\n";
-
-    TCollection_AsciiString functionName;
-
-    // check if the function returning this literal is already defined
-    int posAlready = anUpdatedScript.Location( aLongString, where, anUpdatedScript.Length() );
-    if ( posAlready ) // already defined
-    {
-      // find the function name
-      int functBeg = posAlready;
-      char* script = (char*) anUpdatedScript.ToCString() + posAlready - 1; // look at ":" after "def fuction()"
-      while ( *script != ' ' ) {
-        script--;
-        functBeg--;
-      }
-      functBeg++; // do not take ' '
-      posAlready--; // do not take ':'
-      functionName = anUpdatedScript.SubString( functBeg, posAlready );
-    }
-    else // not defined yet
-    {
-      // find a unique function name
-      fixPythonName( aFunctionType );
-      Standard_Integer nb = 0;
-      do functionName = aFunctionType + "_" + ( nb++ ) + "()";
-      while ( !functionNameSet.insert( functionName.ToCString() ).second );
-
-      // define function
-      TCollection_AsciiString funDef = helper + "def " + functionName + aLongString;
-      if ( isMultiFile )
-      {
-        anUpdatedScript += helper + "\n\n" + funDef;
-      }
-      else
-      {
-        funDef += "\n\n";
-        anUpdatedScript.Insert( 1, funDef);
-        where += funDef.Length();
-      }
-    }
-    anUpdatedScript.InsertBefore( where, functionName ); // call function
-  }
-
-  aValidScript = true;
-
-  return anUpdatedScript;
-
-  SMESH_CATCH( SMESH::printException );
-
-  aValidScript = false;
-  return "";
-}
-
-//=============================================================================
-/*!
- *  GetNewPythonLines
- */
-//=============================================================================
-TCollection_AsciiString SMESH_Gen_i::GetNewPythonLines (int theStudyID)
-{
-  TCollection_AsciiString aScript;
-
-  // Dump trace of API methods calls
-  if (myPythonScripts.find(theStudyID) != myPythonScripts.end()) {
-    Handle(TColStd_HSequenceOfAsciiString) aPythonScript = myPythonScripts[theStudyID];
-    Standard_Integer istr, aLen = aPythonScript->Length();
-    for (istr = 1; istr <= aLen; istr++) {
-      aScript += "\n";
-      aScript += aPythonScript->Value(istr);
-    }
-    aScript += "\n";
-  }
-
-  return aScript;
-}
-
-//=============================================================================
-/*!
- *  CleanPythonTrace
- */
-//=============================================================================
-void SMESH_Gen_i::CleanPythonTrace (int theStudyID)
-{
-  TCollection_AsciiString aScript;
-
-  // Clean trace of API methods calls
-  if (myPythonScripts.find(theStudyID) != myPythonScripts.end()) {
-    myPythonScripts[theStudyID]->Clear();
-  }
-}
index 64e0c3e693f1e62a8e19f8b6efdabf6a619b0973..858f1eedc1a79ced6636ea78a58f93418f2c3170 100644 (file)
 
 #include <map>
 #include <fstream>
+#include <sstream>
 #include <cstdio>
 #include <cstdlib>
 
@@ -2955,6 +2956,22 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CopyMesh(SMESH::SMESH_IDSource_ptr meshPart,
   return newMesh._retn();
 }
 
+//================================================================================
+/*!
+ * \brief Get version of MED format being used.
+ */
+//================================================================================
+
+char* SMESH_Gen_i::GetMEDFileVersion()
+{
+  MED::TInt majeur, mineur, release;
+  majeur =  mineur = release = 0;
+  MED::GetVersionRelease(majeur, mineur, release);
+  std::ostringstream version;
+  version << majeur << "." << mineur << "." << release;
+  return CORBA::string_dup( version.str().c_str() );
+}
+
 //================================================================================
 /*!
  *  SMESH_Gen_i::GetMEDVersion
@@ -2962,20 +2979,22 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CopyMesh(SMESH::SMESH_IDSource_ptr meshPart,
  *  Get MED version of the file by its name
  */
 //================================================================================
-CORBA::Boolean SMESH_Gen_i::GetMEDVersion(const char* theFileName,
-                                          SMESH::MED_VERSION& theVersion)
+char* SMESH_Gen_i::GetMEDVersion(const char* theFileName)
 {
-  theVersion = SMESH::MED_V2_2;
-
-  int major, minor, release;
-  bool result = MED::GetMEDVersion( theFileName, major, minor, release );
-  if ( result ) {
-    int version = major * 100 + minor;
-    if ( version < 202 ) theVersion = SMESH::MED_V2_1;
-    else theVersion = SMESH::MED_V2_2;
-  }
+  std::string version = MED::GetMEDVersion( theFileName );
+  return CORBA::string_dup( version.c_str() );
+}
 
-  return result;
+//================================================================================
+/*!
+ *  SMESH_Gen_i::CheckCompatibility
+ *
+ *  Check compatibility of file with MED format being used.
+ */
+//================================================================================
+CORBA::Boolean SMESH_Gen_i::CheckCompatibility(const char* theFileName)
+{
+  return MED::CheckCompatibility( theFileName );
 }
 
 //================================================================================
index 1e869462cd65cf08dc9936b82e669d92e7550975..f8c6a552e2081902f0a64e3857403832f6126b21 100644 (file)
@@ -378,9 +378,14 @@ public:
                                               CORBA::Double                 mergeTolerance)
     throw ( SALOME::SALOME_Exception );
 
+  // Get version of MED format being used.
+  char* GetMEDFileVersion();
+
   // Get MED version of the file by its name
-  CORBA::Boolean GetMEDVersion(const char* theFileName,
-                               SMESH::MED_VERSION& theVersion);
+  char* GetMEDVersion(const char* theFileName);
+
+  // Check compatibility of file with MED format being used.
+  CORBA::Boolean CheckCompatibility(const char* theFileName);
 
   // Get names of meshes defined in file with the specified name
   SMESH::string_array* GetMeshNames(const char* theFileName);
index f2712cab2c286573fe09b10791dcc25637fd72cd..38f9afd2760815384a19d70ba599883c95377f9f 100644 (file)
@@ -406,8 +406,8 @@ SMESH_Mesh_i::ImportMEDFile( const char* theFileName, const char* theMeshName )
   CreateGroupServants();
 
   int major, minor, release;
-  if( !MED::GetMEDVersion( theFileName, major, minor, release ) )
-    major = minor = release = -1;
+  major = minor = release = 0;
+  MED::GetMEDVersion(theFileName, major, minor, release);
   _medFileInfo           = new SMESH::MedFileInfo();
   _medFileInfo->fileName = theFileName;
   _medFileInfo->fileSize = 0;
@@ -447,18 +447,6 @@ SMESH::DriverMED_ReadStatus SMESH_Mesh_i::ImportCGNSFile( const char*  theFileNa
   return ConvertDriverMEDReadStatus(status);
 }
 
-//================================================================================
-/*!
- * \brief Return string representation of a MED file version comprising nbDigits
- */
-//================================================================================
-
-char* SMESH_Mesh_i::GetVersionString(SMESH::MED_VERSION version, CORBA::Short nbDigits)
-{
-  string ver = DriverMED_W_SMESHDS_Mesh::GetVersionString(nbDigits);
-  return CORBA::string_dup( ver.c_str() );
-}
-
 //=============================================================================
 /*!
  *  ImportUNVFile
@@ -3010,7 +2998,6 @@ string SMESH_Mesh_i::prepareMeshNameAndGroups(const char*    file,
 
 void SMESH_Mesh_i::ExportToMEDX (const char*        file,
                                  CORBA::Boolean     auto_groups,
-                                 SMESH::MED_VERSION theVersion,
                                  CORBA::Boolean     overwrite,
                                  CORBA::Boolean     autoDimension)
   throw(SALOME::SALOME_Exception)
@@ -3020,11 +3007,11 @@ void SMESH_Mesh_i::ExportToMEDX (const char*        file,
     _preMeshInfo->FullLoadFromFile();
 
   string aMeshName = prepareMeshNameAndGroups(file, overwrite);
-  _impl->ExportMED( file, aMeshName.c_str(), auto_groups, theVersion, 0, autoDimension );
+  _impl->ExportMED( file, aMeshName.c_str(), auto_groups, 0, autoDimension );
 
   TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportToMEDX( r'"
                 << file << "', " << auto_groups << ", "
-                << theVersion << ", " << overwrite << ", "
+                << overwrite << ", "
                 << autoDimension << " )";
 
   SMESH_CATCH( SMESH::throwCorbaException );
@@ -3037,11 +3024,10 @@ void SMESH_Mesh_i::ExportToMEDX (const char*        file,
 //================================================================================
 
 void SMESH_Mesh_i::ExportToMED (const char*        file,
-                                CORBA::Boolean     auto_groups,
-                                SMESH::MED_VERSION theVersion)
+                                CORBA::Boolean     auto_groups)
   throw(SALOME::SALOME_Exception)
 {
-  ExportToMEDX(file,auto_groups,theVersion,true);
+  ExportToMEDX(file, auto_groups, true);
 }
 
 //================================================================================
@@ -3054,7 +3040,7 @@ void SMESH_Mesh_i::ExportMED (const char* file,
                               CORBA::Boolean auto_groups)
   throw(SALOME::SALOME_Exception)
 {
-  ExportToMEDX(file,auto_groups,SMESH::MED_V2_2,true);
+  ExportToMEDX(file, auto_groups, true);
 }
 
 //================================================================================
@@ -3157,7 +3143,6 @@ void SMESH_Mesh_i::ExportSTL (const char *file, const bool isascii)
 void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
                                    const char*               file,
                                    CORBA::Boolean            auto_groups,
-                                   SMESH::MED_VERSION        version,
                                    CORBA::Boolean            overwrite,
                                    CORBA::Boolean            autoDimension,
                                    const GEOM::ListOfFields& fields,
@@ -3211,7 +3196,7 @@ void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
   {
     aMeshName = prepareMeshNameAndGroups(file, overwrite);
     _impl->ExportMED( file, aMeshName.c_str(), auto_groups,
-                      version, 0, autoDimension, /*addODOnVertices=*/have0dField);
+                      0, autoDimension, /*addODOnVertices=*/have0dField);
     meshDS = _impl->GetMeshDS();
   }
   else
@@ -3231,7 +3216,7 @@ void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
     }
     SMESH_MeshPartDS* partDS = new SMESH_MeshPartDS( meshPart );
     _impl->ExportMED( file, aMeshName.c_str(), auto_groups,
-                      version, partDS, autoDimension, /*addODOnVertices=*/have0dField);
+                      partDS, autoDimension, /*addODOnVertices=*/have0dField);
     meshDS = tmpDSDeleter._obj = partDS;
   }
 
@@ -3257,7 +3242,7 @@ void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
   }
   TPythonDump() << _this() << ".ExportPartToMED( "
                 << meshPart << ", r'" << file << "', "
-                << auto_groups << ", " << version << ", " << overwrite << ", "
+                << auto_groups << ", " << overwrite << ", "
                 << autoDimension << ", " << goList
                 << ", '" << ( geomAssocFields ? geomAssocFields : "" ) << "'" << " )";
 
index 8aaa79bae4201174e2019ce25b9c2f7b2d427c81..47230bd9b1ff0daaa83e183a899791489a78ecc7 100644 (file)
@@ -228,19 +228,13 @@ public:
    *  Consider maximum group name length stored in MED file.
    */
   CORBA::Boolean HasDuplicatedGroupNamesMED();
-  /*!
-   * Return string representation of a MED file version comprising nbDigits
-   */
-  char* GetVersionString(SMESH::MED_VERSION version, CORBA::Short nbDigits);
 
   void ExportToMEDX( const char*        file,
                      CORBA::Boolean     auto_groups,
-                     SMESH::MED_VERSION version,
                      CORBA::Boolean     overwrite,
                      CORBA::Boolean     autoDimension=true) throw (SALOME::SALOME_Exception);
   void ExportToMED ( const char*        file,
-                     CORBA::Boolean     auto_groups,
-                     SMESH::MED_VERSION version ) throw (SALOME::SALOME_Exception);
+                     CORBA::Boolean     auto_groups ) throw (SALOME::SALOME_Exception);
   void ExportMED   ( const char*        file,
                      CORBA::Boolean     auto_groups ) throw (SALOME::SALOME_Exception);
 
@@ -259,7 +253,6 @@ public:
   void ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
                        const char*               file,
                        CORBA::Boolean            auto_groups,
-                       SMESH::MED_VERSION        version,
                        CORBA::Boolean            overwrite,
                        CORBA::Boolean            autoDim,
                        const GEOM::ListOfFields& fields,
diff --git a/src/SMESH_I/SMESH_PythonDump.cxx b/src/SMESH_I/SMESH_PythonDump.cxx
new file mode 100644 (file)
index 0000000..a46c9b5
--- /dev/null
@@ -0,0 +1,1390 @@
+// Copyright (C) 2007-2016  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
+//
+// 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, or (at your option) any later version.
+//
+// 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
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//  File    : SMESH_DumpPython.cxx
+//  Created : Thu Mar 24 17:17:59 2005
+//  Author  : Julia DOROVSKIKH
+//  Module  : SMESH
+
+#include "SMESH_PythonDump.hxx"
+
+#include "SMESH_2smeshpy.hxx"
+#include "SMESH_Comment.hxx"
+#include "SMESH_Filter_i.hxx"
+#include "SMESH_Gen_i.hxx"
+#include "SMESH_MeshEditor_i.hxx"
+
+#include <SALOMEDS_wrap.hxx>
+
+#include <LDOMParser.hxx>
+#include <Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString.hxx>
+#include <TColStd_HSequenceOfInteger.hxx>
+#include <TCollection_AsciiString.hxx>
+
+#ifdef _DEBUG_
+static int MYDEBUG = 0;
+#else
+static int MYDEBUG = 0;
+#endif
+
+#include "SMESH_TryCatch.hxx"
+
+namespace SMESH
+{
+
+  size_t TPythonDump::myCounter = 0;
+  const char theNotPublishedObjectName[] = "__NOT__Published__Object__";
+
+  TVar::TVar(CORBA::Double value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
+  TVar::TVar(CORBA::Long   value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
+  TVar::TVar(CORBA::Short  value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
+  TVar::TVar(const SMESH::double_array& value):myVals(value.length()), myIsList(true)
+  {
+    for ( size_t i = 0; i < value.length(); i++)
+      myVals[i] = SMESH_Comment(value[i]);
+  }
+
+  TPythonDump::
+  TPythonDump():myVarsCounter(0)
+  {
+    ++myCounter;
+  }
+  TPythonDump::
+  ~TPythonDump()
+  {
+    if(--myCounter == 0){
+      SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
+      std::string aString = myStream.str();
+      TCollection_AsciiString aCollection(Standard_CString(aString.c_str()));
+      SALOMEDS::Study_var aStudy = aSMESHGen->GetCurrentStudy();
+      if(!aStudy->_is_nil() && !aCollection.IsEmpty())
+      {
+        const std::string & objEntry = SMESH_Gen_i::GetSMESHGen()->GetLastObjEntry();
+        if ( !objEntry.empty() )
+          aCollection += (TVar::ObjPrefix() + objEntry ).c_str();
+        aSMESHGen->AddToPythonScript(aStudy->StudyId(),aCollection);
+        if(MYDEBUG) MESSAGE(aString);
+        // prevent misuse of already treated variables
+        aSMESHGen->UpdateParameters(CORBA::Object_var().in(),"");
+      }
+    }
+  }
+
+  TPythonDump& //!< store a variable value. Write either a value or '$varID$'
+  TPythonDump::
+  operator<<(const TVar& theVarValue)
+  {
+    const std::vector< int >& varIDs = SMESH_Gen_i::GetSMESHGen()->GetLastParamIndices();
+    if ( theVarValue.myIsList )
+    {
+      myStream << "[ ";
+      for ( size_t i = 1; i <= theVarValue.myVals.size(); ++i )
+      {
+        if ( myVarsCounter < (int)varIDs.size() && varIDs[ myVarsCounter ] >= 0 )
+          myStream << TVar::Quote() << varIDs[ myVarsCounter ] << TVar::Quote();
+        else
+          myStream << theVarValue.myVals[i-1];
+        if ( i < theVarValue.myVals.size() )
+          myStream << ", ";
+        ++myVarsCounter;
+      }
+      myStream << " ]";
+    }
+    else
+    {
+      if ( myVarsCounter < (int)varIDs.size() && varIDs[ myVarsCounter ] >= 0 )
+        myStream << TVar::Quote() << varIDs[ myVarsCounter ] << TVar::Quote();
+      else
+        myStream << theVarValue.myVals[0];
+      ++myVarsCounter;
+    }
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(long int theArg){
+    myStream<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(int theArg){
+    myStream<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(double theArg){
+    myStream<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(float theArg){
+    myStream<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(const void* theArg){
+    myStream<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(const char* theArg){
+    if ( theArg )
+      myStream<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(const std::string& theArg){
+    myStream<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(const SMESH::ElementType& theArg)
+  {
+    myStream<<"SMESH.";
+    switch(theArg){
+    case ALL:    myStream<<"ALL";    break;
+    case NODE:   myStream<<"NODE";   break;
+    case EDGE:   myStream<<"EDGE";   break;
+    case FACE:   myStream<<"FACE";   break;
+    case VOLUME: myStream<<"VOLUME"; break;
+    case ELEM0D: myStream<<"ELEM0D"; break;
+    case BALL:   myStream<<"BALL";   break;
+    default:     myStream<<"__UNKNOWN__ElementType: " << theArg;
+    }
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(const SMESH::GeometryType& theArg)
+  {
+    myStream<<"SMESH.";
+    switch(theArg){
+    case Geom_POINT:      myStream<<"Geom_POINT";      break;
+    case Geom_EDGE:       myStream<<"Geom_EDGE";       break;
+    case Geom_TRIANGLE:   myStream<<"Geom_TRIANGLE";   break;
+    case Geom_QUADRANGLE: myStream<<"Geom_QUADRANGLE"; break;
+    case Geom_POLYGON:    myStream<<"Geom_POLYGON";    break;
+    case Geom_TETRA:      myStream<<"Geom_TETRA";      break;
+    case Geom_PYRAMID:    myStream<<"Geom_PYRAMID";    break;
+    case Geom_HEXA:       myStream<<"Geom_HEXA";       break;
+    case Geom_PENTA:      myStream<<"Geom_PENTA";      break;
+    case Geom_POLYHEDRA:  myStream<<"Geom_POLYHEDRA";  break;
+    case Geom_BALL:       myStream<<"Geom_BALL";       break;
+    default:    myStream<<"__UNKNOWN__GeometryType: " << theArg;
+    }
+    return *this;
+  }
+  TPythonDump&
+  TPythonDump::
+  operator<<(const SMESH::EntityType& theArg)
+  {
+    myStream<<"SMESH.";
+    switch(theArg){
+    case Entity_0D:                myStream<<"Entity_0D";                break;
+    case Entity_Edge:              myStream<<"Entity_Edge";              break;
+    case Entity_Quad_Edge:         myStream<<"Entity_Quad_Edge";         break;
+    case Entity_Triangle:          myStream<<"Entity_Triangle";          break;
+    case Entity_Quad_Triangle:     myStream<<"Entity_Quad_Triangle";     break;
+    case Entity_BiQuad_Triangle:   myStream<<"Entity_BiQuad_Triangle";   break;
+    case Entity_Quadrangle:        myStream<<"Entity_Quadrangle";        break;
+    case Entity_Quad_Quadrangle:   myStream<<"Entity_Quad_Quadrangle";   break;
+    case Entity_BiQuad_Quadrangle: myStream<<"Entity_BiQuad_Quadrangle"; break;
+    case Entity_Polygon:           myStream<<"Entity_Polygon";           break;
+    case Entity_Quad_Polygon:      myStream<<"Entity_Quad_Polygon";      break;
+    case Entity_Tetra:             myStream<<"Entity_Tetra";             break;
+    case Entity_Quad_Tetra:        myStream<<"Entity_Quad_Tetra";        break;
+    case Entity_Pyramid:           myStream<<"Entity_Pyramid";           break;
+    case Entity_Quad_Pyramid:      myStream<<"Entity_Quad_Pyramid";      break;
+    case Entity_Hexa:              myStream<<"Entity_Hexa";              break;
+    case Entity_Quad_Hexa:         myStream<<"Entity_Quad_Hexa";         break;
+    case Entity_TriQuad_Hexa:      myStream<<"Entity_TriQuad_Hexa";      break;
+    case Entity_Penta:             myStream<<"Entity_Penta";             break;
+    case Entity_Quad_Penta:        myStream<<"Entity_Quad_Penta";        break;
+    case Entity_Hexagonal_Prism:   myStream<<"Entity_Hexagonal_Prism";   break;
+    case Entity_Polyhedra:         myStream<<"Entity_Polyhedra";         break;
+    case Entity_Quad_Polyhedra:    myStream<<"Entity_Quad_Polyhedra";    break;
+    case Entity_Ball:              myStream<<"Entity_Ball";              break;
+    case Entity_Last:              myStream<<"Entity_Last";              break;
+    default:    myStream<<"__UNKNOWN__EntityType: " << theArg;
+    }
+    return *this;
+  }
+
+  template<class TArray>
+  void DumpArray(const TArray& theArray, TPythonDump & theStream)
+  {
+    if ( theArray.length() == 0 )
+    {
+      theStream << "[]";
+    }
+    else
+    {
+      theStream << "[ ";
+      for (CORBA::ULong i = 1; i <= theArray.length(); i++) {
+        theStream << theArray[i-1];
+        if ( i < theArray.length() )
+          theStream << ", ";
+      }
+      theStream << " ]";
+    }
+  }
+
+  TPythonDump&
+  TPythonDump::operator<<(const SMESH::long_array& theArg)
+  {
+    DumpArray( theArg, *this );
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::operator<<(const SMESH::double_array& theArg)
+  {
+    DumpArray( theArg, *this );
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::operator<<(const SMESH::nodes_array& theArg)
+  {
+    DumpArray( theArg, *this );
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::operator<<(const SMESH::string_array& theArray)
+  {
+    myStream << "[ ";
+    for ( CORBA::ULong i = 1; i <= theArray.length(); i++ ) {
+      myStream << "'" << theArray[i-1] << "'";
+      if ( i < theArray.length() )
+        myStream << ", ";
+    }
+    myStream << " ]";
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SALOMEDS::SObject_ptr aSObject)
+  {
+    if ( !aSObject->_is_nil() ) {
+      CORBA::String_var entry = aSObject->GetID();
+      myStream << entry.in();
+    }
+    else {
+      myStream << theNotPublishedObjectName;
+    }
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(CORBA::Object_ptr theArg)
+  {
+    SMESH_Gen_i*          aSMESHGen = SMESH_Gen_i::GetSMESHGen();
+    SALOMEDS::Study_var      aStudy = aSMESHGen->GetCurrentStudy();
+    SALOMEDS::SObject_wrap aSObject = SMESH_Gen_i::ObjectToSObject(aStudy,theArg);
+    if(!aSObject->_is_nil()) {
+      CORBA::String_var id = aSObject->GetID();
+      myStream << id;
+    } else if ( !CORBA::is_nil(theArg)) {
+      if ( aSMESHGen->CanPublishInStudy( theArg )) // not published SMESH object
+        myStream << "smeshObj_" << size_t(theArg);
+      else
+        myStream << theNotPublishedObjectName;
+    }
+    else
+      myStream << "None";
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SMESH::SMESH_Hypothesis_ptr theArg)
+  {
+    SALOMEDS::Study_var     aStudy = SMESH_Gen_i::GetSMESHGen()->GetCurrentStudy();
+    SALOMEDS::SObject_wrap aSObject = SMESH_Gen_i::ObjectToSObject(aStudy,theArg);
+    if(aSObject->_is_nil() && !CORBA::is_nil(theArg))
+      myStream << "hyp_" << theArg->GetId();
+    else
+      *this << aSObject;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SMESH::SMESH_IDSource_ptr theArg)
+  {
+    if ( CORBA::is_nil( theArg ) )
+      return *this << "None";
+    SMESH_Gen_i*          aSMESHGen = SMESH_Gen_i::GetSMESHGen();
+    SALOMEDS::Study_var      aStudy = aSMESHGen->GetCurrentStudy();
+    SALOMEDS::SObject_wrap aSObject = SMESH_Gen_i::ObjectToSObject(aStudy,theArg);
+    if(!aSObject->_is_nil())
+    {
+      return *this << aSObject;
+    }
+    if ( SMESH::Filter_i* filter = SMESH::DownCast<SMESH::Filter_i*>( theArg ))
+    {
+      return *this << filter;
+    }
+    if ( SMESH_MeshEditor_i::IsTemporaryIDSource( theArg ))
+    {
+      SMESH::SMESH_Mesh_var            mesh = theArg->GetMesh();
+      SMESH::long_array_var    anElementsId = theArg->GetIDs();
+      SMESH::array_of_ElementType_var types = theArg->GetTypes();
+      SMESH::ElementType               type = types->length() ? types[0] : SMESH::ALL;
+      SALOMEDS::SObject_wrap         meshSO = SMESH_Gen_i::ObjectToSObject(aStudy,mesh);
+      if ( meshSO->_is_nil() ) // don't waste memory for dumping not published objects
+        return *this << mesh << ".GetIDSource([], " << type << ")";
+      else
+        return *this << mesh << ".GetIDSource(" << anElementsId << ", " << type << ")";
+    }
+    return *this << theNotPublishedObjectName;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SMESH::FilterLibrary_i* theArg)
+  {
+    myStream<<"aFilterLibrary"<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SMESH::FilterManager_i* theArg)
+  {
+    myStream<<"aFilterManager";
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SMESH::Filter_i* theArg)
+  {
+    myStream<<"aFilter"<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SMESH::Functor_i* theArg)
+  {
+    if ( theArg ) {
+      FunctorType aFunctorType = theArg->GetFunctorType();
+      switch(aFunctorType) {
+      case FT_AspectRatio:           myStream<< "aAspectRatio";           break;
+      case FT_AspectRatio3D:         myStream<< "aAspectRatio3D";         break;
+      case FT_Warping:               myStream<< "aWarping";               break;
+      case FT_MinimumAngle:          myStream<< "aMinimumAngle";          break;
+      case FT_Taper:                 myStream<< "aTaper";                 break;
+      case FT_Skew:                  myStream<< "aSkew";                  break;
+      case FT_Area:                  myStream<< "aArea";                  break;
+      case FT_Volume3D:              myStream<< "aVolume3D";              break;
+      case FT_MaxElementLength2D:    myStream<< "aMaxElementLength2D";    break;
+      case FT_MaxElementLength3D:    myStream<< "aMaxElementLength3D";    break;
+      case FT_FreeBorders:           myStream<< "aFreeBorders";           break;
+      case FT_FreeEdges:             myStream<< "aFreeEdges";             break;
+      case FT_FreeNodes:             myStream<< "aFreeNodes";             break;
+      case FT_FreeFaces:             myStream<< "aFreeFaces";             break;
+      case FT_EqualNodes:            myStream<< "aEqualNodes";            break;
+      case FT_EqualEdges:            myStream<< "aEqualEdges";            break;
+      case FT_EqualFaces:            myStream<< "aEqualFaces";            break;
+      case FT_EqualVolumes:          myStream<< "aEqualVolumes";          break;
+      case FT_MultiConnection:       myStream<< "aMultiConnection";       break;
+      case FT_MultiConnection2D:     myStream<< "aMultiConnection2D";     break;
+      case FT_Length:                myStream<< "aLength";                break;
+      case FT_Length2D:              myStream<< "aLength2D";              break;
+      case FT_NodeConnectivityNumber:myStream<< "aNodeConnectivityNumber";break;
+      case FT_BelongToMeshGroup:     myStream<< "aBelongToMeshGroup";     break;
+      case FT_BelongToGeom:          myStream<< "aBelongToGeom";          break;
+      case FT_BelongToPlane:         myStream<< "aBelongToPlane";         break;
+      case FT_BelongToCylinder:      myStream<< "aBelongToCylinder";      break;
+      case FT_BelongToGenSurface:    myStream<< "aBelongToGenSurface";    break;
+      case FT_LyingOnGeom:           myStream<< "aLyingOnGeom";           break;
+      case FT_RangeOfIds:            myStream<< "aRangeOfIds";            break;
+      case FT_BadOrientedVolume:     myStream<< "aBadOrientedVolume";     break;
+      case FT_BareBorderVolume:      myStream<< "aBareBorderVolume";      break;
+      case FT_BareBorderFace:        myStream<< "aBareBorderFace";        break;
+      case FT_OverConstrainedVolume: myStream<< "aOverConstrainedVolume"; break;
+      case FT_OverConstrainedFace:   myStream<< "aOverConstrainedFace";   break;
+      case FT_LinearOrQuadratic:     myStream<< "aLinearOrQuadratic";     break;
+      case FT_GroupColor:            myStream<< "aGroupColor";            break;
+      case FT_ElemGeomType:          myStream<< "aElemGeomType";          break;
+      case FT_EntityType:            myStream<< "aEntityType";            break;
+      case FT_CoplanarFaces:         myStream<< "aCoplanarFaces";         break;
+      case FT_BallDiameter:          myStream<< "aBallDiameter";          break;
+      case FT_ConnectedElements:     myStream<< "aConnectedElements";     break;
+      case FT_LessThan:              myStream<< "aLessThan";              break;
+      case FT_MoreThan:              myStream<< "aMoreThan";              break;
+      case FT_EqualTo:               myStream<< "aEqualTo";               break;
+      case FT_LogicalNOT:            myStream<< "aLogicalNOT";            break;
+      case FT_LogicalAND:            myStream<< "aLogicalAND";            break;
+      case FT_LogicalOR:             myStream<< "aLogicalOR";             break;
+      case FT_Undefined:             myStream<< "anUndefined";            break;
+        //default: -- commented to have a compilation warning
+      }
+      myStream<<theArg;
+    }
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SMESH::Measurements_i* theArg)
+  {
+    myStream<<"aMeasurements";
+    return *this;
+  }
+
+  TPythonDump& TPythonDump:: operator<<(SMESH_Gen_i* theArg)
+  {
+    myStream << SMESHGenName(); return *this;
+  }
+
+  TPythonDump& TPythonDump::operator<<(SMESH_MeshEditor_i* theArg)
+  {
+    myStream << MeshEditorName() << "_" << ( theArg ? theArg->GetMeshId() : -1 ); return *this;
+  }
+
+  TPythonDump& TPythonDump::operator<<(const TCollection_AsciiString & theStr)
+  {
+    myStream << theStr; return *this;
+  }
+
+  TPythonDump& TPythonDump::operator<<(const SMESH::AxisStruct & theAxis)
+  {
+    *this << "SMESH.AxisStruct( "
+          << TVar( theAxis.x  ) << ", "
+          << TVar( theAxis.y  ) << ", "
+          << TVar( theAxis.z  ) << ", "
+          << TVar( theAxis.vx ) << ", "
+          << TVar( theAxis.vy ) << ", "
+          << TVar( theAxis.vz ) << " )";
+    return *this;
+  }
+
+  TPythonDump& TPythonDump::operator<<(const SMESH::DirStruct & theDir)
+  {
+    const SMESH::PointStruct & P = theDir.PS;
+    *this << "SMESH.DirStruct( SMESH.PointStruct ( "
+          << TVar( P.x ) << ", "
+          << TVar( P.y ) << ", "
+          << TVar( P.z ) << " ))";
+    return *this;
+  }
+
+  TPythonDump& TPythonDump::operator<<(const SMESH::PointStruct & P)
+  {
+    *this << "SMESH.PointStruct ( "
+          << TVar( P.x ) << ", "
+          << TVar( P.y ) << ", "
+          << TVar( P.z ) << " )";
+    return *this;
+  }
+
+  TPythonDump& TPythonDump::operator<<(const SMESH::ListOfGroups& theList)
+  {
+    DumpArray( theList, *this );
+    return *this;
+  }
+  TPythonDump& TPythonDump::operator<<(const SMESH::ListOfGroups * theList)
+  {
+    DumpArray( *theList, *this );
+    return *this;
+  }
+  TPythonDump& TPythonDump::operator<<(const GEOM::ListOfGO& theList)
+  {
+    DumpArray( theList, *this );
+    return *this;
+  }
+  TPythonDump& TPythonDump::operator<<(const GEOM::ListOfGBO& theList)
+  {
+    DumpArray( theList, *this );
+    return *this;
+  }
+  TPythonDump& TPythonDump::operator<<(const SMESH::ListOfIDSources& theList)
+  {
+    DumpArray( theList, *this );
+    return *this;
+  }
+  TPythonDump& TPythonDump::operator<<(const SMESH::CoincidentFreeBorders& theCFB)
+  {
+    // dump CoincidentFreeBorders as a list of lists, each enclosed list
+    // contains node IDs of a group of coincident free borders where
+    // each consequent triple of IDs describe a free border: (n1, n2, nLast)
+    // For example [[1, 2, 10, 20, 21, 40], [11, 12, 15, 55, 54, 41]] describes
+    // two groups of coincident free borders, each group including two borders
+
+    myStream << "[";
+    for ( CORBA::ULong i = 0; i < theCFB.coincidentGroups.length(); ++i )
+    {
+      const SMESH::FreeBordersGroup& aGRP = theCFB.coincidentGroups[ i ];
+      if ( i ) myStream << ",";
+      myStream << "[";
+      for ( CORBA::ULong iP = 0; iP < aGRP.length(); ++iP )
+      {
+        const SMESH::FreeBorderPart& aPART = aGRP[ iP ];
+        if ( 0 <= aPART.border && aPART.border < (CORBA::Long)theCFB.borders.length() )
+        {
+          if ( iP ) myStream << ", ";
+          const SMESH::FreeBorder& aBRD = theCFB.borders[ aPART.border ];
+          myStream << aBRD.nodeIDs[ aPART.node1    ] << ",";
+          myStream << aBRD.nodeIDs[ aPART.node2    ] << ",";
+          myStream << aBRD.nodeIDs[ aPART.nodeLast ];
+        }
+      }
+      myStream << "]";
+    }
+    myStream << "]";
+
+    return *this;
+  }
+
+  const char* TPythonDump::NotPublishedObjectName()
+  {
+    return theNotPublishedObjectName;
+  }
+
+  TCollection_AsciiString myLongStringStart( "TPythonDump::LongStringStart" );
+  TCollection_AsciiString myLongStringEnd  ( "TPythonDump::LongStringEnd" );
+
+  //================================================================================
+  /*!
+   * \brief Return marker of long string literal beginning
+   * \param type - a name of functionality producing the string literal
+   * \retval TCollection_AsciiString - the marker string to be written into
+   * a raw python script
+   */
+  //================================================================================
+
+  TCollection_AsciiString TPythonDump::LongStringStart(const char* type)
+  {
+    return
+      myLongStringStart +
+      (Standard_Integer) strlen(type) +
+      " " +
+      (char*) type;
+  }
+
+  //================================================================================
+  /*!
+     * \brief Return marker of long string literal end
+      * \retval TCollection_AsciiString - the marker string to be written into
+      * a raw python script
+   */
+  //================================================================================
+
+  TCollection_AsciiString TPythonDump::LongStringEnd()
+  {
+    return myLongStringEnd;
+  }
+
+  //================================================================================
+  /*!
+     * \brief Cut out a long string literal from a string
+      * \param theText - text possibly containing string literals
+      * \param theFrom - position in the text to search from
+      * \param theLongString - the retrieved literal
+      * \param theStringType - a name of functionality produced the literal
+      * \retval bool - true if a string literal found
+     *
+     * The literal is removed from theText; theFrom points position right after
+     * the removed literal
+   */
+  //================================================================================
+
+  bool  TPythonDump::CutoutLongString( TCollection_AsciiString & theText,
+                                       int                     & theFrom,
+                                       TCollection_AsciiString & theLongString,
+                                       TCollection_AsciiString & theStringType)
+  {
+    if ( theFrom < 1 || theFrom > theText.Length() )
+      return false;
+
+    // ...script \  beg marker    \ \ type \       literal              \  end marker  \ script...
+    //  "theText myLongStringStart7 Pattern!!! SALOME Mesh Pattern file myLongStringEndtextEnd"
+    //  012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+    //  0         1         2         3         4         5         6         7         8
+
+    theFrom = theText.Location( myLongStringStart, theFrom, theText.Length() ); // = 09
+    if ( !theFrom )
+      return false;
+
+    // find where literal begins
+    int literalBeg = theFrom + myLongStringStart.Length(); // = 26
+    char* typeLenStr = (char*) theText.ToCString() + literalBeg - 1; // = "7 Pattern!!! SALO...."
+    int typeLen = atoi ( typeLenStr ); // = 7
+    while ( *typeLenStr != ' ' ) { // look for ' ' after typeLen
+      literalBeg++; // 26 -> 27
+      typeLenStr++;
+    }
+    literalBeg += typeLen + 1; // = 35
+    if ( literalBeg > theText.Length() )
+      return false;
+
+    // where literal ends (i.e. end marker begins)
+    int literalEnd = theText.Location( myLongStringEnd, literalBeg, theText.Length() ); // = 64
+    if ( !literalEnd )
+      literalEnd = theText.Length();
+
+    // literal
+    theLongString = theText.SubString( literalBeg, literalEnd - 1); // "!!! SALOME Mesh Pattern file "
+    // type
+    theStringType = theText.SubString( literalBeg - typeLen, literalBeg - 1 ); // "Pattern"
+    // cut off literal
+    literalEnd += myLongStringEnd.Length(); // = 79
+    TCollection_AsciiString textEnd = theText.SubString( literalEnd, theText.Length() ); // "textE..."
+    theText = theText.SubString( 1, theFrom - 1 ) + textEnd;
+
+    return true;
+  }
+
+  void printException( const char* text )
+  {
+#ifdef _DEBUG_
+    cout << "Exception in SMESH_Gen_i::DumpPython(): " << text << endl;
+#endif
+  }
+}
+
+//=======================================================================
+//function : RemoveTabulation
+//purpose  : 
+//=======================================================================
+void RemoveTabulation( TCollection_AsciiString& theScript )
+{
+  std::string aString( theScript.ToCString() );
+  std::string::size_type aPos = 0;
+  while( aPos < aString.length() )
+  {
+    aPos = aString.find( "\n\t", aPos );
+    if( aPos == std::string::npos )
+      break;
+    aString.replace( aPos, 2, "\n" );
+    aPos++;
+  }
+  theScript = aString.c_str();
+}
+
+//=======================================================================
+//function : DumpPython
+//purpose  :
+//=======================================================================
+Engines::TMPFile* SMESH_Gen_i::DumpPython (CORBA::Object_ptr theStudy,
+                                           CORBA::Boolean isPublished,
+                                           CORBA::Boolean isMultiFile,
+                                           CORBA::Boolean& isValidScript)
+{
+  SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow(theStudy);
+  if (CORBA::is_nil(aStudy))
+    return new Engines::TMPFile(0);
+
+  CORBA::String_var compDataType = ComponentDataType();
+  SALOMEDS::SObject_wrap aSO = aStudy->FindComponent( compDataType.in() );
+  if (CORBA::is_nil(aSO))
+    return new Engines::TMPFile(0);
+
+  // Map study entries to object names
+  Resource_DataMapOfAsciiStringAsciiString aMap;
+  Resource_DataMapOfAsciiStringAsciiString aMapNames;
+
+  SALOMEDS::ChildIterator_wrap Itr = aStudy->NewChildIterator(aSO);
+  for (Itr->InitEx(true); Itr->More(); Itr->Next()) {
+    SALOMEDS::SObject_wrap aValue = Itr->Value();
+    CORBA::String_var anID = aValue->GetID();
+    CORBA::String_var aName = aValue->GetName();
+    TCollection_AsciiString aGUIName ( (char*) aName.in() );
+    TCollection_AsciiString anEntry ( (char*) anID.in() );
+    if (aGUIName.Length() > 0) {
+      aMapNames.Bind( anEntry, aGUIName );
+      aMap.Bind( anEntry, aGUIName );
+    }
+  }
+
+  // Get trace of restored study
+  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+  SALOMEDS::GenericAttribute_wrap anAttr =
+    aStudyBuilder->FindOrCreateAttribute(aSO, "AttributePythonObject");
+
+  SALOMEDS::AttributePythonObject_var pyAttr =
+    SALOMEDS::AttributePythonObject::_narrow(anAttr);
+  CORBA::String_var oldValue = pyAttr->GetObject();
+  TCollection_AsciiString aSavedTrace (oldValue.in());
+
+  // Add trace of API methods calls and replace study entries by names
+  TCollection_AsciiString aScript;
+  aScript += DumpPython_impl(aStudy, aMap, aMapNames, isPublished, isMultiFile,
+                             myIsHistoricalPythonDump, isValidScript, aSavedTrace);
+
+  int aLen = aScript.Length();
+  unsigned char* aBuffer = new unsigned char[aLen+1];
+  strcpy((char*)aBuffer, aScript.ToCString());
+
+  CORBA::Octet* anOctetBuf =  (CORBA::Octet*)aBuffer;
+  Engines::TMPFile_var aStreamFile = new Engines::TMPFile(aLen+1, aLen+1, anOctetBuf, 1);
+
+  bool hasNotPublishedObjects = aScript.Location( SMESH::theNotPublishedObjectName, 1, aLen);
+  isValidScript = isValidScript && !hasNotPublishedObjects;
+
+  return aStreamFile._retn();
+}
+
+//=============================================================================
+/*!
+ *  AddToPythonScript
+ */
+//=============================================================================
+void SMESH_Gen_i::AddToPythonScript (int theStudyID, const TCollection_AsciiString& theString)
+{
+  if (myPythonScripts.find(theStudyID) == myPythonScripts.end()) {
+    myPythonScripts[theStudyID] = new TColStd_HSequenceOfAsciiString;
+  }
+  myPythonScripts[theStudyID]->Append(theString);
+}
+
+//=============================================================================
+/*!
+ *  RemoveLastFromPythonScript
+ */
+//=============================================================================
+void SMESH_Gen_i::RemoveLastFromPythonScript (int theStudyID)
+{
+  if (myPythonScripts.find(theStudyID) != myPythonScripts.end()) {
+    int aLen = myPythonScripts[theStudyID]->Length();
+    myPythonScripts[theStudyID]->Remove(aLen);
+  }
+}
+
+//=======================================================================
+//function : SavePython
+//purpose  :
+//=======================================================================
+void SMESH_Gen_i::SavePython (SALOMEDS::Study_ptr theStudy)
+{
+  // Dump trace of API methods calls
+  TCollection_AsciiString aScript = GetNewPythonLines(theStudy->StudyId());
+
+  // Check contents of PythonObject attribute
+  CORBA::String_var compDataType = ComponentDataType();
+  SALOMEDS::SObject_wrap aSO = theStudy->FindComponent( compDataType.in() );
+  SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder();
+  SALOMEDS::GenericAttribute_wrap anAttr =
+    aStudyBuilder->FindOrCreateAttribute(aSO, "AttributePythonObject");
+
+  SALOMEDS::AttributePythonObject_var pyAttr =
+    SALOMEDS::AttributePythonObject::_narrow(anAttr);
+  CORBA::String_var oldValue = pyAttr->GetObject();
+  TCollection_AsciiString oldScript (oldValue.in());
+
+  if (oldScript.Length() > 0) {
+    oldScript += "\n";
+    oldScript += aScript;
+  } else {
+    oldScript = aScript;
+  }
+
+  // Store in PythonObject attribute
+  pyAttr->SetObject(oldScript.ToCString(), 1);
+
+  // Clean trace of API methods calls
+  CleanPythonTrace(theStudy->StudyId());
+}
+
+
+// impl
+
+
+//=============================================================================
+/*!
+ *  FindEntries: Returns a sequence of start/end positions of entries in the string
+ */
+//=============================================================================
+Handle(TColStd_HSequenceOfInteger) FindEntries (TCollection_AsciiString& theString)
+{
+  Handle(TColStd_HSequenceOfInteger) aSeq = new TColStd_HSequenceOfInteger;
+  Standard_Integer aLen = theString.Length();
+  Standard_Boolean isFound = Standard_False;
+
+  char* arr = (char*) theString.ToCString();
+  Standard_Integer i = 0, j;
+
+  while(i < aLen) {
+    int c = (int)arr[i];
+    j = i+1;
+    if ( isdigit( c )) { //Is digit?
+
+      isFound = Standard_False;
+      while((j < aLen) && ( isdigit(c) || c == ':' )) { //Check if it is an entry
+        c = (int)arr[j++];
+        if(c == ':') isFound = Standard_True;
+      }
+
+      if (isFound) {
+        int prev = (i < 1) ? 0 : (int)arr[i - 1];
+        // to distinguish from a sketcher command:
+        // last char should be a digit, not ":",
+        // previous char should not be '"'.
+        if (arr[j-2] != ':' && prev != '"') {
+          aSeq->Append(i+1); // +1 because AsciiString starts from 1
+          aSeq->Append(j-1);
+        }
+      }
+    }
+
+    i = j;
+  }
+
+  return aSeq;
+}
+
+namespace {
+
+  //================================================================================
+  /*!
+   * \brief Make a string be a valid python name
+    * \param aName - a string to fix
+    * \retval bool - true if aName was not modified
+   */
+  //================================================================================
+
+  bool fixPythonName(TCollection_AsciiString & aName)
+  {
+    bool isValidName = true;
+    int nbUnderscore = 0;
+    int p;
+    // replace not allowed chars by underscore
+    const char* name = aName.ToCString();
+    for ( p = 0; name[p]; ++p ) {
+      if ( !isalnum( name[p] ) && name[p] != '_' )
+      {
+        if ( p == 0 || p+1 == aName.Length() || name[p-1] == '_')
+        {
+          aName.Remove( p+1, 1 ); // remove __ and _ from the start and the end
+          --p;
+          name = aName.ToCString();
+        }
+        else
+        {
+          aName.SetValue( p+1, '_');
+          nbUnderscore++;
+        }
+        isValidName = false;
+      }
+    }
+    // aName must not start with a digit
+    if ( aName.IsIntegerValue() ) {
+      aName.Insert( 1, 'a' );
+      isValidName = false;
+    }
+    // shorten names like CartesianParameters3D_400_400_400_1000000_1
+    const int nbAllowedUnderscore = 3; /* changed from 2 to 3 by an user request
+                                          posted to SALOME Forum */
+    if ( aName.Length() > 20 && nbUnderscore > nbAllowedUnderscore )
+    {
+      p = aName.Location( "_", 20, aName.Length());
+      if ( p > 1 )
+        aName.Trunc( p-1 );
+    }
+    return isValidName;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Return Python module names of available plug-ins.
+   */
+  //================================================================================
+
+  std::vector<std::string> getPluginNames()
+  {
+    std::vector<std::string> pluginNames;
+    std::vector< std::string > xmlPaths = SMESH_Gen::GetPluginXMLPaths();
+    LDOMParser xmlParser;
+    for ( size_t i = 0; i < xmlPaths.size(); ++i )
+    {
+      bool error = xmlParser.parse( xmlPaths[i].c_str() );
+      if ( error )
+      {
+        TCollection_AsciiString data;
+        INFOS( xmlParser.GetError(data) );
+        continue;
+      }
+      // <meshers-group name="Standard Meshers"
+      //                resources="StdMeshers"
+      //                idl-module="StdMeshers"
+      //                server-lib="StdMeshersEngine"
+      //                gui-lib="StdMeshersGUI">
+      LDOM_Document xmlDoc   = xmlParser.getDocument();
+      LDOM_NodeList nodeList = xmlDoc.getElementsByTagName( "meshers-group" );
+      for ( int i = 0; i < nodeList.getLength(); ++i )
+      {
+        LDOM_Node       node = nodeList.item( i );
+        LDOM_Element&   elem = (LDOM_Element&) node;
+        LDOMString idlModule = elem.getAttribute( "idl-module" );
+        if ( strlen( idlModule.GetString() ) > 0 )
+          pluginNames.push_back( idlModule.GetString() );
+      }
+    }
+    return pluginNames;
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Createa a Dump Python script
+ *  \param [in] theStudy - the study to dump
+ *  \param [in,out] theObjectNames - map of an entry to a study and python name
+ *  \param [in] theNames -  - map of an entry to a study name
+ *  \param [in] isPublished - \c true if dump of object publication in study is needed
+ *  \param [in] isMultiFile - \c true if dump of each module goes to a separate file
+ *  \param [in] isHistoricalDump - \c true if removed object should be dumped
+ *  \param [out] aValidScript - returns \c true if the returned script seems valid
+ *  \param [in,out] theSavedTrace - the dump stored in the study. It's cleared to
+ *         decrease memory usage.
+ *  \return TCollection_AsciiString - the result dump script.
+ */
+//================================================================================
+
+TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
+                        (SALOMEDS::Study_ptr                       theStudy,
+                         Resource_DataMapOfAsciiStringAsciiString& theObjectNames,
+                         Resource_DataMapOfAsciiStringAsciiString& theNames,
+                         bool                                      isPublished,
+                         bool                                      isMultiFile,
+                         bool                                      isHistoricalDump,
+                         bool&                                     aValidScript,
+                         TCollection_AsciiString&                  theSavedTrace)
+{
+  SMESH_TRY;
+  const int aStudyID = theStudy->StudyId();
+
+  const TCollection_AsciiString aSmeshpy ( SMESH_2smeshpy::SmeshpyName() );
+  const TCollection_AsciiString aSMESHGen( SMESH_2smeshpy::GenName() );
+  const TCollection_AsciiString anOldGen ( SMESH::TPythonDump::SMESHGenName() );
+  const TCollection_AsciiString helper; // to comfortably append C strings to TCollection_AsciiString
+  const TCollection_AsciiString tab( isMultiFile ? "\t" : "" ), nt = helper + "\n" + tab;
+
+  std::list< TCollection_AsciiString > lines; // lines of a script
+  std::list< TCollection_AsciiString >::iterator linesIt;
+  
+  if ( isPublished )
+    lines.push_back(  aSMESHGen + " = smeshBuilder.New(theStudy)" );
+   else
+    lines.push_back(  aSMESHGen + " = smeshBuilder.New(None)" );
+  lines.push_back( helper + "aFilterManager = " + aSMESHGen + ".CreateFilterManager()" );
+  lines.push_back( helper + "aMeasurements = "  + aSMESHGen + ".CreateMeasurements()" );
+
+  // Treat dump trace of restored study
+  if (theSavedTrace.Length() > 0)
+  {
+    linesIt = --lines.end();
+    // Split theSavedTrace into lines
+    int from = 1, end = theSavedTrace.Length(), to;
+    while ( from < end && ( to = theSavedTrace.Location( "\n", from, end )))
+    {
+      if ( theSavedTrace.ToCString()[from-1] == '\t' )
+        ++from;
+      if ( to != from )
+        lines.push_back( theSavedTrace.SubString( from, to - 1 ));
+      from = to + 1;
+    }
+    // For the convertion of IDL API calls -> smeshBuilder.py API, "smesh" standing for SMESH_Gen
+    // was replaces with "smeshgen" (==TPythonDump::SMESHGenName()).
+    // Change "smesh" -> "smeshgen" in the trace saved before passage to smeshBuilder.py API
+    bool isNewVersion =
+      theSavedTrace.Location( anOldGen + ".", 1, theSavedTrace.Length() );
+    theSavedTrace.Clear();
+    if ( !isNewVersion )
+    {
+      const TCollection_AsciiString aSmeshCall ( "smesh." ), gen( "gen" );
+      int beg, end, from;
+      for ( ++linesIt; linesIt != lines.end(); ++linesIt )
+      {
+        TCollection_AsciiString& aSavedLine = *linesIt;
+        end = aSavedLine.Length(), from = 1;
+        while ( from < end && ( beg = aSavedLine.Location( aSmeshCall, from, end )))
+        {
+          char charBefore = ( beg == 1 ) ? ' ' : aSavedLine.Value( beg - 1 );
+          if ( isspace( charBefore ) || charBefore == '=' ) { // "smesh." is not a part of a long word
+            aSavedLine.Insert( beg + aSmeshCall.Length() - 1, gen );// "smesh" -> "smeshgen"
+            end += gen.Length();
+          }
+          from = beg + aSmeshCall.Length();
+        }
+      }
+    }
+  }
+
+  // Add new dump trace of API methods calls to script lines
+  if (myPythonScripts.find( aStudyID ) != myPythonScripts.end())
+  {
+    Handle(TColStd_HSequenceOfAsciiString) aPythonScript = myPythonScripts[ aStudyID ];
+    Standard_Integer istr, aLen = aPythonScript->Length();
+    for (istr = 1; istr <= aLen; istr++)
+      lines.push_back( aPythonScript->Value( istr ));
+  }
+
+  // Convert IDL API calls into smeshBuilder.py API.
+  // Some objects are wrapped with python classes and
+  // Resource_DataMapOfAsciiStringAsciiString holds methods returning wrapped objects
+  Resource_DataMapOfAsciiStringAsciiString anEntry2AccessorMethod;
+  std::set< TCollection_AsciiString >      aRemovedObjIDs;
+  if ( !getenv("NO_2smeshpy_conversion"))
+    SMESH_2smeshpy::ConvertScript( lines, anEntry2AccessorMethod,
+                                   theObjectNames, aRemovedObjIDs,
+                                   theStudy, isHistoricalDump );
+
+  bool importGeom = false;
+  GEOM::GEOM_Gen_ptr geom = GetGeomEngine();
+  {
+    // Add names of GEOM objects to theObjectNames to exclude same names of SMESH objects
+    GEOM::string_array_var aGeomNames = geom->GetAllDumpNames();
+    int ign = 0, nbgn = aGeomNames->length();
+    for (; ign < nbgn; ign++) {
+      TCollection_AsciiString aName = aGeomNames[ign].in();
+      theObjectNames.Bind(aName, "1");
+    }
+  }
+
+  TCollection_AsciiString anUpdatedScript;
+
+  Resource_DataMapOfAsciiStringAsciiString mapRemoved;
+  Resource_DataMapOfAsciiStringAsciiString mapEntries; // names and entries present in anUpdatedScript
+  Standard_Integer objectCounter = 0;
+  TCollection_AsciiString anEntry, aName, aGUIName, aBaseName("smeshObj_");
+
+  // Treat every script line and add it to anUpdatedScript
+  for ( linesIt = lines.begin(); linesIt != lines.end(); ++linesIt )
+  {
+    TCollection_AsciiString& aLine = *linesIt;
+    anUpdatedScript += tab;
+    {
+      //Replace characters used instead of quote marks to quote notebook variables
+      int pos = 1;
+      while (( pos = aLine.Location( 1, SMESH::TVar::Quote(), pos, aLine.Length() )))
+        aLine.SetValue( pos, '"' );
+    }
+    // Find entries to be replaced by names
+    Handle(TColStd_HSequenceOfInteger) aSeq = FindEntries(aLine);
+    const Standard_Integer aSeqLen = aSeq->Length();
+    Standard_Integer aStart = 1;
+    for (Standard_Integer i = 1; i <= aSeqLen; i += 2)
+    {
+      if ( aStart < aSeq->Value(i) )
+        anUpdatedScript += aLine.SubString( aStart, aSeq->Value(i) - 1 ); // line part before i-th entry
+      anEntry = aLine.SubString( aSeq->Value(i), aSeq->Value(i + 1) );
+      // is a GEOM object?
+      CORBA::String_var geomName = geom->GetDumpName( anEntry.ToCString() );
+      if ( !geomName.in() || !geomName.in()[0] ) {
+        // is a SMESH object
+        if ( theObjectNames.IsBound( anEntry )) {
+          // The Object is in Study
+          aName = theObjectNames.Find( anEntry );
+          // check validity of aName
+          bool isValidName = fixPythonName( aName );
+          if (theObjectNames.IsBound(aName) && anEntry != theObjectNames(aName)) {
+            // diff objects have same name - make a new name by appending a digit
+            TCollection_AsciiString aName2;
+            Standard_Integer i = 0;
+            do {
+              aName2 = aName + "_" + ++i;
+            } while (theObjectNames.IsBound(aName2) && anEntry != theObjectNames(aName2));
+            aName = aName2;
+            isValidName = false;
+          }
+          if ( !isValidName )
+            theObjectNames(anEntry) = aName;
+
+          if ( aLine.Value(1) != '#' )
+            mapEntries.Bind(anEntry, aName);
+        }
+        else
+        {
+          // Removed Object
+          do {
+            aName = aBaseName + (++objectCounter);
+          } while (theObjectNames.IsBound(aName));
+
+          if ( !aRemovedObjIDs.count( anEntry ) && aLine.Value(1) != '#')
+            mapRemoved.Bind(anEntry, aName);
+
+          theObjectNames.Bind(anEntry, aName);
+        }
+        theObjectNames.Bind(aName, anEntry); // to detect same name of diff objects
+      }
+      else
+      {
+        aName = geomName.in();
+        importGeom = true;
+      }
+      anUpdatedScript += aName;
+      aStart = aSeq->Value(i + 1) + 1;
+
+    } // loop on entries within aLine
+
+    if ( aSeqLen == 0 )
+      anUpdatedScript += aLine;
+    else if ( aSeq->Value( aSeqLen ) < aLine.Length() )
+      anUpdatedScript += aLine.SubString( aSeq->Value(aSeqLen) + 1, aLine.Length() );
+
+    anUpdatedScript += '\n';
+  }
+
+  // Make an initial part of aSript
+
+  TCollection_AsciiString initPart = "import ";
+  if ( isMultiFile )
+    initPart += "salome, ";
+  initPart += " SMESH, SALOMEDS\n";
+  initPart += "from salome.smesh import smeshBuilder\n";
+  if ( importGeom && isMultiFile )
+  {
+    initPart += ("\n## import GEOM dump file ## \n"
+                 "import string, os, sys, re, inspect\n"
+                 "thisFile   = inspect.getfile( inspect.currentframe() )\n"
+                 "thisModule = os.path.splitext( os.path.basename( thisFile ))[0]\n"
+                 "sys.path.insert( 0, os.path.dirname( thisFile ))\n"
+                 "exec(\"from \"+re.sub(\"SMESH$\",\"GEOM\",thisModule)+\" import *\")\n\n");
+  }
+  // import python files corresponding to plugins if they are used in anUpdatedScript
+  {
+    TCollection_AsciiString importStr;
+    std::vector<std::string> pluginNames = getPluginNames();
+    for ( size_t i = 0; i < pluginNames.size(); ++i )
+    {
+      // Convert access to plugin members:
+      // e.g. StdMeshers.QUAD_REDUCED -> StdMeshersBuilder.QUAD_REDUCED
+      TCollection_AsciiString pluginAccess = (pluginNames[i] + ".").c_str() ;
+      int iFrom = 1, iPos;
+      while (( iPos = anUpdatedScript.Location( pluginAccess, iFrom, anUpdatedScript.Length() )))
+      {
+        anUpdatedScript.Insert( iPos + pluginNames[i].size(), "Builder" );
+        iFrom = iPos + pluginNames[i].size() + 8;
+      }
+      // if any plugin member is used, import the plugin
+      if ( iFrom > 1 )
+        importStr += ( helper + "\n" "from salome." + pluginNames[i].c_str() +
+                       " import " + pluginNames[i].c_str() +"Builder" );
+    }
+    if ( !importStr.IsEmpty() )
+      initPart += importStr + "\n";
+  }
+
+  if ( isMultiFile )
+    initPart += "def RebuildData(theStudy):";
+  initPart += "\n";
+
+  anUpdatedScript.Prepend( initPart );
+
+  // Make a final part of aScript
+
+  // Dump object removal
+  TCollection_AsciiString removeObjPart;
+  if ( !mapRemoved.IsEmpty() ) {
+    removeObjPart += nt + "## some objects were removed";
+    removeObjPart += nt + "aStudyBuilder = theStudy.NewBuilder()";
+    Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString mapRemovedIt;
+    for ( mapRemovedIt.Initialize( mapRemoved ); mapRemovedIt.More(); mapRemovedIt.Next() ) {
+      aName   = mapRemovedIt.Value(); // python name
+      anEntry = mapRemovedIt.Key();
+      removeObjPart += nt + "SO = theStudy.FindObjectIOR(theStudy.ConvertObjectToIOR(";
+      removeObjPart += aName;
+      // for object wrapped by class of smeshBuilder.py
+      if ( anEntry2AccessorMethod.IsBound( anEntry ) )
+        removeObjPart += helper + "." + anEntry2AccessorMethod( anEntry );
+      removeObjPart += helper + "))" + nt + "if SO: aStudyBuilder.RemoveObjectWithChildren(SO)";
+    }
+  }
+
+  // Set object names
+  TCollection_AsciiString setNamePart;
+  Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString mapEntriesIt;
+  for ( mapEntriesIt.Initialize( mapEntries ); mapEntriesIt.More(); mapEntriesIt.Next() )
+  {
+    anEntry = mapEntriesIt.Key();
+    aName   = mapEntriesIt.Value(); // python name
+    if ( theNames.IsBound( anEntry ))
+    {
+      aGUIName = theNames.Find(anEntry);
+      aGUIName.RemoveAll('\''); // remove a quote from a name (issue 22360)
+      setNamePart += nt + aSMESHGen + ".SetName(" + aName;
+      if ( anEntry2AccessorMethod.IsBound( anEntry ) )
+        setNamePart += helper + "." + anEntry2AccessorMethod( anEntry );
+      setNamePart += helper + ", '" + aGUIName + "')";
+    }
+  }
+  if ( !setNamePart.IsEmpty() )
+  {
+    setNamePart.Insert( 1, nt + "## Set names of Mesh objects" );
+  }
+
+  // Store visual properties of displayed objects
+
+  TCollection_AsciiString visualPropertiesPart;
+  if (isPublished)
+  {
+    //Output the script that sets up the visual parameters.
+    CORBA::String_var compDataType = ComponentDataType();
+    CORBA::String_var script = theStudy->GetDefaultScript( compDataType.in(), tab.ToCString() );
+    if ( script.in() && script.in()[0] ) {
+      visualPropertiesPart += nt + "### Store presentation parameters of displayed objects\n";
+      visualPropertiesPart += script.in();
+    }
+  }
+
+  anUpdatedScript += removeObjPart + '\n' + setNamePart + '\n' + visualPropertiesPart;
+
+  if ( isMultiFile )
+  {
+    anUpdatedScript +=
+      "\n\tpass"
+      "\n"
+      "\nif __name__ == '__main__':"
+      "\n\tSMESH_RebuildData = RebuildData"
+      "\n\texec('import '+re.sub('SMESH$','GEOM',thisModule)+' as GEOM_dump')"
+      "\n\tGEOM_dump.RebuildData( salome.myStudy )"
+      "\n\texec('from '+re.sub('SMESH$','GEOM',thisModule)+' import * ')"
+      "\n\tSMESH_RebuildData( salome.myStudy )";
+  }
+  anUpdatedScript += "\n";
+
+  // no need now as we use 'tab' and 'nt' variables depending on isMultiFile
+  // if( !isMultiFile ) // remove unnecessary tabulation
+  //   RemoveTabulation( anUpdatedScript );
+
+  // -----------------------------------------------------------------
+  // put string literals describing patterns into separate functions
+  // -----------------------------------------------------------------
+
+  TCollection_AsciiString aLongString, aFunctionType;
+  int where = 1;
+  std::set< std::string > functionNameSet;
+  while ( SMESH::TPythonDump::CutoutLongString( anUpdatedScript, where, aLongString, aFunctionType ))
+  {
+    // make a python string literal
+    aLongString.Prepend(":\n\treturn '''\n");
+    aLongString += "\n\t'''\n\tpass\n";
+
+    TCollection_AsciiString functionName;
+
+    // check if the function returning this literal is already defined
+    int posAlready = anUpdatedScript.Location( aLongString, where, anUpdatedScript.Length() );
+    if ( posAlready ) // already defined
+    {
+      // find the function name
+      int functBeg = posAlready;
+      char* script = (char*) anUpdatedScript.ToCString() + posAlready - 1; // look at ":" after "def fuction()"
+      while ( *script != ' ' ) {
+        script--;
+        functBeg--;
+      }
+      functBeg++; // do not take ' '
+      posAlready--; // do not take ':'
+      functionName = anUpdatedScript.SubString( functBeg, posAlready );
+    }
+    else // not defined yet
+    {
+      // find a unique function name
+      fixPythonName( aFunctionType );
+      Standard_Integer nb = 0;
+      do functionName = aFunctionType + "_" + ( nb++ ) + "()";
+      while ( !functionNameSet.insert( functionName.ToCString() ).second );
+
+      // define function
+      TCollection_AsciiString funDef = helper + "def " + functionName + aLongString;
+      if ( isMultiFile )
+      {
+        anUpdatedScript += helper + "\n\n" + funDef;
+      }
+      else
+      {
+        funDef += "\n\n";
+        anUpdatedScript.Insert( 1, funDef);
+        where += funDef.Length();
+      }
+    }
+    anUpdatedScript.InsertBefore( where, functionName ); // call function
+  }
+
+  aValidScript = true;
+
+  return anUpdatedScript;
+
+  SMESH_CATCH( SMESH::printException );
+
+  aValidScript = false;
+  return "";
+}
+
+//=============================================================================
+/*!
+ *  GetNewPythonLines
+ */
+//=============================================================================
+TCollection_AsciiString SMESH_Gen_i::GetNewPythonLines (int theStudyID)
+{
+  TCollection_AsciiString aScript;
+
+  // Dump trace of API methods calls
+  if (myPythonScripts.find(theStudyID) != myPythonScripts.end()) {
+    Handle(TColStd_HSequenceOfAsciiString) aPythonScript = myPythonScripts[theStudyID];
+    Standard_Integer istr, aLen = aPythonScript->Length();
+    for (istr = 1; istr <= aLen; istr++) {
+      aScript += "\n";
+      aScript += aPythonScript->Value(istr);
+    }
+    aScript += "\n";
+  }
+
+  return aScript;
+}
+
+//=============================================================================
+/*!
+ *  CleanPythonTrace
+ */
+//=============================================================================
+void SMESH_Gen_i::CleanPythonTrace (int theStudyID)
+{
+  TCollection_AsciiString aScript;
+
+  // Clean trace of API methods calls
+  if (myPythonScripts.find(theStudyID) != myPythonScripts.end()) {
+    myPythonScripts[theStudyID]->Clear();
+  }
+}
index 7fb82c5644a8a33a55c2c248af32ad69f739ec29..a1e213b4fde137b869245f6eafd45dda23ce462b 100644 (file)
@@ -201,9 +201,6 @@ namespace SMESH
     TPythonDump&
     operator<<(SMESH_MeshEditor_i* theArg);
 
-    TPythonDump&
-    operator<<(SMESH::MED_VERSION theArg);
-
     TPythonDump&
     operator<<(const SMESH::AxisStruct & theAxis);
 
index f289a5fe7ed72eebc569d9026d39fcc631b1ccfd..f9f4fda87f62cfbd258ea97b84299ec4b258969f 100644 (file)
@@ -84,6 +84,10 @@ import salome
 from salome.geom import geomBuilder
 
 import SMESH # This is necessary for back compatibility
+import omniORB                                   # back compatibility
+SMESH.MED_V2_1 = omniORB.EnumItem("MED_V2_1", 0) # back compatibility
+SMESH.MED_V2_2 = omniORB.EnumItem("MED_V2_2", 1) # back compatibility
+
 from   SMESH import *
 from   salome.smesh.smesh_algorithm import Mesh_Algorithm
 
@@ -1789,13 +1793,10 @@ class Mesh:
 
     ## Export the mesh in a file in MED format
     ## allowing to overwrite the file if it exists or add the exported data to its contents
-    #  @param f is the file name
+    #  @param fileName is the file name
     #  @param auto_groups boolean parameter for creating/not creating
     #  the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
     #  the typical use is auto_groups=False.
-    #  @param version MED format version (MED_V2_1 or MED_V2_2,
-    #                 the latter meaning any current version). The parameter is
-    #                 obsolete since MED_V2_1 is no longer supported.
     #  @param overwrite boolean parameter for overwriting/not overwriting the file
     #  @param meshPart a part of mesh (group, sub-mesh) to export instead of the mesh
     #  @param autoDimension if @c True (default), a space dimension of a MED mesh can be either
@@ -1811,17 +1812,33 @@ class Mesh:
     #         - 'f' stands for "_faces _" field;
     #         - 's' stands for "_solids _" field.
     #  @ingroup l2_impexp
-    def ExportMED(self, f, auto_groups=0, version=MED_V2_2,
-                  overwrite=1, meshPart=None, autoDimension=True, fields=[], geomAssocFields=''):
+    def ExportMED(self, *args, **kwargs):
+        # process positional arguments
+        args = [i for i in args if i not in [SMESH.MED_V2_1, SMESH.MED_V2_2]] # backward compatibility
+        fileName        = args[0]
+        auto_groups     = args[1] if len(args) > 1 else 0
+        overwrite       = args[2] if len(args) > 2 else 1
+        meshPart        = args[3] if len(args) > 3 else None
+        autoDimension   = args[4] if len(args) > 4 else True
+        fields          = args[5] if len(args) > 5 else []
+        geomAssocFields = args[6] if len(args) > 6 else ''
+        # process keywords arguments
+        auto_groups     = kwargs.get("auto_groups", auto_groups)
+        overwrite       = kwargs.get("overwrite", overwrite)
+        meshPart        = kwargs.get("meshPart", meshPart)
+        autoDimension   = kwargs.get("autoDimension", autoDimension)
+        fields          = kwargs.get("fields", fields)
+        geomAssocFields = kwargs.get("geomAssocFields", geomAssocFields)
+        # invoke engine's function
         if meshPart or fields or geomAssocFields:
             unRegister = genObjUnRegister()
             if isinstance( meshPart, list ):
                 meshPart = self.GetIDSource( meshPart, SMESH.ALL )
                 unRegister.set( meshPart )
-            self.mesh.ExportPartToMED( meshPart, f, auto_groups, version, overwrite, autoDimension,
+            self.mesh.ExportPartToMED( meshPart, fileName, auto_groups, overwrite, autoDimension,
                                        fields, geomAssocFields)
         else:
-            self.mesh.ExportToMEDX(f, auto_groups, version, overwrite, autoDimension)
+            self.mesh.ExportToMEDX(fileName, auto_groups, overwrite, autoDimension)
 
     ## Export the mesh in a file in SAUV format
     #  @param f is the file name
@@ -1911,10 +1928,7 @@ class Mesh:
     ## Deprecated, used only for compatibility! Please, use ExportMED() method instead.
     #  Export the mesh in a file in MED format
     #  allowing to overwrite the file if it exists or add the exported data to its contents
-    #  @param f the file name
-    #  @param version MED format version (MED_V2_1 or MED_V2_2,
-    #                 the latter meaning any current version). The parameter is
-    #                 obsolete since MED_V2_1 is no longer supported.
+    #  @param fileName the file name
     #  @param opt boolean parameter for creating/not creating
     #         the groups Group_On_All_Nodes, Group_On_All_Faces, ...
     #  @param overwrite boolean parameter for overwriting/not overwriting the file
@@ -1924,8 +1938,19 @@ class Mesh:
     #         - 3D in the rest cases.<br>
     #         If @a autoDimension is @c False, the space dimension is always 3.
     #  @ingroup l2_impexp
-    def ExportToMED(self, f, version=MED_V2_2, opt=0, overwrite=1, autoDimension=True):
-        self.mesh.ExportToMEDX(f, opt, version, overwrite, autoDimension)
+    def ExportToMED(self, *args, **kwargs):
+        # process positional arguments
+        args = [i for i in args if i not in [SMESH.MED_V2_1, SMESH.MED_V2_2]] # backward compatibility
+        fileName      = args[0]
+        opt           = args[1] if len(args) > 1 else 0
+        overwrite     = args[2] if len(args) > 2 else 1
+        autoDimension = args[3] if len(args) > 3 else True
+        # process keywords arguments
+        opt           = kwargs.get("opt", opt)
+        overwrite     = kwargs.get("overwrite", overwrite)
+        autoDimension = kwargs.get("autoDimension", autoDimension)
+        # invoke engine's function
+        self.mesh.ExportToMEDX(fileName, opt, overwrite, autoDimension)
 
     # Operations with groups:
     # ----------------------
index 2ab20472e82e9454d87007c0451839a8cf33b002..feeb4ae71d980a439655bce27118eb8399894d36 100644 (file)
@@ -109,7 +109,7 @@ def cube3D(L, N, outFile):
     aFilter_1.SetMesh(Maillage_1.GetMesh())
     FACE_temp = Maillage_1.GroupOnFilter( SMESH.FACE, noms[cont], aFilter_1 )
  
-  Maillage_1.ExportMED( outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+  Maillage_1.ExportMED(outFile)
 
   #if salome.sg.hasDesktop():
     #salome.sg.updateObjBrowser(1)
@@ -191,7 +191,7 @@ def cube2D(L, N, outFile):
     aFilter_1.SetMesh(Maillage_1.GetMesh())
     EDGE_temp = Maillage_1.GroupOnFilter( SMESH.EDGE, noms[cont], aFilter_1 )
  
-  Maillage_1.ExportMED( outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+  Maillage_1.ExportMED(outFile)
 
   #if salome.sg.hasDesktop():
     #salome.sg.updateObjBrowser(1)
\ No newline at end of file
index 9ffeb8b66ca66bce4ba02b8bd9ad369d93d37d93..7130d093113591aa8a2a9ebbb5f455129c2a413d 100644 (file)
@@ -189,7 +189,7 @@ def generate(data_demi_grand_axe, data_centre, data_normale,
   Maillage=uF.meshCrack(FACE_FISSURE, minSize, maxSize, chordal, dim)
 
   try:
-    Maillage.ExportMED( outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+    Maillage.ExportMED(outFile)
     smesh.SetName(Maillage.GetMesh(), 'MAILLAGE_FISSURE')
   except:
     print 'ExportToMEDX() failed. Invalid file name?'
index 372772b4311ba2f91f62aa4f3e97928c838976c5..9389fecff99f48102b390facd2c948d8d065c5f5 100644 (file)
@@ -228,7 +228,7 @@ def generateCustom(crack, outFile):
   else:
     Group_1 = Maillage_1.CreateEmptyGroup( SMESH.NODE, 'crack' )
     nbAdd = Group_1.AddFrom( Maillage_1.GetMesh() )
-    Maillage_1.ExportMED( outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+    Maillage_1.ExportMED(outFile)
   return(True)
 
 
index 2f6933e257ea07551509568f1bd73465cb20f80f..155e2531e16ffb18c01993420db7dbdd0a530c69 100644 (file)
@@ -216,7 +216,7 @@ def generate(data_longueur,data_largeur,data_centre,
   Maillage=uF.meshCrack(FACE_FISSURE, minSize, maxSize, chordal, dim)
 
   try:
-    Maillage.ExportMED( outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+    Maillage.ExportMED(outFile)
     smesh.SetName(Maillage.GetMesh(), 'MAILLAGE_FISSURE')
   except:
     print 'ExportToMEDX() failed. Invalid file name?'
index 79542b2c5b6b7cf16669f3440fae8e92feb7cbac..7b8bbf954048e685898bc211671d3b8ec2d0cdad 100644 (file)
@@ -57,7 +57,7 @@ def generate(data_rayon,data_centre,outFile):
   Maillage=uF.meshCrack(FACE_FISSURE, minSize, maxSize, chordal, dim=3)
 
   try:
-    Maillage.ExportMED( outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+    Maillage.ExportMED(outFile)
     smesh.SetName(Maillage.GetMesh(), 'MAILLAGE_FISSURE')
   except:
     print 'ExportToMEDX() failed. Invalid file name?'
index 36db725808755552d288701ac6b4ab9a165c1322..e53e639258b8c6ba16ed5697abfc425b2373a572 100644 (file)
@@ -227,7 +227,7 @@ def extendElsets(meshFile, outFile=None):
     if len(front)==0: crackOnly=False
 
   if crackOnly:
-    mesh.ExportMED(outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+    mesh.ExportMED(outFile)
     return('crack')
 
   # Propagates color using elem connectivity
@@ -298,7 +298,7 @@ def extendElsets(meshFile, outFile=None):
       mesh.MakeGroupByIds('Extended_side%d' %n ,SMESH.EDGE,grElemList[2][n])
 
   if outFile==None: outFile=meshFile
-  mesh.ExportMED(outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+  mesh.ExportMED(outFile)
   return(True)
 
 
@@ -422,7 +422,7 @@ def getMaxAspectRatio(tmpdir):
   #for elem in surfElemList:
     #maxAR=max(mesh.GetAspectRatio(elem),maxAR)
 
-  #mesh.ExportMED(meshFile, 0, SMESH.MED_V2_2, 1, None ,1)
+  #mesh.ExportMED(meshFile)
   #return(maxAR)
 
 
index 1b0141f65834f1994ba24b942947e89d4b59d4ac..e03da8d7d82fa5ee5051a66acb29d5bfacf37b32 100644 (file)
@@ -59,7 +59,7 @@ Quadrangle_2D = boite.Quadrangle(algo=smeshBuilder.QUADRANGLE)
 Hexa_3D = boite.Hexahedron(algo=smeshBuilder.Hexa)
 isDone = boite.Compute()
 smesh.SetName(boite, 'boite')
-boite.ExportMED( r'boite.med', 0, SMESH.MED_V2_2, 1 )
+boite.ExportMED(r'boite.med')
 
 ## set object names
 smesh.SetName(boite.GetMesh(), 'boite')
index 8db3cabb04406bcfcda26a20cdefb5dc0535eafd..ad00d0a0e9457f113d5ad6181be05f1fceac6d0a 100644 (file)
@@ -328,7 +328,7 @@ def construitFissureGenerale(maillagesSains,
   fond = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FACE2' )
 
   logging.info("export maillage fini")
-  maillageComplet.ExportMED( fichierMaillageFissure, 0, SMESH.MED_V2_2, 1 )
+  maillageComplet.ExportMED(fichierMaillageFissure)
   putName(maillageComplet, nomFicFissure)
   logging.info("fichier maillage fissure %s", fichierMaillageFissure)
 
index d4270fceade65e7ed994c0ec8c142385fdace2a8..7bcd8c4823338903aa52c97fd69380e28ed8adf6 100644 (file)
@@ -59,7 +59,7 @@ def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
   [origShapes, verticesShapes, dmoyen] = \
     creeZoneDefautMaillage(maillagesSains, shapeDefaut, tailleDefaut, nomZones, coordsNoeudsFissure)
 
-  maillageSain.ExportMED( fichierMaillageSain, 0, SMESH.MED_V2_2, 1 )
+  maillageSain.ExportMED(fichierMaillageSain)
   logging.debug("fichier maillage sain %s", fichierMaillageSain)
   [maillageSain, internalBoundary, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges] = \
     peauInterne(fichierMaillageSain, shapeDefaut, nomZones)
index de8fbeb17a232d9fd23c5279562df713f1909d7e..7c54b438875227e4a69843210efb59b7132f352d 100644 (file)
@@ -189,7 +189,7 @@ def insereFissureElliptique(geometriesSaines, maillagesSains,
 
   if step == 18:
     return None
-  maillageComplet.ExportMED( fichierMaillageFissure, 0, SMESH.MED_V2_2, 1 )
+  maillageComplet.ExportMED(fichierMaillageFissure)
   putName(maillageComplet, nomFicFissure)
   logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
 
index a8619bdda38b8b09cce60634d2a34dacd5270e8b..1b343a8eecf001fa55cd94b235889344d08e3f77 100644 (file)
@@ -1373,7 +1373,7 @@ def insereFissureGenerale(maillagesSains,
   fond = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FACE2' )
 
   logging.info("export maillage fini")
-  maillageComplet.ExportMED( fichierMaillageFissure, 0, SMESH.MED_V2_2, 1 )
+  maillageComplet.ExportMED(fichierMaillageFissure)
   putName(maillageComplet, nomFicFissure)
   logging.info("fichier maillage fissure %s", fichierMaillageFissure)
 
index 347fb401c678a5b95caead419dcb7b7ae6d16e30..a7ff0460982f40352b7da83e0ac2506002660cf8 100644 (file)
@@ -649,7 +649,7 @@ def insereFissureLongue(geometriesSaines, maillagesSains,
   #isDone = maillageComplet.ReorientObject( grps[0] )
   fond = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FACE2' )
 
-  maillageComplet.ExportMED( fichierMaillageFissure, 0, SMESH.MED_V2_2, 1 )
+  maillageComplet.ExportMED(fichierMaillageFissure)
   putName(maillageComplet, nomFicFissure)
   logging.info("fichier maillage fissure %s", fichierMaillageFissure)
 
index a9c4769aaf1edcbf50f35862b8980362f213a816..647d7190889bfe47df1b18e6ddc22ee941659928 100644 (file)
@@ -65,7 +65,7 @@ Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
 Hexa_3D = Mesh_1.Hexahedron(algo=smeshBuilder.Hexa)
 isDone = Mesh_1.Compute()
 smesh.SetName(Mesh_1, 'Mesh_1')
-Mesh_1.ExportMED(  os.path.join(gmu.pathBloc, "materielCasTests/CubeAngle.med"), 0, SMESH.MED_V2_2, 1 )
+Mesh_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/CubeAngle.med"))
 
 ## set object names
 smesh.SetName(Mesh_1.GetMesh(), 'Mesh_1')
index 3eeb130df8e47a9a9da06fbba1beca36f5794664..5677440206634ad08696b05093b1561052a8dc8c 100644 (file)
@@ -124,7 +124,7 @@ smesh.SetName(ENCASTR_1, 'ENCASTR')
 smesh.SetName(cubeFin_1.GetMesh(), 'cubeFin')
 smesh.SetName(Nb_Segments_1, 'Nb. Segments_1')
 
-cubeFin_1.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests/cubeFin.med"), 0, SMESH.MED_V2_2, 1 )
+cubeFin_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/cubeFin.med"))
 
 if salome.sg.hasDesktop():
   salome.sg.updateObjBrowser(True)
index c43889c94f2d48ddd522e8e6b8464e1b50af0451..c3bb1911d2f626779162a25fbc8ad08b5685bf18 100644 (file)
@@ -144,7 +144,7 @@ Nb_Segments_3 = Regular_1D_2.NumberOfSegments(6,[],[  ])
 Nb_Segments_3.SetDistrType( 0 )
 isDone = CylindreSain_1.Compute()
 smesh.SetName(CylindreSain_1, 'CylindreSain')
-CylindreSain_1.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests//CylindreSain.med"), 0, SMESH.MED_V2_2, 1 )
+CylindreSain_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests//CylindreSain.med"))
 SubMesh_1 = Regular_1D_1.GetSubMesh()
 SubMesh_2 = Regular_1D_2.GetSubMesh()
 
index 7fc7173dc5a91282b806a48314b5ab48b61b5a49..6b3ccc22e4d414418e7917e23ab2403ae0ca06b6 100644 (file)
@@ -71,7 +71,7 @@ status = Disque_1.AddHypothesis(Nb_Segments_2,Compound_4)
 Quadrangle_2D = Disque_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
 isDone = Disque_1.Compute()
 smesh.SetName(Disque_1, 'Disque')
-Disque_1.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests/disque.med"), 0, SMESH.MED_V2_2, 1 )
+Disque_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/disque.med"))
 SubMesh_1 = Regular_1D_1.GetSubMesh()
 SubMesh_2 = Regular_1D_2.GetSubMesh()
 
index 3430703529a7497a3ba9ace8bdd03893ed100640..78df7eef1232f2420bd33f82f7b703e170f22624 100644 (file)
@@ -88,7 +88,7 @@ Nb_Segments_3 = Regular_1D_2.NumberOfSegments(25)
 Nb_Segments_3.SetDistrType( 0 )
 isDone = EprouvetteCourbe_1.Compute()
 smesh.SetName(EprouvetteCourbe_1, 'EprouvetteCourbe')
-EprouvetteCourbe_1.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests/EprouvetteCourbe.med"), 0, SMESH.MED_V2_2, 1 )
+EprouvetteCourbe_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/EprouvetteCourbe.med"))
 SubMesh_1 = Regular_1D_1.GetSubMesh()
 SubMesh_2 = Regular_1D_2.GetSubMesh()
 
index 1b2ef1c477434e45780c2e3f03d23e23fe5300be..890a6f933ee6ff57543cf84d5843e03cb1f9ff2b 100644 (file)
@@ -123,7 +123,7 @@ Nb_Segments_3 = Regular_1D_2.NumberOfSegments(10,[],[  ])
 Nb_Segments_3.SetDistrType( 0 )
 isDone = eprouvetteDroite_1.Compute()
 smesh.SetName(eprouvetteDroite_1, 'eprouvetteDroite')
-eprouvetteDroite_1.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests/eprouvetteDroite.med"), 0, SMESH.MED_V2_2, 1 )
+eprouvetteDroite_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/eprouvetteDroite.med"))
 SubMesh_1 = Regular_1D_1.GetSubMesh()
 SubMesh_2 = Regular_1D_2.GetSubMesh()
 
index a6d4e3999e3548d2d3c789721bc88a09c090ff21..d8b87f1e1dec42b27df63e2c1d96b4c9f4bd3952 100644 (file)
@@ -117,7 +117,7 @@ Nb_Segments_3 = Regular_1D_2.NumberOfSegments(5,[],[  ])
 Nb_Segments_3.SetDistrType( 0 )
 isDone = objetSain_1.Compute()
 smesh.SetName(objetSain_1, 'objetSain')
-objetSain_1.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests/faceGaucheSain.med"), 0, SMESH.MED_V2_2, 1 )
+objetSain_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/faceGaucheSain.med"))
 SubMesh_1 = Regular_1D_1.GetSubMesh()
 SubMesh_2 = Regular_1D_2.GetSubMesh()
 
index 0f08fd71511cb041694fbd65967741455cf11875..65dac7358e35eb754e014ba71368cdd2a13817fb 100644 (file)
@@ -85,7 +85,7 @@ Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
 Hexa_3D = Mesh_1.Hexahedron(algo=smeshBuilder.Hexa)
 isDone = Mesh_1.Compute()
 smesh.SetName(Mesh_1, 'Mesh_1')
-Mesh_1.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests/boiteSaine.med"), 0, SMESH.MED_V2_2, 1 )
+Mesh_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/boiteSaine.med"))
 
 ## set object names
 smesh.SetName(Mesh_1.GetMesh(), 'Mesh_1')
index ce9aa6805295a5858864a99da8f4d88088d7362c..21e0f2c1ded4656d01f5ed361992d0d4bafc7264 100644 (file)
@@ -193,7 +193,7 @@ visHex80 = smesh.CopyMesh( coupe_vis_1, 'visHex80', 1, 0)
 [ tige_2, section_2, tige_haute_2, rond_2, tete_2, section_tete_2, conge_2, appui_2, p_imp_2, tige_rotated, tige_top, section_rotated, section_top, tige_haute_rotated, tige_haute_top, rond_rotated, rond_top, tete_rotated, tete_top, section_tete_rotated, section_tete_top, conge_rotated, conge_top, appui_rotated, appui_top, p_imp_rotated, p_imp_top ] = visHex80.GetGroups()
 Sub_mesh_1 = Regular_1D_1.GetSubMesh()
 Sub_mesh_2 = Regular_1D_2.GetSubMesh()
-visHex80.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests/visSain.med"), 0, SMESH.MED_V2_2, 1 )
+visHex80.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/visSain.med"))
  
 
 ## Set names of Mesh objects
index 8bd4294a43f227956052d68eae8a7f671ad29dcd..46c804aa5360af46d6e044d9b466345e9b7dc415 100644 (file)
@@ -210,7 +210,7 @@ class PluginDialog(QDialog):
         name. This returns the filename.
         '''
         filename=str("/tmp/padder_inputfile_"+meshName+".med")
-        meshObject.ExportToMEDX( filename, 0, SMESH.MED_V2_2, 1, 1 )
+        meshObject.ExportToMEDX( filename, 0, 1, 1 )
         return filename
 
     def clear(self):