From 51760fb76f57da9ab446585e6f87b101679c58cb Mon Sep 17 00:00:00 2001 From: Paul RASCLE Date: Mon, 25 Sep 2017 18:23:37 +0200 Subject: [PATCH] choice of MED format, minor version, for backward compatibility --- idl/SMESH_Mesh.idl | 23 +++- src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx | 33 ++++- src/MEDWrapper/Base/MED_Common.hxx | 6 +- src/MEDWrapper/Factory/MED_Factory.cxx | 46 +++---- src/MEDWrapper/Factory/MED_Factory.hxx | 3 +- src/MEDWrapper/V2_2/MED_V2_2_Wrapper.cxx | 133 +++++++++++---------- src/MEDWrapper/V2_2/MED_V2_2_Wrapper.hxx | 3 +- src/SMESH/SMESH_Mesh.cxx | 1 + src/SMESHGUI/SMESHGUI.cxx | 15 ++- src/SMESH_I/SMESH_DumpPython.cxx | 11 ++ src/SMESH_I/SMESH_Gen_i.cxx | 15 ++- src/SMESH_I/SMESH_Mesh_i.cxx | 5 +- src/SMESH_SWIG/smeshBuilder.py | 26 ++-- 13 files changed, 209 insertions(+), 111 deletions(-) diff --git a/idl/SMESH_Mesh.idl b/idl/SMESH_Mesh.idl index f3feeaea3..74619a175 100644 --- a/idl/SMESH_Mesh.idl +++ b/idl/SMESH_Mesh.idl @@ -238,11 +238,28 @@ module SMESH /*! * Enumeration for ExportToMED*() + * MED_V2_1 and MED_V2_2 are here for compatibility and mean respectively obsolete and MED_LATEST. + * MED_MINOR_0 to MED_MINOR_9 are use to specify the minor version used by MEDfichier + * to write MED files (major version cannot be changed). + * This allows backward compatibility from a newer version of SALOME to an older one: + * for instance, a MESH produced in SALOME 8.4 (med 3.3) can be written in med 3.2 format + * to be read in SALOME 8.3. */ enum MED_VERSION { MED_V2_1, - MED_V2_2 + MED_V2_2, + MED_LATEST, + MED_MINOR_0, + MED_MINOR_1, + MED_MINOR_2, + MED_MINOR_3, + MED_MINOR_4, + MED_MINOR_5, + MED_MINOR_6, + MED_MINOR_7, + MED_MINOR_8, + MED_MINOR_9 }; /*! @@ -686,8 +703,8 @@ module SMESH 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 + * Export Mesh to MED_LATEST MED format + * Works, just the same as ExportToMEDX with MED_VERSION parameter equal to MED_LATEST * and overwrite parameter equal to true * The method is kept in order to support old functionality */ diff --git a/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx b/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx index b4f49a216..82722c15f 100644 --- a/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx +++ b/src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx @@ -70,6 +70,7 @@ void DriverMED_W_SMESHDS_Mesh::SetFile(const std::string& theFileName, { Driver_SMESHDS_Mesh::SetFile(theFileName); myMedVersion = theId; + //MESSAGE("myMedVersion:"<(majeur, mineur, release); -// else - MED::GetVersionRelease(majeur, mineur, release); + MED::GetVersionRelease(majeur, mineur, release); + TInt imposedMineur = mineur; + switch( theVersion ) { + case MED::eV2_1 : + case MED::eV2_2 : + case MED::eLATEST : break; + case MED::eMINOR_0 : imposedMineur = 0; break; + case MED::eMINOR_1 : imposedMineur = 1; break; + case MED::eMINOR_2 : imposedMineur = 2; break; + case MED::eMINOR_3 : imposedMineur = 3; break; + case MED::eMINOR_4 : imposedMineur = 4; break; + case MED::eMINOR_5 : imposedMineur = 5; break; + case MED::eMINOR_6 : imposedMineur = 6; break; + case MED::eMINOR_7 : imposedMineur = 7; break; + case MED::eMINOR_8 : imposedMineur = 8; break; + case MED::eMINOR_9 : imposedMineur = 9; break; + case MED::eVUnknown : imposedMineur = mineur; break; + } + if (imposedMineur > mineur) + imposedMineur = mineur; ostringstream name; if ( theNbDigits > 0 ) name << majeur; if ( theNbDigits > 1 ) - name << "." << mineur; + name << "." << imposedMineur; if ( theNbDigits > 2 ) name << "." << release; return name.str(); @@ -456,7 +477,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform() break; } } - + //MESSAGE("myMedVersion:"<CrMeshInfo(aMeshDimension,aSpaceDimension,aMeshName); //MESSAGE("Add - aMeshName : "<GetName()); diff --git a/src/MEDWrapper/Base/MED_Common.hxx b/src/MEDWrapper/Base/MED_Common.hxx index 8030d84bd..00eb32bdf 100644 --- a/src/MEDWrapper/Base/MED_Common.hxx +++ b/src/MEDWrapper/Base/MED_Common.hxx @@ -44,8 +44,10 @@ #endif namespace MED{ - - enum EVersion {eVUnknown = -1, eV2_1, eV2_2}; + // enum EVersion sould be synchronized with enum MED_VERSION in SMESH_Mesh.idl (.hh) + // i.e. same positive values! + enum EVersion {eVUnknown = -1, eV2_1, eV2_2, eLATEST, + eMINOR_0, eMINOR_1, eMINOR_2, eMINOR_3, eMINOR_4, eMINOR_5, eMINOR_6, eMINOR_7, eMINOR_8, eMINOR_9}; typedef enum {eFAUX, eVRAI} EBooleen ; typedef double TFloat; diff --git a/src/MEDWrapper/Factory/MED_Factory.cxx b/src/MEDWrapper/Factory/MED_Factory.cxx index 49d47fad5..6c1d9909b 100644 --- a/src/MEDWrapper/Factory/MED_Factory.cxx +++ b/src/MEDWrapper/Factory/MED_Factory.cxx @@ -23,7 +23,6 @@ #include "MED_Factory.hxx" #include "MED_Utilities.hxx" #include "MED_V2_2_Wrapper.hxx" - #include #include #include @@ -90,6 +89,7 @@ namespace MED if(aMajor == 2 && aMinor == 1) aVersion = eV2_1; else + // TODO: check major is not superior to library and switch on minor aVersion = eV2_2; } else { @@ -124,20 +124,19 @@ namespace MED } PWrapper CrWrapper(const std::string& theFileName, - bool theDoPreCheckInSeparateProcess) + bool theDoPreCheckInSeparateProcess, + int theMinor) { PWrapper aWrapper; + if (theMinor <0) + theMinor = MED_MINOR_NUM; EVersion aVersion = GetVersionId(theFileName,theDoPreCheckInSeparateProcess); switch(aVersion){ - case eV2_2: - aWrapper.reset(new MED::V2_2::TVWrapper(theFileName)); - break; case eV2_1: EXCEPTION(std::runtime_error,"Cannot open file '"< #include +#include #ifdef _DEBUG_ static int MYDEBUG = 0; @@ -99,11 +100,14 @@ namespace MED TFile(const TFile&); public: - TFile(const std::string& theFileName): + TFile(const std::string& theFileName, TInt theMinor=-1): myCount(0), myFid(0), - myFileName(theFileName) - {} + myFileName(theFileName), + myMinor(theMinor) + { + if ((myMinor < 0) || (myMinor > MED_MINOR_NUM)) myMinor = MED_MINOR_NUM; + } ~TFile() { @@ -115,12 +119,12 @@ namespace MED { if(myCount++ == 0){ const char* aFileName = myFileName.c_str(); - myFid = MEDfileOpen(aFileName,med_access_mode(theMode)); + myFid = MEDfileVersionOpen(aFileName,med_access_mode(theMode), MED_MAJOR_NUM, myMinor, MED_RELEASE_NUM); } if(theErr) *theErr = TErr(myFid); else if(myFid < 0) - EXCEPTION(std::runtime_error,"TFile - MEDfileOpen('"<Open(theMode,theErr); } @@ -163,15 +171,12 @@ namespace MED //--------------------------------------------------------------- - TVWrapper::TVWrapper(const std::string& theFileName): - myFile(new TFile(theFileName)) + TVWrapper::TVWrapper(const std::string& theFileName, TInt theMinor): + myMinor(theMinor), + myFile(new TFile(theFileName, theMinor)) { TErr aRet; myFile->Open( eLECTURE_ECRITURE, &aRet ); - // if(aRet < 0) - // myFile->Close(); - // myFile->Open( eLECTURE_AJOUT, &aRet ); - // } if(aRet < 0) { myFile->Close(); myFile->Open( eLECTURE, &aRet ); @@ -188,7 +193,7 @@ namespace MED TVWrapper ::GetNbMeshes(TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return -1; @@ -204,7 +209,7 @@ namespace MED MED::TMeshInfo& theInfo, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -247,7 +252,7 @@ namespace MED EModeAcces theMode, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,theMode,theErr); + TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -316,7 +321,7 @@ namespace MED ::GetNbFamilies(const MED::TMeshInfo& theInfo, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return -1; @@ -334,7 +339,7 @@ namespace MED const MED::TMeshInfo& theInfo, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return -1; @@ -354,7 +359,7 @@ namespace MED const MED::TMeshInfo& theInfo, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return -1; @@ -374,7 +379,7 @@ namespace MED MED::TFamilyInfo& theInfo, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -417,7 +422,7 @@ namespace MED EModeAcces theMode, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,theMode,theErr); + TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -476,7 +481,7 @@ namespace MED EGeometrieElement theGeom, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -514,7 +519,7 @@ namespace MED EGeometrieElement theGeom, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -552,7 +557,7 @@ namespace MED EGeometrieElement theGeom, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -613,7 +618,7 @@ namespace MED EGeometrieElement theGeom, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,theMode,theErr); + TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -669,7 +674,7 @@ namespace MED EGeometrieElement theGeom, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,theMode,theErr); + TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -723,7 +728,7 @@ namespace MED EGeometrieElement theGeom, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,theMode,theErr); + TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -761,7 +766,7 @@ namespace MED ETable theTable, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return -1; @@ -790,7 +795,7 @@ namespace MED ::GetNodeInfo(MED::TNodeInfo& theInfo, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -867,7 +872,7 @@ namespace MED EModeAcces theMode, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,theMode,theErr); + TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -953,7 +958,7 @@ namespace MED ::GetPolygoneInfo(MED::TPolygoneInfo& theInfo, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -1012,7 +1017,7 @@ namespace MED EModeAcces theMode, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,theMode,theErr); + TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -1071,7 +1076,7 @@ namespace MED EConnectivite theConnMode, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return 0; @@ -1105,7 +1110,7 @@ namespace MED ::GetPolyedreInfo(TPolyedreInfo& theInfo, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -1168,7 +1173,7 @@ namespace MED EModeAcces theMode, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,theMode,theErr); + TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -1272,7 +1277,7 @@ namespace MED EConnectivite theConnMode, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) EXCEPTION(std::runtime_error,"GetPolyedreConnSize - (...)"); @@ -1321,7 +1326,7 @@ namespace MED { TEntityInfo anInfo; - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return anInfo; @@ -1431,7 +1436,7 @@ namespace MED EConnectivite theConnMode, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return -1; @@ -1478,7 +1483,7 @@ namespace MED //---------------------------------------------------------------------------- void TVWrapper::GetCellInfo(MED::TCellInfo& theInfo, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -1537,7 +1542,7 @@ namespace MED EModeAcces theMode, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,theMode,theErr); + TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -1618,7 +1623,8 @@ namespace MED //! Read geom type of MED_BALL structural element EGeometrieElement TVWrapper::GetBallGeom(const TMeshInfo& theMeshInfo) { - TFileWrapper aFileWrapper(myFile,eLECTURE); + TErr anError; + TFileWrapper aFileWrapper(myFile, eLECTURE, &anError, myMinor); // read med_geometry_type of "MED_BALL" element char geotypename[ MED_NAME_SIZE + 1] = MED_BALL_NAME; @@ -1629,7 +1635,8 @@ namespace MED //! Read number of balls in the Mesh TInt TVWrapper::GetNbBalls(const TMeshInfo& theMeshInfo) { - TFileWrapper aFileWrapper(myFile,eLECTURE); + TErr anError; + TFileWrapper aFileWrapper(myFile, eLECTURE, &anError, myMinor); EGeometrieElement ballType = GetBallGeom( theMeshInfo ); if ( ballType < 0 ) @@ -1642,7 +1649,7 @@ namespace MED //! Read a MEDWrapped representation of MED_BALL from the MED file void TVWrapper::GetBallInfo(TBallInfo& theInfo, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); // check geometry of MED_BALL if ( theInfo.myGeom == eBALL ) @@ -1681,7 +1688,7 @@ namespace MED //! Write a MEDWrapped representation of MED_BALL to the MED file void TVWrapper::SetBallInfo(const TBallInfo& theInfo, EModeAcces theMode, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,theMode,theErr); + TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor); TErr ret; char ballsupportname[MED_NAME_SIZE+1]="BALL_SUPPORT_MESH"; @@ -1769,7 +1776,7 @@ namespace MED TVWrapper ::GetNbFields(TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return -1; @@ -1784,7 +1791,7 @@ namespace MED ::GetNbComp(TInt theFieldId, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return -1; @@ -1800,7 +1807,7 @@ namespace MED MED::TFieldInfo& theInfo, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -1850,7 +1857,7 @@ namespace MED EModeAcces theMode, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,theMode,theErr); + TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -1902,7 +1909,7 @@ namespace MED TVWrapper ::GetNbGauss(TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return -1; @@ -1917,7 +1924,7 @@ namespace MED ::GetGaussPreInfo(TInt theId, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return TGaussInfo::TInfo( TGaussInfo::TKey(ePOINT1,""),0 ); @@ -1958,7 +1965,7 @@ namespace MED TGaussInfo& theInfo, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -1989,7 +1996,7 @@ namespace MED TVWrapper ::GetNbProfiles(TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return -1; @@ -2002,7 +2009,7 @@ namespace MED ::GetProfilePreInfo(TInt theId, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return TProfileInfo::TInfo(); @@ -2029,7 +2036,7 @@ namespace MED TProfileInfo& theInfo, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -2054,7 +2061,7 @@ namespace MED EModeAcces theMode, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,theMode,theErr); + TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -2102,7 +2109,7 @@ namespace MED TErr* theErr) { theEntity = EEntiteMaillage(-1); - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr){ if(theEntityInfo.empty()) @@ -2225,7 +2232,7 @@ namespace MED MED::TTimeStampInfo& theInfo, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); const TGeom2Size& aGeom2Size = theInfo.myGeom2Size; @@ -2320,7 +2327,7 @@ namespace MED const TKey2Gauss& theKey2Gauss, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -2488,7 +2495,7 @@ namespace MED EModeAcces theMode, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,theMode,theErr); + TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -2598,7 +2605,7 @@ namespace MED { if(theInfo.myMeshInfo->myType != eSTRUCTURE) return; - TFileWrapper aFileWrapper(myFile,theMode,theErr); + TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -2675,7 +2682,7 @@ namespace MED ::GetGrilleInfo(TGrilleInfo& theInfo, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return; @@ -2831,7 +2838,7 @@ namespace MED EGrilleType& theGridType, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) EXCEPTION(std::runtime_error," GetGrilleType - aFileWrapper (...)"); @@ -2856,7 +2863,7 @@ namespace MED TIntVector& theStruct, TErr* theErr) { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); + TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor); if(theErr && *theErr < 0) return; diff --git a/src/MEDWrapper/V2_2/MED_V2_2_Wrapper.hxx b/src/MEDWrapper/V2_2/MED_V2_2_Wrapper.hxx index a06e1c15c..45f9a14a5 100644 --- a/src/MEDWrapper/V2_2/MED_V2_2_Wrapper.hxx +++ b/src/MEDWrapper/V2_2/MED_V2_2_Wrapper.hxx @@ -91,7 +91,7 @@ namespace MED TVWrapper& operator=(const TVWrapper&); public: - TVWrapper(const std::string& theFileName); + TVWrapper(const std::string& theFileName, TInt theMinor=-1); //---------------------------------------------------------------------------- virtual @@ -482,6 +482,7 @@ namespace MED protected: PFile myFile; + TInt myMinor; }; } } diff --git a/src/SMESH/SMESH_Mesh.cxx b/src/SMESH/SMESH_Mesh.cxx index 76987e5b1..7de8ef36f 100644 --- a/src/SMESH/SMESH_Mesh.cxx +++ b/src/SMESH/SMESH_Mesh.cxx @@ -1402,6 +1402,7 @@ void SMESH_Mesh::ExportMED(const char * file, bool theAllElemsToGroup) throw(SALOME_Exception) { + //MESSAGE("MED_VERSION:"<< theVersion); SMESH_TRY; DriverMED_W_SMESHDS_Mesh myWriter; diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index e92c78093..b584a345d 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -143,6 +143,7 @@ #include CORBA_CLIENT_HEADER(SALOMEDS_Attributes) #include CORBA_CLIENT_HEADER(SMESH_MeshEditor) #include CORBA_CLIENT_HEADER(SMESH_Measurements) +#include CORBA_CLIENT_HEADER(SMESH_Mesh) // Qt includes // #define INCLUDE_MENUITEM_DEF // VSR commented ???????? @@ -653,7 +654,7 @@ namespace // Get parameters of export operation QString aFilename; - SMESH::MED_VERSION aFormat = SMESH::MED_V2_2; + SMESH::MED_VERSION aFormat = SMESH::MED_LATEST; // Init the parameters with the default values bool aIsASCII_STL = true; bool toCreateGroups = false; @@ -741,11 +742,17 @@ namespace else if ( isMED || isSAUV ) // Export to MED or SAUV { QMap aFilterMap; - //QString v21 (aMesh->GetVersionString(SMESH::MED_V2_1, 2)); 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 ); + int minor = v22.split(".").last().toInt(); + int vv= int(SMESH::MED_MINOR_0); // add all minor from 0 to current + for (int ii=0; iiGetVersionString(SMESH::MED_VERSION(vv), 2); + aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( vs ) + " (*.med)", SMESH::MED_VERSION(vv)); + vv = vv +1; + } } else { // isSAUV aFilterMap.insert("All files (*)", SMESH::MED_V2_1 ); @@ -826,7 +833,7 @@ namespace } if( !toOverwrite ) { // can't append to an existing using other format - SMESH::MED_VERSION aVersion = SMESH::MED_V2_1; + SMESH::MED_VERSION aVersion = aFormat; //SMESH::MED_V2_1; bool isVersionOk = SMESHGUI::GetSMESHGen()->GetMEDVersion( aFilename.toUtf8().constData(), aVersion ); if( !isVersionOk || aVersion != aFormat ) { int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(), diff --git a/src/SMESH_I/SMESH_DumpPython.cxx b/src/SMESH_I/SMESH_DumpPython.cxx index 6298cb099..19c46da07 100644 --- a/src/SMESH_I/SMESH_DumpPython.cxx +++ b/src/SMESH_I/SMESH_DumpPython.cxx @@ -495,6 +495,17 @@ namespace SMESH switch (theVersion) { case SMESH::MED_V2_1: myStream << "SMESH.MED_V2_1"; break; case SMESH::MED_V2_2: myStream << "SMESH.MED_V2_2"; break; + case SMESH::MED_LATEST: myStream << "SMESH.MED_LATEST"; break; + case SMESH::MED_MINOR_0: myStream << "SMESH.MED_MINOR_0"; break; + case SMESH::MED_MINOR_1: myStream << "SMESH.MED_MINOR_1"; break; + case SMESH::MED_MINOR_2: myStream << "SMESH.MED_MINOR_2"; break; + case SMESH::MED_MINOR_3: myStream << "SMESH.MED_MINOR_3"; break; + case SMESH::MED_MINOR_4: myStream << "SMESH.MED_MINOR_4"; break; + case SMESH::MED_MINOR_5: myStream << "SMESH.MED_MINOR_5"; break; + case SMESH::MED_MINOR_6: myStream << "SMESH.MED_MINOR_6"; break; + case SMESH::MED_MINOR_7: myStream << "SMESH.MED_MINOR_7"; break; + case SMESH::MED_MINOR_8: myStream << "SMESH.MED_MINOR_8"; break; + case SMESH::MED_MINOR_9: myStream << "SMESH.MED_MINOR_9"; break; default: myStream << theVersion; } return *this; diff --git a/src/SMESH_I/SMESH_Gen_i.cxx b/src/SMESH_I/SMESH_Gen_i.cxx index 916a1f222..ec2a92572 100644 --- a/src/SMESH_I/SMESH_Gen_i.cxx +++ b/src/SMESH_I/SMESH_Gen_i.cxx @@ -2968,8 +2968,19 @@ CORBA::Boolean SMESH_Gen_i::GetMEDVersion(const char* theFileName, theVersion = SMESH::MED_V2_1; MED::EVersion aVersion = MED::GetVersionId( theFileName ); switch( aVersion ) { - case MED::eV2_1 : theVersion = SMESH::MED_V2_1; return true; - case MED::eV2_2 : theVersion = SMESH::MED_V2_2; return true; + case MED::eV2_1 : theVersion = SMESH::MED_V2_1; return true; + case MED::eV2_2 : theVersion = SMESH::MED_V2_2; return true; + case MED::eLATEST : theVersion = SMESH::MED_LATEST; return true; + case MED::eMINOR_0 : theVersion = SMESH::MED_MINOR_0; return true; + case MED::eMINOR_1 : theVersion = SMESH::MED_MINOR_1; return true; + case MED::eMINOR_2 : theVersion = SMESH::MED_MINOR_2; return true; + case MED::eMINOR_3 : theVersion = SMESH::MED_MINOR_3; return true; + case MED::eMINOR_4 : theVersion = SMESH::MED_MINOR_4; return true; + case MED::eMINOR_5 : theVersion = SMESH::MED_MINOR_5; return true; + case MED::eMINOR_6 : theVersion = SMESH::MED_MINOR_6; return true; + case MED::eMINOR_7 : theVersion = SMESH::MED_MINOR_7; return true; + case MED::eMINOR_8 : theVersion = SMESH::MED_MINOR_8; return true; + case MED::eMINOR_9 : theVersion = SMESH::MED_MINOR_9; return true; case MED::eVUnknown : return false; } return false; diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index 163446233..c4393b108 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -3022,6 +3022,7 @@ void SMESH_Mesh_i::ExportToMEDX (const char* file, CORBA::Boolean autoDimension) throw(SALOME::SALOME_Exception) { + //MESSAGE("SMESH::MED_VERSION:"<< theVersion); SMESH_TRY; if ( _preMeshInfo ) _preMeshInfo->FullLoadFromFile(); @@ -3048,6 +3049,7 @@ void SMESH_Mesh_i::ExportToMED (const char* file, SMESH::MED_VERSION theVersion) throw(SALOME::SALOME_Exception) { + //MESSAGE("SMESH::MED_VERSION:"<< theVersion); ExportToMEDX(file,auto_groups,theVersion,true); } @@ -3061,7 +3063,8 @@ 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); + //MESSAGE("SMESH::MED_VERSION:"<< SMESH::MED_LATEST); + ExportToMEDX(file,auto_groups,SMESH::MED_LATEST,true); } //================================================================================ diff --git a/src/SMESH_SWIG/smeshBuilder.py b/src/SMESH_SWIG/smeshBuilder.py index 11ba7dcf7..f2bbcaccc 100644 --- a/src/SMESH_SWIG/smeshBuilder.py +++ b/src/SMESH_SWIG/smeshBuilder.py @@ -1793,9 +1793,14 @@ class Mesh: # @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 version MED format version + # - MED_V2_1 is obsolete. + # - MED_V2_2 means current version (kept for compatibility reasons) + # - MED_LATEST means current version. + # - MED_MINOR_x where x from 0 to 9 indicates the minor version of MED + # to use for writing MED files, for backward compatibility : + # for instance, with SALOME 8.4 use MED 3.2 (minor=2) instead of 3.3, + # to allow the file to be read with SALOME 8.3. # @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,7 +1816,7 @@ 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, + def ExportMED(self, f, auto_groups=0, version=MED_LATEST, overwrite=1, meshPart=None, autoDimension=True, fields=[], geomAssocFields=''): if meshPart or fields or geomAssocFields: unRegister = genObjUnRegister() @@ -1915,9 +1920,14 @@ 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 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 version MED format version: + # - MED_V2_1 is obsolete. + # - MED_V2_2 means current version (kept for compatibility reasons) + # - MED_LATEST means current version. + # - MED_MINOR_x where x from 0 to 9 indicates the minor version of MED + # to use for writing MED files, for backward compatibility : + # for instance, with SALOME 8.4 use MED 3.2 (minor=2) instead of 3.3, + # to allow the file to be read with SALOME 8.3. # @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 @@ -1927,7 +1937,7 @@ class Mesh: # - 3D in the rest cases.
# 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): + def ExportToMED(self, f, version=MED_LATEST, opt=0, overwrite=1, autoDimension=True): self.mesh.ExportToMEDX(f, opt, version, overwrite, autoDimension) # Operations with groups: -- 2.30.2