From e3131a79806b88d3acdf4cb845c2e899fcdb0d6c Mon Sep 17 00:00:00 2001 From: vsr Date: Wed, 15 Feb 2017 17:22:07 +0300 Subject: [PATCH] 0021803: EDF 2351 : Available versions of MED in TUI function ExportMED aren't consistent with GUI behavior Step 4: Refactor MEDWrapper --- src/MEDWrapper/CMakeLists.txt | 6 +- src/MEDWrapper/MED_Algorithm.cxx | 83 +- src/MEDWrapper/MED_Algorithm.hxx | 22 +- src/MEDWrapper/MED_Common.cxx | 121 + src/MEDWrapper/MED_Common.hxx | 107 +- src/MEDWrapper/MED_CoordUtils.cxx | 45 +- src/MEDWrapper/MED_CoordUtils.hxx | 8 +- src/MEDWrapper/MED_Factory.cxx | 10 +- src/MEDWrapper/MED_Factory.hxx | 4 +- src/MEDWrapper/MED_GaussDef.cxx | 36 +- src/MEDWrapper/MED_GaussDef.hxx | 4 +- src/MEDWrapper/MED_GaussUtils.cxx | 119 +- src/MEDWrapper/MED_GaussUtils.hxx | 22 +- src/MEDWrapper/MED_SharedPtr.hxx | 24 +- src/MEDWrapper/MED_SliceArray.hxx | 41 +- src/MEDWrapper/MED_Structures.cxx | 1376 +++++---- src/MEDWrapper/MED_Structures.hxx | 298 +- src/MEDWrapper/MED_TWrapper.hxx | 581 ---- src/MEDWrapper/MED_Utilities.cxx | 45 +- src/MEDWrapper/MED_Utilities.hxx | 4 +- src/MEDWrapper/MED_V2_2_Wrapper.cxx | 2834 ------------------ src/MEDWrapper/MED_V2_2_Wrapper.hxx | 443 --- src/MEDWrapper/MED_Vector.hxx | 10 +- src/MEDWrapper/MED_Wrapper.cxx | 3970 +++++++++++++++++++++++-- src/MEDWrapper/MED_Wrapper.hxx | 1060 ++++--- src/SMESHGUI/SMESHGUI_FileInfoDlg.cxx | 2 - 26 files changed, 5377 insertions(+), 5898 deletions(-) create mode 100644 src/MEDWrapper/MED_Common.cxx delete mode 100644 src/MEDWrapper/MED_TWrapper.hxx delete mode 100644 src/MEDWrapper/MED_V2_2_Wrapper.cxx delete mode 100644 src/MEDWrapper/MED_V2_2_Wrapper.hxx diff --git a/src/MEDWrapper/CMakeLists.txt b/src/MEDWrapper/CMakeLists.txt index b08ed4188..4e3bca1ed 100644 --- a/src/MEDWrapper/CMakeLists.txt +++ b/src/MEDWrapper/CMakeLists.txt @@ -52,9 +52,7 @@ SET(MEDWrapper_HEADERS MED_SliceArray.hxx MED_Structures.hxx MED_TStructures.hxx - MED_TWrapper.hxx MED_Utilities.hxx - MED_V2_2_Wrapper.hxx MED_Vector.hxx MED_Wrapper.hxx MED_WrapperDef.hxx @@ -65,18 +63,18 @@ SET(MEDWrapper_HEADERS # sources / static SET(MEDWrapper_SOURCES MED_Algorithm.cxx + MED_Common.cxx MED_CoordUtils.cxx MED_Factory.cxx MED_GaussDef.cxx MED_GaussUtils.cxx MED_Structures.cxx MED_Utilities.cxx - MED_V2_2_Wrapper.cxx MED_Wrapper.cxx ) # --- rules --- - + ADD_LIBRARY(MEDWrapper ${MEDWrapper_SOURCES}) TARGET_LINK_LIBRARIES(MEDWrapper ${_link_LIBRARIES}) INSTALL(TARGETS MEDWrapper EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) diff --git a/src/MEDWrapper/MED_Algorithm.cxx b/src/MEDWrapper/MED_Algorithm.cxx index 1e2ba3ce9..e48654aa2 100644 --- a/src/MEDWrapper/MED_Algorithm.cxx +++ b/src/MEDWrapper/MED_Algorithm.cxx @@ -23,20 +23,20 @@ #include "MED_Algorithm.hxx" #include "MED_Wrapper.hxx" #include "MED_Utilities.hxx" - + #ifdef _DEBUG_ static int MYDEBUG = 0; static int MYVALUEDEBUG = 0; #else -// static int MYDEBUG = 0; -// static int MYVALUEDEBUG = 0; +static int MYDEBUG = 0; +static int MYVALUEDEBUG = 0; #endif namespace MED { //--------------------------------------------------------------- - TEntity2TGeom2ElemInfo - GetEntity2TGeom2ElemInfo(const PWrapper& theWrapper, + TEntity2TGeom2ElemInfo + GetEntity2TGeom2ElemInfo(const PWrapper& theWrapper, const PMeshInfo& theMeshInfo, const MED::TEntityInfo& theEntityInfo) { @@ -64,8 +64,7 @@ namespace MED ADDMSG(MYDEBUG,"\n"); return anEntity2TGeom2ElemInfo; } - - + //--------------------------------------------------------------- TFamilyInfoSet GetFamilyInfoSet(const PWrapper& theWrapper, @@ -85,7 +84,6 @@ namespace MED return aFamilyInfoSet; } - //--------------------------------------------------------------- TGroupInfo GetGroupInfo(const TFamilyInfoSet& theFamilyInfoSet) @@ -98,7 +96,7 @@ namespace MED TInt aNbGroup = aFamilyInfo->GetNbGroup(); for(TInt iGroup = 0; iGroup < aNbGroup; iGroup++){ aGroup[aFamilyInfo->GetGroupName(iGroup)].insert(aFamilyInfo); - } + } } #ifdef _DEBUG_ @@ -121,10 +119,9 @@ namespace MED return aGroup; } - //--------------------------------------------------------------- - TFieldInfo2TimeStampInfoSet - GetFieldInfo2TimeStampInfoSet(const PWrapper& theWrapper, + TFieldInfo2TimeStampInfoSet + GetFieldInfo2TimeStampInfoSet(const PWrapper& theWrapper, const PMeshInfo& theMeshInfo, const MED::TEntityInfo& theEntityInfo) { @@ -141,7 +138,7 @@ namespace MED TInt aNbTimeStamps = theWrapper->GetNbTimeStamps(aFieldInfo,theEntityInfo,anEntity,aGeom2Size); ADDMSG(MYDEBUG,"anEntity = "<GetPTimeStampInfo(aFieldInfo,anEntity,aGeom2Size,iTimeStamp); aFieldInfo2TimeStampInfoSet[aFieldInfo].insert(aTimeStamp); INITMSG(MYDEBUG, @@ -152,10 +149,9 @@ namespace MED ADDMSG(MYDEBUG,"\n"); return aFieldInfo2TimeStampInfoSet; } - //--------------------------------------------------------------- - TEntite2TFieldInfo2TimeStampInfoSet + TEntite2TFieldInfo2TimeStampInfoSet GetEntite2TFieldInfo2TimeStampInfoSet(const TFieldInfo2TimeStampInfoSet& theFieldInfo2TimeStampInfoSet) { TEntite2TFieldInfo2TimeStampInfoSet anEntite2TFieldInfo2TimeStampInfoSet; @@ -163,14 +159,13 @@ namespace MED for(; anIter != theFieldInfo2TimeStampInfoSet.end(); anIter++){ const TTimeStampInfoSet& aTimeStampInfoSet = anIter->second; //const PFieldInfo& aFieldInfo = anIter->first; - if(aTimeStampInfoSet.empty()) + if(aTimeStampInfoSet.empty()) continue; const PTimeStampInfo& aTimeStampInfo = *aTimeStampInfoSet.begin(); anEntite2TFieldInfo2TimeStampInfoSet[ConvertEntity(aTimeStampInfo->GetEntity())].insert(*anIter); } return anEntite2TFieldInfo2TimeStampInfoSet; } - //--------------------------------------------------------------- bool @@ -181,16 +176,15 @@ namespace MED return aLeftInfo->GetId() < aRightInfo->GetId(); } - //--------------------------------------------------------------- - TEntity2FamilySet - GetEntity2FamilySet(const PWrapper& theWrapper, + TEntity2FamilySet + GetEntity2FamilySet(const PWrapper& theWrapper, const TEntity2TGeom2ElemInfo& theEntity2TGeom2ElemInfo, const TFamilyInfoSet& theFamilyInfoSet) { MSG(MYDEBUG,"GetFamiliesByEntity(...)"); TEntity2FamilySet anEntity2FamilySet; - + typedef std::map TId2Family; TId2Family anId2Family; TFamilyInfoSet::const_iterator anIter = theFamilyInfoSet.begin(); @@ -198,12 +192,12 @@ namespace MED const PFamilyInfo& aFamilyInfo = *anIter; anId2Family.insert(TId2Family::value_type(aFamilyInfo->GetId(),aFamilyInfo)); } - + if(!anId2Family.empty()){ typedef std::map TFamilyID2Size; typedef std::map TEntity2FamilyID; TEntity2FamilyID anEntity2FamilyID; - + if(!theEntity2TGeom2ElemInfo.empty()){ TEntity2TGeom2ElemInfo::const_iterator anIter = theEntity2TGeom2ElemInfo.begin(); for(; anIter != theEntity2TGeom2ElemInfo.end(); anIter++){ @@ -221,7 +215,7 @@ namespace MED } } } - + if(!anEntity2FamilyID.empty()){ TEntity2FamilyID::const_iterator anIter = anEntity2FamilyID.begin(); for(; anIter != anEntity2FamilyID.end(); anIter++){ @@ -243,15 +237,14 @@ namespace MED } } } - } + } ADDMSG(MYDEBUG,"\n"); return anEntity2FamilySet; } - //--------------------------------------------------------------- TKey2Gauss - GetKey2Gauss(const PWrapper& theWrapper, + GetKey2Gauss(const PWrapper& theWrapper, TErr* theErr, EModeSwitch theMode) { @@ -278,10 +271,9 @@ namespace MED return aKey2Gauss; } - //--------------------------------------------------------------- PProfileInfo - GetProfileInfo(const PWrapper& theWrapper, + GetProfileInfo(const PWrapper& theWrapper, const std::string& theProfileName, TErr* theErr, EModeProfil theMode) @@ -296,11 +288,10 @@ namespace MED } return anInfo; } - //--------------------------------------------------------------- TMKey2Profile - GetMKey2Profile(const PWrapper& theWrapper, + GetMKey2Profile(const PWrapper& theWrapper, TErr* theErr, EModeProfil theMode) { @@ -312,7 +303,7 @@ namespace MED PProfileInfo anInfo = theWrapper->GetPProfileInfo(anId,theMode,theErr); const std::string& aName = boost::get<0>(aPreInfo); aKey2Profile[aName] = anInfo; - + #ifdef _DEBUG_ INITMSG(MYDEBUG, "- aName = '"<myFamNumNode).begin(); for(;aNodeFamIter != (theInfo->myFamNumNode).end(); aNodeFamIter++){ if(theId == *aNodeFamIter) @@ -346,8 +339,10 @@ namespace MED return EEntiteMaillage(-1); } + //--------------------------------------------------------------- TFamilyID2NbCells - GetFamilyID2NbCells(PGrilleInfo& theInfo){ + GetFamilyID2NbCells(PGrilleInfo& theInfo) + { TFamilyID2NbCells aFamily2NbCells; TInt aNbNodes = theInfo->myFamNumNode.size(); TInt aNbCells = theInfo->myFamNum.size(); @@ -358,17 +353,21 @@ namespace MED return aFamily2NbCells; } - EEntiteMaillage ConvertEntity(const EEntiteMaillage& aEntity){ + //--------------------------------------------------------------- + EEntiteMaillage + ConvertEntity(const EEntiteMaillage& aEntity) + { switch( aEntity ){ - case eNOEUD_ELEMENT: - case eMAILLE: return eMAILLE; //eNOEUD_ELEMENT it is eMAILLE - + case eMAILLE: + return eMAILLE; // eNOEUD_ELEMENT is eMAILLE case eFACE: case eARETE: - case eNOEUD: return aEntity; break; - default: return EEntiteMaillage(-1); - + case eNOEUD: + return aEntity; + default: + break; } + return EEntiteMaillage(-1); } } diff --git a/src/MEDWrapper/MED_Algorithm.hxx b/src/MEDWrapper/MED_Algorithm.hxx index 80cb8bc77..0ecadad6b 100644 --- a/src/MEDWrapper/MED_Algorithm.hxx +++ b/src/MEDWrapper/MED_Algorithm.hxx @@ -26,6 +26,8 @@ #include "MED_WrapperDef.hxx" #include "MED_Structures.hxx" +#include + #include #include @@ -46,12 +48,12 @@ namespace MED typedef std::map TKey2Profile; typedef boost::tuple TMKey2Profile; typedef std::map TFamilyID2NbCells; - + //--------------------------------------------------------------- //! Get set of TElemInfo by its geometrical type and corresponding MED ENTITY MEDWRAPPER_EXPORT TEntity2TGeom2ElemInfo - GetEntity2TGeom2ElemInfo(const PWrapper& theWrapper, + GetEntity2TGeom2ElemInfo(const PWrapper& theWrapper, const PMeshInfo& theMeshInfo, const MED::TEntityInfo& theEntityInfo); @@ -59,7 +61,7 @@ namespace MED //! Read set of MED FAMILIES for defined MED file MEDWRAPPER_EXPORT TFamilyInfoSet - GetFamilyInfoSet(const PWrapper& theWrapper, + GetFamilyInfoSet(const PWrapper& theWrapper, const PMeshInfo& theMeshInfo); //--------------------------------------------------------------- @@ -72,7 +74,7 @@ namespace MED //! Split set of MED FAMILIES by corresponding MED ENTITY MEDWRAPPER_EXPORT TEntity2FamilySet - GetEntity2FamilySet(const PWrapper& theWrapper, + GetEntity2FamilySet(const PWrapper& theWrapper, const TEntity2TGeom2ElemInfo& theEntity2TGeom2ElemInfo, const TFamilyInfoSet& theFamilyInfoSet); @@ -81,15 +83,15 @@ namespace MED MEDWRAPPER_EXPORT TGroupInfo GetGroupInfo(const TFamilyInfoSet& theFamilyInfoSet); - + //--------------------------------------------------------------- //! Read set of MED TIMESTAMPS groupped by corresponding MED FIELDS MEDWRAPPER_EXPORT TFieldInfo2TimeStampInfoSet - GetFieldInfo2TimeStampInfoSet(const PWrapper& theWrapper, + GetFieldInfo2TimeStampInfoSet(const PWrapper& theWrapper, const PMeshInfo& theMeshInfo, const MED::TEntityInfo& theEntityInfo); - + //--------------------------------------------------------------- //! Split the input set of MED TIMESTAMPS by corresponding MED FIELDS and MED ENTITIES MEDWRAPPER_EXPORT @@ -100,7 +102,7 @@ namespace MED //! Read set of MED GAUSS MEDWRAPPER_EXPORT TKey2Gauss - GetKey2Gauss(const PWrapper& theWrapper, + GetKey2Gauss(const PWrapper& theWrapper, TErr* theErr = NULL, EModeSwitch theMode = eFULL_INTERLACE); @@ -108,7 +110,7 @@ namespace MED //! Get MED PROFILE by its name MEDWRAPPER_EXPORT PProfileInfo - GetProfileInfo(const PWrapper& theWrapper, + GetProfileInfo(const PWrapper& theWrapper, const std::string& theProfileName, TErr* theErr = NULL, EModeProfil theMode = eCOMPACT); @@ -117,7 +119,7 @@ namespace MED //! Read set of MED PROFILES MEDWRAPPER_EXPORT TMKey2Profile - GetMKey2Profile(const PWrapper& theWrapper, + GetMKey2Profile(const PWrapper& theWrapper, TErr* theErr = NULL, EModeProfil theMode = eCOMPACT); diff --git a/src/MEDWrapper/MED_Common.cxx b/src/MEDWrapper/MED_Common.cxx new file mode 100644 index 000000000..8eb8db747 --- /dev/null +++ b/src/MEDWrapper/MED_Common.cxx @@ -0,0 +1,121 @@ +// 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 +// + +#include "MED_Common.hxx" +#include + +namespace MED +{ + TInt + GetDESCLength() + { + return 200; + } + + TInt + GetIDENTLength() + { + return 8; + } + + TInt + GetNOMLength() + { + return 64; + } + + TInt + GetLNOMLength() + { + return 80; + } + + TInt + GetPNOMLength() + { + return 16; + } + + void + GetVersionRelease(TInt& major, TInt& minor, TInt& release) + { + major = MED_MAJOR_NUM; + minor = MED_MINOR_NUM; + release = MED_RELEASE_NUM; + } + + TInt + GetNbConn(EGeometrieElement typmai, + EEntiteMaillage typent, + TInt mdim) + { + return typmai % 100; + } + + TInt + GetNbNodes(EGeometrieElement typmai) + { + return typmai % 100; + } + + const MED::TEntity2GeomSet& GetEntity2GeomSet() + { + static MED::TEntity2GeomSet Entity2GeomSet; + + if ( Entity2GeomSet.empty() ) { + TGeomSet& aGeomARETESet = Entity2GeomSet[MED::eARETE]; + aGeomARETESet.insert(MED::eSEG2); + aGeomARETESet.insert(MED::eSEG3); + + TGeomSet& aGeomFACESet = Entity2GeomSet[MED::eFACE]; + aGeomFACESet.insert(MED::eTRIA3); + aGeomFACESet.insert(MED::eQUAD4); + aGeomFACESet.insert(MED::eTRIA6); + aGeomFACESet.insert(MED::eTRIA7); + aGeomFACESet.insert(MED::eQUAD8); + aGeomFACESet.insert(MED::eQUAD9); + aGeomFACESet.insert(MED::ePOLYGONE); + aGeomFACESet.insert(MED::ePOLYGON2); + + TGeomSet& aGeomMAILLESet = Entity2GeomSet[MED::eMAILLE]; + aGeomMAILLESet.insert(MED::ePOINT1); + aGeomMAILLESet.insert(aGeomARETESet.begin(), aGeomARETESet.end()); + aGeomMAILLESet.insert(aGeomFACESet.begin(), aGeomFACESet.end()); + aGeomMAILLESet.insert(MED::eTETRA4); + aGeomMAILLESet.insert(MED::ePYRA5); + aGeomMAILLESet.insert(MED::ePENTA6); + aGeomMAILLESet.insert(MED::eHEXA8); + aGeomMAILLESet.insert(MED::eOCTA12); + aGeomMAILLESet.insert(MED::eTETRA10); + aGeomMAILLESet.insert(MED::ePYRA13); + aGeomMAILLESet.insert(MED::ePENTA15); + aGeomMAILLESet.insert(MED::eHEXA20); + aGeomMAILLESet.insert(MED::eHEXA27); + aGeomMAILLESet.insert(MED::ePOLYEDRE); + + /* This combination allows reading nb of models of structure elements */ + Entity2GeomSet[MED::eSTRUCT_ELEMENT].insert(MED::eAllGeoType); + } + + return Entity2GeomSet; + } +} diff --git a/src/MEDWrapper/MED_Common.hxx b/src/MEDWrapper/MED_Common.hxx index 9703ec756..798585d8e 100644 --- a/src/MEDWrapper/MED_Common.hxx +++ b/src/MEDWrapper/MED_Common.hxx @@ -26,7 +26,6 @@ #include "MED_WrapperDef.hxx" #include "MED_Vector.hxx" #include "MED_SharedPtr.hxx" -#include "MED_SliceArray.hxx" #include #include @@ -34,99 +33,65 @@ #include -#include - #ifdef WIN32 #pragma warning(disable:4099) #endif namespace MED { - typedef enum {eFAUX, eVRAI} EBooleen ; + typedef enum {eFAUX, eVRAI} EBooleen; typedef double TFloat; #if defined(HAVE_F77INT64) typedef long TInt; #else typedef int TInt; -#endif +#endif typedef hid_t TIdt; typedef herr_t TErr; typedef enum {eFULL_INTERLACE, eNO_INTERLACE} EModeSwitch; - typedef enum {eFLOAT64=6, eINT=24, eLONG=26 } ETypeChamp; + typedef enum {eFLOAT64=6, eINT=24, eLONG=26} ETypeChamp; typedef enum {eNON_STRUCTURE, eSTRUCTURE} EMaillage; - typedef enum {eCART, eCYL, eSPHER} ERepere; + typedef enum {eCART, eCYL, eSPHER} ERepere; - typedef enum {eNOD, eDESC} EConnectivite ; + typedef enum {eNOD, eDESC} EConnectivite; typedef enum {ePOINT1=1, eSEG2=102, eSEG3=103, eTRIA3=203, - eQUAD4=204, eTRIA6=206, eTRIA7=207, eQUAD8=208, eQUAD9=209,eTETRA4=304, - ePYRA5=305, ePENTA6=306, eHEXA8=308, eOCTA12=312, eTETRA10=310, + eQUAD4=204, eTRIA6=206, eTRIA7=207, eQUAD8=208, eQUAD9=209, eTETRA4=304, + ePYRA5=305, ePENTA6=306, eHEXA8=308, eOCTA12=312, eTETRA10=310, ePYRA13=313, ePENTA15=315, eHEXA20=320, eHEXA27=327, - ePOLYGONE=400, ePOLYGON2=420, ePOLYEDRE=500, eNONE=0, - eBALL=1101 /*no such a type in med.h, it's just a trick*/, - eAllGeoType=-1 } EGeometrieElement; + ePOLYGONE=400, ePOLYGON2=420, ePOLYEDRE=500, eNONE=0, + eBALL=1101, // no such a type in med.h, it's just a trick + eAllGeoType=-1} EGeometrieElement; - typedef enum {eMAILLE, eFACE, eARETE, eNOEUD, eNOEUD_ELEMENT, eSTRUCT_ELEMENT} EEntiteMaillage; + typedef enum {eMAILLE, eFACE, eARETE, eNOEUD, eNOEUD_ELEMENT, eSTRUCT_ELEMENT} EEntiteMaillage; - typedef enum {eNO_PFLMOD, eGLOBAL, eCOMPACT} EModeProfil; + typedef enum {eNO_PFLMOD, eGLOBAL, eCOMPACT} EModeProfil; typedef enum {eGRILLE_CARTESIENNE, eGRILLE_POLAIRE, eGRILLE_STANDARD} EGrilleType; typedef enum {eCOOR, eCONN, eNOM, eNUM, eFAM, eCOOR_IND1, eCOOR_IND2, eCOOR_IND3} ETable; + typedef TVector TIntVector; typedef TVector TFloatVector; typedef TVector TStringVector; - typedef TVector TIntVector; typedef std::set TStringSet; - + typedef std::map TGeom2Size; typedef std::map TEntityInfo; typedef std::set TGeomSet; typedef std::map TEntity2GeomSet; - MEDWRAPPER_EXPORT - const TEntity2GeomSet& - GetEntity2GeomSet(); - - TInt MEDWRAPPER_EXPORT - GetDESCLength(); - - TInt MEDWRAPPER_EXPORT - GetIDENTLength(); - - TInt MEDWRAPPER_EXPORT - GetNOMLength(); - - TInt MEDWRAPPER_EXPORT - GetLNOMLength(); - - TInt MEDWRAPPER_EXPORT - GetPNOMLength(); - - void MEDWRAPPER_EXPORT - GetVersionRelease(TInt& majeur, TInt& mineur, TInt& release); - - MEDWRAPPER_EXPORT - TInt - GetNbConn(EGeometrieElement typmai, - EEntiteMaillage typent, - TInt mdim); - - MEDWRAPPER_EXPORT - TInt - GetNbNodes(EGeometrieElement typmai); - struct TNameInfo; typedef SharedPtr PNameInfo; - + struct TMeshInfo; typedef SharedPtr PMeshInfo; - + struct TFamilyInfo; typedef SharedPtr PFamilyInfo; @@ -156,10 +121,10 @@ namespace MED struct TProfileInfo; typedef SharedPtr PProfileInfo; - + struct TGaussInfo; typedef SharedPtr PGaussInfo; - + class TGrilleInfo; typedef SharedPtr PGrilleInfo; @@ -168,6 +133,42 @@ namespace MED struct TWrapper; typedef SharedPtr PWrapper; + + 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&, TInt&, TInt&); + + MEDWRAPPER_EXPORT + TInt + GetNbConn(EGeometrieElement, EEntiteMaillage, TInt); + + MEDWRAPPER_EXPORT + TInt + GetNbNodes(EGeometrieElement typmai); + + MEDWRAPPER_EXPORT + const TEntity2GeomSet& + GetEntity2GeomSet(); } #endif // MED_Common_HeaderFile diff --git a/src/MEDWrapper/MED_CoordUtils.cxx b/src/MEDWrapper/MED_CoordUtils.cxx index 2f839df7f..889d8c87f 100644 --- a/src/MEDWrapper/MED_CoordUtils.cxx +++ b/src/MEDWrapper/MED_CoordUtils.cxx @@ -22,65 +22,64 @@ #include "MED_CoordUtils.hxx" #include "MED_Utilities.hxx" - + namespace MED { enum ECoordName{eX, eY, eZ, eNone}; template - TFloat + TFloat GetCoord(const TCCoordSlice& theCoordSlice) { return theCoordSlice[TCoordId]; } template<> - TFloat + TFloat GetCoord(const TCCoordSlice& theCoordSlice) { return 0.0; } - + TGetCoord aXYZGetCoord[3] = { - &GetCoord, - &GetCoord, + &GetCoord, + &GetCoord, &GetCoord }; - + TGetCoord aXYGetCoord[3] = { - &GetCoord, - &GetCoord, + &GetCoord, + &GetCoord, &GetCoord }; - + TGetCoord aYZGetCoord[3] = { &GetCoord, - &GetCoord, + &GetCoord, &GetCoord }; - - TGetCoord + + TGetCoord aXZGetCoord[3] = { - &GetCoord, + &GetCoord, &GetCoord, &GetCoord }; - - - TGetCoord + + TGetCoord aXGetCoord[3] = { - &GetCoord, + &GetCoord, &GetCoord, &GetCoord }; - + TGetCoord aYGetCoord[3] = { &GetCoord, - &GetCoord, + &GetCoord, &GetCoord }; @@ -91,22 +90,20 @@ namespace MED &GetCoord }; - //--------------------------------------------------------------- TCoordHelper ::TCoordHelper(TGetCoord* theGetCoord): myGetCoord(theGetCoord) {} - TFloat + TFloat TCoordHelper - ::GetCoord(TCCoordSlice& theCoordSlice, + ::GetCoord(TCCoordSlice& theCoordSlice, TInt theCoordId) { return (*myGetCoord[theCoordId])(theCoordSlice); } - //--------------------------------------------------------------- PCoordHelper GetCoordHelper(PNodeInfo theNodeInfo) diff --git a/src/MEDWrapper/MED_CoordUtils.hxx b/src/MEDWrapper/MED_CoordUtils.hxx index 533f1816e..c72219579 100644 --- a/src/MEDWrapper/MED_CoordUtils.hxx +++ b/src/MEDWrapper/MED_CoordUtils.hxx @@ -34,18 +34,18 @@ namespace MED class MEDWRAPPER_EXPORT TCoordHelper { TGetCoord* myGetCoord; - + public: TCoordHelper(TGetCoord* theGetCoord); - TFloat - GetCoord(TCCoordSlice& theCoordSlice, + TFloat + GetCoord(TCCoordSlice& theCoordSlice, TInt theCoordId); }; typedef SharedPtr PCoordHelper; //--------------------------------------------------------------- - MEDWRAPPER_EXPORT + MEDWRAPPER_EXPORT PCoordHelper GetCoordHelper(PNodeInfo theNodeInfo); } diff --git a/src/MEDWrapper/MED_Factory.cxx b/src/MEDWrapper/MED_Factory.cxx index a9b8bd2e7..02b7e866e 100644 --- a/src/MEDWrapper/MED_Factory.cxx +++ b/src/MEDWrapper/MED_Factory.cxx @@ -22,7 +22,7 @@ #include "MED_Factory.hxx" #include "MED_Utilities.hxx" -#include "MED_V2_2_Wrapper.hxx" +#include "MED_Wrapper.hxx" #include #include @@ -105,20 +105,16 @@ namespace MED PWrapper CrWrapperR(const std::string& fileName) { - PWrapper aWrapper; if (!CheckCompatibility(fileName)) { EXCEPTION(std::runtime_error, "Cannot open file '"< PGaussCoord; - //--------------------------------------------------------------- //! To calculate Gauss Points coordinates - MEDWRAPPER_EXPORT + MEDWRAPPER_EXPORT bool - GetGaussCoord3D(const TGaussInfo& theGaussInfo, + GetGaussCoord3D(const TGaussInfo& theGaussInfo, const TCellInfo& theCellInfo, const TNodeInfo& theNodeInfo, TGaussCoord& theGaussCoord, const TElemNum& theElemNum = TElemNum(), EModeSwitch theMode = eFULL_INTERLACE); - //--------------------------------------------------------------- //! To calculate Gauss Points coordinates for defined TCellInfo as its bary center - MEDWRAPPER_EXPORT + MEDWRAPPER_EXPORT bool GetBaryCenter(const TCellInfo& theCellInfo, const TNodeInfo& theNodeInfo, @@ -101,7 +99,7 @@ namespace MED EModeSwitch theMode = eFULL_INTERLACE); //! To calculate Gauss Points coordinates for defined TPolygoneInfo as its bary center - MEDWRAPPER_EXPORT + MEDWRAPPER_EXPORT bool GetBaryCenter(const TPolygoneInfo& thePolygoneInfo, const TNodeInfo& theNodeInfo, @@ -110,7 +108,7 @@ namespace MED EModeSwitch theMode = eFULL_INTERLACE); //! To calculate Gauss Points coordinates for defined TPolyedreInfo as its bary center - MEDWRAPPER_EXPORT + MEDWRAPPER_EXPORT bool GetBaryCenter(const TPolyedreInfo& thePolyedreInfo, const TNodeInfo& theNodeInfo, @@ -124,7 +122,7 @@ namespace MED struct MEDWRAPPER_EXPORT TShapeFun { class TFun; - + TFloatVector myRefCoord; TInt myDim; TInt myNbRef; @@ -140,7 +138,7 @@ namespace MED void GetFun(const TCCoordSliceArr& theRef, const TCCoordSliceArr& theGauss, TFun& theFun) const; - virtual + virtual void InitFun(const TCCoordSliceArr& theRef, const TCCoordSliceArr& theGauss, TFun& theFun) const = 0; diff --git a/src/MEDWrapper/MED_SharedPtr.hxx b/src/MEDWrapper/MED_SharedPtr.hxx index 4f462bfe3..09dc7ad92 100644 --- a/src/MEDWrapper/MED_SharedPtr.hxx +++ b/src/MEDWrapper/MED_SharedPtr.hxx @@ -30,7 +30,7 @@ namespace MED //! To extend the boost::shared_ptr to support such features automatic dynamic cast /*! All entities of the MEDWrapper package are handled as pointer. - This class was introduced to provide correct and flexible memory management + This class was introduced to provide correct and flexible memory management for all of the MEDWrapper objects. */ template class SharedPtr: public boost::shared_ptr @@ -41,8 +41,8 @@ namespace MED //! Construct the class by any type of a pointer template - explicit SharedPtr(Y * p): - boost::shared_ptr(p) + explicit SharedPtr(Y * p): + boost::shared_ptr(p) {} //! Construct the class by any specialisation of the class @@ -53,7 +53,7 @@ namespace MED //! Copy-constructor template - SharedPtr& + SharedPtr& operator=(SharedPtr const & r) { SharedPtr(r).swap(*this); @@ -61,30 +61,30 @@ namespace MED } //! Introduce a flexible way to reset the wrapped pointer - template - SharedPtr& + template + SharedPtr& operator()(Y * p) // Y must be complete { return operator=(SharedPtr(p)); } //! Introduce a flexible way to reset the wrapped pointer - template - SharedPtr& + template + SharedPtr& operator()(SharedPtr const & r) // Y must be complete { return operator=(SharedPtr(r)); } //! To provide a flexible way to use reference to the wrapped pointer (const version) - operator const T& () const - { + operator const T& () const + { return *(this->get()); } //! To provide a flexible way to use reference to the wrapped pointer - operator T& () - { + operator T& () + { return *(this->get()); } }; diff --git a/src/MEDWrapper/MED_SliceArray.hxx b/src/MEDWrapper/MED_SliceArray.hxx index 9134ea70b..3abde89aa 100644 --- a/src/MEDWrapper/MED_SliceArray.hxx +++ b/src/MEDWrapper/MED_SliceArray.hxx @@ -39,12 +39,12 @@ namespace MED { //--------------------------------------------------------------- //! This class intends to provide an uniform way to handle multy-dimention data (const version) - /*! + /*! It just contains pointer to real sequence and implement proper calcultion of its indexes. This class deal with constant pointer to the sources data and provide const method to read the them (data). */ - template + template class TCSlice { const TValueType* myCValuePtr; //!< Reference to source multy-dimension data @@ -70,7 +70,7 @@ namespace MED { return mySlice.start() + theId*mySlice.stride(); } - + size_t get_id(size_t theId) const { @@ -79,7 +79,7 @@ namespace MED #endif return calculate_id(theId); } - + size_t get_id_at(size_t theId) const { @@ -93,38 +93,38 @@ namespace MED //! Construct the class from bare pointer TCSlice(const value_type* theValuePtr, size_t theSourceSize, - const std::slice& theSlice): + const std::slice& theSlice): myCValuePtr(theValuePtr), mySourceSize(theSourceSize), mySlice(theSlice) {} - + //! Construct the class from corresponding container TCSlice(const TVector& theContainer, - const std::slice& theSlice): + const std::slice& theSlice): myCValuePtr(&theContainer[0]), mySourceSize(theContainer.size()), mySlice(theSlice) {} - + //! Default constructor (dangerous) TCSlice(): myCValuePtr(NULL) {} //! Get element by its number (const version) - const value_type& + const value_type& operator[](size_t theId) const { return *(myCValuePtr + get_id(theId)); } - - const value_type& + + const value_type& at(size_t theId) const { return *(myCValuePtr + get_id_at(theId)); } - + //! Get range of the order numbers size_t size() const @@ -132,15 +132,14 @@ namespace MED return mySlice.size(); } }; - //--------------------------------------------------------------- //! This class extend TCSlice functionality for non-constant case - template + template class TSlice: public TCSlice { TValueType* myValuePtr; - + public: typedef TValueType value_type; typedef TCSlice TSupperClass; @@ -148,31 +147,31 @@ namespace MED //! Construct the class from bare pointer TSlice(value_type* theValuePtr, size_t theSourceSize, - const std::slice& theSlice): + const std::slice& theSlice): TSupperClass(theValuePtr, theSourceSize, theSlice), myValuePtr(theValuePtr) {} - + //! Construct the class from corresponding container TSlice(TVector& theContainer, - const std::slice& theSlice): + const std::slice& theSlice): TSupperClass(theContainer, theSlice), myValuePtr(&theContainer[0]) {} - + //! Default constructor (dangerous) TSlice(): myValuePtr(NULL) {} //! Get element by its number - value_type& + value_type& operator[](size_t theId) { return *(myValuePtr + this->get_id(theId)); } - value_type& + value_type& at(size_t theId) { return *(myValuePtr + this->get_id_at(theId)); diff --git a/src/MEDWrapper/MED_Structures.cxx b/src/MEDWrapper/MED_Structures.cxx index 800586e34..f5caca0ee 100644 --- a/src/MEDWrapper/MED_Structures.cxx +++ b/src/MEDWrapper/MED_Structures.cxx @@ -25,19 +25,11 @@ #include -using namespace MED; - namespace MED { - TInt - GetNbNodes(EGeometrieElement typmai) - { - return typmai%100; - } - - std::string - GetString(TInt theId, - TInt theStep, + std::string + GetString(TInt theId, + TInt theStep, const TString& theString) { const char* aPos = &theString[theId*theStep]; @@ -45,10 +37,10 @@ namespace MED return std::string(aPos,aSize); } - void - SetString(TInt theId, - TInt theStep, - TString& theString, + void + SetString(TInt theId, + TInt theStep, + TString& theString, const std::string& theValue) { TInt aSize = std::min(TInt(theValue.size()+1),theStep); @@ -56,10 +48,10 @@ namespace MED strncpy(aPos,theValue.c_str(),aSize); } - void - SetString(TInt theId, - TInt theStep, - TString& theString, + void + SetString(TInt theId, + TInt theStep, + TString& theString, const TString& theValue) { TInt aSize = std::min(TInt(theValue.size()+1),theStep); @@ -92,772 +84,766 @@ namespace MED { return theTimeStampValue; } -} - -//--------------------------------------------------------------- -TInt -TFamilyInfo -::GetAttrId(TInt theId) const -{ - return myAttrId[theId]; -} - -TInt -TFamilyInfo -::GetAttrVal(TInt theId) const -{ - return myAttrVal[theId]; -} -void -TFamilyInfo -::SetAttrId(TInt theId,TInt theVal) -{ - myAttrId[theId] = theVal; -} + //--------------------------------------------------------------- + TInt + TFamilyInfo + ::GetAttrId(TInt theId) const + { + return myAttrId[theId]; + } -void -TFamilyInfo -::SetAttrVal(TInt theId,TInt theVal) -{ - myAttrVal[theId] = theVal; -} + TInt + TFamilyInfo + ::GetAttrVal(TInt theId) const + { + return myAttrVal[theId]; + } -//--------------------------------------------------------------- -TInt -TElemInfo -::GetFamNum(TInt theId) const -{ - return (*myFamNum)[theId]; -} + void + TFamilyInfo + ::SetAttrId(TInt theId,TInt theVal) + { + myAttrId[theId] = theVal; + } -void -TElemInfo -::SetFamNum(TInt theId, TInt theVal) -{ - (*myFamNum)[theId] = theVal; - myIsFamNum = eVRAI; -} + void + TFamilyInfo + ::SetAttrVal(TInt theId,TInt theVal) + { + myAttrVal[theId] = theVal; + } -TInt -TElemInfo -::GetElemNum(TInt theId) const -{ - return (*myElemNum)[theId]; -} + //--------------------------------------------------------------- + TInt + TElemInfo + ::GetFamNum(TInt theId) const + { + return (*myFamNum)[theId]; + } -void -TElemInfo -::SetElemNum(TInt theId, TInt theVal) -{ - (*myElemNum)[theId] = theVal; -} + void + TElemInfo + ::SetFamNum(TInt theId, TInt theVal) + { + (*myFamNum)[theId] = theVal; + myIsFamNum = eVRAI; + } -//--------------------------------------------------------------- -TCCoordSlice -TNodeInfo -::GetCoordSlice(TInt theId) const -{ - TInt aDim = myMeshInfo->GetSpaceDim(); - if(GetModeSwitch() == eFULL_INTERLACE) - return TCCoordSlice(*myCoord, std::slice(theId*aDim, aDim, 1)); - else - return TCCoordSlice(*myCoord, std::slice(theId, aDim, aDim)); -} + TInt + TElemInfo + ::GetElemNum(TInt theId) const + { + return (*myElemNum)[theId]; + } -TCoordSlice -TNodeInfo -::GetCoordSlice(TInt theId) -{ - TInt aDim = myMeshInfo->GetSpaceDim(); - if(GetModeSwitch() == eFULL_INTERLACE) - return TCoordSlice(*myCoord, std::slice(theId*aDim,aDim,1)); - else - return TCoordSlice(*myCoord, std::slice(theId,aDim,aDim)); -} + void + TElemInfo + ::SetElemNum(TInt theId, TInt theVal) + { + (*myElemNum)[theId] = theVal; + } -//--------------------------------------------------------------- -TCConnSlice -TCellInfo -::GetConnSlice(TInt theElemId) const -{ - if(GetModeSwitch() == eFULL_INTERLACE) - return TCConnSlice(*myConn, std::slice(GetConnDim()*theElemId, GetNbNodes(myGeom), 1)); - else - return TCConnSlice(*myConn, std::slice(theElemId, GetNbNodes(myGeom), GetConnDim())); -} + //--------------------------------------------------------------- + TCCoordSlice + TNodeInfo + ::GetCoordSlice(TInt theId) const + { + TInt aDim = myMeshInfo->GetSpaceDim(); + if(GetModeSwitch() == eFULL_INTERLACE) + return TCCoordSlice(*myCoord, std::slice(theId*aDim, aDim, 1)); + else + return TCCoordSlice(*myCoord, std::slice(theId, aDim, aDim)); + } -TConnSlice -TCellInfo -::GetConnSlice(TInt theElemId) -{ - if(GetModeSwitch() == eFULL_INTERLACE) - return TConnSlice(*myConn, std::slice(GetConnDim()*theElemId, GetNbNodes(myGeom), 1)); - else - return TConnSlice(*myConn, std::slice(theElemId, GetNbNodes(myGeom), GetConnDim())); -} + TCoordSlice + TNodeInfo + ::GetCoordSlice(TInt theId) + { + TInt aDim = myMeshInfo->GetSpaceDim(); + if(GetModeSwitch() == eFULL_INTERLACE) + return TCoordSlice(*myCoord, std::slice(theId*aDim,aDim,1)); + else + return TCoordSlice(*myCoord, std::slice(theId,aDim,aDim)); + } + //--------------------------------------------------------------- + TCConnSlice + TCellInfo + ::GetConnSlice(TInt theElemId) const + { + if(GetModeSwitch() == eFULL_INTERLACE) + return TCConnSlice(*myConn, std::slice(GetConnDim()*theElemId, GetNbNodes(myGeom), 1)); + else + return TCConnSlice(*myConn, std::slice(theElemId, GetNbNodes(myGeom), GetConnDim())); + } -//--------------------------------------------------------------- -TInt -TPolygoneInfo -::GetNbConn(TInt theElemId) const -{ - return (*myIndex)[theElemId + 1] - (*myIndex)[theElemId]; -} + TConnSlice + TCellInfo + ::GetConnSlice(TInt theElemId) + { + if(GetModeSwitch() == eFULL_INTERLACE) + return TConnSlice(*myConn, std::slice(GetConnDim()*theElemId, GetNbNodes(myGeom), 1)); + else + return TConnSlice(*myConn, std::slice(theElemId, GetNbNodes(myGeom), GetConnDim())); + } -TCConnSlice -TPolygoneInfo -::GetConnSlice(TInt theElemId) const -{ - return TCConnSlice(*myConn, std::slice((*myIndex)[theElemId] - 1, GetNbConn(theElemId), 1)); -} + //--------------------------------------------------------------- + TInt + TPolygoneInfo + ::GetNbConn(TInt theElemId) const + { + return (*myIndex)[theElemId + 1] - (*myIndex)[theElemId]; + } -TConnSlice -TPolygoneInfo -::GetConnSlice(TInt theElemId) -{ - return TConnSlice(*myConn, std::slice((*myIndex)[theElemId] - 1, GetNbConn(theElemId), 1)); -} + TCConnSlice + TPolygoneInfo + ::GetConnSlice(TInt theElemId) const + { + return TCConnSlice(*myConn, std::slice((*myIndex)[theElemId] - 1, GetNbConn(theElemId), 1)); + } + TConnSlice + TPolygoneInfo + ::GetConnSlice(TInt theElemId) + { + return TConnSlice(*myConn, std::slice((*myIndex)[theElemId] - 1, GetNbConn(theElemId), 1)); + } -//--------------------------------------------------------------- -TInt -TPolyedreInfo -::GetNbFaces(TInt theElemId) const -{ - return (*myIndex)[theElemId+1] - (*myIndex)[theElemId]; -} + //--------------------------------------------------------------- + TInt + TPolyedreInfo + ::GetNbFaces(TInt theElemId) const + { + return (*myIndex)[theElemId+1] - (*myIndex)[theElemId]; + } -TInt -TPolyedreInfo -::GetNbNodes(TInt theElemId) const -{ - TInt aNbNodes = 0; - TInt aNbFaces = GetNbFaces(theElemId); - TInt aStartFaceId = (*myIndex)[theElemId] - 1; - for(TInt aFaceId = 0; aFaceId < aNbFaces; aFaceId++, aStartFaceId++){ - TInt aCurrentId = (*myFaces)[aStartFaceId]; - TInt aDiff = (*myFaces)[aStartFaceId + 1] - aCurrentId; - aNbNodes += aDiff; - } - return aNbNodes; -} + TInt + TPolyedreInfo + ::GetNbNodes(TInt theElemId) const + { + TInt aNbNodes = 0; + TInt aNbFaces = GetNbFaces(theElemId); + TInt aStartFaceId = (*myIndex)[theElemId] - 1; + for(TInt aFaceId = 0; aFaceId < aNbFaces; aFaceId++, aStartFaceId++){ + TInt aCurrentId = (*myFaces)[aStartFaceId]; + TInt aDiff = (*myFaces)[aStartFaceId + 1] - aCurrentId; + aNbNodes += aDiff; + } + return aNbNodes; + } -TCConnSliceArr -TPolyedreInfo -::GetConnSliceArr(TInt theElemId) const -{ - TInt aNbFaces = GetNbFaces(theElemId); - TCConnSliceArr aConnSliceArr(aNbFaces); - TInt aStartFaceId = (*myIndex)[theElemId] - 1; - for(TInt aFaceId = 0; aFaceId < aNbFaces; aFaceId++, aStartFaceId++){ - TInt aCurrentId = (*myFaces)[aStartFaceId]; - TInt aDiff = (*myFaces)[aStartFaceId + 1] - aCurrentId; - aConnSliceArr[aFaceId] = - TCConnSlice(*myConn, std::slice(aCurrentId - 1, aDiff, 1)); - } - return aConnSliceArr; -} + TCConnSliceArr + TPolyedreInfo + ::GetConnSliceArr(TInt theElemId) const + { + TInt aNbFaces = GetNbFaces(theElemId); + TCConnSliceArr aConnSliceArr(aNbFaces); + TInt aStartFaceId = (*myIndex)[theElemId] - 1; + for(TInt aFaceId = 0; aFaceId < aNbFaces; aFaceId++, aStartFaceId++){ + TInt aCurrentId = (*myFaces)[aStartFaceId]; + TInt aDiff = (*myFaces)[aStartFaceId + 1] - aCurrentId; + aConnSliceArr[aFaceId] = + TCConnSlice(*myConn, std::slice(aCurrentId - 1, aDiff, 1)); + } + return aConnSliceArr; + } -TConnSliceArr -TPolyedreInfo -::GetConnSliceArr(TInt theElemId) -{ - TInt aNbFaces = GetNbFaces(theElemId); - TConnSliceArr aConnSliceArr(aNbFaces); - TInt aStartFaceId = (*myIndex)[theElemId] - 1; - for(TInt aFaceId = 0; aFaceId < aNbFaces; aFaceId++, aStartFaceId++){ - TInt aCurrentId = (*myFaces)[aStartFaceId]; - TInt aDiff = (*myFaces)[aStartFaceId + 1] - aCurrentId; - aConnSliceArr[aFaceId] = - TConnSlice(*myConn, std::slice(aCurrentId - 1, aDiff, 1)); - } - return aConnSliceArr; -} + TConnSliceArr + TPolyedreInfo + ::GetConnSliceArr(TInt theElemId) + { + TInt aNbFaces = GetNbFaces(theElemId); + TConnSliceArr aConnSliceArr(aNbFaces); + TInt aStartFaceId = (*myIndex)[theElemId] - 1; + for(TInt aFaceId = 0; aFaceId < aNbFaces; aFaceId++, aStartFaceId++){ + TInt aCurrentId = (*myFaces)[aStartFaceId]; + TInt aDiff = (*myFaces)[aStartFaceId + 1] - aCurrentId; + aConnSliceArr[aFaceId] = + TConnSlice(*myConn, std::slice(aCurrentId - 1, aDiff, 1)); + } + return aConnSliceArr; + } + //--------------------------------------------------------------- + TMeshValueBase + ::TMeshValueBase(): + myNbElem(0), + myNbComp(0), + myNbGauss(0), + myStep(0) + {} + + void + TMeshValueBase + ::Allocate(TInt theNbElem, + TInt theNbGauss, + TInt theNbComp, + EModeSwitch theMode) + { + myModeSwitch = theMode; -//--------------------------------------------------------------- -TMeshValueBase -::TMeshValueBase(): - myNbElem(0), - myNbComp(0), - myNbGauss(0), - myStep(0) -{} - -void -TMeshValueBase -::Allocate(TInt theNbElem, - TInt theNbGauss, - TInt theNbComp, - EModeSwitch theMode) -{ - myModeSwitch = theMode; - - myNbElem = theNbElem; - myNbGauss = theNbGauss; - myNbComp = theNbComp; - - myStep = theNbComp*theNbGauss; -} + myNbElem = theNbElem; + myNbGauss = theNbGauss; + myNbComp = theNbComp; -size_t -TMeshValueBase -::GetSize() const -{ - return myNbElem * myStep; -} - -size_t -TMeshValueBase -::GetNbVal() const -{ - return myNbElem * myNbGauss; -} + myStep = theNbComp*theNbGauss; + } -size_t -TMeshValueBase -::GetNbGauss() const -{ - return myNbGauss; -} + size_t + TMeshValueBase + ::GetSize() const + { + return myNbElem * myStep; + } -size_t -TMeshValueBase -::GetStep() const -{ - return myStep; -} + size_t + TMeshValueBase + ::GetNbVal() const + { + return myNbElem * myNbGauss; + } + size_t + TMeshValueBase + ::GetNbGauss() const + { + return myNbGauss; + } -//--------------------------------------------------------------- -TInt -TProfileInfo -::GetElemNum(TInt theId) const -{ - return (*myElemNum)[theId]; -} + size_t + TMeshValueBase + ::GetStep() const + { + return myStep; + } -void -TProfileInfo -::SetElemNum(TInt theId,TInt theVal) -{ - (*myElemNum)[theId] = theVal; -} + //--------------------------------------------------------------- + TInt + TProfileInfo + ::GetElemNum(TInt theId) const + { + return (*myElemNum)[theId]; + } -//--------------------------------------------------------------- -bool -TGaussInfo::TLess -::operator()(const TKey& theLeft, const TKey& theRight) const -{ - EGeometrieElement aLGeom = boost::get<0>(theLeft); - EGeometrieElement aRGeom = boost::get<0>(theRight); - if(aLGeom != aRGeom) - return aLGeom < aRGeom; - - const std::string& aLStr = boost::get<1>(theLeft); - const std::string& aRStr = boost::get<1>(theRight); - return aLStr < aRStr; -} + void + TProfileInfo + ::SetElemNum(TInt theId,TInt theVal) + { + (*myElemNum)[theId] = theVal; + } -bool -TGaussInfo::TLess -::operator()(const TGaussInfo& theLeft, const TGaussInfo& theRight) const -{ - if(!&theLeft) - return true; + //--------------------------------------------------------------- + bool + TGaussInfo::TLess + ::operator()(const TKey& theLeft, const TKey& theRight) const + { + EGeometrieElement aLGeom = boost::get<0>(theLeft); + EGeometrieElement aRGeom = boost::get<0>(theRight); + if(aLGeom != aRGeom) + return aLGeom < aRGeom; + + const std::string& aLStr = boost::get<1>(theLeft); + const std::string& aRStr = boost::get<1>(theRight); + return aLStr < aRStr; + } - if(!&theRight) - return false; + bool + TGaussInfo::TLess + ::operator()(const TGaussInfo& theLeft, const TGaussInfo& theRight) const + { + if(!&theLeft) + return true; - if(theLeft.myGeom != theRight.myGeom) - return theLeft.myGeom < theRight.myGeom; + if(!&theRight) + return false; - if(theLeft.myRefCoord != theRight.myRefCoord) - return theLeft.myRefCoord < theRight.myRefCoord; + if(theLeft.myGeom != theRight.myGeom) + return theLeft.myGeom < theRight.myGeom; - return theLeft.myGaussCoord < theRight.myGaussCoord; -} + if(theLeft.myRefCoord != theRight.myRefCoord) + return theLeft.myRefCoord < theRight.myRefCoord; -TCCoordSlice -TGaussInfo -::GetRefCoordSlice(TInt theId) const -{ - if(GetModeSwitch() == eFULL_INTERLACE) - return TCCoordSlice(myRefCoord,std::slice(theId*GetDim(),GetDim(),1)); - else - return TCCoordSlice(myRefCoord,std::slice(theId,GetDim(),GetDim())); -} + return theLeft.myGaussCoord < theRight.myGaussCoord; + } -TCoordSlice -TGaussInfo -::GetRefCoordSlice(TInt theId) -{ - if(GetModeSwitch() == eFULL_INTERLACE) - return TCoordSlice(myRefCoord,std::slice(theId*GetDim(),GetDim(),1)); - else - return TCoordSlice(myRefCoord,std::slice(theId,GetDim(),GetDim())); -} + TCCoordSlice + TGaussInfo + ::GetRefCoordSlice(TInt theId) const + { + if(GetModeSwitch() == eFULL_INTERLACE) + return TCCoordSlice(myRefCoord,std::slice(theId*GetDim(),GetDim(),1)); + else + return TCCoordSlice(myRefCoord,std::slice(theId,GetDim(),GetDim())); + } -TCCoordSlice -TGaussInfo -::GetGaussCoordSlice(TInt theId) const -{ - if(GetModeSwitch() == eFULL_INTERLACE) - return TCCoordSlice(myGaussCoord,std::slice(theId*GetDim(),GetDim(),1)); - else - return TCCoordSlice(myGaussCoord,std::slice(theId,GetDim(),GetDim())); -} + TCoordSlice + TGaussInfo + ::GetRefCoordSlice(TInt theId) + { + if(GetModeSwitch() == eFULL_INTERLACE) + return TCoordSlice(myRefCoord,std::slice(theId*GetDim(),GetDim(),1)); + else + return TCoordSlice(myRefCoord,std::slice(theId,GetDim(),GetDim())); + } -TCoordSlice -TGaussInfo -::GetGaussCoordSlice(TInt theId) -{ - if(GetModeSwitch() == eFULL_INTERLACE) - return TCoordSlice(myGaussCoord,std::slice(theId*GetDim(),GetNbGauss(),1)); - else - return TCoordSlice(myGaussCoord,std::slice(theId,GetNbGauss(),GetDim())); -} + TCCoordSlice + TGaussInfo + ::GetGaussCoordSlice(TInt theId) const + { + if(GetModeSwitch() == eFULL_INTERLACE) + return TCCoordSlice(myGaussCoord,std::slice(theId*GetDim(),GetDim(),1)); + else + return TCCoordSlice(myGaussCoord,std::slice(theId,GetDim(),GetDim())); + } + TCoordSlice + TGaussInfo + ::GetGaussCoordSlice(TInt theId) + { + if(GetModeSwitch() == eFULL_INTERLACE) + return TCoordSlice(myGaussCoord,std::slice(theId*GetDim(),GetNbGauss(),1)); + else + return TCoordSlice(myGaussCoord,std::slice(theId,GetNbGauss(),GetDim())); + } -//--------------------------------------------------------------- -TInt -TTimeStampInfo -::GetNbGauss(EGeometrieElement theGeom) const -{ - TGeom2NbGauss::const_iterator anIter = myGeom2NbGauss.find(theGeom); - if(anIter == myGeom2NbGauss.end()) - return 1;//EXCEPTION(runtime_error,"TTimeStampInfo::GetNbGauss - myGeom2NbGauss.find(theGeom) fails"); + //--------------------------------------------------------------- + TInt + TTimeStampInfo + ::GetNbGauss(EGeometrieElement theGeom) const + { + TGeom2NbGauss::const_iterator anIter = myGeom2NbGauss.find(theGeom); + if(anIter == myGeom2NbGauss.end()) + return 1;//EXCEPTION(runtime_error,"TTimeStampInfo::GetNbGauss - myGeom2NbGauss.find(theGeom) fails"); - return anIter->second; -} + return anIter->second; + } + //--------------------------------------------------------------- + // TGrilleInfo structure methods + //--------------------------------------------------------------- + const EGrilleType& + TGrilleInfo + ::GetGrilleType() const + { + return myGrilleType; + } -//--------------------------------------------------------------- -// TGrilleInfo structure methods -//--------------------------------------------------------------- -const EGrilleType& -TGrilleInfo -::GetGrilleType() const -{ - return myGrilleType; -} + EGrilleType + TGrilleInfo + ::GetGrilleType() + { + return myGrilleType; + } -EGrilleType -TGrilleInfo -::GetGrilleType() -{ - return myGrilleType; -} + void + TGrilleInfo + ::SetGrilleType(EGrilleType theGrilleType) + { + myGrilleType = theGrilleType; + } -void -TGrilleInfo -::SetGrilleType(EGrilleType theGrilleType) -{ - myGrilleType = theGrilleType; -} + const + TIndexes& + TGrilleInfo + ::GetMapOfIndexes() const + { + return myIndixes; + } -const -TIndexes& -TGrilleInfo -::GetMapOfIndexes() const -{ - return myIndixes; -} + TIndexes& + TGrilleInfo + ::GetMapOfIndexes() + { + return myIndixes; + } -TIndexes& -TGrilleInfo -::GetMapOfIndexes() -{ - return myIndixes; -} + const + TFloatVector& + TGrilleInfo + ::GetIndexes(TInt theAxisNumber) const + { + TIndexes::const_iterator aIter=myIndixes.find(theAxisNumber); + if(aIter==myIndixes.end()) + EXCEPTION(std::runtime_error, "const TGrilleInfo::GetIndexes - myIndixes.find(theAxisNumber); fails"); + return aIter->second; + } -const -TFloatVector& -TGrilleInfo -::GetIndexes(TInt theAxisNumber) const -{ - TIndexes::const_iterator aIter=myIndixes.find(theAxisNumber); - if(aIter==myIndixes.end()) - EXCEPTION(std::runtime_error, "const TGrilleInfo::GetIndexes - myIndixes.find(theAxisNumber); fails"); - return aIter->second; -} + TFloatVector& + TGrilleInfo + ::GetIndexes(TInt theAxisNumber) + { + TIndexes::iterator aIter=myIndixes.find(theAxisNumber); + if(aIter==myIndixes.end()) + EXCEPTION(std::runtime_error, "TGrilleInfo::GetIndexes - myIndixes.find(theAxisNumber="<second; + } -TFloatVector& -TGrilleInfo -::GetIndexes(TInt theAxisNumber) -{ - TIndexes::iterator aIter=myIndixes.find(theAxisNumber); - if(aIter==myIndixes.end()) - EXCEPTION(std::runtime_error, "TGrilleInfo::GetIndexes - myIndixes.find(theAxisNumber="<second; -} + TInt + TGrilleInfo + ::GetNbIndexes(TInt theAxisNumber) + { + const TFloatVector& aVector=GetIndexes(theAxisNumber); + return aVector.size(); + } -TInt -TGrilleInfo -::GetNbIndexes(TInt theAxisNumber) -{ - const TFloatVector& aVector=GetIndexes(theAxisNumber); - return aVector.size(); -} + TInt + TGrilleInfo + ::GetNbNodes() + { + TInt nbNodes=0; + TInt aDim = myMeshInfo->GetDim(); + for(int i=0;iGetGrilleStructure()[i]; + else + nbNodes = nbNodes*this->GetGrilleStructure()[i]; + + return nbNodes; + } -TInt -TGrilleInfo -::GetNbNodes() -{ - TInt nbNodes=0; - TInt aDim = myMeshInfo->GetDim(); - for(int i=0;iGetGrilleStructure()[i]; - else - nbNodes = nbNodes*this->GetGrilleStructure()[i]; - - return nbNodes; -} + TInt + TGrilleInfo + ::GetNbCells() + { + TInt nbCells=0; + TInt aDim = myMeshInfo->GetDim(); + for(int i=0;iGetGrilleStructure()[i]-1; + else + nbCells = nbCells*(this->GetGrilleStructure()[i]-1); + return nbCells; + } -TInt -TGrilleInfo -::GetNbCells() -{ - TInt nbCells=0; - TInt aDim = myMeshInfo->GetDim(); - for(int i=0;iGetGrilleStructure()[i]-1; - else - nbCells = nbCells*(this->GetGrilleStructure()[i]-1); - return nbCells; -} + TInt + TGrilleInfo + ::GetNbSubCells() + { + TInt nb=0; + TInt aDim = myMeshInfo->GetDim(); + switch (aDim) { + case 3: + nb = + (myGrilleStructure[0] ) * (myGrilleStructure[1]-1) * (myGrilleStructure[2]-1) + + (myGrilleStructure[0]-1) * (myGrilleStructure[1] ) * (myGrilleStructure[2]-1) + + (myGrilleStructure[0]-1) * (myGrilleStructure[1]-1) * (myGrilleStructure[2] ); + break; + case 2: + nb = + (myGrilleStructure[0] ) * (myGrilleStructure[1]-1) + + (myGrilleStructure[0]-1) * (myGrilleStructure[1] ); + break; + } + return nb; + } -TInt -TGrilleInfo -::GetNbSubCells() -{ - TInt nb=0; - TInt aDim = myMeshInfo->GetDim(); - switch (aDim) { - case 3: - nb = - (myGrilleStructure[0] ) * (myGrilleStructure[1]-1) * (myGrilleStructure[2]-1) + - (myGrilleStructure[0]-1) * (myGrilleStructure[1] ) * (myGrilleStructure[2]-1) + - (myGrilleStructure[0]-1) * (myGrilleStructure[1]-1) * (myGrilleStructure[2] ); - break; - case 2: - nb = - (myGrilleStructure[0] ) * (myGrilleStructure[1]-1) + - (myGrilleStructure[0]-1) * (myGrilleStructure[1] ); - break; - } - return nb; -} + EGeometrieElement + TGrilleInfo + ::GetGeom() + { + TInt aDim = myMeshInfo->GetDim(); + switch(aDim){ + case 1: + return eSEG2; + case 2: + return eQUAD4; + case 3: + return eHEXA8; + default: + return eNONE; + } + } -EGeometrieElement -TGrilleInfo -::GetGeom() -{ - TInt aDim = myMeshInfo->GetDim(); - switch(aDim){ - case 1: - return eSEG2; - case 2: - return eQUAD4; - case 3: - return eHEXA8; - default: + EGeometrieElement + TGrilleInfo + ::GetSubGeom() + { + TInt aDim = myMeshInfo->GetDim(); + switch(aDim){ + case 2: + return eSEG2; + case 3: + return eQUAD4; + } return eNONE; } -} -EGeometrieElement -TGrilleInfo -::GetSubGeom() -{ - TInt aDim = myMeshInfo->GetDim(); - switch(aDim){ - case 2: - return eSEG2; - case 3: - return eQUAD4; - } - return eNONE; -} + EEntiteMaillage + TGrilleInfo + ::GetEntity() + { + return eMAILLE; + } -EEntiteMaillage -TGrilleInfo -::GetEntity() -{ - return eMAILLE; -} + EEntiteMaillage + TGrilleInfo + ::GetSubEntity() + { + TInt aDim = myMeshInfo->GetDim(); + switch(aDim){ + case 2: + return eARETE; + case 3: + return eFACE; + } + return EEntiteMaillage(-1); + } -EEntiteMaillage -TGrilleInfo -::GetSubEntity() -{ - TInt aDim = myMeshInfo->GetDim(); - switch(aDim){ - case 2: - return eARETE; - case 3: - return eFACE; - } - return EEntiteMaillage(-1); -} + const + TIntVector& + TGrilleInfo + ::GetGrilleStructure() const + { + return myGrilleStructure; + } -const -TIntVector& -TGrilleInfo -::GetGrilleStructure() const -{ - return myGrilleStructure; -} + TIntVector + TGrilleInfo + ::GetGrilleStructure() + { + return myGrilleStructure; + } -TIntVector -TGrilleInfo -::GetGrilleStructure() -{ - return myGrilleStructure; -} + void + TGrilleInfo + ::SetGrilleStructure(TInt theAxis,TInt theNb) + { + if(theAxis >= 0 && theAxis <=2 && theNb >= 0) + myGrilleStructure[theAxis]=theNb; + } -void -TGrilleInfo -::SetGrilleStructure(TInt theAxis,TInt theNb) -{ - if(theAxis >= 0 && theAxis <=2 && theNb >= 0) - myGrilleStructure[theAxis]=theNb; -} + const + TNodeCoord& + TGrilleInfo + ::GetNodeCoord() const + { + return myCoord; + } -const -TNodeCoord& -TGrilleInfo -::GetNodeCoord() const -{ - return myCoord; -} + TNodeCoord& + TGrilleInfo + ::GetNodeCoord() + { + return myCoord; + } -TNodeCoord& -TGrilleInfo -::GetNodeCoord() -{ - return myCoord; -} + TNodeCoord + TGrilleInfo + ::GetCoord(TInt theId) + { + TNodeCoord aCoord; + TInt aDim = myMeshInfo->GetDim(); + TInt aNbNodes = this->GetNbNodes(); + aCoord.resize(aDim); + + if(theId >= aNbNodes) + EXCEPTION(std::runtime_error, "TGrilleInfo::GetCoord - theId out of range"); + + if(myGrilleType == eGRILLE_STANDARD){ + switch(aDim){ + case 3: + aCoord[2] = myCoord[aDim*theId+2]; + case 2: + aCoord[1] = myCoord[aDim*theId+1]; + case 1:{ + aCoord[0] = myCoord[aDim*theId]; + break; + } + } + } else { -TNodeCoord -TGrilleInfo -::GetCoord(TInt theId) -{ - TNodeCoord aCoord; - TInt aDim = myMeshInfo->GetDim(); - TInt aNbNodes = this->GetNbNodes(); - aCoord.resize(aDim); - - if(theId >= aNbNodes) - EXCEPTION(std::runtime_error, "TGrilleInfo::GetCoord - theId out of range"); - - if(myGrilleType == eGRILLE_STANDARD){ - switch(aDim){ - case 3: - aCoord[2] = myCoord[aDim*theId+2]; - case 2: - aCoord[1] = myCoord[aDim*theId+1]; - case 1:{ - aCoord[0] = myCoord[aDim*theId]; - break; - } - } - } else { + TFloatVector aVecX = this->GetIndexes(0); + TInt nbIndxX = this->GetNbIndexes(0); - TFloatVector aVecX = this->GetIndexes(0); - TInt nbIndxX = this->GetNbIndexes(0); - - switch(aDim){ - case 1:{ - aCoord[0] = aVecX[theId]; - break; - } - case 2:{ - TFloatVector aVecY = this->GetIndexes(1); - TInt i,j,k; - i = j = k = 0; - i = theId % nbIndxX; - j = theId / nbIndxX; - if(myGrilleType == eGRILLE_CARTESIENNE){ - aCoord[0] = aVecX[i]; - aCoord[1] = aVecY[j]; - } else { // eGRILLE_POLAIRE (cylindrical) - aCoord[0] = aVecX[i] * cos(aVecY[j]); - aCoord[1] = aVecX[i] * sin(aVecY[j]); + switch(aDim){ + case 1:{ + aCoord[0] = aVecX[theId]; + break; + } + case 2:{ + TFloatVector aVecY = this->GetIndexes(1); + TInt i,j,k; + i = j = k = 0; + i = theId % nbIndxX; + j = theId / nbIndxX; + if(myGrilleType == eGRILLE_CARTESIENNE){ + aCoord[0] = aVecX[i]; + aCoord[1] = aVecY[j]; + } else { // eGRILLE_POLAIRE (cylindrical) + aCoord[0] = aVecX[i] * cos(aVecY[j]); + aCoord[1] = aVecX[i] * sin(aVecY[j]); + } + break; + } + case 3:{ + TFloatVector aVecY = this->GetIndexes(1); + TInt nbIndxY = this->GetNbIndexes(1); + TFloatVector aVecZ = this->GetIndexes(2); + TInt i,j,k; + i = j = k = 0; + + i = theId % nbIndxX; + j = (theId / nbIndxX) % nbIndxY; + k = theId / (nbIndxX*nbIndxY); + + if(myGrilleType == eGRILLE_CARTESIENNE){ + aCoord[0] = aVecX[i]; + aCoord[1] = aVecY[j]; + aCoord[2] = aVecZ[k]; + } else { // eGRILLE_POLAIRE (cylindrical) + aCoord[0] = aVecX[i] * cos(aVecY[j]); + aCoord[1] = aVecX[i] * sin(aVecY[j]); + aCoord[2] = aVecZ[k]; + } + + break; } - break; - } - case 3:{ - TFloatVector aVecY = this->GetIndexes(1); - TInt nbIndxY = this->GetNbIndexes(1); - TFloatVector aVecZ = this->GetIndexes(2); - TInt i,j,k; - i = j = k = 0; - - i = theId % nbIndxX; - j = (theId / nbIndxX) % nbIndxY; - k = theId / (nbIndxX*nbIndxY); - - if(myGrilleType == eGRILLE_CARTESIENNE){ - aCoord[0] = aVecX[i]; - aCoord[1] = aVecY[j]; - aCoord[2] = aVecZ[k]; - } else { // eGRILLE_POLAIRE (cylindrical) - aCoord[0] = aVecX[i] * cos(aVecY[j]); - aCoord[1] = aVecX[i] * sin(aVecY[j]); - aCoord[2] = aVecZ[k]; } - - break; - } } + + return aCoord; } - return aCoord; -} + TIntVector + TGrilleInfo + ::GetConn(TInt theId, const bool isSub) + { + TIntVector anIndexes; + TInt aDim = myMeshInfo->GetDim(); -TIntVector -TGrilleInfo -::GetConn(TInt theId, const bool isSub) -{ - TIntVector anIndexes; - TInt aDim = myMeshInfo->GetDim(); - - TInt idx; - TInt iMin, jMin, kMin, iMax, jMax, kMax; - TInt loc[3]; - - loc[0] = loc[1] = loc[2] = 0; - iMin = iMax = jMin = jMax = kMin = kMax = 0; - - switch(aDim) { - case 3: - { - TInt nbX = this->GetGrilleStructure()[0]; - TInt nbY = this->GetGrilleStructure()[1]; - TInt nbZ = this->GetGrilleStructure()[2]; - TInt d01 = nbX*nbY, dX = 1, dY = 1, dZ = 1; - if ( isSub ) + TInt idx; + TInt iMin, jMin, kMin, iMax, jMax, kMax; + TInt loc[3]; + + loc[0] = loc[1] = loc[2] = 0; + iMin = iMax = jMin = jMax = kMin = kMax = 0; + + switch(aDim) { + case 3: { - if ( theId < nbX * (nbY-1) * (nbZ-1)) - { // face is normal to X axis - dX = 0; - } - else if ( theId < nbX * (nbY-1) * (nbZ-1) + (nbX-1) * nbY * (nbZ-1)) - { // face is normal to Y axis - theId -= nbX * (nbY-1) * (nbZ-1); - dY = 0; - } - else + TInt nbX = this->GetGrilleStructure()[0]; + TInt nbY = this->GetGrilleStructure()[1]; + TInt nbZ = this->GetGrilleStructure()[2]; + TInt d01 = nbX*nbY, dX = 1, dY = 1, dZ = 1; + if ( isSub ) + { + if ( theId < nbX * (nbY-1) * (nbZ-1)) + { // face is normal to X axis + dX = 0; + } + else if ( theId < nbX * (nbY-1) * (nbZ-1) + (nbX-1) * nbY * (nbZ-1)) + { // face is normal to Y axis + theId -= nbX * (nbY-1) * (nbZ-1); + dY = 0; + } + else + { + theId -= nbX * (nbY-1) * (nbZ-1) + (nbX-1) * nbY * (nbZ-1); + dZ = 0; + } + } + //else { - theId -= nbX * (nbY-1) * (nbZ-1) + (nbX-1) * nbY * (nbZ-1); - dZ = 0; + iMin = theId % (nbX - dX); + jMin = (theId / (nbX - dX)) % (nbY - dY); + kMin = theId / ((nbX - dX) * (nbY - dY)); + iMax = iMin+dX; + jMax = jMin+dY; + kMax = kMin+dZ; } + for (loc[2]=kMin; loc[2]<=kMax; loc[2]++) + for (loc[1]=jMin; loc[1]<=jMax; loc[1]++) + for (loc[0]=iMin; loc[0]<=iMax; loc[0]++) + { + idx = loc[0] + loc[1]*nbX + loc[2]*d01; + anIndexes.push_back(idx); + } + break; } - //else + case 2: { - iMin = theId % (nbX - dX); - jMin = (theId / (nbX - dX)) % (nbY - dY); - kMin = theId / ((nbX - dX) * (nbY - dY)); + TInt nbX = this->GetGrilleStructure()[0]; + TInt nbY = this->GetGrilleStructure()[1]; + TInt dX = 1, dY = 1; + if ( isSub ) + { + if ( theId < nbX * (nbY-1)) + { // edge is normal to X axis + dX = 0; + } + else + { + theId -= nbX * (nbY-1); + dY = 0; + } + } + iMin = theId % (nbX-dX); + jMin = theId / (nbX-dX); iMax = iMin+dX; jMax = jMin+dY; - kMax = kMin+dZ; - } - for (loc[2]=kMin; loc[2]<=kMax; loc[2]++) for (loc[1]=jMin; loc[1]<=jMax; loc[1]++) for (loc[0]=iMin; loc[0]<=iMax; loc[0]++) + { + idx = loc[0] + loc[1]*nbX; + anIndexes.push_back(idx); + } + break; + } + case 1: + { + iMin = theId; + for (loc[0]=iMin; loc[0]<=iMin+1; loc[0]++) { - idx = loc[0] + loc[1]*nbX + loc[2]*d01; + idx = loc[0]; anIndexes.push_back(idx); } - break; - } - case 2: - { - TInt nbX = this->GetGrilleStructure()[0]; - TInt nbY = this->GetGrilleStructure()[1]; - TInt dX = 1, dY = 1; - if ( isSub ) - { - if ( theId < nbX * (nbY-1)) - { // edge is normal to X axis - dX = 0; - } - else - { - theId -= nbX * (nbY-1); - dY = 0; - } - } - iMin = theId % (nbX-dX); - jMin = theId / (nbX-dX); - iMax = iMin+dX; - jMax = jMin+dY; - for (loc[1]=jMin; loc[1]<=jMax; loc[1]++) - for (loc[0]=iMin; loc[0]<=iMax; loc[0]++) - { - idx = loc[0] + loc[1]*nbX; - anIndexes.push_back(idx); - } - break; - } - case 1: - { - iMin = theId; - for (loc[0]=iMin; loc[0]<=iMin+1; loc[0]++) - { - idx = loc[0]; - anIndexes.push_back(idx); + break; } - break; } - } - return anIndexes; -} + return anIndexes; + } -TInt -TGrilleInfo -::GetFamNumNode(TInt theId) const -{ - return myFamNumNode[theId]; -} + TInt + TGrilleInfo + ::GetFamNumNode(TInt theId) const + { + return myFamNumNode[theId]; + } -void -TGrilleInfo -::SetFamNumNode(TInt theId,TInt theVal) -{ - myFamNumNode[theId] = theVal; -} + void + TGrilleInfo + ::SetFamNumNode(TInt theId,TInt theVal) + { + myFamNumNode[theId] = theVal; + } -TInt -TGrilleInfo -::GetFamNum(TInt theId) const -{ - return myFamNum[theId]; -} + TInt + TGrilleInfo + ::GetFamNum(TInt theId) const + { + return myFamNum[theId]; + } -void -TGrilleInfo -::SetFamNum(TInt theId,TInt theVal) -{ - myFamNum[theId] = theVal; -} + void + TGrilleInfo + ::SetFamNum(TInt theId,TInt theVal) + { + myFamNum[theId] = theVal; + } -TInt -TGrilleInfo -::GetFamSubNum(TInt theId) const -{ - return myFamSubNum[theId]; -} + TInt + TGrilleInfo + ::GetFamSubNum(TInt theId) const + { + return myFamSubNum[theId]; + } -void -TGrilleInfo -::SetFamSubNum(TInt theId,TInt theVal) -{ - myFamSubNum[theId] = theVal; + void + TGrilleInfo + ::SetFamSubNum(TInt theId,TInt theVal) + { + myFamSubNum[theId] = theVal; + } } diff --git a/src/MEDWrapper/MED_Structures.hxx b/src/MEDWrapper/MED_Structures.hxx index 564d24dd1..9457b7e23 100644 --- a/src/MEDWrapper/MED_Structures.hxx +++ b/src/MEDWrapper/MED_Structures.hxx @@ -26,6 +26,9 @@ #include "MED_WrapperDef.hxx" #include "MED_Common.hxx" #include "MED_Utilities.hxx" +#include "MED_SliceArray.hxx" + +#include #ifdef WIN32 #pragma warning(disable:4251) @@ -35,34 +38,40 @@ namespace MED { //--------------------------------------------------------------- //! Defines a type for managing sequence of strings - typedef TVector TString; + typedef TVector TString; typedef SharedPtr PString; + //--------------------------------------------------------------- //! Extract a substring from the sequence of the strings MEDWRAPPER_EXPORT - std::string - GetString(TInt theId, TInt theStep, + std::string + GetString(TInt theId, + TInt theStep, const TString& theString); - + + //--------------------------------------------------------------- //! Set a substring in the sequence of the strings - MEDWRAPPER_EXPORT + MEDWRAPPER_EXPORT void - SetString(TInt theId, TInt theStep, - TString& theString, - const std::string& theValue); + SetString(TInt theId, + TInt theStep, + TString& theString, + const std::string& theValue); + //--------------------------------------------------------------- //! Set a substring in the sequence of the strings MEDWRAPPER_EXPORT void - SetString(TInt theId, TInt theStep, - TString& theString, - const TString& theValue); + SetString(TInt theId, + TInt theStep, + TString& theString, + const TString& theValue); //--------------------------------------------------------------- //! Define a parent class for all MEDWrapper classes struct MEDWRAPPER_EXPORT TBase { - virtual ~TBase() {} + virtual ~TBase() {} }; //--------------------------------------------------------------- @@ -78,7 +87,7 @@ namespace MED //--------------------------------------------------------------- //! Define a parent class for all MED entities that contains a sequence of numbers /*! - It defines through corresponding enumeration (EModeSwitch) how the sequence + It defines through corresponding enumeration (EModeSwitch) how the sequence should be interpreted in C or Fortran mode (eFULL_INTERLACE or eNON_INTERLACE). */ struct MEDWRAPPER_EXPORT TModeSwitchInfo: virtual TBase @@ -93,8 +102,8 @@ namespace MED myModeSwitch(theModeSwitch) {} - EModeSwitch myModeSwitch; //!< Keeps the - EModeSwitch GetModeSwitch() const { return myModeSwitch;} + EModeSwitch myModeSwitch; //!< Keeps the interlace mode + EModeSwitch GetModeSwitch() const { return myModeSwitch; } }; //--------------------------------------------------------------- @@ -102,13 +111,13 @@ namespace MED struct MEDWRAPPER_EXPORT TMeshInfo: virtual TNameInfo { TInt myDim; //!< Dimension of the mesh (0, 1, 2 or 3) - TInt GetDim() const { return myDim;} //!< Gets dimension of the mesh + TInt GetDim() const { return myDim; } //!< Gets dimension of the mesh TInt mySpaceDim; TInt GetSpaceDim() const { return mySpaceDim; } EMaillage myType; //!< Type of the mesh - EMaillage GetType() const { return myType;} //!< Gets type of the mesh + EMaillage GetType() const { return myType; } //!< Gets type of the mesh TString myDesc; //!< Description of the mesh virtual std::string GetDesc() const = 0; //!< Get description for the mesh @@ -116,40 +125,39 @@ namespace MED }; //--------------------------------------------------------------- - typedef TVector TIntVector; typedef TSlice TIntVecSlice; typedef TCSlice TCIntVecSlice; - typedef TIntVector TFamAttr; + //--------------------------------------------------------------- //! Define a base class which represents MED Family entity struct MEDWRAPPER_EXPORT TFamilyInfo: virtual TNameInfo { PMeshInfo myMeshInfo; //!< A reference to correspondig MED Mesh //! Get a reference to corresponding MED Mesh - const PMeshInfo& GetMeshInfo() const { return myMeshInfo;} + const PMeshInfo& GetMeshInfo() const { return myMeshInfo; } TInt myId; //!< An unique index of the MED FAMILY - TInt GetId() const { return myId;} //!< Gets number of the MED FAMILY - void SetId(TInt theId) { myId = theId;} //! Define number of the MED FAMILY + TInt GetId() const { return myId; } //!< Gets number of the MED FAMILY + void SetId(TInt theId) { myId = theId; } //! Define number of the MED FAMILY TInt myNbGroup; //!< Defines number MED Groups connected to //! Gets number of MED GROUPS the MED FAMILY is bound to - TInt GetNbGroup() const { return myNbGroup;} + TInt GetNbGroup() const { return myNbGroup; } //! Contains sequence of the names for the MED Groups connected to - TString myGroupNames; + TString myGroupNames; //! Gets name of a bound MED GROUP by its number virtual std::string GetGroupName(TInt theId) const = 0; //! Sets name of the defined MED GROUP by its number virtual void SetGroupName(TInt theId, const std::string& theValue) = 0; - TInt myNbAttr; //!< Defines number of the MED Family attributes + TInt myNbAttr; //!< Defines number of the MED Family attributes //! Gets number of attached attributes for the MED FAMILY - TInt GetNbAttr() const { return myNbAttr;} + TInt GetNbAttr() const { return myNbAttr; } //! Defines sequence of the indexes of the MED Family attributes - TFamAttr myAttrId; + TFamAttr myAttrId; //! Get MED FAMILY attribute by its number TInt GetAttrId(TInt theId) const; //! Set MED FAMILY attribute by its number @@ -173,34 +181,34 @@ namespace MED //--------------------------------------------------------------- typedef TIntVector TElemNum; typedef SharedPtr PElemNum; - + + //--------------------------------------------------------------- //! Define a parent class for all MED entities that describes mesh entites such as nodes and cells. struct MEDWRAPPER_EXPORT TElemInfo: virtual TBase { PMeshInfo myMeshInfo; //!< A reference to correspondig MED Mesh //! Get a reference to corresponding MED Mesh - const PMeshInfo& GetMeshInfo() const { return myMeshInfo;} + const PMeshInfo& GetMeshInfo() const { return myMeshInfo; } TInt myNbElem; // TFloatVector; typedef TSlice TFloatVecSlice; typedef TCSlice TCFloatVecSlice; - typedef TFloatVector TNodeCoord; typedef SharedPtr PNodeCoord; - typedef TFloatVecSlice TCoordSlice; typedef TCFloatVecSlice TCCoordSlice; + //--------------------------------------------------------------- //! Define a base class which represents MED Nodes entity - struct MEDWRAPPER_EXPORT TNodeInfo: + struct MEDWRAPPER_EXPORT TNodeInfo: virtual TElemInfo, - virtual TModeSwitchInfo + virtual TModeSwitchInfo { PNodeCoord myCoord; //!< Contains all nodal coordinates @@ -247,9 +253,9 @@ namespace MED ERepere mySystem; //!< Defines, which coordinate system is used //! Get which coordinate system is used for the node describing - ERepere GetSystem() const { return mySystem;} + ERepere GetSystem() const { return mySystem; } //! Set coordinate system to be used for the node describing - void SetSystem(ERepere theSystem) { mySystem = theSystem;} + void SetSystem(ERepere theSystem) { mySystem = theSystem; } TString myCoordNames; //!< Contains names for the coordinate dimensions //! Get name of the coordinate dimension by its order number @@ -268,22 +274,23 @@ namespace MED typedef TIntVecSlice TConnSlice; typedef TCIntVecSlice TCConnSlice; + //--------------------------------------------------------------- //! Define a base class which represents MED Cells entity - struct MEDWRAPPER_EXPORT TCellInfo: + struct MEDWRAPPER_EXPORT TCellInfo: virtual TElemInfo, - virtual TModeSwitchInfo + virtual TModeSwitchInfo { EEntiteMaillage myEntity; //!< Defines the MED Entity where the mesh cells belongs to //! Let known what MED ENTITY the cells belong to - EEntiteMaillage GetEntity() const { return myEntity;} + EEntiteMaillage GetEntity() const { return myEntity; } EGeometrieElement myGeom; //!< Defines the MED Geometric type of the instance //! Let known what MED geometrical type the cells belong to - EGeometrieElement GetGeom() const { return myGeom;} + EGeometrieElement GetGeom() const { return myGeom; } EConnectivite myConnMode; //!< Defines connectivity mode //! Let known in what connectivity the cells are writen - EConnectivite GetConnMode() const { return myConnMode;} + EConnectivite GetConnMode() const { return myConnMode; } virtual TInt GetConnDim() const = 0; //!< Gives step in the connectivity sequence @@ -297,23 +304,23 @@ namespace MED //--------------------------------------------------------------- //! Define a base class which represents MED Polygon entity - struct MEDWRAPPER_EXPORT TPolygoneInfo: + struct MEDWRAPPER_EXPORT TPolygoneInfo: virtual TElemInfo { //! Defines the MED Entity where the polygons belongs to EEntiteMaillage myEntity; // MED_FACE|MED_MAILLE //! Let known what MED ENTITY the MED Polygons belong to - EEntiteMaillage GetEntity() const { return myEntity;} + EEntiteMaillage GetEntity() const { return myEntity; } //! Defines the MED Geometric type of the instance EGeometrieElement myGeom; // ePOLYGONE //! Let known what MED geometrical type the MED Polygons belong to - EGeometrieElement GetGeom() const { return ePOLYGONE;} + EGeometrieElement GetGeom() const { return ePOLYGONE; } //! Defines connectivity mode EConnectivite myConnMode; // eNOD|eDESC(eDESC not used) //! Let known in what connectivity the cells are writen - EConnectivite GetConnMode() const { return myConnMode;} + EConnectivite GetConnMode() const { return myConnMode; } PElemNum myConn; //!< Table de connectivities PElemNum myIndex; //!< Table de indexes @@ -329,12 +336,12 @@ namespace MED //--------------------------------------------------------------- //! Define a class representing MED_BALL structure element. - // - // This could be a generic class for any structure element - // holding any number of contant and variable attributes - // but it's too hard to implement - // - struct MEDWRAPPER_EXPORT TBallInfo: + /*! + This could be a generic class for any structure element + holding any number of contant and variable attributes + but it's too hard to implement + */ + struct MEDWRAPPER_EXPORT TBallInfo: virtual TCellInfo { TFloatVector myDiameters; @@ -344,24 +351,25 @@ namespace MED typedef TVector TCConnSliceArr; typedef TVector TConnSliceArr; + //--------------------------------------------------------------- //! Define a base class which represents MED Polyedre entity - struct MEDWRAPPER_EXPORT TPolyedreInfo: + struct MEDWRAPPER_EXPORT TPolyedreInfo: virtual TElemInfo { //! Defines the MED Entity where the polyedres belongs to EEntiteMaillage myEntity; // MED_FACE|MED_MAILLE //! Let known what MED ENTITY the MED Polyedres belong to - EEntiteMaillage GetEntity() const { return myEntity;} + EEntiteMaillage GetEntity() const { return myEntity; } //! Defines the MED Geometric type of the instance EGeometrieElement myGeom; // ePOLYEDRE //! Let known what MED geometrical type the MED Polyedres belong to - EGeometrieElement GetGeom() const { return ePOLYEDRE;} + EGeometrieElement GetGeom() const { return ePOLYEDRE; } //! Defines connectivity mode EConnectivite myConnMode; // eNOD|eDESC(eDESC not used) //! Let known in what connectivity the cells are writen - EConnectivite GetConnMode() const { return myConnMode;} + EConnectivite GetConnMode() const { return myConnMode; } PElemNum myConn; //!< Table de connectivities PElemNum myFaces; //!< Table de faces indexes @@ -380,28 +388,28 @@ namespace MED //--------------------------------------------------------------- //! Define a base class which represents MED Field entity - struct MEDWRAPPER_EXPORT TFieldInfo: + struct MEDWRAPPER_EXPORT TFieldInfo: virtual TNameInfo { PMeshInfo myMeshInfo; //!< A reference to correspondig MED Mesh //! Get a reference to corresponding MED Mesh - const PMeshInfo& GetMeshInfo() const { return myMeshInfo;} + const PMeshInfo& GetMeshInfo() const { return myMeshInfo; } ETypeChamp myType; //!< Defines type of the MED Field //! Let known what type of the MED FIELD is used - ETypeChamp GetType() const { return myType;} + ETypeChamp GetType() const { return myType; } TInt myNbComp; //!< Defines number of components stored in the field //! Get number of components for the MED FIELD - TInt GetNbComp() const { return myNbComp;} + TInt GetNbComp() const { return myNbComp; } EBooleen myIsLocal; //!< Defines if the MED Field is local //! Let known is the MED FIELD is local or not - EBooleen GetIsLocal() const { return myIsLocal;} + EBooleen GetIsLocal() const { return myIsLocal; } TInt myNbRef; //!< Defines number of refereces of the field //! Let known number of references for the MED FIELD - TInt GetNbRef() const { return myNbRef;} + TInt GetNbRef() const { return myNbRef; } TString myCompNames; //!< Contains names for each of MED Field components //! Get name of the component by its order number @@ -422,17 +430,20 @@ namespace MED TInt GetDimGaussCoord(EGeometrieElement theGeom); + //--------------------------------------------------------------- //! Get number of referenced nodes for the defined type of mesh cell MEDWRAPPER_EXPORT TInt GetNbRefCoord(EGeometrieElement theGeom); + //--------------------------------------------------------------- typedef TFloatVector TWeight; + //--------------------------------------------------------------- //! The class represents MED Gauss entity - struct MEDWRAPPER_EXPORT TGaussInfo: + struct MEDWRAPPER_EXPORT TGaussInfo: virtual TNameInfo, - virtual TModeSwitchInfo + virtual TModeSwitchInfo { typedef boost::tuple TKey; typedef boost::tuple TInfo; @@ -446,12 +457,12 @@ namespace MED }; //! Defines, which geometrical type the MED Gauss entity belongs to - EGeometrieElement myGeom; + EGeometrieElement myGeom; //! Let known what MED geometrical type the MED GAUSS entity belong to - EGeometrieElement GetGeom() const { return myGeom;} + EGeometrieElement GetGeom() const { return myGeom; } //! Contains coordinates for the refereced nodes - TNodeCoord myRefCoord; + TNodeCoord myRefCoord; //! Gives coordinates for the referenced node by its number TCCoordSlice GetRefCoordSlice(TInt theId) const; @@ -470,53 +481,54 @@ namespace MED TWeight myWeight; //! Gives number of the referenced nodes - TInt GetNbRef() const { return GetNbRefCoord(GetGeom());} + TInt GetNbRef() const { return GetNbRefCoord(GetGeom()); } //! Gives dimension of the referenced nodes - TInt GetDim() const { return GetDimGaussCoord(GetGeom());} + TInt GetDim() const { return GetDimGaussCoord(GetGeom()); } //! Gives number of the Gauss Points - TInt GetNbGauss() const { return (TInt)(myGaussCoord.size()/GetDim());} + TInt GetNbGauss() const { return (TInt)(myGaussCoord.size() / GetDim()); } }; //--------------------------------------------------------------- typedef std::map TGeom2Gauss; typedef std::map TGeom2NbGauss; + //--------------------------------------------------------------- //! Define a base class which represents MED TimeStamp - struct MEDWRAPPER_EXPORT TTimeStampInfo: + struct MEDWRAPPER_EXPORT TTimeStampInfo: virtual TBase { PFieldInfo myFieldInfo; //!< A reference to correspondig MED Field //! Get a reference to corresponding MED Field - const PFieldInfo& GetFieldInfo() const { return myFieldInfo;} + const PFieldInfo& GetFieldInfo() const { return myFieldInfo; } //! Defines the MED Entity where the MED TimeStamp belongs to EEntiteMaillage myEntity; //! Let known to what MED Entity the MED TimeStamp belong to - EEntiteMaillage GetEntity() const { return myEntity;} + EEntiteMaillage GetEntity() const { return myEntity; } //! Keeps map of number of cells per geometric type where the MED TimeStamp belongs to TGeom2Size myGeom2Size; //! Get map of number of cells per geometric type where the MED TimeStamp belongs to - const TGeom2Size& GetGeom2Size() const { return myGeom2Size;} + const TGeom2Size& GetGeom2Size() const { return myGeom2Size; } TGeom2NbGauss myGeom2NbGauss; //!< Keeps number of the Gauss Points for the MED TimeStamp TInt GetNbGauss(EGeometrieElement theGeom) const; //!< Gives number of the Gauss Points for the MED TimeStamp TInt myNumDt; //!< Keeps number in time for the MED TimeStamp - TInt GetNumDt() const { return myNumDt;} //!< Defines number in time for the MED TimeStamp + TInt GetNumDt() const { return myNumDt; } //!< Defines number in time for the MED TimeStamp TInt myNumOrd; //!< Keeps number for the MED TimeStamp - TInt GetNumOrd() const { return myNumOrd;} //!< Defines number for the MED TimeStamp + TInt GetNumOrd() const { return myNumOrd; } //!< Defines number for the MED TimeStamp TFloat myDt; //!< Keeps time for the MED TimeStamp - TFloat GetDt() const { return myDt;} //!< Defines time for the MED TimeStamp + TFloat GetDt() const { return myDt; } //!< Defines time for the MED TimeStamp //! Keeps map of MED Gauss entityes per geometric type TGeom2Gauss myGeom2Gauss; //! Gets a map of MED Gauss entityes per geometric type - const TGeom2Gauss& GetGeom2Gauss() const { return myGeom2Gauss;} + const TGeom2Gauss& GetGeom2Gauss() const { return myGeom2Gauss; } TString myUnitDt; //!< Defines unit for the time for the MED TimeStamp //! Get unit of time for the MED TimeStamp @@ -527,7 +539,7 @@ namespace MED //--------------------------------------------------------------- //! The class represents MED Profile entity - struct MEDWRAPPER_EXPORT TProfileInfo: + struct MEDWRAPPER_EXPORT TProfileInfo: virtual TNameInfo { typedef std::string TKey; @@ -535,9 +547,9 @@ namespace MED EModeProfil myMode; //!< Keeps mode for the MED Profile //! Let known what mode of MED Profile is used - EModeProfil GetMode() const { return myMode;} + EModeProfil GetMode() const { return myMode; } //! Set mode for the MED Profile - void SetMode(EModeProfil theMode) { myMode = theMode;} + void SetMode(EModeProfil theMode) { myMode = theMode; } PElemNum myElemNum; //!< Keeps sequence of cell by its number which belong to the profile //! Get number of mesh elelemts by its order number @@ -546,16 +558,16 @@ namespace MED void SetElemNum(TInt theId, TInt theVal); //! Let known is the MED Profile defined - bool IsPresent() const { return GetName() != "";} + bool IsPresent() const { return GetName() != ""; } //! Let known size of the MED Profile - TInt GetSize() const { return (TInt)myElemNum->size();} + TInt GetSize() const { return (TInt)myElemNum->size(); } }; //--------------------------------------------------------------- //! The class is a helper one. It provide safe and flexible way to get access to values for a MED TimeStamp struct MEDWRAPPER_EXPORT TMeshValueBase: - virtual TModeSwitchInfo + virtual TModeSwitchInfo { TInt myNbElem; TInt myNbComp; @@ -574,19 +586,19 @@ namespace MED //! Returns size of the value container size_t GetSize() const; - + //! Returns MED interpetation of the value size size_t GetNbVal() const; - + //! Returns number of Gauss Points bounded with the value size_t GetNbGauss() const; - + //! Returns step inside of the data array size_t GetStep() const; - + //! Returns bare pointer on the internal value representation virtual unsigned char* @@ -597,17 +609,17 @@ namespace MED //! The class is a helper one. It provide safe and flexible way to get access to values for a MED TimeStamp template struct TTMeshValue: - virtual TMeshValueBase + virtual TMeshValueBase { typedef TValueType TValue; typedef typename TValueType::value_type TElement; typedef TSlice TValueSlice; typedef TCSlice TCValueSlice; - + typedef TVector TCValueSliceArr; typedef TVector TValueSliceArr; - + TValue myValue; //! Initialize the class @@ -668,7 +680,7 @@ namespace MED } //! Iteration through Gauss Points by their components - TValueSliceArr + TValueSliceArr GetGaussValueSliceArr(TInt theElemId) { TValueSliceArr aValueSliceArr(myNbGauss); @@ -712,7 +724,7 @@ namespace MED } //! Iteration through components by corresponding Gauss Points - TValueSliceArr + TValueSliceArr GetCompValueSliceArr(TInt theElemId) { if(GetModeSwitch() == eFULL_INTERLACE){ @@ -736,18 +748,19 @@ namespace MED } }; + //--------------------------------------------------------------- typedef TTMeshValue TFloatMeshValue; typedef TTMeshValue TIntMeshValue; //--------------------------------------------------------------- - // Backward compatibility declarations + // Backward compatibility declarations typedef TFloatVector TValue; typedef TSlice TValueSlice; typedef TCSlice TCValueSlice; - + typedef TVector TCValueSliceArr; typedef TVector TValueSliceArr; - + typedef TFloatMeshValue TMeshValue; typedef std::map TGeom2Value; @@ -755,51 +768,52 @@ namespace MED typedef std::map TGeom2Profile; typedef std::set TGeom; + //--------------------------------------------------------------- //! The class is a base class for MED TimeStamp values holder - struct MEDWRAPPER_EXPORT TTimeStampValueBase: - virtual TModeSwitchInfo + struct MEDWRAPPER_EXPORT TTimeStampValueBase: + virtual TModeSwitchInfo { //! A reference to correspondig MED TimeStamp PTimeStampInfo myTimeStampInfo; //!< Get a reference to correspondig MED TimeStamp - const PTimeStampInfo& GetTimeStampInfo() const { return myTimeStampInfo;} + const PTimeStampInfo& GetTimeStampInfo() const { return myTimeStampInfo; } //! Keeps set of MED EGeometrieElement which contains values for the timestamp TGeomSet myGeomSet; - const TGeomSet& GetGeomSet() const { return myGeomSet;} + const TGeomSet& GetGeomSet() const { return myGeomSet; } //! Keeps map of MED Profiles per geometric type TGeom2Profile myGeom2Profile; //! Gets a map of MED Profiles per geometric type - const TGeom2Profile& GetGeom2Profile() const { return myGeom2Profile;} + const TGeom2Profile& GetGeom2Profile() const { return myGeom2Profile; } //! Gets type of the champ - virtual + virtual ETypeChamp GetTypeChamp() const = 0; //! Allocates values for the given geometry - virtual + virtual void AllocateValue(EGeometrieElement theGeom, TInt theNbElem, TInt theNbGauss, TInt theNbComp, EModeSwitch theMode = eFULL_INTERLACE) = 0; - - virtual + + virtual size_t GetValueSize(EGeometrieElement theGeom) const = 0; - - virtual + + virtual size_t GetNbVal(EGeometrieElement theGeom) const = 0; - - virtual + + virtual size_t GetNbGauss(EGeometrieElement theGeom) const = 0; - virtual + virtual unsigned char* GetValuePtr(EGeometrieElement theGeom) = 0; }; @@ -807,8 +821,8 @@ namespace MED //--------------------------------------------------------------- //! The class implements a container for MED TimeStamp values template - struct TTimeStampValue: - virtual TTimeStampValueBase + struct TTimeStampValue: + virtual TTimeStampValueBase { typedef TMeshValueType TTMeshValue; typedef SharedPtr PTMeshValue; @@ -818,7 +832,7 @@ namespace MED ETypeChamp myTypeChamp; //GetMeshValuePtr(theGeom)); } //! Gets MED TimeStamp values for the given geometric type - TTMeshValue& + TTMeshValue& GetMeshValue(EGeometrieElement theGeom) { return *(this->GetMeshValuePtr(theGeom)); @@ -880,7 +894,7 @@ namespace MED typedef TTimeStampValue TIntTimeStampValue; typedef SharedPtr PIntTimeStampValue; - + PIntTimeStampValue MEDWRAPPER_EXPORT CastToIntTimeStampValue(const PTimeStampValueBase& theTimeStampValue); @@ -900,8 +914,8 @@ namespace MED const EGeometrieElement& aGeom = anIter->first; const typename TimeStampValueTypeFrom::TTMeshValue& aMeshValue = *anIter->second; typename TimeStampValueTypeTo::TTMeshValue& aMeshValue2 = theTimeStampValueTo->GetMeshValue(aGeom); - aMeshValue2.Allocate(aMeshValue.myNbElem, - aMeshValue.myNbGauss, + aMeshValue2.Allocate(aMeshValue.myNbElem, + aMeshValue.myNbGauss, aMeshValue.myNbComp, aMeshValue.myModeSwitch); const typename TimeStampValueTypeFrom::TTMeshValue::TValue& aValue = aMeshValue.myValue; @@ -912,6 +926,7 @@ namespace MED } } + //--------------------------------------------------------------- template void CopyTimeStampValue(SharedPtr > theTimeStampValueFrom, @@ -931,7 +946,7 @@ namespace MED //--------------------------------------------------------------- inline void - CopyTimeStampValueBase(const PTimeStampValueBase& theValueFrom, + CopyTimeStampValueBase(const PTimeStampValueBase& theValueFrom, const PTimeStampValueBase& theValueTo) { if(theValueFrom->GetTypeChamp() == theValueTo->GetTypeChamp()){ @@ -948,20 +963,21 @@ namespace MED } //--------------------------------------------------------------- - // Backward compatibility declarations + // Backward compatibility declarations typedef TFloatTimeStampValue TTimeStampVal; typedef PFloatTimeStampValue PTimeStampVal; //--------------------------------------------------------------- typedef std::map TIndexes; typedef std::map TNames; - + + //--------------------------------------------------------------- //! Define a base class which represents MED Grille (structured mesh) struct MEDWRAPPER_EXPORT TGrilleInfo: virtual TModeSwitchInfo { PMeshInfo myMeshInfo; - const PMeshInfo& GetMeshInfo() const { return myMeshInfo;} + const PMeshInfo& GetMeshInfo() const { return myMeshInfo; } TNodeCoord myCoord; //!< Contains all nodal coordinates, now used only for eGRILLE_STANDARD //! Gives coordinates for mesh nodes (const version) @@ -1004,7 +1020,7 @@ namespace MED TFloatVector& GetIndexes(TInt theAxisNumber); //!Gets a number of indices per axe TInt GetNbIndexes(TInt theAxisNumber); - + TInt GetNbNodes();//! Return count of all points TInt GetNbCells();//! Return count of all cells TInt GetNbSubCells();//! Return count of all entities of @@ -1023,32 +1039,32 @@ namespace MED TIntVector GetGrilleStructure(); //!Sets the grille structure of theAxis axe to theNb. void SetGrilleStructure(TInt theAxis,TInt theNb); - + /*! *Defines sequence MED Family indexes for corresponding mesh entites */ - TElemNum myFamNum; + TElemNum myFamNum; //! Get number of a MED FAMILY by order number of the mesh element TInt GetFamNum(TInt theId) const; - //! Set number of a MED FAMILY for the mesh element with the order number + //! Set number of a MED FAMILY for the mesh element with the order number void SetFamNum(TInt theId, TInt theVal); - + /*! *Defines sequence MED Family indexes for sub entites */ - TElemNum myFamSubNum; + TElemNum myFamSubNum; //! Get number of a MED FAMILY by order number of sub element TInt GetFamSubNum(TInt theId) const; //! Set number of a MED FAMILY for theId-th sub element void SetFamSubNum(TInt theId, TInt theVal); - + /*! *Defines sequence MED Family indexes for corresponding mesh nodes */ TElemNum myFamNumNode; //! Get number of a MED FAMILY by order number of the mesh node TInt GetFamNumNode(TInt theId) const; - //! Set number of a MED FAMILY for the mesh node with the order number + //! Set number of a MED FAMILY for the mesh node with the order number void SetFamNumNode(TInt theId, TInt theVal); }; } diff --git a/src/MEDWrapper/MED_TWrapper.hxx b/src/MEDWrapper/MED_TWrapper.hxx deleted file mode 100644 index bed64f23a..000000000 --- a/src/MEDWrapper/MED_TWrapper.hxx +++ /dev/null @@ -1,581 +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 -// - -#ifndef MED_TWrapper_HeaderFile -#define MED_TWrapper_HeaderFile - -#include "MED_TStructures.hxx" -#include "MED_Wrapper.hxx" - -namespace MED -{ - class TTWrapper: public TWrapper - { - public: - //---------------------------------------------------------------------------- - virtual - PMeshInfo - CrMeshInfo(TInt theDim = 0, TInt theSpaceDim = 0, - const std::string& theValue = "", - EMaillage theType = eNON_STRUCTURE, - const std::string& theDesc = "") - { - return PMeshInfo(new TTMeshInfo - (theDim, - theSpaceDim, - theValue, - theType, - theDesc)); - } - - //---------------------------------------------------------------------------- - virtual - PMeshInfo - CrMeshInfo(const PMeshInfo& theInfo) - { - return PMeshInfo(new TTMeshInfo(theInfo)); - } - - //---------------------------------------------------------------------------- - virtual - PFamilyInfo - CrFamilyInfo(const PMeshInfo& theMeshInfo, - TInt theNbGroup = 0, - TInt theNbAttr = 0, - TInt theId = 0, - const std::string& theValue = "") - { - return PFamilyInfo(new TTFamilyInfo - (theMeshInfo, - theNbGroup, - theNbAttr, - theId, - theValue)); - } - - //---------------------------------------------------------------------------- - virtual - PFamilyInfo - CrFamilyInfo(const PMeshInfo& theMeshInfo, - const std::string& theValue, - TInt theId, - const MED::TStringSet& theGroupNames, - const MED::TStringVector& theAttrDescs = MED::TStringVector(), - const MED::TIntVector& theAttrIds = MED::TIntVector(), - const MED::TIntVector& theAttrVals = MED::TIntVector()) - { - return PFamilyInfo(new TTFamilyInfo - (theMeshInfo, - theValue, - theId, - theGroupNames, - theAttrDescs, - theAttrIds, - theAttrVals)); - } - - //---------------------------------------------------------------------------- - virtual - PFamilyInfo - CrFamilyInfo(const PMeshInfo& theMeshInfo, - const PFamilyInfo& theInfo) - { - return PFamilyInfo(new TTFamilyInfo - (theMeshInfo, - theInfo)); - } - - //---------------------------------------------------------------------------- - virtual - PElemInfo - CrElemInfo(const PMeshInfo& theMeshInfo, - TInt theNbElem, - EBooleen theIsElemNum = eVRAI, - EBooleen theIsElemNames = eVRAI) - { - return PElemInfo(new TTElemInfo - (theMeshInfo, - theNbElem, - theIsElemNum, - theIsElemNames)); - } - - //---------------------------------------------------------------------------- - virtual - PElemInfo - CrElemInfo(const PMeshInfo& theMeshInfo, - TInt theNbElem, - const TIntVector& theFamNum, - const TIntVector& aElemNum, - const TStringVector& aElemNames) - { - return PElemInfo(new TTElemInfo - (theMeshInfo, - theNbElem, - theFamNum, - aElemNum, - aElemNames)); - } - - //---------------------------------------------------------------------------- - virtual - PNodeInfo - CrNodeInfo(const PMeshInfo& theMeshInfo, - TInt theNbElem, - EModeSwitch theMode = eFULL_INTERLACE, - ERepere theSystem = eCART, - EBooleen theIsElemNum = eVRAI, - EBooleen theIsElemNames = eVRAI) - { - return PNodeInfo(new TTNodeInfo - (theMeshInfo, - theNbElem, - theMode, - theSystem, - theIsElemNum, - theIsElemNames)); - } - - //---------------------------------------------------------------------------- - virtual - PNodeInfo - CrNodeInfo(const PMeshInfo& theMeshInfo, - const TFloatVector& theNodeCoords, - EModeSwitch theMode = eFULL_INTERLACE, - ERepere theSystem = eCART, - const TStringVector& theCoordNames = TStringVector(), - const TStringVector& theCoordUnits = TStringVector(), - const TIntVector& theFamilyNums = TIntVector(), - const TIntVector& theElemNums = TIntVector(), - const TStringVector& theElemNames = TStringVector()) - { - return PNodeInfo(new TTNodeInfo - (theMeshInfo, - theNodeCoords, - theMode, - theSystem, - theCoordNames, - theCoordUnits, - theFamilyNums, - theElemNums, - theElemNames)); - } - - //---------------------------------------------------------------------------- - virtual - PNodeInfo - CrNodeInfo(const PMeshInfo& theMeshInfo, - const PNodeInfo& theInfo) - { - return PNodeInfo(new TTNodeInfo - (theMeshInfo, - theInfo)); - } - - //---------------------------------------------------------------------------- - virtual - PPolygoneInfo - CrPolygoneInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TInt theNbElem, - TInt theConnSize, - EConnectivite theConnMode = eNOD, - EBooleen theIsElemNum = eVRAI, - EBooleen theIsElemNames = eVRAI) - { - return PPolygoneInfo(new TTPolygoneInfo - (theMeshInfo, - theEntity, - theGeom, - theNbElem, - theConnSize, - theConnMode, - theIsElemNum, - theIsElemNames)); - } - - //---------------------------------------------------------------------------- - virtual - PPolygoneInfo - CrPolygoneInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - const TIntVector& theIndexes, - const TIntVector& theConnectivities, - EConnectivite theConnMode = eNOD, - const TIntVector& theFamilyNums = TIntVector(), - const TIntVector& theElemNums = TIntVector(), - const TStringVector& theElemNames = TStringVector()) - { - return PPolygoneInfo(new TTPolygoneInfo - (theMeshInfo, - theEntity, - theGeom, - theIndexes, - theConnectivities, - theConnMode, - theFamilyNums, - theElemNums, - theElemNames)); - } - - //---------------------------------------------------------------------------- - virtual - PPolygoneInfo - CrPolygoneInfo(const PMeshInfo& theMeshInfo, - const PPolygoneInfo& theInfo) - { - return PPolygoneInfo(new TTPolygoneInfo - (theMeshInfo, - theInfo)); - } - - //---------------------------------------------------------------------------- - virtual - PPolyedreInfo - CrPolyedreInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TInt theNbElem, - TInt theNbFaces, - TInt theConnSize, - EConnectivite theConnMode = eNOD, - EBooleen theIsElemNum = eVRAI, - EBooleen theIsElemNames = eVRAI) - { - return PPolyedreInfo(new TTPolyedreInfo - (theMeshInfo, - theEntity, - theGeom, - theNbElem, - theNbFaces, - theConnSize, - theConnMode, - theIsElemNum, - theIsElemNames)); - } - - //---------------------------------------------------------------------------- - virtual - PPolyedreInfo - CrPolyedreInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - const TIntVector& theIndexes, - const TIntVector& theFaces, - const TIntVector& theConnectivities, - EConnectivite theConnMode = eNOD, - const TIntVector& theFamilyNums = TIntVector(), - const TIntVector& theElemNums = TIntVector(), - const TStringVector& theElemNames = TStringVector()) - { - return PPolyedreInfo(new TTPolyedreInfo - (theMeshInfo, - theEntity, - theGeom, - theIndexes, - theFaces, - theConnectivities, - theConnMode, - theFamilyNums, - theElemNums, - theElemNames)); - } - - //---------------------------------------------------------------------------- - virtual - PPolyedreInfo - CrPolyedreInfo(const PMeshInfo& theMeshInfo, - const PPolyedreInfo& theInfo) - { - return PPolyedreInfo(new TTPolyedreInfo - (theMeshInfo, - theInfo)); - } - - //---------------------------------------------------------------------------- - virtual - PCellInfo - CrCellInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TInt theNbElem, - EConnectivite theConnMode = eNOD, - EBooleen theIsElemNum = eVRAI, - EBooleen theIsElemNames = eVRAI, - EModeSwitch theMode = eFULL_INTERLACE) - { - return PCellInfo(new TTCellInfo - (theMeshInfo, - theEntity, - theGeom, - theNbElem, - theConnMode, - theIsElemNum, - theIsElemNames, - theMode)); - } - - //---------------------------------------------------------------------------- - virtual - PCellInfo - CrCellInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - const TIntVector& theConnectivities, - EConnectivite theConnMode = eNOD, - const TIntVector& theFamilyNums = TIntVector(), - const TIntVector& theElemNums = TIntVector(), - const TStringVector& theElemNames = TStringVector(), - EModeSwitch theMode = eFULL_INTERLACE) - { - return PCellInfo(new TTCellInfo - (theMeshInfo, - theEntity, - theGeom, - theConnectivities, - theConnMode, - theFamilyNums, - theElemNums, - theElemNames, - theMode)); - } - - //---------------------------------------------------------------------------- - virtual - PCellInfo - CrCellInfo(const PMeshInfo& theMeshInfo, - const PCellInfo& theInfo) - { - return PCellInfo(new TTCellInfo - (theMeshInfo, - theInfo)); - } - - //---------------------------------------------------------------------------- - //! Creates a MEDWrapper MED Balls representation - virtual PBallInfo CrBallInfo(const PMeshInfo& theMeshInfo, - TInt theNbBalls, - EBooleen theIsElemNum = eVRAI) - { - return PBallInfo( new TTBallInfo( theMeshInfo, theNbBalls, theIsElemNum )); - } - - //---------------------------------------------------------------------------- - //! Creates a MEDWrapper MED Balls representation - virtual PBallInfo CrBallInfo(const PMeshInfo& theMeshInfo, - const TIntVector& theNodes, - TFloatVector& theDiameters, - const TIntVector& theFamilyNums = TIntVector(), - const TIntVector& theElemNums = TIntVector()) - { - return PBallInfo( new TTBallInfo( theMeshInfo, theNodes, theDiameters, - theFamilyNums, theElemNums)); - } - - //---------------------------------------------------------------------------- - //! A copy-constructor for the MEDWrapper MED Balls representation - virtual PBallInfo CrBallInfo(const PMeshInfo& theMeshInfo, - const PBallInfo& theInfo) - { - return PBallInfo( new TTBallInfo( theMeshInfo, theInfo )); - } - - //---------------------------------------------------------------------------- - virtual - PFieldInfo - CrFieldInfo(const PMeshInfo& theMeshInfo, - TInt theNbComp = 0, - ETypeChamp theType = eFLOAT64, - const std::string& theValue = "", - EBooleen theIsLocal = eVRAI, - TInt theNbRef = 1) - { - return PFieldInfo(new TTFieldInfo - (theMeshInfo, - theNbComp, - theType, - theValue, - theIsLocal, - theNbRef)); - } - - //---------------------------------------------------------------------------- - virtual - PFieldInfo - CrFieldInfo(const PMeshInfo& theMeshInfo, - const PFieldInfo& theInfo) - { - return PFieldInfo(new TTFieldInfo - (theMeshInfo, - theInfo)); - } - - //---------------------------------------------------------------------------- - virtual - PTimeStampInfo - CrTimeStampInfo(const PFieldInfo& theFieldInfo, - EEntiteMaillage theEntity, - const TGeom2Size& theGeom2Size, - const TGeom2NbGauss& theGeom2NbGauss = TGeom2NbGauss(), - TInt theNumDt = 0, - TInt theNumOrd = 0, - TFloat theDt = 0, - const std::string& theUnitDt = "", - const TGeom2Gauss& theGeom2Gauss = TGeom2Gauss()) - { - return PTimeStampInfo(new TTTimeStampInfo - (theFieldInfo, - theEntity, - theGeom2Size, - theGeom2NbGauss, - theNumDt, - theNumOrd, - theDt, - theUnitDt, - theGeom2Gauss)); - } - - //---------------------------------------------------------------------------- - virtual - PTimeStampInfo - CrTimeStampInfo(const PFieldInfo& theFieldInfo, - const PTimeStampInfo& theInfo) - { - return PTimeStampInfo(new TTTimeStampInfo - (theFieldInfo, - theInfo)); - } - - //---------------------------------------------------------------------------- - virtual - PGaussInfo - CrGaussInfo(const TGaussInfo::TInfo& theInfo, - EModeSwitch theMode = eFULL_INTERLACE) - { - return PGaussInfo(new TTGaussInfo - (theInfo, - theMode)); - } - - //---------------------------------------------------------------------------- - virtual - PProfileInfo - CrProfileInfo(const TProfileInfo::TInfo& theInfo, - EModeProfil theMode = eCOMPACT) - { - return PProfileInfo(new TTProfileInfo - (theInfo, - theMode)); - } - - //---------------------------------------------------------------------------- - virtual - PTimeStampValueBase - CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo, - ETypeChamp theTypeChamp, - const TGeom2Profile& theGeom2Profile = TGeom2Profile(), - EModeSwitch theMode = eFULL_INTERLACE) - { - if(theTypeChamp == eFLOAT64) - return PTimeStampValueBase(new TTTimeStampValue - (theTimeStampInfo, - theTypeChamp, - theGeom2Profile, - theMode)); - return PTimeStampValueBase(new TTTimeStampValue - (theTimeStampInfo, - theTypeChamp, - theGeom2Profile, - theMode)); - } - - //---------------------------------------------------------------------------- - virtual - PTimeStampValueBase - CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo, - const PTimeStampValueBase& theInfo, - ETypeChamp theTypeChamp) - { - if(theTypeChamp == eFLOAT64) - return PTimeStampValueBase(new TTTimeStampValue - (theTimeStampInfo, - theInfo, - theTypeChamp)); - return PTimeStampValueBase(new TTTimeStampValue - (theTimeStampInfo, - theInfo, - theTypeChamp)); - } - - //---------------------------------------------------------------------------- - virtual - PGrilleInfo - CrGrilleInfo(const PMeshInfo& theMeshInfo, - const PGrilleInfo& theInfo) - { - return PGrilleInfo(new TTGrilleInfo - (theMeshInfo, - theInfo)); - } - - //---------------------------------------------------------------------------- - virtual - PGrilleInfo - CrGrilleInfo(const PMeshInfo& theMeshInfo, - const EGrilleType& type) - { - return PGrilleInfo(new TTGrilleInfo - (theMeshInfo, - type)); - } - - //---------------------------------------------------------------------------- - virtual - PGrilleInfo - CrGrilleInfo(const PMeshInfo& theMeshInfo, - const EGrilleType& type, - const TInt& nbNodes) - { - return PGrilleInfo(new TTGrilleInfo - (theMeshInfo, - type, - nbNodes)); - } - - //---------------------------------------------------------------------------- - virtual - PGrilleInfo - CrGrilleInfo(const PMeshInfo& theMeshInfo, - const EGrilleType& type, - const MED::TIntVector& nbNodeVec) - { - return PGrilleInfo(new TTGrilleInfo - (theMeshInfo, - type, - nbNodeVec)); - } - }; -} - -#endif // MED_TWrapper_HeaderFile diff --git a/src/MEDWrapper/MED_Utilities.cxx b/src/MEDWrapper/MED_Utilities.cxx index 9044e0ec1..d68470d9b 100644 --- a/src/MEDWrapper/MED_Utilities.cxx +++ b/src/MEDWrapper/MED_Utilities.cxx @@ -26,7 +26,7 @@ #ifdef _DEBUG_ static int MYDEBUG = 0; #else -// static int MYDEBUG = 0; +static int MYDEBUG = 0; #endif int MED::PrefixPrinter::myCounter = 0; @@ -57,46 +57,3 @@ std::string MED::PrefixPrinter::GetPrefix() } return ""; } - -const MED::TEntity2GeomSet& MED::GetEntity2GeomSet() -{ - static MED::TEntity2GeomSet Entity2GeomSet; - using namespace MED; - - if ( Entity2GeomSet.empty() ) { - TGeomSet& aGeomARETESet = Entity2GeomSet[eARETE]; - aGeomARETESet.insert(eSEG2); - aGeomARETESet.insert(eSEG3); - - TGeomSet& aGeomFACESet = Entity2GeomSet[eFACE]; - aGeomFACESet.insert(eTRIA3); - aGeomFACESet.insert(eQUAD4); - aGeomFACESet.insert(eTRIA6); - aGeomFACESet.insert(eTRIA7); - aGeomFACESet.insert(eQUAD8); - aGeomFACESet.insert(eQUAD9); - aGeomFACESet.insert(ePOLYGONE); - aGeomFACESet.insert(ePOLYGON2); - - TGeomSet& aGeomMAILLESet = Entity2GeomSet[eMAILLE]; - aGeomMAILLESet.insert(ePOINT1); - aGeomMAILLESet.insert(aGeomARETESet.begin(),aGeomARETESet.end()); - aGeomMAILLESet.insert(aGeomFACESet.begin(),aGeomFACESet.end()); - aGeomMAILLESet.insert(eTETRA4); - aGeomMAILLESet.insert(ePYRA5); - aGeomMAILLESet.insert(ePENTA6); - aGeomMAILLESet.insert(eHEXA8); - aGeomMAILLESet.insert(eOCTA12); - aGeomMAILLESet.insert(eTETRA10); - aGeomMAILLESet.insert(ePYRA13); - aGeomMAILLESet.insert(ePENTA15); - aGeomMAILLESet.insert(eHEXA20); - aGeomMAILLESet.insert(eHEXA27); - aGeomMAILLESet.insert(ePOLYEDRE); - - /* This combination allows reading nb of models of structure elements */ - Entity2GeomSet[eSTRUCT_ELEMENT].insert(eAllGeoType); - } - - return Entity2GeomSet; -} diff --git a/src/MEDWrapper/MED_Utilities.hxx b/src/MEDWrapper/MED_Utilities.hxx index a099a6658..6d859f63d 100644 --- a/src/MEDWrapper/MED_Utilities.hxx +++ b/src/MEDWrapper/MED_Utilities.hxx @@ -25,8 +25,8 @@ #include "MED_WrapperDef.hxx" -#include -#include +#include +#include #include #include #include diff --git a/src/MEDWrapper/MED_V2_2_Wrapper.cxx b/src/MEDWrapper/MED_V2_2_Wrapper.cxx deleted file mode 100644 index 895f7fdbd..000000000 --- a/src/MEDWrapper/MED_V2_2_Wrapper.cxx +++ /dev/null @@ -1,2834 +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 -// - -#include "MED_V2_2_Wrapper.hxx" -#include "MED_Algorithm.hxx" -#include "MED_Utilities.hxx" - -#include -#include - -#ifdef _DEBUG_ -static int MYDEBUG = 0; -// #else -// static int MYDEBUG = 0; -#endif - -namespace MED -{ - TInt - GetDESCLength() - { - return 200; - } - - TInt - GetIDENTLength() - { - return 8; - } - - TInt - GetNOMLength() - { - return 64; - } - - TInt - GetLNOMLength() - { - return 80; - } - - TInt - GetPNOMLength() - { - return 16; - } - - void - GetVersionRelease(TInt& majeur, TInt& mineur, TInt& release) - { - majeur=MED_MAJOR_NUM; - mineur=MED_MINOR_NUM; - release=MED_RELEASE_NUM; - } - - TInt - GetNbConn(EGeometrieElement typmai, - EEntiteMaillage typent, - TInt mdim) - { - return typmai%100; - } - - namespace V2_2 - { - //--------------------------------------------------------------- - class TFile{ - TFile(); - TFile(const TFile&); - - public: - TFile(const std::string& theFileName): - myCount(0), - myFid(0), - myFileName(theFileName) - {} - - ~TFile() - { - Close(); - } - - void - Open(EModeAcces theMode, TErr* theErr = NULL) - { - if(myCount++ == 0){ - const char* aFileName = myFileName.c_str(); - myFid = MEDfileOpen(aFileName,med_access_mode(theMode)); - } - if(theErr) - *theErr = TErr(myFid); - else if(myFid < 0) - EXCEPTION(std::runtime_error,"TFile - MEDfileOpen('"<Open(theMode,theErr); - } - - ~TFileWrapper() - { - myFile->Close(); - } - }; - - //--------------------------------------------------------------- - TVWrapper::TVWrapper(const std::string& theFileName): - myFile(new TFile(theFileName)) - { - 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 ); - } - if(aRet < 0) { - myFile->Close(); - myFile->Open( eCREATION, &aRet ); - } - } - - //---------------------------------------------------------------------------- - TInt - TVWrapper - ::GetNbMeshes(TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return -1; - - return MEDnMesh(myFile->Id()); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::GetMeshInfo(TInt theMeshId, - MED::TMeshInfo& theInfo, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return; - - TValueHolder aMeshName(theInfo.myName); - TValueHolder aDim(theInfo.myDim); - TValueHolder aSpaceDim(theInfo.mySpaceDim); - TValueHolder aType(theInfo.myType); - char dtunit[MED_SNAME_SIZE+1]; - med_sorting_type sorttype; - med_int nstep; - med_axis_type at; - int naxis=MEDmeshnAxis(myFile->Id(),theMeshId); - char *axisname=new char[naxis*MED_SNAME_SIZE+1]; - char *axisunit=new char[naxis*MED_SNAME_SIZE+1]; - TErr aRet = MEDmeshInfo(myFile->Id(), - theMeshId, - &aMeshName, - &aSpaceDim, - &aDim, - &aType, - &theInfo.myDesc[0], - dtunit, - &sorttype, - &nstep, - &at, - axisname, - axisunit); - delete [] axisname; - delete [] axisunit; - if(aRet < 0) - EXCEPTION(std::runtime_error,"GetMeshInfo - MEDmeshInfo(...)"); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetMeshInfo(const MED::TMeshInfo& theInfo, - EModeAcces theMode, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,theMode,theErr); - - if(theErr && *theErr < 0) - return; - - MED::TMeshInfo& anInfo = const_cast(theInfo); - - TValueHolder aMeshName(anInfo.myName); - TValueHolder aDim(anInfo.myDim); - TValueHolder aSpaceDim(anInfo.mySpaceDim); - TValueHolder aType(anInfo.myType); - TValueHolder aDesc(anInfo.myDesc); - - char *nam=new char[aSpaceDim*MED_SNAME_SIZE+1]; - std::fill(nam,nam+aSpaceDim*MED_SNAME_SIZE+1,'\0'); - char *unit=new char[aSpaceDim*MED_SNAME_SIZE+1]; - std::fill(unit,unit+aSpaceDim*MED_SNAME_SIZE+1,'\0'); - TErr aRet = MEDmeshCr(myFile->Id(), - &aMeshName, - aSpaceDim, - aDim, - aType, - &aDesc, - "", - MED_SORT_DTIT, - MED_CARTESIAN, - nam, - unit); - delete [] nam; - delete [] unit; - - //if(aRet == 0) - // aRet = MEDunvCr(myFile->Id(),&aMeshName); - - INITMSG(MYDEBUG,"TVWrapper::SetMeshInfo - MED_MODE_ACCES = "<(theInfo); - TValueHolder aName(anInfo.myName); - return MEDnFamily(myFile->Id(),&aName); - } - - //---------------------------------------------------------------------------- - TInt - TVWrapper - ::GetNbFamAttr(TInt theFamId, - const MED::TMeshInfo& theInfo, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return -1; - - MED::TMeshInfo& anInfo = const_cast(theInfo); - - TValueHolder aName(anInfo.myName); - - return MEDnFamily23Attribute(myFile->Id(),&aName,theFamId); - } - - //---------------------------------------------------------------------------- - TInt - TVWrapper - ::GetNbFamGroup(TInt theFamId, - const MED::TMeshInfo& theInfo, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return -1; - - MED::TMeshInfo& anInfo = const_cast(theInfo); - - TValueHolder aName(anInfo.myName); - - return MEDnFamilyGroup(myFile->Id(),&aName,theFamId); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::GetFamilyInfo(TInt theFamId, - MED::TFamilyInfo& theInfo, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return; - - MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; - - TValueHolder aMeshName(aMeshInfo.myName); - TValueHolder aFamilyName(theInfo.myName); - TValueHolder aFamilyId(theInfo.myId); - TValueHolder anAttrId(theInfo.myAttrId); - TValueHolder anAttrVal(theInfo.myAttrVal); - TValueHolder anAttrDesc(theInfo.myAttrDesc); - TValueHolder aGroupNames(theInfo.myGroupNames); - - TErr aRet = MEDfamily23Info(myFile->Id(), - &aMeshName, - theFamId, - &aFamilyName, - &anAttrId, - &anAttrVal, - &anAttrDesc, - &aFamilyId, - &aGroupNames); - - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"GetFamilyInfo - MEDfamily23Info(...) - "<< - " aMeshInfo.myName = '"<<&aMeshName<< - "'; theFamId = "< aMeshName (aMeshInfo.myName); - TValueHolder anElemNames(theInfo.myElemNames); - TValueHolder anEntity (theEntity); - TValueHolder aGeom (theGeom); - - TErr aRet = MEDmeshEntityNameRd(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - anEntity, - aGeom, - &anElemNames); - - theInfo.myIsElemNames = aRet != 0? eFAUX : eVRAI ; - - if(theErr) - *theErr = aRet; - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::GetNumeration(TElemInfo& theInfo, - TInt theNb, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return; - - if ( theGeom == eBALL ) - theGeom = GetBallGeom( theInfo.myMeshInfo ); - - MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; - - TValueHolder aMeshName(aMeshInfo.myName); - TValueHolder anElemNum(theInfo.myElemNum); - TValueHolder anEntity (theEntity); - TValueHolder aGeom (theGeom); - - TErr aRet = MEDmeshEntityNumberRd(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - anEntity, - aGeom, - &anElemNum); - - theInfo.myIsElemNum = aRet != 0? eFAUX : eVRAI; - - if(theErr) - *theErr = aRet; - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::GetFamilies(TElemInfo& theInfo, - TInt theNb, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return; - - if ( theGeom == eBALL ) - theGeom = GetBallGeom( theInfo.myMeshInfo ); - - MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; - - TValueHolder aMeshName(aMeshInfo.myName); - TValueHolder aFamNum (theInfo.myFamNum); - TValueHolder anEntity (theEntity); - TValueHolder aGeom (theGeom); - - TErr aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - anEntity, - aGeom, - &aFamNum); - - if(aRet < 0) - { -// if (aRet == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files - { - int aSize = (int)theInfo.myFamNum->size(); - theInfo.myFamNum->clear(); - theInfo.myFamNum->resize(aSize,0); - aRet = 0; - } -// else -// EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshEntityFamilyNumberRd(...) of CELLS"); - } - if(theErr) - *theErr = aRet; - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetNames(const TElemInfo& theInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr) - { - SetNames(theInfo,eLECTURE_ECRITURE,theEntity,theGeom,theErr); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetNames(const TElemInfo& theInfo, - EModeAcces theMode, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,theMode,theErr); - - if(theErr && *theErr < 0) - return; - - if ( theGeom == eBALL ) - theGeom = GetBallGeom( theInfo.myMeshInfo ); - - MED::TElemInfo& anInfo = const_cast(theInfo); - MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo; - - TErr aRet = 0; - if(theInfo.myIsElemNames) - { - TValueHolder aMeshName (aMeshInfo.myName); - TValueHolder anElemNames(anInfo.myElemNames); - TValueHolder anEntity (theEntity); - TValueHolder aGeom (theGeom); - - aRet = MEDmeshEntityNameWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - anEntity, - aGeom, - (TInt)anInfo.myElemNames->size(), - &anElemNames); - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"SetNames - MEDmeshEntityNameWr(...)"); - } - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetNumeration(const TElemInfo& theInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr) - { - SetNumeration(theInfo,eLECTURE_ECRITURE,theEntity,theGeom,theErr); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetNumeration(const TElemInfo& theInfo, - EModeAcces theMode, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,theMode,theErr); - - if(theErr && *theErr < 0) - return; - - if ( theGeom == eBALL ) - theGeom = GetBallGeom( theInfo.myMeshInfo ); - - MED::TElemInfo& anInfo = const_cast(theInfo); - MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo; - - TErr aRet = 0; - if(theInfo.myIsElemNum) - { - TValueHolder aMeshName(aMeshInfo.myName); - TValueHolder anElemNum(anInfo.myElemNum); - TValueHolder anEntity (theEntity); - TValueHolder aGeom (theGeom); - - aRet = MEDmeshEntityNumberWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - anEntity, - aGeom, - (TInt)anInfo.myElemNum->size(), - &anElemNum); - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"SetNumeration - MEDmeshEntityNumberWr(...)"); - } - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetFamilies(const TElemInfo& theInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr) - { - SetFamilies(theInfo,eLECTURE_ECRITURE,theEntity,theGeom,theErr); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetFamilies(const TElemInfo& theInfo, - EModeAcces theMode, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,theMode,theErr); - - if(theErr && *theErr < 0) - return; - - if ( theGeom == eBALL ) - theGeom = GetBallGeom( theInfo.myMeshInfo ); - - MED::TElemInfo& anInfo = const_cast(theInfo); - MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo; - - TValueHolder aMeshName(aMeshInfo.myName); - TValueHolder aFamNum (anInfo.myFamNum); - TValueHolder anEntity (theEntity); - TValueHolder aGeom (theGeom); - - TErr aRet = MEDmeshEntityFamilyNumberWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - anEntity, - aGeom, - (TInt)anInfo.myFamNum->size(), - &aFamNum); - - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"SetFamilies - MEDmeshEntityFamilyNumberWr(...)"); - } - - //---------------------------------------------------------------------------- - TInt - TVWrapper - ::GetNbNodes(const MED::TMeshInfo& theMeshInfo, - ETable theTable, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return -1; - - MED::TMeshInfo& aMeshInfo = const_cast(theMeshInfo); - - TValueHolder aMeshName(aMeshInfo.myName); - TValueHolder aTable(theTable); - med_bool chgt,trsf; - return MEDmeshnEntity(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_NODE, - MED_NO_GEOTYPE, - aTable, - MED_NO_CMODE, - &chgt, - &trsf); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::GetNodeInfo(MED::TNodeInfo& theInfo, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return; - - MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; - - TValueHolder aMeshName(aMeshInfo.myName); - TValueHolder aDim(aMeshInfo.myDim); - TValueHolder aCoord(theInfo.myCoord); - TValueHolder aModeSwitch(theInfo.myModeSwitch); - TValueHolder aSystem(theInfo.mySystem); - TValueHolder aCoordNames(theInfo.myCoordNames); - TValueHolder aCoordUnits(theInfo.myCoordUnits); - TValueHolder anElemNames(theInfo.myElemNames); - //TValueHolder anIsElemNames(theInfo.myIsElemNames); - TValueHolder anElemNum(theInfo.myElemNum); - //TValueHolder anIsElemNum(theInfo.myIsElemNum); - TValueHolder aFamNum(theInfo.myFamNum); - TValueHolder aNbElem(theInfo.myNbElem); - - TErr aRet = MEDmeshNodeCoordinateRd(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - aModeSwitch, - &aCoord); - - TErr aRet2 =MEDmeshEntityFamilyNumberRd(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_NODE, - MED_NO_GEOTYPE , - &aFamNum); - if (aRet2 < 0) - { -// if (aRet2 == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files - { - int mySize = (int)theInfo.myFamNum->size(); - theInfo.myFamNum->clear(); - theInfo.myFamNum->resize(mySize,0); - } -// else -// EXCEPTION(std::runtime_error,"GetNodeInfo - MEDmeshEntityFamilyNumberRd(...)"); - } - - if ( MEDmeshEntityNameRd(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_NODE, - MED_NO_GEOTYPE , - &anElemNames) < 0) theInfo.myIsElemNames=eFAUX; - - if ( MEDmeshEntityNumberRd(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_NODE, - MED_NO_GEOTYPE , - &anElemNum) < 0 ) theInfo.myIsElemNum=eFAUX; - - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"GetNodeInfo - MEDmeshNodeCoordinateRd(...)"); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetNodeInfo(const MED::TNodeInfo& theInfo, - EModeAcces theMode, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,theMode,theErr); - - if(theErr && *theErr < 0) - return; - - MED::TNodeInfo& anInfo = const_cast(theInfo); - MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo; - - TValueHolder aMeshName (aMeshInfo.myName); - TValueHolder aCoord (anInfo.myCoord); - TValueHolder aModeSwitch (anInfo.myModeSwitch); - TValueHolder aSystem (anInfo.mySystem); - TValueHolder aCoordNames (anInfo.myCoordNames); - TValueHolder aCoordUnits (anInfo.myCoordUnits); - TValueHolder anElemNames (anInfo.myElemNames); - TValueHolder anIsElemNames(anInfo.myIsElemNames); - TValueHolder anElemNum (anInfo.myElemNum); - TValueHolder anIsElemNum (anInfo.myIsElemNum); - TValueHolder aFamNum (anInfo.myFamNum); - TValueHolder aNbElem (anInfo.myNbElem); - - TErr aRet = MEDmeshNodeCoordinateWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_NO_DT, - aModeSwitch, - aNbElem, - &aCoord); - - MEDmeshEntityFamilyNumberWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_NODE, - MED_NO_GEOTYPE, - aNbElem, - &aFamNum); - if(anIsElemNames) - MEDmeshEntityNameWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_NODE, - MED_NO_GEOTYPE, - aNbElem, - &anElemNames); - if(anIsElemNum) - MEDmeshEntityNumberWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_NODE, - MED_NO_GEOTYPE, - aNbElem, - &anElemNum); - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"SetNodeInfo - MEDmeshNodeCoordinateWr(...)"); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetNodeInfo(const MED::TNodeInfo& theInfo, - TErr* theErr) - { - TErr aRet; - SetNodeInfo(theInfo,eLECTURE_ECRITURE,&aRet); - - if(aRet < 0) - SetNodeInfo(theInfo,eLECTURE_AJOUT,&aRet); - - if(theErr) - *theErr = aRet; - } - - //----------------------------------------------------------------- - void - TVWrapper - ::GetPolygoneInfo(MED::TPolygoneInfo& theInfo, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return; - - MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; - - TValueHolder aMeshName(aMeshInfo.myName); - TValueHolder anIndex (theInfo.myIndex); - TValueHolder aConn (theInfo.myConn); - TValueHolder anEntity (theInfo.myEntity); - TValueHolder aGeom (theInfo.myGeom); - TValueHolder aConnMode(theInfo.myConnMode); - TInt aNbElem = (TInt)theInfo.myElemNum->size(); - - TErr aRet; - aRet = MEDmeshPolygon2Rd(myFile->Id(), &aMeshName, - MED_NO_DT, MED_NO_IT, - anEntity, aGeom, - aConnMode, &anIndex, &aConn); - - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"GetPolygoneInfo - MEDmeshPolygonRd(...)"); - - if(theInfo.myIsElemNames){ - GetNames(theInfo,aNbElem,theInfo.myEntity,theInfo.myGeom,&aRet); - if(theErr) - *theErr = aRet; - } - - if(theInfo.myIsElemNum){ - GetNumeration(theInfo,aNbElem,theInfo.myEntity,theInfo.myGeom,&aRet); - if(theErr) - *theErr = aRet; - } - - GetFamilies(theInfo,aNbElem,theInfo.myEntity,theInfo.myGeom,&aRet); - if(theErr) - *theErr = aRet; - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetPolygoneInfo(const MED::TPolygoneInfo& theInfo, - TErr* theErr) - { - SetPolygoneInfo(theInfo,eLECTURE_ECRITURE,theErr); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetPolygoneInfo(const MED::TPolygoneInfo& theInfo, - EModeAcces theMode, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,theMode,theErr); - - if(theErr && *theErr < 0) - return; - - MED::TPolygoneInfo& anInfo = const_cast(theInfo); - MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo; - - TValueHolder aMeshName(aMeshInfo.myName); - TValueHolder anIndex (anInfo.myIndex); - TValueHolder aConn (anInfo.myConn); - TValueHolder anEntity (anInfo.myEntity); - TValueHolder aGeom (anInfo.myGeom); - TValueHolder aConnMode(anInfo.myConnMode); - - TErr aRet = MEDmeshPolygon2Wr(myFile->Id(), &aMeshName, - MED_NO_DT, MED_NO_IT, MED_UNDEF_DT, - anEntity, aGeom, - aConnMode, anInfo.myNbElem + 1, - &anIndex, &aConn); - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"SetPolygoneInfo - MEDmeshPolygonWr(...)"); - - SetNames(anInfo,theInfo.myEntity,anInfo.myGeom,&aRet); - if(theErr) - *theErr = aRet; - - SetNumeration(anInfo,theInfo.myEntity,anInfo.myGeom,&aRet); - if(theErr) - *theErr = aRet; - - SetFamilies(anInfo,theInfo.myEntity,anInfo.myGeom,&aRet); - if(theErr) - *theErr = aRet; - } - - //---------------------------------------------------------------------------- - TInt - TVWrapper - ::GetNbPolygones(const MED::TMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - EConnectivite theConnMode, - TErr* theErr) - { - return GetNbCells(theMeshInfo,theEntity,theGeom,theConnMode,theErr); - } - - //---------------------------------------------------------------------------- - TInt - TVWrapper - ::GetPolygoneConnSize(const MED::TMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - EConnectivite theConnMode, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return 0; - - MED::TMeshInfo& aMeshInfo = const_cast(theMeshInfo); - - TValueHolder aMeshName(aMeshInfo.myName); - med_int aTaille = 0; - med_bool chgt,trsf; - aTaille=MEDmeshnEntity(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - med_entity_type(theEntity), - med_geometry_type(theGeom), - MED_CONNECTIVITY, - med_connectivity_mode(theConnMode), - &chgt, - &trsf); - - - if(aTaille < 0) - EXCEPTION(std::runtime_error,"GetPolygoneInfo - MEDmeshnEntity(...)"); - - return TInt(aTaille); - } - - //----------------------------------------------------------------- - void - TVWrapper - ::GetPolyedreInfo(TPolyedreInfo& theInfo, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return; - - MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; - - TValueHolder aMeshName(aMeshInfo.myName); - TInt aNbElem = (TInt)theInfo.myElemNum->size(); - TValueHolder anIndex(theInfo.myIndex); - TValueHolder aFaces(theInfo.myFaces); - TValueHolder aConn(theInfo.myConn); - TValueHolder aConnMode(theInfo.myConnMode); - - TErr aRet; - aRet = MEDmeshPolyhedronRd(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_CELL, - aConnMode, - &anIndex, - &aFaces, - &aConn); - - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"GetPolygoneInfo - MEDmeshPolyhedronRd(...)"); - - if(theInfo.myIsElemNames){ - GetNames(theInfo,aNbElem,theInfo.myEntity,ePOLYEDRE,&aRet); - if(theErr) - *theErr = aRet; - } - - if(theInfo.myIsElemNum){ - GetNumeration(theInfo,aNbElem,theInfo.myEntity,ePOLYEDRE,&aRet); - if(theErr) - *theErr = aRet; - } - - GetFamilies(theInfo,aNbElem,theInfo.myEntity,ePOLYEDRE,&aRet); - if(theErr) - *theErr = aRet; - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetPolyedreInfo(const TPolyedreInfo& theInfo, - TErr* theErr) - { - SetPolyedreInfo(theInfo,eLECTURE_ECRITURE,theErr); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetPolyedreInfo(const MED::TPolyedreInfo& theInfo, - EModeAcces theMode, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,theMode,theErr); - - if(theErr && *theErr < 0) - return; - - MED::TPolyedreInfo& anInfo = const_cast(theInfo); - MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo; - - TValueHolder aMeshName(aMeshInfo.myName); - TValueHolder anIndex(anInfo.myIndex); - TValueHolder aFaces(anInfo.myFaces); - TValueHolder aConn(anInfo.myConn); - TValueHolder aConnMode(anInfo.myConnMode); - - TErr aRet; - aRet = MEDmeshPolyhedronWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_UNDEF_DT, - MED_CELL, - aConnMode, - anInfo.myNbElem+1, - &anIndex, - (TInt)anInfo.myFaces->size(), - &aFaces, - &aConn); - - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"SetPolyedreInfo - MEDmeshPolyhedronWr(...)"); - - TValueHolder anEntity(anInfo.myEntity); - - if(theInfo.myIsElemNames){ - TValueHolder anElemNames(anInfo.myElemNames); - aRet = MEDmeshEntityNameWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - anEntity, - MED_POLYHEDRON, - (TInt)anInfo.myElemNames->size(), - &anElemNames); - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"SetPolyedreInfo - MEDmeshEntityNameWr(...)"); - } - - if(theInfo.myIsElemNum){ - TValueHolder anElemNum(anInfo.myElemNum); - aRet = MEDmeshEntityNumberWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - anEntity, - MED_POLYHEDRON, - (TInt)anInfo.myElemNum->size(), - &anElemNum); - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"SetPolyedreInfo - MEDmeshEntityNumberWr(...)"); - } - - - TValueHolder aFamNum(anInfo.myFamNum); - aRet = MEDmeshEntityFamilyNumberWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - anEntity, - MED_POLYHEDRON, - (TInt)anInfo.myFamNum->size(), - &aFamNum); - - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"SetPolyedreInfo - MEDmeshEntityFamilyNumberWr(...)"); - } - - //---------------------------------------------------------------------------- - TInt - TVWrapper - ::GetNbPolyedres(const MED::TMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - EConnectivite theConnMode, - TErr* theErr) - { - return GetNbCells(theMeshInfo,theEntity,theGeom,theConnMode,theErr); - } - - //---------------------------------------------------------------------------- - void - TVWrapper ::GetPolyedreConnSize(const TMeshInfo& theMeshInfo, - TInt& theNbFaces, - TInt& theConnSize, - EConnectivite theConnMode, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - EXCEPTION(std::runtime_error,"GetPolyedreConnSize - (...)"); - - MED::TMeshInfo& aMeshInfo = const_cast(theMeshInfo); - - TValueHolder aMeshName(aMeshInfo.myName); - TValueHolder aConnMode(theConnMode); - //TValueHolder aNbFaces(theNbFaces); - //TValueHolder aConnSize(theConnSize); - - med_bool chgt,trsf; - theNbFaces = MEDmeshnEntity(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_CELL, - MED_POLYHEDRON, - MED_INDEX_NODE, - aConnMode, - &chgt, - &trsf); - - theConnSize = MEDmeshnEntity(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_CELL, - MED_POLYHEDRON, - MED_CONNECTIVITY, - aConnMode, - &chgt, - &trsf); - - if(theNbFaces < 0 || theConnSize<0) - EXCEPTION(std::runtime_error,"GetPolygoneInfo - MEDmeshnEntity(...)"); - - } - - //----------------------------------------------------------------- - TEntityInfo - TVWrapper - ::GetEntityInfo(const MED::TMeshInfo& theMeshInfo, - EConnectivite theConnMode, - TErr* theErr) - { - TEntityInfo anInfo; - - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return anInfo; - - if(theMeshInfo.GetType() == eNON_STRUCTURE) { - TInt aNbElem = GetNbNodes(theMeshInfo); - if(aNbElem > 0){ - anInfo[eNOEUD][ePOINT1] = aNbElem; - const TEntity2GeomSet& anEntity2GeomSet = GetEntity2GeomSet(); - TEntity2GeomSet::const_iterator anIter = anEntity2GeomSet.begin(); - TEntity2GeomSet::const_iterator anIterEnd = anEntity2GeomSet.end(); - for(; anIter != anIterEnd; anIter++){ - const EEntiteMaillage& anEntity = anIter->first; - const TGeomSet& aGeomSet = anIter->second; - TGeomSet::const_iterator anIter2 = aGeomSet.begin(); - TGeomSet::const_iterator anIterEnd2 = aGeomSet.end(); - for(; anIter2 != anIterEnd2; anIter2++){ - const EGeometrieElement& aGeom = *anIter2; - aNbElem = GetNbCells(theMeshInfo,anEntity,aGeom,theConnMode,theErr); - if(aNbElem > 0) { - if ( anEntity == eSTRUCT_ELEMENT ) { - const TInt nbStructTypes = aNbElem; - for ( TInt structType = 0; structType < nbStructTypes; ++structType ) { - // check type name to keep only "MED_BALL" structured element - TValueHolder aMeshName((TString&) theMeshInfo.myName ); - char geotypename[ MED_NAME_SIZE + 1] = ""; - med_geometry_type geotype; - MEDmeshEntityInfo( myFile->Id(), &aMeshName, MED_NO_DT, MED_NO_IT, - med_entity_type(anEntity), structType+1, - geotypename, &geotype); - if ( strcmp( geotypename, MED_BALL_NAME ) == 0 ) { - aNbElem = GetNbCells( theMeshInfo, anEntity, EGeometrieElement(geotype), - theConnMode, theErr); - if ( aNbElem > 0 ) - anInfo[anEntity][EGeometrieElement(geotype)] = aNbElem; - } - } - } - else { - anInfo[anEntity][aGeom] = aNbElem; - } - } - } - } - } - } else { // eSTRUCTURE - EGrilleType aGrilleType; - TInt aNbNodes = 1; - TInt aNbElem = 1; - TInt aNbSub = 0; - TInt aDim = theMeshInfo.GetDim(); - EGeometrieElement aGeom, aSubGeom; - EEntiteMaillage aSubEntity = eMAILLE; - - GetGrilleType(theMeshInfo, aGrilleType); - - TIntVector aStruct(aDim); - if(aGrilleType == eGRILLE_STANDARD) - { - GetGrilleStruct(theMeshInfo, aStruct, theErr); - } - else - { // eGRILLE_CARTESIENNE and eGRILLE_POLAIRE - ETable aTable[3] = { eCOOR_IND1, eCOOR_IND2, eCOOR_IND3 }; - for(med_int anAxis = 0; anAxis < aDim; anAxis++) - aStruct[ anAxis ] = GetNbNodes(theMeshInfo, aTable[anAxis]); - } - for(med_int i = 0; i < aDim; i++){ - aNbNodes = aNbNodes * aStruct[i]; - aNbElem = aNbElem * (aStruct[i] - 1); - } - switch(aDim){ - case 1: - aGeom = eSEG2; - break; - case 2: - aGeom = eQUAD4; - aSubGeom = eSEG2; - aSubEntity = eARETE; - aNbSub = - (aStruct[0] ) * (aStruct[1]-1) + - (aStruct[0]-1) * (aStruct[1] ); - break; - case 3: - aGeom = eHEXA8; - aSubGeom = eQUAD4; - aSubEntity = eFACE; - aNbSub = - (aStruct[0] ) * (aStruct[1]-1) * (aStruct[2]-1) + - (aStruct[0]-1) * (aStruct[1] ) * (aStruct[2]-1) + - (aStruct[0]-1) * (aStruct[1]-1) * (aStruct[2] ); - break; - } - anInfo[eNOEUD][ePOINT1] = aNbNodes; - anInfo[eMAILLE][aGeom] = aNbElem; - if ( aDim > 1 ) - anInfo[aSubEntity][aSubGeom] = aNbSub; - } - return anInfo; - } - - //----------------------------------------------------------------- - TInt TVWrapper::GetNbCells(const MED::TMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - EConnectivite theConnMode, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return -1; - - MED::TMeshInfo& aMeshInfo = const_cast(theMeshInfo); - TValueHolder aMeshName(aMeshInfo.myName); - med_bool chgt,trsf; - switch ( theGeom ) - { - case MED::ePOLYGONE: - case MED::ePOLYGON2: - { - return MEDmeshnEntity(myFile->Id(),&aMeshName, - MED_NO_DT,MED_NO_IT, - med_entity_type(theEntity),med_geometry_type(theGeom), - MED_INDEX_NODE,med_connectivity_mode(theConnMode), - &chgt,&trsf)-1; - } - case MED::ePOLYEDRE: - { - return MEDmeshnEntity(myFile->Id(),&aMeshName, - MED_NO_DT,MED_NO_IT, - med_entity_type(theEntity),MED_POLYHEDRON, - MED_INDEX_FACE,med_connectivity_mode(theConnMode), - &chgt,&trsf)-1; - } - case MED::eBALL: - { - return GetNbBalls( theMeshInfo ); - } - default: - { - return MEDmeshnEntity(myFile->Id(),&aMeshName, - MED_NO_DT,MED_NO_IT, - med_entity_type(theEntity),med_geometry_type(theGeom), - MED_CONNECTIVITY,med_connectivity_mode(theConnMode), - &chgt,&trsf); - } - } - return 0; - } - - //---------------------------------------------------------------------------- - void TVWrapper::GetCellInfo(MED::TCellInfo& theInfo, TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return; - - MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; - - TValueHolder aMeshName (aMeshInfo.myName); - TValueHolder aConn (theInfo.myConn); - TValueHolder aModeSwitch (theInfo.myModeSwitch); - TValueHolder anElemNames (theInfo.myElemNames); - TValueHolder anIsElemNames(theInfo.myIsElemNames); - TValueHolder anElemNum (theInfo.myElemNum); - TValueHolder anIsElemNum (theInfo.myIsElemNum); - TValueHolder aFamNum (theInfo.myFamNum); - TValueHolder anIsFamNum (theInfo.myIsFamNum); - TValueHolder anEntity (theInfo.myEntity); - TValueHolder aGeom (theInfo.myGeom); - TValueHolder aConnMode (theInfo.myConnMode); - - TErr aRet; - aRet = MEDmeshElementRd(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - anEntity, - aGeom, - aConnMode, - aModeSwitch, - &aConn, - &anIsElemNames, - &anElemNames, - &anIsElemNum, - &anElemNum, - &anIsFamNum, - &aFamNum); - - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"GetCellInfo - MEDmeshElementRd(...)"); - - if (anIsFamNum == MED_FALSE) - { - int mySize = (int) theInfo.myFamNum->size(); - theInfo.myFamNum->clear(); - theInfo.myFamNum->resize(mySize, 0); - } - - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetCellInfo(const MED::TCellInfo& theInfo, - EModeAcces theMode, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,theMode,theErr); - - if(theErr && *theErr < 0) - return; - - MED::TCellInfo& anInfo = const_cast(theInfo); - MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo; - - TValueHolder aMeshName (aMeshInfo.myName); - TValueHolder aConn (anInfo.myConn); - TValueHolder aModeSwitch (anInfo.myModeSwitch); - TValueHolder anElemNames (anInfo.myElemNames); - TValueHolder anIsElemNames(anInfo.myIsElemNames); - TValueHolder anElemNum (anInfo.myElemNum); - TValueHolder anIsElemNum (anInfo.myIsElemNum); - TValueHolder aFamNum (anInfo.myFamNum); - TValueHolder anIsFamNum (anInfo.myIsFamNum); - TValueHolder anEntity (anInfo.myEntity); - TValueHolder aGeom (anInfo.myGeom); - TValueHolder aConnMode (anInfo.myConnMode); - TValueHolder aNbElem (anInfo.myNbElem); - - TErr aRet; - aRet = MEDmeshElementConnectivityWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_UNDEF_DT, - anEntity, - aGeom, - aConnMode, - aModeSwitch, - aNbElem, - &aConn); - - MEDmeshEntityFamilyNumberWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - anEntity, - aGeom, - aNbElem, - &aFamNum); - if(anIsElemNames) - MEDmeshEntityNameWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - anEntity, - aGeom, - aNbElem, - &anElemNames); - if(anIsElemNum) - MEDmeshEntityNumberWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - anEntity, - aGeom, - aNbElem, - &anElemNum); - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"SetCellInfo - MEDmeshElementWr(...)"); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetCellInfo(const MED::TCellInfo& theInfo, - TErr* theErr) - { - SetCellInfo(theInfo,eLECTURE_ECRITURE,theErr); - } - - //---------------------------------------------------------------------------- - //! Read geom type of MED_BALL structural element - EGeometrieElement TVWrapper::GetBallGeom(const TMeshInfo& theMeshInfo) - { - TFileWrapper aFileWrapper(myFile,eLECTURE); - - // read med_geometry_type of "MED_BALL" element - char geotypename[ MED_NAME_SIZE + 1] = MED_BALL_NAME; - return EGeometrieElement( MEDstructElementGeotype( myFile->Id(), geotypename ) ); - } - - //---------------------------------------------------------------------------- - //! Read number of balls in the Mesh - TInt TVWrapper::GetNbBalls(const TMeshInfo& theMeshInfo) - { - TFileWrapper aFileWrapper(myFile,eLECTURE); - - EGeometrieElement ballType = GetBallGeom( theMeshInfo ); - if ( ballType < 0 ) - return 0; - - return GetNbCells( theMeshInfo, eSTRUCT_ELEMENT, ballType, eNOD ); - } - - //---------------------------------------------------------------------------- - //! Read a MEDWrapped representation of MED_BALL from the MED file - void TVWrapper::GetBallInfo(TBallInfo& theInfo, TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - // check geometry of MED_BALL - if ( theInfo.myGeom == eBALL ) - { - theInfo.myGeom = GetBallGeom( *theInfo.myMeshInfo ); - if ( theInfo.myGeom < 0 ) { - if ( !theErr ) - EXCEPTION(std::runtime_error,"GetBallInfo - no balls in the mesh"); - *theErr = theInfo.myGeom; - return; - } - } - - // read nodes ids - GetCellInfo( theInfo ); - - // read diameters - TValueHolder aMeshName (theInfo.myMeshInfo->myName); - TValueHolder aGeom (theInfo.myGeom); - TValueHolder aDiam (theInfo.myDiameters); - char varattname[ MED_NAME_SIZE + 1] = MED_BALL_DIAMETER; - - TErr aRet = MEDmeshStructElementVarAttRd( myFile->Id(), &aMeshName, - MED_NO_DT, MED_NO_IT, - aGeom, - varattname, - &aDiam); - if ( theErr ) - *theErr = aRet; - else if ( aRet < 0 ) - EXCEPTION(std::runtime_error,"GetBallInfo - pb at reading diameters"); - } - - //---------------------------------------------------------------------------- - //! 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); - - TErr ret; - char ballsupportname[MED_NAME_SIZE+1]="BALL_SUPPORT_MESH"; - EGeometrieElement ballGeom = GetBallGeom( *theInfo.myMeshInfo ); - if ( ballGeom < 0 ) - { - // no ball model in the file, create support mesh for it - char dummyname [MED_NAME_SIZE*3+1]=""; - if (( ret = MEDsupportMeshCr( myFile->Id(), - ballsupportname, - theInfo.myMeshInfo->GetSpaceDim(), - theInfo.myMeshInfo->GetDim(), - "Support mesh for a ball model", - MED_CARTESIAN, - /*axisname=*/dummyname, /*unitname=*/dummyname)) < 0) { - if ( !theErr ) - EXCEPTION(std::runtime_error,"SetBallInfo - MEDsupportMeshCr"); - *theErr = ret; - return; - } - // write coordinates of 1 node - med_float coord[3] = {0,0,0}; - if ((ret = MEDmeshNodeCoordinateWr(myFile->Id(), - ballsupportname, MED_NO_DT, MED_NO_IT, 0.0, - MED_FULL_INTERLACE, /*nnode=*/1, coord)) < 0) { - if ( !theErr ) - EXCEPTION(std::runtime_error,"SetBallInfo - MEDmeshNodeCoordinateWr"); - *theErr = ret; - return; - } - // ball model creation - char geotypename[ MED_NAME_SIZE + 1] = MED_BALL_NAME; - if (( ballGeom = (EGeometrieElement) MEDstructElementCr(myFile->Id(), - geotypename, - theInfo.myMeshInfo->GetSpaceDim(), - ballsupportname, - MED_NODE,MED_NONE)) < 0 ) { - if ( !theErr ) - EXCEPTION(std::runtime_error,"SetBallInfo - MEDstructElementCr"); - *theErr = ret; - return; - } - // create diameter attribute - if (( ret = MEDstructElementVarAttCr(myFile->Id(), - geotypename, MED_BALL_DIAMETER, - MED_ATT_FLOAT64, /*ncomp=*/1)) < 0) { - if ( !theErr ) - EXCEPTION(std::runtime_error,"SetBallInfo - MEDstructElementVarAttCr"); - *theErr = ret; - return; - } - } // ballGeom < 0 - - TBallInfo& aBallInfo = ((TBallInfo&) theInfo ); - aBallInfo.myGeom = ballGeom; - - // write node ids - SetCellInfo(theInfo,theMode,theErr); - if ( theErr && theErr < 0 ) - return; - - // write diameter - TValueHolder aMeshName (aBallInfo.myMeshInfo->myName); - TValueHolder aGeom (aBallInfo.myGeom); - TValueHolder aDiam (aBallInfo.myDiameters); - ret = MEDmeshStructElementVarAttWr(myFile->Id(), &aMeshName, - MED_NO_DT, MED_NO_IT, - aGeom, MED_BALL_DIAMETER, - theInfo.myNbElem, &aDiam); - if ( theErr ) - *theErr = ret; - else if ( ret < 0 ) - EXCEPTION(std::runtime_error,"SetBallInfo - MEDmeshStructElementVarAttWr"); - } - - //---------------------------------------------------------------------------- - //! Write a MEDWrapped representation of MED_BALL to the MED file - void TVWrapper::SetBallInfo(const TBallInfo& theInfo, TErr* theErr) - { - SetBallInfo( theInfo, eLECTURE_ECRITURE, theErr ); - } - - //----------------------------------------------------------------- - TInt - TVWrapper - ::GetNbFields(TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return -1; - - return MEDnField(myFile->Id()); - } - - //---------------------------------------------------------------------------- - TInt - TVWrapper - ::GetNbComp(TInt theFieldId, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return -1; - - return MEDfieldnComponent(myFile->Id(),theFieldId); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::GetFieldInfo(TInt theFieldId, - MED::TFieldInfo& theInfo, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return; - - TString aFieldName(256); // Protect from memory problems with too long names - TValueHolder aType(theInfo.myType); - TValueHolder aCompNames(theInfo.myCompNames); - TValueHolder anUnitNames(theInfo.myUnitNames); - MED::TMeshInfo& aMeshInfo = theInfo.myMeshInfo; - - TErr aRet; - med_bool local; - char dtunit[MED_SNAME_SIZE+1]; - char local_mesh_name[MED_NAME_SIZE+1]=""; - med_int nbofstp; - theInfo.myNbComp = MEDfieldnComponent(myFile->Id(),theFieldId); - aRet = MEDfieldInfo(myFile->Id(), - theFieldId, - &aFieldName[0], - local_mesh_name, - &local, - &aType, - &aCompNames, - &anUnitNames, - dtunit, - &nbofstp); - - if(strcmp(&aMeshInfo.myName[0],local_mesh_name) != 0 ) { - if(theErr) - *theErr = -1; - return; - } - - theInfo.SetName(aFieldName); - - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"GetFieldInfo - MEDfieldInfo(...)"); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetFieldInfo(const MED::TFieldInfo& theInfo, - EModeAcces theMode, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,theMode,theErr); - - if(theErr && *theErr < 0) - return; - - MED::TFieldInfo& anInfo = const_cast(theInfo); - - TValueHolder aFieldName(anInfo.myName); - TValueHolder aType(anInfo.myType); - TValueHolder aCompNames(anInfo.myCompNames); - TValueHolder anUnitNames(anInfo.myUnitNames); - MED::TMeshInfo& aMeshInfo = anInfo.myMeshInfo; - TErr aRet; - char dtunit[MED_SNAME_SIZE+1]; - std::fill(dtunit,dtunit+MED_SNAME_SIZE+1,'\0'); - aRet = MEDfieldCr(myFile->Id(), - &aFieldName, - aType, - anInfo.myNbComp, - &aCompNames, - &anUnitNames, - dtunit, - &aMeshInfo.myName[0]); - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"SetFieldInfo - MEDfieldCr(...)"); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::SetFieldInfo(const MED::TFieldInfo& theInfo, - TErr* theErr) - { - TErr aRet; - SetFieldInfo(theInfo,eLECTURE_ECRITURE,&aRet); - - if(aRet < 0) - SetFieldInfo(theInfo,eLECTURE_AJOUT,&aRet); - - if(theErr) - *theErr = aRet; - } - - //---------------------------------------------------------------------------- - TInt - TVWrapper - ::GetNbGauss(TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return -1; - - return MEDnLocalization(myFile->Id()); - } - - //---------------------------------------------------------------------------- - TGaussInfo::TInfo - TVWrapper - ::GetGaussPreInfo(TInt theId, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return TGaussInfo::TInfo( TGaussInfo::TKey(ePOINT1,""),0 ); - - med_int aNbGaussPoints = med_int(); - TVector aName(GetNOMLength()+1); - med_geometry_type aGeom = MED_NONE; - - TErr aRet; - med_int dim; - char geointerpname[MED_NAME_SIZE+1]=""; - char ipointstructmeshname[MED_NAME_SIZE+1]=""; - med_int nsectionmeshcell; - med_geometry_type sectiongeotype; - aRet = MEDlocalizationInfo (myFile->Id(), - theId, - &aName[0], - &aGeom, - &dim, - &aNbGaussPoints, - geointerpname, - ipointstructmeshname, - &nsectionmeshcell, - §iongeotype); - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"GetGaussPreInfo - MEDlocalizationInfo(...)"); - return TGaussInfo::TInfo(TGaussInfo::TKey(EGeometrieElement(aGeom),&aName[0]), - TInt(aNbGaussPoints)); - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::GetGaussInfo(TInt theId, - TGaussInfo& theInfo, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return; - - TValueHolder aRefCoord(theInfo.myRefCoord); - TValueHolder aGaussCoord(theInfo.myGaussCoord); - TValueHolder aWeight(theInfo.myWeight); - TValueHolder aModeSwitch(theInfo.myModeSwitch); - TValueHolder aGaussName(theInfo.myName); - - TErr aRet; - aRet = MEDlocalizationRd(myFile->Id(), - &aGaussName, - aModeSwitch, - &aRefCoord, - &aGaussCoord, - &aWeight); - - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"GetGaussInfo - MEDlocalizationRd(...)"); - } - - //---------------------------------------------------------------------------- - TInt - TVWrapper - ::GetNbProfiles(TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return -1; - - return MEDnProfile(myFile->Id()); - } - - TProfileInfo::TInfo - TVWrapper - ::GetProfilePreInfo(TInt theId, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return TProfileInfo::TInfo(); - - med_int aSize = -1; - TVector aName(GetNOMLength()+1); - - TErr aRet; - aRet = MEDprofileInfo(myFile->Id(), - theId, - &aName[0], - &aSize); - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"GetProfilePreInfo - MEDprofileInfo(...)"); - - return TProfileInfo::TInfo(&aName[0],aSize); - } - - void - TVWrapper - ::GetProfileInfo(TInt theId, - TProfileInfo& theInfo, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return; - - TProfileInfo& anInfo = const_cast(theInfo); - TValueHolder anElemNum(anInfo.myElemNum); - TValueHolder aProfileName(anInfo.myName); - - TErr aRet; - aRet = MEDprofileRd(myFile->Id(), - &aProfileName, - &anElemNum); - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"GetProfileInfo - MEDprofileRd(...)"); - } - - void - TVWrapper - ::SetProfileInfo(const TProfileInfo& theInfo, - EModeAcces theMode, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,theMode,theErr); - - if(theErr && *theErr < 0) - return; - - TProfileInfo& anInfo = const_cast(theInfo); - TValueHolder anElemNum(anInfo.myElemNum); - TValueHolder aProfileName(anInfo.myName); - - TErr aRet; - aRet = MEDprofileWr(myFile->Id(), // descripteur du fichier. - &aProfileName, // tableau de valeurs du profil. - theInfo.GetSize(), // taille du profil. - &anElemNum); // nom profil. - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"SetProfileInfo - MEDprofileWr(...)"); - } - - void - TVWrapper - ::SetProfileInfo(const TProfileInfo& theInfo, - TErr* theErr) - { - TErr aRet; - SetProfileInfo(theInfo,eLECTURE_ECRITURE,&aRet); - - if(aRet < 0) - SetProfileInfo(theInfo,eLECTURE_AJOUT,&aRet); - - if(aRet < 0) - SetProfileInfo(theInfo,eCREATION,&aRet); - - if(theErr) - *theErr = aRet; - } - - //----------------------------------------------------------------- - TInt - TVWrapper - ::GetNbTimeStamps(const MED::TFieldInfo& theInfo, - const MED::TEntityInfo& theEntityInfo, - EEntiteMaillage& theEntity, - TGeom2Size& theGeom2Size, - TErr* theErr) - { - theEntity = EEntiteMaillage(-1); - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr){ - if(theEntityInfo.empty()) - *theErr = -1; - if(*theErr < 0) - return -1; - }else if(theEntityInfo.empty()) - EXCEPTION(std::runtime_error,"GetNbTimeStamps - There is no any Entity on the Mesh"); - - bool anIsPerformAdditionalCheck = GetNbMeshes() > 1; - - theGeom2Size.clear(); - TInt aNbTimeStamps = 0; - TIdt anId = myFile->Id(); - - MED::TFieldInfo& anInfo = const_cast(theInfo); - TValueHolder aFieldName(anInfo.myName); - MED::TMeshInfo& aMeshInfo = anInfo.myMeshInfo; - - // workaround for IPAL13676 - MED::TEntityInfo localEntityInfo = theEntityInfo; - TEntityInfo::iterator anLocalIter = localEntityInfo.find(eMAILLE); - if(anLocalIter != localEntityInfo.end()){ - localEntityInfo[eNOEUD_ELEMENT] = anLocalIter->second; - } - - TEntityInfo::const_iterator anIter = localEntityInfo.begin(); - for(; anIter != localEntityInfo.end(); anIter++){ - med_entity_type anEntity = med_entity_type(anIter->first); - const TGeom2Size& aGeom2Size = anIter->second; - TGeom2Size::const_iterator anGeomIter = aGeom2Size.begin(); - for(; anGeomIter != aGeom2Size.end(); anGeomIter++){ - med_geometry_type aGeom = med_geometry_type(anGeomIter->first); - char aMeshName[MED_NAME_SIZE+1]; - med_bool islocal; - med_field_type ft; - char dtunit[MED_SNAME_SIZE+1]; - med_int myNbComp = MEDfieldnComponentByName(anId,&aFieldName); - char *cname=new char[myNbComp*MED_SNAME_SIZE+1]; - char *unitname=new char[myNbComp*MED_SNAME_SIZE+1]; - TInt aNbStamps; - MEDfieldInfoByName(anId, - &aFieldName, - aMeshName, - &islocal, - &ft, - cname, - unitname, - dtunit, - &aNbStamps); - delete [] cname; - delete [] unitname; - med_int nval = 0; - med_int aNumDt; - med_int aNumOrd; - med_float aDt; - if (aNbStamps > 0) - { - MEDfieldComputingStepInfo(anId, - &aFieldName, - 1, - &aNumDt, - &aNumOrd, - &aDt); - char profilename[MED_NAME_SIZE+1]; - char locname[MED_NAME_SIZE+1]; - med_int profilsize; - med_int aNbGauss; - - // protection from crash (division by zero) - // inside MEDfieldnValueWithProfile function - // caused by the workaround for IPAL13676 (see above) - if( anEntity == MED_NODE_ELEMENT && aGeom % 100 == 0 ) - continue; - - nval = MEDfieldnValueWithProfile(anId, - &aFieldName, - aNumDt, - aNumOrd, - anEntity, - med_geometry_type(aGeom), - 1, - MED_COMPACT_STMODE, - profilename, - &profilsize, - locname, - &aNbGauss); - } - bool anIsSatisfied =(nval > 0); - if(anIsSatisfied){ - INITMSG(MYDEBUG, - "GetNbTimeStamps aNbTimeStamps = "<second; - theEntity = EEntiteMaillage(anEntity); - aNbTimeStamps = aNbStamps; - } - } - if(!theGeom2Size.empty()) - break; - } - return aNbTimeStamps; - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::GetTimeStampInfo(TInt theTimeStampId, - MED::TTimeStampInfo& theInfo, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - const TGeom2Size& aGeom2Size = theInfo.myGeom2Size; - - if(theErr){ - if(aGeom2Size.empty()) - *theErr = -1; - if(*theErr < 0) - return; - }else if(aGeom2Size.empty()) - EXCEPTION(std::runtime_error,"GetTimeStampInfo - There is no any cell"); - - MED::TFieldInfo& aFieldInfo = *theInfo.myFieldInfo; - MED::TMeshInfo& aMeshInfo = *aFieldInfo.myMeshInfo; - - TValueHolder aFieldName(aFieldInfo.myName); - TValueHolder anEntity(theInfo.myEntity); - TValueHolder aNumDt(theInfo.myNumDt); - TValueHolder aNumOrd(theInfo.myNumOrd); - TValueHolder anUnitDt(theInfo.myUnitDt); - TValueHolder aDt(theInfo.myDt); - TValueHolder aMeshName(aMeshInfo.myName); - TValueHolder anIsLocal(aFieldInfo.myIsLocal); - TValueHolder aNbRef(aFieldInfo.myNbRef); - - TGeom2NbGauss& aGeom2NbGauss = theInfo.myGeom2NbGauss; - - // just to get a time stamp unit (anUnitDt) - med_field_type aFieldType; - med_int aNbComp = MEDfieldnComponentByName(myFile->Id(), &aFieldName); - char *aCompName = new char[aNbComp*MED_SNAME_SIZE+1]; - char *aCompUnit = new char[aNbComp*MED_SNAME_SIZE+1]; - TInt aNbStamps; - MEDfieldInfoByName(myFile->Id(), - &aFieldName, - &aMeshName, - &anIsLocal, - &aFieldType, - aCompName, - aCompUnit, - &anUnitDt, - &aNbStamps); - delete [] aCompName; - delete [] aCompUnit; - - TGeom2Size::const_iterator anIter = aGeom2Size.begin(); - for(; anIter != aGeom2Size.end(); anIter++){ - const EGeometrieElement& aGeom = anIter->first; - med_int aNbGauss = -1; - - TErr aRet; - aRet = MEDfieldComputingStepInfo(myFile->Id(), - &aFieldName, - theTimeStampId, - &aNumDt, - &aNumOrd, - &aDt); - char profilename[MED_NAME_SIZE+1]; - med_int profilsize; - char locname[MED_NAME_SIZE+1]; - MEDfieldnValueWithProfile(myFile->Id(), - &aFieldName, - aNumDt, - aNumOrd, - anEntity, - med_geometry_type(aGeom), - 1, - MED_COMPACT_STMODE, - profilename, - &profilsize, - locname, - &aNbGauss); - - static TInt MAX_NB_GAUSS_POINTS = 32; - if(aNbGauss <= 0 || aNbGauss > MAX_NB_GAUSS_POINTS) - aNbGauss = 1; - - aGeom2NbGauss[aGeom] = aNbGauss; - - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"GetTimeStampInfo - MEDfieldnValueWithProfile(...)"); - } - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::GetTimeStampValue(const PTimeStampValueBase& theTimeStampValue, - const TMKey2Profile& theMKey2Profile, - const TKey2Gauss& theKey2Gauss, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return; - - TIdt anId = myFile->Id(); - - TValueHolder aModeSwitch(theTimeStampValue->myModeSwitch); - MED::TGeom2Profile& aGeom2Profile = theTimeStampValue->myGeom2Profile; - - MED::PTimeStampInfo aTimeStampInfo = theTimeStampValue->myTimeStampInfo; - TValueHolder anEntity(aTimeStampInfo->myEntity); - TValueHolder aNumDt(aTimeStampInfo->myNumDt); - TValueHolder aNumOrd(aTimeStampInfo->myNumOrd); - - MED::PFieldInfo aFieldInfo = aTimeStampInfo->myFieldInfo; - TValueHolder aFieldName(aFieldInfo->myName); - TValueHolder anIsLocal(aFieldInfo->myIsLocal); - - MED::PMeshInfo aMeshInfo = aFieldInfo->myMeshInfo; - TValueHolder aMeshName(aMeshInfo->myName); - - TGeom2Gauss& aGeom2Gauss = aTimeStampInfo->myGeom2Gauss; - TVector aGaussName(GetNOMLength()+1); - - med_storage_mode aProfileMode = med_storage_mode(boost::get<0>(theMKey2Profile)); - MED::TKey2Profile aKey2Profile = boost::get<1>(theMKey2Profile); - TVector aProfileName(GetNOMLength()+1); - - TGeom2Size& aGeom2Size = aTimeStampInfo->myGeom2Size; - TGeom2Size::iterator anIter = aGeom2Size.begin(); - for(; anIter != aGeom2Size.end(); anIter++){ - EGeometrieElement aGeom = anIter->first; - TInt aNbElem = anIter->second; - med_int profilesize,aNbGauss; - - TInt aNbVal = MEDfieldnValueWithProfile(anId, - &aFieldName, - aNumDt, - aNumOrd, - anEntity, - med_geometry_type(aGeom), - 1, - aProfileMode, - &aProfileName[0], - &profilesize, - &aGaussName[0], - &aNbGauss); - - if(aNbVal <= 0){ - if(theErr){ - *theErr = -1; - return; - } - EXCEPTION(std::runtime_error,"GetTimeStampValue - MEDfieldnValueWithProfile(...) - aNbVal == "<myNbComp; - TInt aNbValue = aNbVal;// / aNbGauss; rules in MED changed - theTimeStampValue->AllocateValue(aGeom, - aNbValue, - aNbGauss, - aNbComp); - TInt aValueSize = theTimeStampValue->GetValueSize(aGeom); - - INITMSG(MYDEBUG, - "TVWrapper::GetTimeStampValue - aGeom = "<second; - aGeom2Gauss[aGeom] = aGaussInfo; - } - } - - MED::PProfileInfo aProfileInfo; - if(strcmp(&aProfileName[0],MED_NO_PROFILE) != 0){ - MED::TKey2Profile::const_iterator anIter = aKey2Profile.find(&aProfileName[0]); - if(anIter != aKey2Profile.end()){ - aProfileInfo = anIter->second; - aGeom2Profile[aGeom] = aProfileInfo; - } - } - - if(aGaussInfo && aNbGauss != aGaussInfo->GetNbGauss()){ - if(theErr){ - *theErr = MED_FALSE; - return; - } - EXCEPTION(std::runtime_error,"GetTimeStampValue - aNbGauss != aGaussInfo->GetNbGauss()"); - } - - if(aProfileInfo && aProfileInfo->IsPresent()){ - TInt aNbSubElem = aProfileInfo->GetSize(); - TInt aProfileSize = aNbSubElem*aNbComp*aNbGauss; - if(aProfileSize != aValueSize){ - if(theErr){ - *theErr = -1; - return; - } - EXCEPTION(std::runtime_error, - "GetTimeStampValue - aProfileSize("<Id(); - - TValueHolder aModeSwitch(theTimeStampValue->myModeSwitch); - MED::TGeom2Profile& aGeom2Profile = theTimeStampValue->myGeom2Profile; - - MED::PTimeStampInfo aTimeStampInfo = theTimeStampValue->myTimeStampInfo; - TValueHolder anEntity(aTimeStampInfo->myEntity); - TValueHolder aNumDt(aTimeStampInfo->myNumDt); - TValueHolder aNumOrd(aTimeStampInfo->myNumOrd); - TValueHolder anUnitDt(aTimeStampInfo->myUnitDt); - TValueHolder aDt(aTimeStampInfo->myDt); - MED::TGeom2Gauss& aGeom2Gauss = aTimeStampInfo->myGeom2Gauss; - - MED::PFieldInfo aFieldInfo = aTimeStampInfo->myFieldInfo; - TValueHolder aFieldName(aFieldInfo->myName); - - MED::PMeshInfo aMeshInfo = aFieldInfo->myMeshInfo; - TValueHolder aMeshName(aMeshInfo->myName); - - const TGeomSet& aGeomSet = theTimeStampValue->myGeomSet; - TGeomSet::const_iterator anIter = aGeomSet.begin(); - for(; anIter != aGeomSet.end(); anIter++){ - EGeometrieElement aGeom = *anIter; - - TVector aGaussName(GetNOMLength()+1); - MED::TGeom2Gauss::const_iterator aGaussIter = aGeom2Gauss.find(aGeom); - if(aGaussIter != aGeom2Gauss.end()){ - MED::PGaussInfo aGaussInfo = aGaussIter->second; - strcpy(&aGaussName[0],&aGaussInfo->myName[0]); - } - - TVector aProfileName(GetNOMLength()+1); - med_storage_mode aProfileMode = med_storage_mode(eNO_PFLMOD); - MED::TGeom2Profile::const_iterator aProfileIter = aGeom2Profile.find(aGeom); - if(aProfileIter != aGeom2Profile.end()){ - MED::PProfileInfo aProfileInfo = aProfileIter->second; - aProfileMode = med_storage_mode(aProfileInfo->myMode); - strcpy(&aProfileName[0],&aProfileInfo->myName[0]); - } - - med_int aNbVal = theTimeStampValue->GetNbVal(aGeom); - - aRet = MEDfieldValueWithProfileWr(anId, - &aFieldName, - aNumDt, - aNumOrd, - aDt, - anEntity, - med_geometry_type(aGeom), - aProfileMode, - &aProfileName[0], - &aGaussName[0], - aModeSwitch, - MED_ALL_CONSTITUENT, - aNbVal, - theTimeStampValue->GetValuePtr(aGeom)); - if(aRet < 0){ - if(theErr){ - *theErr = MED_FALSE; - break; - } - EXCEPTION(std::runtime_error,"SetTimeStampValue - MEDfieldValueWithProfileWr(...)"); - } - - } - - INITMSG(MYDEBUG,"TVWrapper::SetTimeStampValue - MED_MODE_ACCES = "< aCoord(anInfo.myCoord); - TValueHolder aModeSwitch(anInfo.myModeSwitch); - TValueHolder aCoordNames(anInfo.myCoordNames); - TValueHolder aCoordUnits(anInfo.myCoordUnits); - med_int aNbNoeuds = med_int(anInfo.myCoord.size() / aMeshInfo.myDim); - //med_axis_type aRepere = MED_CARTESIAN; - - aRet = MEDmeshNodeCoordinateWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_UNDEF_DT, - aModeSwitch, - aNbNoeuds, - &aCoord); - - if(aRet < 0) - EXCEPTION(std::runtime_error,"SetGrilleInfo - MEDmeshNodeCoordinateWr(...)"); - - TValueHolder aGrilleStructure(anInfo.myGrilleStructure); - aRet = MEDmeshGridStructWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_UNDEF_DT, - &aGrilleStructure); - if(aRet < 0) - EXCEPTION(std::runtime_error,"SetGrilleInfo - MEDmeshGridStructWr(...)"); - - } else { - for(med_int aAxis = 0; aAxis < aMeshInfo.myDim; aAxis++){ - aRet = MEDmeshGridIndexCoordinateWr(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_UNDEF_DT, - aAxis+1, - anInfo.GetIndexes(aAxis).size(), - &anInfo.GetIndexes(aAxis)[0]); - - if(aRet < 0) - EXCEPTION(std::runtime_error,"SetGrilleInfo - MEDmeshGridIndexCoordinateWr(...)"); - } - - } - - return; - } - - //---------------------------------------------------------------------------- - void - TVWrapper - ::GetGrilleInfo(TGrilleInfo& theInfo, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return; - - MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; - TValueHolder aMeshName(aMeshInfo.myName); - EMaillage aMaillageType = aMeshInfo.myType; - - GetGrilleType(aMeshInfo, theInfo.myGrilleType, theErr); - EGrilleType aGrilleType = theInfo.myGrilleType; - - TErr aRet = 0; - if(aMaillageType == eSTRUCTURE && aGrilleType == eGRILLE_STANDARD) { - GetGrilleStruct(aMeshInfo, theInfo.myGrilleStructure, theErr); - - TValueHolder aCoord(theInfo.myCoord); - TValueHolder aModeSwitch(theInfo.myModeSwitch); - TValueHolder aCoordNames(theInfo.myCoordNames); - TValueHolder aCoordUnits(theInfo.myCoordUnits); - //med_axis_type aRepere; - - aRet = MEDmeshNodeCoordinateRd(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - aModeSwitch, - &aCoord); - - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshNodeCoordinateRd(...)"); - - //TInt aNbNodes = theInfo.GetNbNodes();//GetNbFamilies(aMeshInfo); - TValueHolder aFamNumNode(theInfo.myFamNumNode); - - aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - MED_NODE, - MED_NO_GEOTYPE, - &aFamNumNode); - - if(aRet < 0) - { -// if (aRet == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files - { - int mySize = (int)theInfo.myFamNumNode.size(); - theInfo.myFamNumNode.clear(); - theInfo.myFamNumNode.resize(mySize,0); - aRet = 0; - } -// else -// EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshEntityFamilyNumberRd(...)"); - } - if(theErr) - *theErr = aRet; - - //============================ - } - - if(aMaillageType == eSTRUCTURE && aGrilleType != eGRILLE_STANDARD){ - ETable aTable = eCOOR_IND1; - for(med_int anAxis = 1; anAxis <= aMeshInfo.myDim; anAxis++){ - switch(anAxis){ - case 1 : - aTable = eCOOR_IND1; - break; - case 2 : - aTable = eCOOR_IND2; - break; - case 3 : - aTable = eCOOR_IND3; - break; - default : - aRet = -1; - } - - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"GetGrilleInfo - anAxis number out of range(...)"); - - TInt aNbIndexes = GetNbNodes(aMeshInfo,aTable); - if(aNbIndexes < 0) - EXCEPTION(std::runtime_error,"GetGrilleInfo - Erreur a la lecture de la taille de l'indice"); - - TValueHolder anIndexes(theInfo.GetIndexes(anAxis-1)); - //TValueHolder table(aTable); - //char aCompNames[MED_SNAME_SIZE+1]; - //char anUnitNames[MED_SNAME_SIZE+1]; - aRet=MEDmeshGridIndexCoordinateRd(myFile->Id(),&aMeshName, - MED_NO_DT,MED_NO_IT, - anAxis, - &anIndexes); - - //theInfo.SetCoordName(anAxis-1, aCompNames); - //theInfo.SetCoordUnit(anAxis-1, anUnitNames); - theInfo.SetGrilleStructure(anAxis-1, aNbIndexes); - - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDindicesCoordLire(...)"); - } - } - - EGeometrieElement aGeom = theInfo.GetGeom(); - EEntiteMaillage aEntity = theInfo.GetEntity(); - TInt aNbCells = theInfo.GetNbCells(); - - theInfo.myFamNum.resize(aNbCells); - TValueHolder aFamNum(theInfo.myFamNum); - - aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(), - &aMeshName,MED_NO_DT,MED_NO_IT,med_entity_type(aEntity), - med_geometry_type(aGeom),&aFamNum); - - if ( aMeshInfo.myDim == 3 ) - { - aGeom = theInfo.GetSubGeom(); - aEntity = theInfo.GetSubEntity(); - aNbCells = theInfo.GetNbSubCells(); - - theInfo.myFamSubNum.resize(aNbCells,0); - TValueHolder aFamNum(theInfo.myFamSubNum); - - aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(), - &aMeshName,MED_NO_DT,MED_NO_IT, - med_entity_type(aEntity), - med_geometry_type(aGeom),&aFamNum); - } - if(aRet < 0) - { -// if (aRet == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files - { - int mySize = (int)theInfo.myFamNumNode.size(); - theInfo.myFamNumNode.clear(); - theInfo.myFamNumNode.resize(mySize,0); - aRet = 0; - } -// else -// EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshEntityFamilyNumberRd(...)"); - } - if(theErr) - *theErr = aRet; - } - - void - TVWrapper - ::GetGrilleType(const MED::TMeshInfo& theMeshInfo, - EGrilleType& theGridType, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - EXCEPTION(std::runtime_error," GetGrilleType - aFileWrapper (...)"); - - MED::TMeshInfo& aMeshInfo = const_cast(theMeshInfo); - - if(aMeshInfo.myType == eSTRUCTURE){ - TValueHolder aMeshName(aMeshInfo.myName); - TValueHolder aGridType(theGridType); - TErr aRet = MEDmeshGridTypeRd(myFile->Id(), - &aMeshName, - &aGridType); - - if(aRet < 0) - EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshGridTypeRd(...)"); - } - } - - void - TVWrapper - ::GetGrilleStruct(const MED::TMeshInfo& theMeshInfo, - TIntVector& theStruct, - TErr* theErr) - { - TFileWrapper aFileWrapper(myFile,eLECTURE,theErr); - - if(theErr && *theErr < 0) - return; - - TErr aRet; - MED::TMeshInfo& aMeshInfo = const_cast(theMeshInfo); - - TValueHolder aMeshName(aMeshInfo.myName); - TValueHolder aGridStructure(theStruct); - - aRet = MEDmeshGridStructRd(myFile->Id(), - &aMeshName, - MED_NO_DT, - MED_NO_IT, - &aGridStructure); - if(theErr) - *theErr = aRet; - else if(aRet < 0) - EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshGridStructRd(...)"); - } - } -} diff --git a/src/MEDWrapper/MED_V2_2_Wrapper.hxx b/src/MEDWrapper/MED_V2_2_Wrapper.hxx deleted file mode 100644 index 49b2b26f4..000000000 --- a/src/MEDWrapper/MED_V2_2_Wrapper.hxx +++ /dev/null @@ -1,443 +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 -// - -#ifndef MED_V2_2_Wrapper_HeaderFile -#define MED_V2_2_Wrapper_HeaderFile - -#include "MED_WrapperDef.hxx" -#include "MED_Structures.hxx" -#include "MED_TWrapper.hxx" - -namespace MED -{ - namespace V2_2 - { - //---------------------------------------------------------------------------- - class TFile; - typedef boost::shared_ptr PFile; - - typedef enum {eLECTURE, eLECTURE_ECRITURE, eLECTURE_AJOUT, eCREATION} EModeAcces; - - //---------------------------------------------------------------------------- - class MEDWRAPPER_EXPORT TVWrapper: public MED::TTWrapper - { - TVWrapper(); - TVWrapper(const TVWrapper&); - TVWrapper& operator=(const TVWrapper&); - - public: - TVWrapper(const std::string& theFileName); - - //---------------------------------------------------------------------------- - virtual - TInt - GetNbMeshes(TErr* theErr = NULL); - - virtual - void - GetMeshInfo(TInt theMeshId, MED::TMeshInfo&, - TErr* theErr = NULL); - - virtual - void - SetMeshInfo(const MED::TMeshInfo& theInfo, - TErr* theErr = NULL); - - void SetMeshInfo(const MED::TMeshInfo& theInfo, - EModeAcces theMode, - TErr* theErr = NULL); - - - //---------------------------------------------------------------------------- - virtual - TInt - GetNbFamilies(const MED::TMeshInfo& theMeshInfo, - TErr* theErr = NULL); - - virtual - TInt - GetNbFamAttr(TInt theFamId, - const MED::TMeshInfo& theInfo, - TErr* theErr = NULL); - - virtual - TInt - GetNbFamGroup(TInt theFamId, - const MED::TMeshInfo& theInfo, - TErr* theErr = NULL); - - virtual - void - GetFamilyInfo(TInt theFamId, - MED::TFamilyInfo& theInfo, - TErr* theErr = NULL); - - virtual - void - SetFamilyInfo(const MED::TFamilyInfo& theInfo, - TErr* theErr = NULL); - - void - SetFamilyInfo(const MED::TFamilyInfo& theInfo, - EModeAcces theMode, - TErr* theErr = NULL); - - - //---------------------------------------------------------------------------- - virtual - void - GetNames(TElemInfo& theInfo, - TInt nb, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr = NULL); - - virtual - void - GetNumeration(TElemInfo& theInfo, - TInt nb, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr = NULL); - - virtual - void - GetFamilies(TElemInfo& theInfo, - TInt nb, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr = NULL); - - virtual - void - SetNames(const TElemInfo& theInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr = NULL); - - void - SetNames(const TElemInfo& theInfo, - EModeAcces theMode, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr = NULL); - - virtual - void - SetNumeration(const TElemInfo& theInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr = NULL); - void - SetNumeration(const TElemInfo& theInfo, - EModeAcces theMode, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr = NULL); - - virtual - void - SetFamilies(const TElemInfo& theInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr = NULL); - void - SetFamilies(const TElemInfo& theInfo, - EModeAcces theMode, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr = NULL); - - //---------------------------------------------------------------------------- - virtual - TInt - GetNbNodes(const MED::TMeshInfo& theMeshInfo, - TErr* theErr = NULL) - { - return GetNbNodes(theMeshInfo,eCOOR,theErr); - } - - TInt - GetNbNodes(const MED::TMeshInfo& theMeshInfo, - ETable theTable, - TErr* theErr = NULL); - - virtual - void - GetNodeInfo(MED::TNodeInfo& theInfo, - TErr* theErr = NULL); - - virtual - void - SetNodeInfo(const MED::TNodeInfo& theInfo, - TErr* theErr = NULL); - - void - SetNodeInfo(const MED::TNodeInfo& theInfo, - EModeAcces theMode, - TErr* theErr = NULL); - - //---------------------------------------------------------------------------- - virtual - void - GetPolygoneInfo(TPolygoneInfo& theInfo, - TErr* theErr = NULL); - - virtual - void - SetPolygoneInfo(const TPolygoneInfo& theInfo, - TErr* theErr = NULL); - - void - SetPolygoneInfo(const MED::TPolygoneInfo& theInfo, - EModeAcces theMode, - TErr* theErr = NULL); - - virtual - TInt - GetNbPolygones(const TMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - EConnectivite theConnMode = eNOD, - TErr* theErr = NULL); - - virtual - TInt - GetPolygoneConnSize(const TMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - EConnectivite theConnMode = eNOD, - TErr* theErr = NULL); - - //---------------------------------------------------------------------------- - virtual - void - GetPolyedreInfo(TPolyedreInfo& theInfo, - TErr* theErr = NULL); - - virtual - void - SetPolyedreInfo(const TPolyedreInfo& theInfo, - TErr* theErr = NULL); - - void - SetPolyedreInfo(const MED::TPolyedreInfo& theInfo, - EModeAcces theMode, - TErr* theErr = NULL); - - virtual - TInt - GetNbPolyedres(const TMeshInfo& theMeshInfo, - EEntiteMaillage, - EGeometrieElement, - EConnectivite, - TErr* theErr = NULL); - - virtual - void - GetPolyedreConnSize(const TMeshInfo& theMeshInfo, - TInt& theNbFaces, - TInt& theConnSize, - EConnectivite theConnMode = eNOD, - TErr* theErr = NULL); - - //---------------------------------------------------------------------------- - virtual - TEntityInfo - GetEntityInfo(const MED::TMeshInfo& theMeshInfo, - EConnectivite theConnMode = eNOD, - TErr* theErr = NULL); - - virtual - TInt - GetNbCells(const MED::TMeshInfo& theMeshInfo, - EEntiteMaillage, - EGeometrieElement, - EConnectivite theConnMode = eNOD, - TErr* theErr = NULL); - - virtual - void - GetCellInfo(MED::TCellInfo& theInfo, - TErr* theErr = NULL); - - virtual - void - SetCellInfo(const MED::TCellInfo& theInfo, - TErr* theErr = NULL); - - void - SetCellInfo(const MED::TCellInfo& theInfo, - EModeAcces theMode, - TErr* theErr = NULL); - - //---------------------------------------------------------------------------- - //! Read geom type of MED_BALL structural element - EGeometrieElement GetBallGeom(const TMeshInfo& theMeshInfo); - - //! Read number of balls in the Mesh - virtual TInt GetNbBalls(const TMeshInfo& theMeshInfo); - - //! Read a MEDWrapped representation of MED_BALL from the MED file - virtual void GetBallInfo(TBallInfo& theInfo, TErr* theErr = NULL); - - //! Write a MEDWrapped representation of MED_BALL to the MED file - virtual void SetBallInfo(const TBallInfo& theInfo, TErr* theErr); - - //! Write a MEDWrapped representation of MED_BALL to the MED file - void SetBallInfo(const TBallInfo& theInfo, EModeAcces theMode, TErr* theErr); - - //---------------------------------------------------------------------------- - virtual - TInt - GetNbFields(TErr* theErr = NULL); - - virtual - TInt - GetNbComp(TInt theFieldId, - TErr* theErr = NULL); - - virtual - void - GetFieldInfo(TInt theFieldId, - MED::TFieldInfo& theInfo, - TErr* theErr = NULL); - - virtual - void - SetFieldInfo(const MED::TFieldInfo& theInfo, - TErr* theErr = NULL); - - void - SetFieldInfo(const MED::TFieldInfo& theInfo, - EModeAcces theMode, - TErr* theErr = NULL); - - //---------------------------------------------------------------------------- - virtual - TInt - GetNbGauss(TErr* theErr = NULL); - - virtual - TGaussInfo::TInfo - GetGaussPreInfo(TInt theId, - TErr* theErr = NULL); - - virtual - void - GetGaussInfo(TInt theId, - TGaussInfo& theInfo, - TErr* theErr = NULL); - - //---------------------------------------------------------------------------- - virtual - TInt - GetNbProfiles(TErr* theErr = NULL); - - virtual - TProfileInfo::TInfo - GetProfilePreInfo(TInt theId, - TErr* theErr = NULL); - - virtual - void - GetProfileInfo(TInt theId, - TProfileInfo& theInfo, - TErr* theErr = NULL); - - virtual - void - SetProfileInfo(const TProfileInfo& theInfo, - TErr* theErr = NULL); - - void - SetProfileInfo(const TProfileInfo& theInfo, - EModeAcces theMode, - TErr* theErr = NULL); - - //---------------------------------------------------------------------------- - virtual - TInt - GetNbTimeStamps(const MED::TFieldInfo& theInfo, - const MED::TEntityInfo& theEntityInfo, - EEntiteMaillage& theEntity, - TGeom2Size& theGeom2Size, - TErr* theErr = NULL); - - virtual - void - GetTimeStampInfo(TInt theTimeStampId, - MED::TTimeStampInfo& theInfo, - TErr* theErr = NULL); - - virtual - void - GetTimeStampValue(const PTimeStampValueBase& theTimeStampValue, - const TMKey2Profile& theMKey2Profile, - const TKey2Gauss& theKey2Gauss, - TErr* theErr = NULL); - - virtual - void - SetTimeStampValue(const PTimeStampValueBase& theTimeStampValue, - TErr* theErr = NULL); - - void - SetTimeStampValue(const PTimeStampValueBase& theTimeStampValue, - EModeAcces theMode, - TErr* theErr = NULL); - - - //---------------------------------------------------------------------------- - virtual - void - GetGrilleInfo(TGrilleInfo& theGrilleInfo, - TErr* theErr = NULL); - - virtual - void - SetGrilleInfo(const MED::TGrilleInfo& theGrilleInfo, - TErr* theErr = NULL); - - void - SetGrilleInfo(const MED::TGrilleInfo& theGrilleInfo, - EModeAcces theMode, - TErr* theErr = NULL); - - virtual - void - GetGrilleType(const MED::TMeshInfo& theMeshInfo, - EGrilleType& type, - TErr* theErr = NULL); - - void - GetGrilleStruct(const MED::TMeshInfo& theMeshInfo, - TIntVector& theStruct, - TErr* theErr = NULL); - - protected: - PFile myFile; - }; - } -} - -#endif // MED_V2_2_Wrapper_HeaderFile diff --git a/src/MEDWrapper/MED_Vector.hxx b/src/MEDWrapper/MED_Vector.hxx index b260ddacb..f767f55a3 100644 --- a/src/MEDWrapper/MED_Vector.hxx +++ b/src/MEDWrapper/MED_Vector.hxx @@ -32,7 +32,7 @@ namespace MED { - //! Main purpose to introduce the class was to customize operator [] + //! Main purpose to introduce the class was to customize operator [] template > class TVector : public std::vector<_Tp, _Alloc> { @@ -68,15 +68,15 @@ namespace MED public: explicit - TVector(const allocator_type& __a = allocator_type()): - superclass(__a) + TVector(const allocator_type& __a = allocator_type()): + superclass(__a) {} - + TVector(size_type __n, const value_type& __val, const allocator_type& __a = allocator_type()): superclass(__n, __val, __a) {} - + explicit TVector(size_type __n): superclass(__n) diff --git a/src/MEDWrapper/MED_Wrapper.cxx b/src/MEDWrapper/MED_Wrapper.cxx index 8cf3bdbfb..dbabc2a2d 100644 --- a/src/MEDWrapper/MED_Wrapper.cxx +++ b/src/MEDWrapper/MED_Wrapper.cxx @@ -21,20 +21,25 @@ // #include "MED_Wrapper.hxx" +#include "MED_TStructures.hxx" #include "MED_Utilities.hxx" - + +#include +#include + #include #ifdef _DEBUG_ static int MYDEBUG = 0; static int MYVALUEDEBUG = 0; #else -// static int MYDEBUG = 0; -// static int MYVALUEDEBUG = 0; +static int MYDEBUG = 0; +static int MYVALUEDEBUG = 0; #endif namespace MED { + //--------------------------------------------------------------- TLockProxy ::TLockProxy(TWrapper* theWrapper): myWrapper(theWrapper) @@ -44,30 +49,306 @@ namespace MED #else boost::detail::thread::lock_ops::lock(myWrapper->myMutex); #endif - INITMSG(MYDEBUG,"TLockProxy() - this -"<Open(theMode, theErr); + } + + ~TFileWrapper() + { + myFile->Close(); + } + }; + + //---------------------------------------------------------------------------- + template + void + Print(SharedPtr theTimeStampValue) + { + INITMSG(MYDEBUG,"Print - TimeStampValue\n"); + typename TimeStampValueType::TTGeom2Value& aGeom2Value = theTimeStampValue->myGeom2Value; + typename TimeStampValueType::TTGeom2Value::const_iterator anIter = aGeom2Value.begin(); + for (; anIter != aGeom2Value.end(); anIter++) { + const EGeometrieElement& aGeom = anIter->first; + const typename TimeStampValueType::TTMeshValue& aMeshValue = anIter->second; + TInt aNbElem = aMeshValue.myNbElem; + TInt aNbGauss = aMeshValue.myNbGauss; + TInt aNbComp = aMeshValue.myNbComp; + INITMSG(MYDEBUG, "aGeom = "<Open(eLECTURE_ECRITURE, &aRet); + // if (aRet < 0) + // myFile->Close(); + // myFile->Open(eLECTURE_AJOUT, &aRet); + // } + if (aRet < 0) { + myFile->Close(); + myFile->Open(eLECTURE, &aRet); + } + if (aRet < 0) { + myFile->Close(); + myFile->Open(eCREATION, &aRet); + } + } + + //---------------------------------------------------------------------------- + TWrapper:: + ~TWrapper() + { + } + + //---------------------------------------------------------------------------- + TInt + TWrapper + ::GetNbMeshes(TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return -1; + + return MEDnMesh(myFile->Id()); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::GetMeshInfo(TInt theMeshId, + MED::TMeshInfo& theInfo, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return; + + TValueHolder aMeshName(theInfo.myName); + TValueHolder aDim(theInfo.myDim); + TValueHolder aSpaceDim(theInfo.mySpaceDim); + TValueHolder aType(theInfo.myType); + char dtunit[MED_SNAME_SIZE+1]; + med_sorting_type sorttype; + med_int nstep; + med_axis_type at; + int naxis = MEDmeshnAxis(myFile->Id(), theMeshId); + char *axisname = new char[naxis*MED_SNAME_SIZE+1]; + char *axisunit = new char[naxis*MED_SNAME_SIZE+1]; + TErr aRet = MEDmeshInfo(myFile->Id(), + theMeshId, + &aMeshName, + &aSpaceDim, + &aDim, + &aType, + &theInfo.myDesc[0], + dtunit, + &sorttype, + &nstep, + &at, + axisname, + axisunit); + delete [] axisname; + delete [] axisunit; + if (aRet < 0) + EXCEPTION(std::runtime_error, "GetMeshInfo - MEDmeshInfo(...)"); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetMeshInfo(const MED::TMeshInfo& theInfo, + TErr* theErr) + { + TErr aRet; + SetMeshInfo(theInfo, eLECTURE_ECRITURE, &aRet); + + if (aRet < 0) + SetMeshInfo(theInfo, eLECTURE_AJOUT, &aRet); + + if (aRet < 0) + SetMeshInfo(theInfo, eCREATION, &aRet); + + if (theErr) + *theErr = aRet; + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetMeshInfo(const MED::TMeshInfo& theInfo, + EModeAcces theMode, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, theMode, theErr); + + if (theErr && *theErr < 0) + return; + + MED::TMeshInfo& anInfo = const_cast(theInfo); + + TValueHolder aMeshName(anInfo.myName); + TValueHolder aDim(anInfo.myDim); + TValueHolder aSpaceDim(anInfo.mySpaceDim); + TValueHolder aType(anInfo.myType); + TValueHolder aDesc(anInfo.myDesc); + + char *nam = new char[aSpaceDim*MED_SNAME_SIZE+1]; + std::fill(nam, nam+aSpaceDim*MED_SNAME_SIZE+1, '\0'); + char *unit = new char[aSpaceDim*MED_SNAME_SIZE+1]; + std::fill(unit, unit+aSpaceDim*MED_SNAME_SIZE+1, '\0'); + TErr aRet = MEDmeshCr(myFile->Id(), + &aMeshName, + aSpaceDim, + aDim, + aType, + &aDesc, + "", + MED_SORT_DTIT, + MED_CARTESIAN, + nam, + unit); + delete [] nam; + delete [] unit; + + //if (aRet == 0) + // aRet = MEDunvCr(myFile->Id(),&aMeshName); + + INITMSG(MYDEBUG, "TWrapper::SetMeshInfo - MED_MODE_ACCES = "<(theInfo); + TValueHolder aName(anInfo.myName); + return MEDnFamily(myFile->Id(), &aName); + } + + //---------------------------------------------------------------------------- + TInt + TWrapper + ::GetNbFamAttr(TInt theFamId, + const MED::TMeshInfo& theInfo, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return -1; + + MED::TMeshInfo& anInfo = const_cast(theInfo); + + TValueHolder aName(anInfo.myName); + + return MEDnFamily23Attribute(myFile->Id(), &aName, theFamId); + } + + //---------------------------------------------------------------------------- + TInt + TWrapper + ::GetNbFamGroup(TInt theFamId, + const MED::TMeshInfo& theInfo, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return -1; + + MED::TMeshInfo& anInfo = const_cast(theInfo); + + TValueHolder aName(anInfo.myName); + + return MEDnFamilyGroup(myFile->Id(), &aName, theFamId); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::GetFamilyInfo(TInt theFamId, + MED::TFamilyInfo& theInfo, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return; + + MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; + + TValueHolder aMeshName(aMeshInfo.myName); + TValueHolder aFamilyName(theInfo.myName); + TValueHolder aFamilyId(theInfo.myId); + TValueHolder anAttrId(theInfo.myAttrId); + TValueHolder anAttrVal(theInfo.myAttrVal); + TValueHolder anAttrDesc(theInfo.myAttrDesc); + TValueHolder aGroupNames(theInfo.myGroupNames); + + TErr aRet = MEDfamily23Info(myFile->Id(), + &aMeshName, + theFamId, + &aFamilyName, + &anAttrId, + &anAttrVal, + &anAttrDesc, + &aFamilyId, + &aGroupNames); + + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetFamilyInfo - MEDfamily23Info(...) - "<< + " aMeshInfo.myName = '"<<&aMeshName<< + "'; theFamId = "<GetType() != eNON_STRUCTURE) + // if (theMeshInfo->GetType() != eNON_STRUCTURE) // return PFamilyInfo(); - - TInt aNbAttr = GetNbFamAttr(theId,*theMeshInfo); - TInt aNbGroup = GetNbFamGroup(theId,*theMeshInfo); - PFamilyInfo anInfo = CrFamilyInfo(theMeshInfo,aNbGroup,aNbAttr); - GetFamilyInfo(theId,*anInfo,theErr); + + TInt aNbAttr = GetNbFamAttr(theId, *theMeshInfo); + TInt aNbGroup = GetNbFamGroup(theId, *theMeshInfo); + PFamilyInfo anInfo = CrFamilyInfo(theMeshInfo, aNbGroup, aNbAttr); + GetFamilyInfo(theId, *anInfo, theErr); #ifdef _DEBUG_ std::string aName = anInfo->GetName(); - INITMSG(MYDEBUG,"GetPFamilyInfo - aFamilyName = '"<GetGroupName(iGroup); - INITMSG(MYDEBUG,"aGroupName = '"< aMeshName (aMeshInfo.myName); + TValueHolder anElemNames(theInfo.myElemNames); + TValueHolder anEntity (theEntity); + TValueHolder aGeom (theGeom); + + TErr aRet = MEDmeshEntityNameRd(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + anEntity, + aGeom, + &anElemNames); + + theInfo.myIsElemNames = aRet != 0? eFAUX : eVRAI ; + + if (theErr) + *theErr = aRet; + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetNames(const TElemInfo& theInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TErr* theErr) + { + SetNames(theInfo, eLECTURE_ECRITURE, theEntity, theGeom, theErr); + } //---------------------------------------------------------------------------- - PNodeInfo + void TWrapper - ::GetPNodeInfo(const PMeshInfo& theMeshInfo, - TErr* theErr) + ::SetNames(const TElemInfo& theInfo, + EModeAcces theMode, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TErr* theErr) { - TInt aNbElems = GetNbNodes(*theMeshInfo); - if(aNbElems == 0){ - return PNodeInfo(); - } + TFileWrapper aFileWrapper(myFile, theMode, theErr); - PNodeInfo anInfo = CrNodeInfo(theMeshInfo,aNbElems); - GetNodeInfo(*anInfo,theErr); + if (theErr && *theErr < 0) + return; -#ifdef _DEBUG_ - TInt aDim = theMeshInfo->myDim; - TInt aNbElem = anInfo->GetNbElem(); - INITMSG(MYDEBUG,"GetPNodeInfo: "); - { - INITMSG(MYDEBUG,"aCoords: "<myCoord; - for(TInt iElem = 0; iElem < aNbElem; iElem++){ - for(TInt iDim = 0, anId = iElem*aDim; iDim < aDim; iDim++, anId++){ - ADDMSG(MYVALUEDEBUG,aCoord[anId]<<","); - } - ADDMSG(MYVALUEDEBUG," "); - } - ADDMSG(MYDEBUG, std::endl); - - BEGMSG(MYVALUEDEBUG, "GetFamNum: "); - for(TInt iElem = 0; iElem < aNbElem; iElem++){ - ADDMSG(MYVALUEDEBUG,anInfo->GetFamNum(iElem)<<", "); - } - ADDMSG(MYVALUEDEBUG, std::endl); - - if(anInfo->IsElemNum()){ - BEGMSG(MYVALUEDEBUG,"GetElemNum: "); - for(TInt iElem = 0; iElem < aNbElem; iElem++){ - ADDMSG(MYVALUEDEBUG,anInfo->GetElemNum(iElem)<<", "); - } - ADDMSG(MYVALUEDEBUG, std::endl); - } + if (theGeom == eBALL) + theGeom = GetBallGeom(theInfo.myMeshInfo); + + MED::TElemInfo& anInfo = const_cast(theInfo); + MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo; + + TErr aRet = 0; + if (theInfo.myIsElemNames) { + TValueHolder aMeshName (aMeshInfo.myName); + TValueHolder anElemNames(anInfo.myElemNames); + TValueHolder anEntity (theEntity); + TValueHolder aGeom (theGeom); + + aRet = MEDmeshEntityNameWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + anEntity, + aGeom, + (TInt)anInfo.myElemNames->size(), + &anElemNames); + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "SetNames - MEDmeshEntityNameWr(...)"); } - ADDMSG(MYDEBUG, std::endl); -#endif - - return anInfo; } //---------------------------------------------------------------------------- - PPolygoneInfo + void TWrapper - ::GetPPolygoneInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - EConnectivite theConnMode) + ::GetNumeration(TElemInfo& theInfo, + TInt theNb, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TErr* theErr) { - if(theMeshInfo->GetType() != eNON_STRUCTURE) - return PPolygoneInfo(); + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); - TInt aNbElem = GetNbPolygones(theMeshInfo,theEntity,theGeom,theConnMode); - TInt aConnSize = GetPolygoneConnSize(theMeshInfo,theEntity,theGeom,theConnMode); - PPolygoneInfo anInfo = CrPolygoneInfo(theMeshInfo,theEntity,theGeom,aNbElem,aConnSize,theConnMode); - GetPolygoneInfo(anInfo); + if (theErr && *theErr < 0) + return; -#ifdef _DEBUG_ - INITMSG(MYDEBUG,"GetPPolygoneInfo"<< - " - theGeom = "<GetConnSlice(iElem); - TInt aConnDim = aConnSlice.size(); - for(TInt iConn = 0; iConn < aConnDim; iConn++){ - ADDMSG(MYVALUEDEBUG,aConnSlice[iConn]<<","); - } - ADDMSG(MYDEBUG," "); - } - ADDMSG(MYDEBUG, std::endl); -#endif + if (theGeom == eBALL) + theGeom = GetBallGeom(theInfo.myMeshInfo); - return anInfo; + MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; + + TValueHolder aMeshName(aMeshInfo.myName); + TValueHolder anElemNum(theInfo.myElemNum); + TValueHolder anEntity (theEntity); + TValueHolder aGeom (theGeom); + + TErr aRet = MEDmeshEntityNumberRd(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + anEntity, + aGeom, + &anElemNum); + + theInfo.myIsElemNum = aRet != 0? eFAUX : eVRAI; + + if (theErr) + *theErr = aRet; } - + //---------------------------------------------------------------------------- - PPolyedreInfo + void TWrapper - ::GetPPolyedreInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - EConnectivite theConnMode) + ::SetNumeration(const TElemInfo& theInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TErr* theErr) { - if(theMeshInfo->GetType() != eNON_STRUCTURE) - return PPolyedreInfo(); - TInt aNbElem = GetNbPolyedres(theMeshInfo,theEntity,theGeom,theConnMode); - TInt aNbFaces, aConnSize; - GetPolyedreConnSize(theMeshInfo,aNbFaces,aConnSize,theConnMode); - PPolyedreInfo anInfo = CrPolyedreInfo(theMeshInfo,theEntity,theGeom,aNbElem,aNbFaces,aConnSize,theConnMode); - GetPolyedreInfo(anInfo); + SetNumeration(theInfo, eLECTURE_ECRITURE, theEntity, theGeom, theErr); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetNumeration(const TElemInfo& theInfo, + EModeAcces theMode, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, theMode, theErr); + + if (theErr && *theErr < 0) + return; + + if (theGeom == eBALL) + theGeom = GetBallGeom(theInfo.myMeshInfo); + + MED::TElemInfo& anInfo = const_cast(theInfo); + MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo; + + TErr aRet = 0; + if (theInfo.myIsElemNum) { + TValueHolder aMeshName(aMeshInfo.myName); + TValueHolder anElemNum(anInfo.myElemNum); + TValueHolder anEntity (theEntity); + TValueHolder aGeom (theGeom); + + aRet = MEDmeshEntityNumberWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + anEntity, + aGeom, + (TInt)anInfo.myElemNum->size(), + &anElemNum); + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "SetNumeration - MEDmeshEntityNumberWr(...)"); + } + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::GetFamilies(TElemInfo& theInfo, + TInt theNb, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return; + + if (theGeom == eBALL) + theGeom = GetBallGeom(theInfo.myMeshInfo); + + MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; + + TValueHolder aMeshName(aMeshInfo.myName); + TValueHolder aFamNum (theInfo.myFamNum); + TValueHolder anEntity (theEntity); + TValueHolder aGeom (theGeom); + + TErr aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + anEntity, + aGeom, + &aFamNum); + + if (aRet < 0) { + // if (aRet == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files + { + int aSize = (int)theInfo.myFamNum->size(); + theInfo.myFamNum->clear(); + theInfo.myFamNum->resize(aSize,0); + aRet = 0; + } + // else + // EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshEntityFamilyNumberRd(...) of CELLS"); + } + if (theErr) + *theErr = aRet; + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetFamilies(const TElemInfo& theInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TErr* theErr) + { + SetFamilies(theInfo, eLECTURE_ECRITURE, theEntity, theGeom, theErr); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetFamilies(const TElemInfo& theInfo, + EModeAcces theMode, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, theMode, theErr); + + if (theErr && *theErr < 0) + return; + + if (theGeom == eBALL) + theGeom = GetBallGeom(theInfo.myMeshInfo); + + MED::TElemInfo& anInfo = const_cast(theInfo); + MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo; + + TValueHolder aMeshName(aMeshInfo.myName); + TValueHolder aFamNum (anInfo.myFamNum); + TValueHolder anEntity (theEntity); + TValueHolder aGeom (theGeom); + + TErr aRet = MEDmeshEntityFamilyNumberWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + anEntity, + aGeom, + (TInt)anInfo.myFamNum->size(), + &aFamNum); + + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "SetFamilies - MEDmeshEntityFamilyNumberWr(...)"); + } + + //---------------------------------------------------------------------------- + TInt + TWrapper + ::GetNbNodes(const MED::TMeshInfo& theMeshInfo, + TErr* theErr) + { + return GetNbNodes(theMeshInfo, eCOOR, theErr); + } + + //---------------------------------------------------------------------------- + TInt + TWrapper + ::GetNbNodes(const MED::TMeshInfo& theMeshInfo, + ETable theTable, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return -1; + + MED::TMeshInfo& aMeshInfo = const_cast(theMeshInfo); + + TValueHolder aMeshName(aMeshInfo.myName); + TValueHolder aTable(theTable); + med_bool chgt,trsf; + return MEDmeshnEntity(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_NODE, + MED_NO_GEOTYPE, + aTable, + MED_NO_CMODE, + &chgt, + &trsf); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::GetNodeInfo(MED::TNodeInfo& theInfo, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return; + + MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; + + TValueHolder aMeshName(aMeshInfo.myName); + TValueHolder aDim(aMeshInfo.myDim); + TValueHolder aCoord(theInfo.myCoord); + TValueHolder aModeSwitch(theInfo.myModeSwitch); + TValueHolder aSystem(theInfo.mySystem); + TValueHolder aCoordNames(theInfo.myCoordNames); + TValueHolder aCoordUnits(theInfo.myCoordUnits); + TValueHolder anElemNames(theInfo.myElemNames); + //TValueHolder anIsElemNames(theInfo.myIsElemNames); + TValueHolder anElemNum(theInfo.myElemNum); + //TValueHolder anIsElemNum(theInfo.myIsElemNum); + TValueHolder aFamNum(theInfo.myFamNum); + TValueHolder aNbElem(theInfo.myNbElem); + + TErr aRet = MEDmeshNodeCoordinateRd(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + aModeSwitch, + &aCoord); + + TErr aRet2 =MEDmeshEntityFamilyNumberRd(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_NODE, + MED_NO_GEOTYPE, + &aFamNum); + if (aRet2 < 0) { + // if (aRet2 == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files + { + int mySize = (int)theInfo.myFamNum->size(); + theInfo.myFamNum->clear(); + theInfo.myFamNum->resize(mySize,0); + } + // else + // EXCEPTION(std::runtime_error,"GetNodeInfo - MEDmeshEntityFamilyNumberRd(...)"); + } + + if (MEDmeshEntityNameRd(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_NODE, + MED_NO_GEOTYPE, + &anElemNames) < 0) theInfo.myIsElemNames=eFAUX; + + if (MEDmeshEntityNumberRd(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_NODE, + MED_NO_GEOTYPE, + &anElemNum) < 0) theInfo.myIsElemNum=eFAUX; + + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetNodeInfo - MEDmeshNodeCoordinateRd(...)"); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetNodeInfo(const MED::TNodeInfo& theInfo, + TErr* theErr) + { + TErr aRet; + SetNodeInfo(theInfo, eLECTURE_ECRITURE, &aRet); + + if (aRet < 0) + SetNodeInfo(theInfo, eLECTURE_AJOUT, &aRet); + + if (theErr) + *theErr = aRet; + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetNodeInfo(const MED::TNodeInfo& theInfo, + EModeAcces theMode, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, theMode, theErr); + + if (theErr && *theErr < 0) + return; + + MED::TNodeInfo& anInfo = const_cast(theInfo); + MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo; + + TValueHolder aMeshName (aMeshInfo.myName); + TValueHolder aCoord (anInfo.myCoord); + TValueHolder aModeSwitch (anInfo.myModeSwitch); + TValueHolder aSystem (anInfo.mySystem); + TValueHolder aCoordNames (anInfo.myCoordNames); + TValueHolder aCoordUnits (anInfo.myCoordUnits); + TValueHolder anElemNames (anInfo.myElemNames); + TValueHolder anIsElemNames(anInfo.myIsElemNames); + TValueHolder anElemNum (anInfo.myElemNum); + TValueHolder anIsElemNum (anInfo.myIsElemNum); + TValueHolder aFamNum (anInfo.myFamNum); + TValueHolder aNbElem (anInfo.myNbElem); + + TErr aRet = MEDmeshNodeCoordinateWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_NO_DT, + aModeSwitch, + aNbElem, + &aCoord); + + MEDmeshEntityFamilyNumberWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_NODE, + MED_NO_GEOTYPE, + aNbElem, + &aFamNum); + if (anIsElemNames) + MEDmeshEntityNameWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_NODE, + MED_NO_GEOTYPE, + aNbElem, + &anElemNames); + if (anIsElemNum) + MEDmeshEntityNumberWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_NODE, + MED_NO_GEOTYPE, + aNbElem, + &anElemNum); + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "SetNodeInfo - MEDmeshNodeCoordinateWr(...)"); + } + + //---------------------------------------------------------------------------- + PNodeInfo + TWrapper + ::CrNodeInfo(const PMeshInfo& theMeshInfo, + TInt theNbElem, + EModeSwitch theMode, + ERepere theSystem, + EBooleen theIsElemNum, + EBooleen theIsElemNames) + { + return PNodeInfo(new TTNodeInfo + (theMeshInfo, + theNbElem, + theMode, + theSystem, + theIsElemNum, + theIsElemNames)); + } + + //---------------------------------------------------------------------------- + PNodeInfo + TWrapper + ::CrNodeInfo(const PMeshInfo& theMeshInfo, + const TFloatVector& theNodeCoords, + EModeSwitch theMode, + ERepere theSystem, + const TStringVector& theCoordNames, + const TStringVector& theCoordUnits, + const TIntVector& theFamilyNums, + const TIntVector& theElemNums, + const TStringVector& theElemNames) + { + return PNodeInfo(new TTNodeInfo + (theMeshInfo, + theNodeCoords, + theMode, + theSystem, + theCoordNames, + theCoordUnits, + theFamilyNums, + theElemNums, + theElemNames)); + } + + //---------------------------------------------------------------------------- + PNodeInfo + TWrapper + ::CrNodeInfo(const PMeshInfo& theMeshInfo, + const PNodeInfo& theInfo) + { + return PNodeInfo(new TTNodeInfo + (theMeshInfo, + theInfo)); + } + + //---------------------------------------------------------------------------- + PNodeInfo + TWrapper + ::GetPNodeInfo(const PMeshInfo& theMeshInfo, + TErr* theErr) + { + TInt aNbElems = GetNbNodes(*theMeshInfo); + if (aNbElems == 0) { + return PNodeInfo(); + } + + PNodeInfo anInfo = CrNodeInfo(theMeshInfo, aNbElems); + GetNodeInfo(*anInfo, theErr); #ifdef _DEBUG_ - INITMSG(MYDEBUG,"GetPPolyedreInfo"<< - " - theGeom = "<GetConnSliceArr(iElem); - TInt aNbFaces = aConnSliceArr.size(); - ADDMSG(MYDEBUG,"{"); - for(TInt iFace = 0; iFace < aNbFaces; iFace++){ - TCConnSlice aConnSlice = aConnSliceArr[iFace]; - TInt aNbConn = aConnSlice.size(); - ADDMSG(MYDEBUG,"["); - for(TInt iConn = 0; iConn < aNbConn; iConn++){ - ADDMSG(MYVALUEDEBUG,aConnSlice[iConn]<<","); + TInt aDim = theMeshInfo->myDim; + TInt aNbElem = anInfo->GetNbElem(); + INITMSG(MYDEBUG, "GetPNodeInfo: "); + { + INITMSG(MYDEBUG, "aCoords: "<myCoord; + for (TInt iElem = 0; iElem < aNbElem; iElem++) { + for (TInt iDim = 0, anId = iElem*aDim; iDim < aDim; iDim++, anId++) { + ADDMSG(MYVALUEDEBUG, aCoord[anId]<<","); + } + ADDMSG(MYVALUEDEBUG, " "); + } + ADDMSG(MYDEBUG, std::endl); + + BEGMSG(MYVALUEDEBUG, "GetFamNum: "); + for (TInt iElem = 0; iElem < aNbElem; iElem++) { + ADDMSG(MYVALUEDEBUG, anInfo->GetFamNum(iElem)<<", "); + } + ADDMSG(MYVALUEDEBUG, std::endl); + + if (anInfo->IsElemNum()) { + BEGMSG(MYVALUEDEBUG, "GetElemNum: "); + for (TInt iElem = 0; iElem < aNbElem; iElem++) { + ADDMSG(MYVALUEDEBUG, anInfo->GetElemNum(iElem)<<", "); } - ADDMSG(MYDEBUG,"] "); + ADDMSG(MYVALUEDEBUG, std::endl); } - ADDMSG(MYDEBUG,"} "); } ADDMSG(MYDEBUG, std::endl); #endif return anInfo; } - + + //---------------------------------------------------------------------------- + PElemInfo + TWrapper + ::CrElemInfo(const PMeshInfo& theMeshInfo, + TInt theNbElem, + EBooleen theIsElemNum, + EBooleen theIsElemNames) + { + return PElemInfo(new TTElemInfo + (theMeshInfo, + theNbElem, + theIsElemNum, + theIsElemNames)); + } + + //---------------------------------------------------------------------------- + PElemInfo + TWrapper + ::CrElemInfo(const PMeshInfo& theMeshInfo, + TInt theNbElem, + const TIntVector& theFamNum, + const TIntVector& aElemNum, + const TStringVector& aElemNames) + { + return PElemInfo(new TTElemInfo + (theMeshInfo, + theNbElem, + theFamNum, + aElemNum, + aElemNames)); + } + //---------------------------------------------------------------------------- - PElemInfo + PElemInfo TWrapper ::GetPElemInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, EConnectivite theConnMode, TErr* theErr) { EMaillage aType = theMeshInfo->GetType(); - if(aType == eNON_STRUCTURE){ - switch(theGeom){ + if (aType == eNON_STRUCTURE) { + switch (theGeom) { case ePOINT1: - if(theEntity == eNOEUD) - return GetPNodeInfo(theMeshInfo,theErr); - return GetPCellInfo(theMeshInfo,theEntity,theGeom,theConnMode,theErr); + if (theEntity == eNOEUD) + return GetPNodeInfo(theMeshInfo, theErr); + return GetPCellInfo(theMeshInfo, theEntity, theGeom, theConnMode, theErr); break; case ePOLYGONE: - return GetPPolygoneInfo(theMeshInfo,theEntity,theGeom,theConnMode); + return GetPPolygoneInfo(theMeshInfo, theEntity, theGeom, theConnMode); break; case ePOLYEDRE: - return GetPPolyedreInfo(theMeshInfo,theEntity,theGeom,theConnMode); + return GetPPolyedreInfo(theMeshInfo, theEntity, theGeom, theConnMode); break; default: - return GetPCellInfo(theMeshInfo,theEntity,theGeom,theConnMode,theErr); + return GetPCellInfo(theMeshInfo, theEntity, theGeom, theConnMode, theErr); } - } else { + } + else { PGrilleInfo aGrille = GetPGrilleInfo(theMeshInfo); TInt nbElems; EBooleen theIsElemNum = eFAUX; // nodes - switch(theGeom){ + switch (theGeom) { case ePOINT1: nbElems = aGrille->GetNbNodes(); theIsElemNum = eVRAI; @@ -283,178 +1253,2210 @@ namespace MED default: nbElems = 0; } - + TIntVector aFamNum; TIntVector aElemNum; TStringVector aElemNames; - + PElemInfo aElemInfo; - if(theGeom == ePOINT1){ + if (theGeom == ePOINT1) { aElemInfo = CrElemInfo(theMeshInfo, nbElems, theIsElemNum); MED::TElemInfo &aTElemInfo = *aElemInfo; // must be reimplemente in connection with mesh type eSTRUCTURE -// GetNumeration(aTElemInfo, -// nbElems, -// theEntity, -// theGeom, -// theErr); - + // GetNumeration(aTElemInfo, + // nbElems, + // theEntity, + // theGeom, + // theErr); + GetFamilies(aTElemInfo, nbElems, theEntity, theGeom, theErr); - + // must be reimplemente in connection with mesh type eSTRUCTURE -// GetNames(aTElemInfo, -// nbElems, -// theEntity, -// theGeom, -// theErr); - } else { + // GetNames(aTElemInfo, + // nbElems, + // theEntity, + // theGeom, + // theErr); + } + else { aElemInfo = CrElemInfo(theMeshInfo, nbElems, aFamNum, aElemNum, aElemNames); } - + return aElemInfo; } return PElemInfo(); } + //---------------------------------------------------------------------------- + TInt + TWrapper + ::GetNbPolygones(const MED::TMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + EConnectivite theConnMode, + TErr* theErr) + { + return GetNbCells(theMeshInfo, theEntity, theGeom, theConnMode, theErr); + } + + //---------------------------------------------------------------------------- + TInt + TWrapper + ::GetPolygoneConnSize(const MED::TMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + EConnectivite theConnMode, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return 0; + + MED::TMeshInfo& aMeshInfo = const_cast(theMeshInfo); + + TValueHolder aMeshName(aMeshInfo.myName); + med_int aTaille = 0; + med_bool chgt,trsf; + aTaille=MEDmeshnEntity(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + med_entity_type(theEntity), + med_geometry_type(theGeom), + MED_CONNECTIVITY, + med_connectivity_mode(theConnMode), + &chgt, + &trsf); + + if (aTaille < 0) + EXCEPTION(std::runtime_error, "GetPolygoneInfo - MEDmeshnEntity(...)"); + + return TInt(aTaille); + } + + //----------------------------------------------------------------- + void + TWrapper + ::GetPolygoneInfo(MED::TPolygoneInfo& theInfo, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return; + + MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; + + TValueHolder aMeshName(aMeshInfo.myName); + TValueHolder anIndex (theInfo.myIndex); + TValueHolder aConn (theInfo.myConn); + TValueHolder anEntity (theInfo.myEntity); + TValueHolder aGeom (theInfo.myGeom); + TValueHolder aConnMode(theInfo.myConnMode); + TInt aNbElem = (TInt)theInfo.myElemNum->size(); + + TErr aRet; + aRet = MEDmeshPolygon2Rd(myFile->Id(), &aMeshName, + MED_NO_DT, MED_NO_IT, + anEntity, aGeom, + aConnMode, &anIndex, &aConn); + + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetPolygoneInfo - MEDmeshPolygonRd(...)"); + + if (theInfo.myIsElemNames) { + GetNames(theInfo, aNbElem, theInfo.myEntity, theInfo.myGeom, &aRet); + if (theErr) + *theErr = aRet; + } + + if (theInfo.myIsElemNum) { + GetNumeration(theInfo, aNbElem, theInfo.myEntity, theInfo.myGeom, &aRet); + if (theErr) + *theErr = aRet; + } + + GetFamilies(theInfo, aNbElem, theInfo.myEntity, theInfo.myGeom, &aRet); + if (theErr) + *theErr = aRet; + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetPolygoneInfo(const MED::TPolygoneInfo& theInfo, + TErr* theErr) + { + SetPolygoneInfo(theInfo, eLECTURE_ECRITURE, theErr); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetPolygoneInfo(const MED::TPolygoneInfo& theInfo, + EModeAcces theMode, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, theMode, theErr); + + if (theErr && *theErr < 0) + return; + + MED::TPolygoneInfo& anInfo = const_cast(theInfo); + MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo; + + TValueHolder aMeshName(aMeshInfo.myName); + TValueHolder anIndex (anInfo.myIndex); + TValueHolder aConn (anInfo.myConn); + TValueHolder anEntity (anInfo.myEntity); + TValueHolder aGeom (anInfo.myGeom); + TValueHolder aConnMode(anInfo.myConnMode); + + TErr aRet = MEDmeshPolygon2Wr(myFile->Id(), &aMeshName, + MED_NO_DT, MED_NO_IT, MED_UNDEF_DT, + anEntity, aGeom, + aConnMode, anInfo.myNbElem + 1, + &anIndex, &aConn); + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "SetPolygoneInfo - MEDmeshPolygonWr(...)"); + + SetNames(anInfo, theInfo.myEntity, anInfo.myGeom, &aRet); + if (theErr) + *theErr = aRet; + + SetNumeration(anInfo, theInfo.myEntity, anInfo.myGeom, &aRet); + if (theErr) + *theErr = aRet; + + SetFamilies(anInfo, theInfo.myEntity, anInfo.myGeom, &aRet); + if (theErr) + *theErr = aRet; + } + + //---------------------------------------------------------------------------- + PPolygoneInfo + TWrapper + ::CrPolygoneInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TInt theNbElem, + TInt theConnSize, + EConnectivite theConnMode, + EBooleen theIsElemNum, + EBooleen theIsElemNames) + { + return PPolygoneInfo(new TTPolygoneInfo + (theMeshInfo, + theEntity, + theGeom, + theNbElem, + theConnSize, + theConnMode, + theIsElemNum, + theIsElemNames)); + } + + //---------------------------------------------------------------------------- + PPolygoneInfo + TWrapper + ::CrPolygoneInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + const TIntVector& theIndexes, + const TIntVector& theConnectivities, + EConnectivite theConnMode, + const TIntVector& theFamilyNums, + const TIntVector& theElemNums, + const TStringVector& theElemNames) + { + return PPolygoneInfo(new TTPolygoneInfo + (theMeshInfo, + theEntity, + theGeom, + theIndexes, + theConnectivities, + theConnMode, + theFamilyNums, + theElemNums, + theElemNames)); + } + + //---------------------------------------------------------------------------- + PPolygoneInfo + TWrapper + ::CrPolygoneInfo(const PMeshInfo& theMeshInfo, + const PPolygoneInfo& theInfo) + { + return PPolygoneInfo(new TTPolygoneInfo + (theMeshInfo, + theInfo)); + } + + //---------------------------------------------------------------------------- + PPolygoneInfo + TWrapper + ::GetPPolygoneInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + EConnectivite theConnMode) + { + if (theMeshInfo->GetType() != eNON_STRUCTURE) + return PPolygoneInfo(); + + TInt aNbElem = GetNbPolygones(theMeshInfo, theEntity, theGeom, theConnMode); + TInt aConnSize = GetPolygoneConnSize(theMeshInfo, theEntity, theGeom, theConnMode); + PPolygoneInfo anInfo = CrPolygoneInfo(theMeshInfo, theEntity, theGeom, aNbElem, aConnSize, theConnMode); + GetPolygoneInfo(anInfo); + +#ifdef _DEBUG_ + INITMSG(MYDEBUG, "GetPPolygoneInfo"<< + " - theGeom = "<GetConnSlice(iElem); + TInt aConnDim = aConnSlice.size(); + for (TInt iConn = 0; iConn < aConnDim; iConn++) { + ADDMSG(MYVALUEDEBUG, aConnSlice[iConn]<<","); + } + ADDMSG(MYDEBUG, " "); + } + ADDMSG(MYDEBUG, std::endl); +#endif + + return anInfo; + } + + //---------------------------------------------------------------------------- + TInt + TWrapper + ::GetNbPolyedres(const MED::TMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + EConnectivite theConnMode, + TErr* theErr) + { + return GetNbCells(theMeshInfo, theEntity, theGeom, theConnMode, theErr); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::GetPolyedreConnSize(const TMeshInfo& theMeshInfo, + TInt& theNbFaces, + TInt& theConnSize, + EConnectivite theConnMode, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + EXCEPTION(std::runtime_error, "GetPolyedreConnSize - (...)"); + + MED::TMeshInfo& aMeshInfo = const_cast(theMeshInfo); + + TValueHolder aMeshName(aMeshInfo.myName); + TValueHolder aConnMode(theConnMode); + //TValueHolder aNbFaces(theNbFaces); + //TValueHolder aConnSize(theConnSize); + + med_bool chgt, trsf; + theNbFaces = MEDmeshnEntity(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_CELL, + MED_POLYHEDRON, + MED_INDEX_NODE, + aConnMode, + &chgt, + &trsf); + + theConnSize = MEDmeshnEntity(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_CELL, + MED_POLYHEDRON, + MED_CONNECTIVITY, + aConnMode, + &chgt, + &trsf); + + if (theNbFaces < 0 || theConnSize<0) + EXCEPTION(std::runtime_error, "GetPolygoneInfo - MEDmeshnEntity(...)"); + + } + + //----------------------------------------------------------------- + void + TWrapper + ::GetPolyedreInfo(TPolyedreInfo& theInfo, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return; + + MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; + + TValueHolder aMeshName(aMeshInfo.myName); + TInt aNbElem = (TInt)theInfo.myElemNum->size(); + TValueHolder anIndex(theInfo.myIndex); + TValueHolder aFaces(theInfo.myFaces); + TValueHolder aConn(theInfo.myConn); + TValueHolder aConnMode(theInfo.myConnMode); + + TErr aRet; + aRet = MEDmeshPolyhedronRd(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_CELL, + aConnMode, + &anIndex, + &aFaces, + &aConn); + + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetPolygoneInfo - MEDmeshPolyhedronRd(...)"); + + if (theInfo.myIsElemNames) { + GetNames(theInfo, aNbElem, theInfo.myEntity, ePOLYEDRE, &aRet); + if (theErr) + *theErr = aRet; + } + + if (theInfo.myIsElemNum) { + GetNumeration(theInfo, aNbElem, theInfo.myEntity, ePOLYEDRE, &aRet); + if (theErr) + *theErr = aRet; + } + + GetFamilies(theInfo, aNbElem, theInfo.myEntity, ePOLYEDRE, &aRet); + if (theErr) + *theErr = aRet; + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetPolyedreInfo(const TPolyedreInfo& theInfo, + TErr* theErr) + { + SetPolyedreInfo(theInfo, eLECTURE_ECRITURE, theErr); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetPolyedreInfo(const MED::TPolyedreInfo& theInfo, + EModeAcces theMode, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, theMode, theErr); + + if (theErr && *theErr < 0) + return; + + MED::TPolyedreInfo& anInfo = const_cast(theInfo); + MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo; + + TValueHolder aMeshName(aMeshInfo.myName); + TValueHolder anIndex(anInfo.myIndex); + TValueHolder aFaces(anInfo.myFaces); + TValueHolder aConn(anInfo.myConn); + TValueHolder aConnMode(anInfo.myConnMode); + + TErr aRet; + aRet = MEDmeshPolyhedronWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_UNDEF_DT, + MED_CELL, + aConnMode, + anInfo.myNbElem+1, + &anIndex, + (TInt)anInfo.myFaces->size(), + &aFaces, + &aConn); + + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "SetPolyedreInfo - MEDmeshPolyhedronWr(...)"); + + TValueHolder anEntity(anInfo.myEntity); + + if (theInfo.myIsElemNames) { + TValueHolder anElemNames(anInfo.myElemNames); + aRet = MEDmeshEntityNameWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + anEntity, + MED_POLYHEDRON, + (TInt)anInfo.myElemNames->size(), + &anElemNames); + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "SetPolyedreInfo - MEDmeshEntityNameWr(...)"); + } + + if (theInfo.myIsElemNum) { + TValueHolder anElemNum(anInfo.myElemNum); + aRet = MEDmeshEntityNumberWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + anEntity, + MED_POLYHEDRON, + (TInt)anInfo.myElemNum->size(), + &anElemNum); + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "SetPolyedreInfo - MEDmeshEntityNumberWr(...)"); + } + + TValueHolder aFamNum(anInfo.myFamNum); + aRet = MEDmeshEntityFamilyNumberWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + anEntity, + MED_POLYHEDRON, + (TInt)anInfo.myFamNum->size(), + &aFamNum); + + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "SetPolyedreInfo - MEDmeshEntityFamilyNumberWr(...)"); + } + + //---------------------------------------------------------------------------- + PPolyedreInfo + TWrapper + ::CrPolyedreInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TInt theNbElem, + TInt theNbFaces, + TInt theConnSize, + EConnectivite theConnMode, + EBooleen theIsElemNum, + EBooleen theIsElemNames) + { + return PPolyedreInfo(new TTPolyedreInfo + (theMeshInfo, + theEntity, + theGeom, + theNbElem, + theNbFaces, + theConnSize, + theConnMode, + theIsElemNum, + theIsElemNames)); + } + + //---------------------------------------------------------------------------- + PPolyedreInfo + TWrapper + ::CrPolyedreInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + const TIntVector& theIndexes, + const TIntVector& theFaces, + const TIntVector& theConnectivities, + EConnectivite theConnMode, + const TIntVector& theFamilyNums, + const TIntVector& theElemNums, + const TStringVector& theElemNames) + { + return PPolyedreInfo(new TTPolyedreInfo + (theMeshInfo, + theEntity, + theGeom, + theIndexes, + theFaces, + theConnectivities, + theConnMode, + theFamilyNums, + theElemNums, + theElemNames)); + } + + //---------------------------------------------------------------------------- + PPolyedreInfo + TWrapper + ::CrPolyedreInfo(const PMeshInfo& theMeshInfo, + const PPolyedreInfo& theInfo) + { + return PPolyedreInfo(new TTPolyedreInfo + (theMeshInfo, + theInfo)); + } + + //---------------------------------------------------------------------------- + PPolyedreInfo + TWrapper + ::GetPPolyedreInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + EConnectivite theConnMode) + { + if (theMeshInfo->GetType() != eNON_STRUCTURE) + return PPolyedreInfo(); + TInt aNbElem = GetNbPolyedres(theMeshInfo, theEntity, theGeom, theConnMode); + TInt aNbFaces, aConnSize; + GetPolyedreConnSize(theMeshInfo, aNbFaces, aConnSize, theConnMode); + PPolyedreInfo anInfo = CrPolyedreInfo(theMeshInfo, theEntity, theGeom, aNbElem, aNbFaces, aConnSize, theConnMode); + GetPolyedreInfo(anInfo); + +#ifdef _DEBUG_ + INITMSG(MYDEBUG, "GetPPolyedreInfo"<< + " - theGeom = "<GetConnSliceArr(iElem); + TInt aNbFaces = aConnSliceArr.size(); + ADDMSG(MYDEBUG, "{"); + for (TInt iFace = 0; iFace < aNbFaces; iFace++) { + TCConnSlice aConnSlice = aConnSliceArr[iFace]; + TInt aNbConn = aConnSlice.size(); + ADDMSG(MYDEBUG, "["); + for (TInt iConn = 0; iConn < aNbConn; iConn++) { + ADDMSG(MYVALUEDEBUG, aConnSlice[iConn]<<","); + } + ADDMSG(MYDEBUG, "] "); + } + ADDMSG(MYDEBUG, "} "); + } + ADDMSG(MYDEBUG, std::endl); +#endif + + return anInfo; + } + + //----------------------------------------------------------------- + TEntityInfo + TWrapper + ::GetEntityInfo(const MED::TMeshInfo& theMeshInfo, + EConnectivite theConnMode, + TErr* theErr) + { + TEntityInfo anInfo; + + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return anInfo; + + if (theMeshInfo.GetType() == eNON_STRUCTURE) { + TInt aNbElem = GetNbNodes(theMeshInfo); + if (aNbElem > 0) { + anInfo[eNOEUD][ePOINT1] = aNbElem; + const TEntity2GeomSet& anEntity2GeomSet = GetEntity2GeomSet(); + TEntity2GeomSet::const_iterator anIter = anEntity2GeomSet.begin(); + TEntity2GeomSet::const_iterator anIterEnd = anEntity2GeomSet.end(); + for (; anIter != anIterEnd; anIter++) { + const EEntiteMaillage& anEntity = anIter->first; + const TGeomSet& aGeomSet = anIter->second; + TGeomSet::const_iterator anIter2 = aGeomSet.begin(); + TGeomSet::const_iterator anIterEnd2 = aGeomSet.end(); + for (; anIter2 != anIterEnd2; anIter2++) { + const EGeometrieElement& aGeom = *anIter2; + aNbElem = GetNbCells(theMeshInfo, anEntity, aGeom, theConnMode, theErr); + if (aNbElem > 0) { + if (anEntity == eSTRUCT_ELEMENT) { + const TInt nbStructTypes = aNbElem; + for (TInt structType = 0; structType < nbStructTypes; ++structType) { + // check type name to keep only "MED_BALL" structured element + TValueHolder aMeshName((TString&) theMeshInfo.myName); + char geotypename[ MED_NAME_SIZE + 1] = ""; + med_geometry_type geotype; + MEDmeshEntityInfo(myFile->Id(), &aMeshName, MED_NO_DT, MED_NO_IT, + med_entity_type(anEntity), structType+1, + geotypename, &geotype); + if (strcmp(geotypename, MED_BALL_NAME) == 0) { + aNbElem = GetNbCells(theMeshInfo, anEntity, EGeometrieElement(geotype), + theConnMode, theErr); + if (aNbElem > 0) + anInfo[anEntity][EGeometrieElement(geotype)] = aNbElem; + } + } + } + else { + anInfo[anEntity][aGeom] = aNbElem; + } + } + } + } + } + } + else { // eSTRUCTURE + EGrilleType aGrilleType; + TInt aNbNodes = 1; + TInt aNbElem = 1; + TInt aNbSub = 0; + TInt aDim = theMeshInfo.GetDim(); + EGeometrieElement aGeom, aSubGeom; + EEntiteMaillage aSubEntity = eMAILLE; + + GetGrilleType(theMeshInfo, aGrilleType); + + TIntVector aStruct(aDim); + if (aGrilleType == eGRILLE_STANDARD) + { + GetGrilleStruct(theMeshInfo, aStruct, theErr); + } + else + { // eGRILLE_CARTESIENNE and eGRILLE_POLAIRE + ETable aTable[3] = { eCOOR_IND1, eCOOR_IND2, eCOOR_IND3 }; + for (med_int anAxis = 0; anAxis < aDim; anAxis++) + aStruct[ anAxis ] = GetNbNodes(theMeshInfo, aTable[anAxis]); + } + for (med_int i = 0; i < aDim; i++) { + aNbNodes = aNbNodes * aStruct[i]; + aNbElem = aNbElem * (aStruct[i] - 1); + } + switch (aDim) { + case 1: + aGeom = eSEG2; + break; + case 2: + aGeom = eQUAD4; + aSubGeom = eSEG2; + aSubEntity = eARETE; + aNbSub = + (aStruct[0]) * (aStruct[1]-1) + + (aStruct[0]-1) * (aStruct[1]); + break; + case 3: + aGeom = eHEXA8; + aSubGeom = eQUAD4; + aSubEntity = eFACE; + aNbSub = + (aStruct[0]) * (aStruct[1]-1) * (aStruct[2]-1) + + (aStruct[0]-1) * (aStruct[1]) * (aStruct[2]-1) + + (aStruct[0]-1) * (aStruct[1]-1) * (aStruct[2]); + break; + } + anInfo[eNOEUD][ePOINT1] = aNbNodes; + anInfo[eMAILLE][aGeom] = aNbElem; + if (aDim > 1) + anInfo[aSubEntity][aSubGeom] = aNbSub; + } + return anInfo; + } + + //----------------------------------------------------------------- + TInt + TWrapper + ::GetNbCells(const MED::TMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + EConnectivite theConnMode, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return -1; + + MED::TMeshInfo& aMeshInfo = const_cast(theMeshInfo); + TValueHolder aMeshName(aMeshInfo.myName); + med_bool chgt, trsf; + switch (theGeom) + { + case MED::ePOLYGONE: + case MED::ePOLYGON2: + { + return MEDmeshnEntity(myFile->Id(), &aMeshName, + MED_NO_DT, MED_NO_IT, + med_entity_type(theEntity), med_geometry_type(theGeom), + MED_INDEX_NODE, med_connectivity_mode(theConnMode), + &chgt, &trsf)-1; + } + case MED::ePOLYEDRE: + { + return MEDmeshnEntity(myFile->Id(), &aMeshName, + MED_NO_DT, MED_NO_IT, + med_entity_type(theEntity), MED_POLYHEDRON, + MED_INDEX_FACE, med_connectivity_mode(theConnMode), + &chgt, &trsf)-1; + } + case MED::eBALL: + { + return GetNbBalls(theMeshInfo); + } + default: + { + return MEDmeshnEntity(myFile->Id(), &aMeshName, + MED_NO_DT, MED_NO_IT, + med_entity_type(theEntity), med_geometry_type(theGeom), + MED_CONNECTIVITY, med_connectivity_mode(theConnMode), + &chgt, &trsf); + } + } + return 0; + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::GetCellInfo(MED::TCellInfo& theInfo, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return; + + MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; + + TValueHolder aMeshName (aMeshInfo.myName); + TValueHolder aConn (theInfo.myConn); + TValueHolder aModeSwitch (theInfo.myModeSwitch); + TValueHolder anElemNames (theInfo.myElemNames); + TValueHolder anIsElemNames(theInfo.myIsElemNames); + TValueHolder anElemNum (theInfo.myElemNum); + TValueHolder anIsElemNum (theInfo.myIsElemNum); + TValueHolder aFamNum (theInfo.myFamNum); + TValueHolder anIsFamNum (theInfo.myIsFamNum); + TValueHolder anEntity (theInfo.myEntity); + TValueHolder aGeom (theInfo.myGeom); + TValueHolder aConnMode (theInfo.myConnMode); + + TErr aRet; + aRet = MEDmeshElementRd(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + anEntity, + aGeom, + aConnMode, + aModeSwitch, + &aConn, + &anIsElemNames, + &anElemNames, + &anIsElemNum, + &anElemNum, + &anIsFamNum, + &aFamNum); + + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetCellInfo - MEDmeshElementRd(...)"); + + if (anIsFamNum == MED_FALSE) + { + int mySize = (int) theInfo.myFamNum->size(); + theInfo.myFamNum->clear(); + theInfo.myFamNum->resize(mySize, 0); + } + + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetCellInfo(const MED::TCellInfo& theInfo, + TErr* theErr) + { + SetCellInfo(theInfo, eLECTURE_ECRITURE, theErr); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetCellInfo(const MED::TCellInfo& theInfo, + EModeAcces theMode, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, theMode, theErr); + + if (theErr && *theErr < 0) + return; + + MED::TCellInfo& anInfo = const_cast(theInfo); + MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo; + + TValueHolder aMeshName (aMeshInfo.myName); + TValueHolder aConn (anInfo.myConn); + TValueHolder aModeSwitch (anInfo.myModeSwitch); + TValueHolder anElemNames (anInfo.myElemNames); + TValueHolder anIsElemNames(anInfo.myIsElemNames); + TValueHolder anElemNum (anInfo.myElemNum); + TValueHolder anIsElemNum (anInfo.myIsElemNum); + TValueHolder aFamNum (anInfo.myFamNum); + TValueHolder anIsFamNum (anInfo.myIsFamNum); + TValueHolder anEntity (anInfo.myEntity); + TValueHolder aGeom (anInfo.myGeom); + TValueHolder aConnMode (anInfo.myConnMode); + TValueHolder aNbElem (anInfo.myNbElem); + + TErr aRet; + aRet = MEDmeshElementConnectivityWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_UNDEF_DT, + anEntity, + aGeom, + aConnMode, + aModeSwitch, + aNbElem, + &aConn); + + MEDmeshEntityFamilyNumberWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + anEntity, + aGeom, + aNbElem, + &aFamNum); + if (anIsElemNames) + MEDmeshEntityNameWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + anEntity, + aGeom, + aNbElem, + &anElemNames); + if (anIsElemNum) + MEDmeshEntityNumberWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + anEntity, + aGeom, + aNbElem, + &anElemNum); + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "SetCellInfo - MEDmeshElementWr(...)"); + } + + //---------------------------------------------------------------------------- + PCellInfo + TWrapper + ::CrCellInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TInt theNbElem, + EConnectivite theConnMode, + EBooleen theIsElemNum, + EBooleen theIsElemNames, + EModeSwitch theMode) + { + return PCellInfo(new TTCellInfo + (theMeshInfo, + theEntity, + theGeom, + theNbElem, + theConnMode, + theIsElemNum, + theIsElemNames, + theMode)); + } + + //---------------------------------------------------------------------------- + PCellInfo + TWrapper + ::CrCellInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + const TIntVector& theConnectivities, + EConnectivite theConnMode, + const TIntVector& theFamilyNums, + const TIntVector& theElemNums, + const TStringVector& theElemNames, + EModeSwitch theMode) + { + return PCellInfo(new TTCellInfo + (theMeshInfo, + theEntity, + theGeom, + theConnectivities, + theConnMode, + theFamilyNums, + theElemNums, + theElemNames, + theMode)); + } + + //---------------------------------------------------------------------------- + PCellInfo + TWrapper + ::CrCellInfo(const PMeshInfo& theMeshInfo, + const PCellInfo& theInfo) + { + return PCellInfo(new TTCellInfo + (theMeshInfo, + theInfo)); + } + + //---------------------------------------------------------------------------- + PCellInfo + TWrapper + ::GetPCellInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + EConnectivite theConnMode, + TErr* theErr) + { + if (theMeshInfo->GetType() != eNON_STRUCTURE) + return PCellInfo(); + TInt aNbElem = GetNbCells(theMeshInfo, theEntity, theGeom, theConnMode); + PCellInfo anInfo = CrCellInfo(theMeshInfo, theEntity, theGeom, aNbElem, theConnMode); + GetCellInfo(anInfo, theErr); + +#ifdef _DEBUG_ + TInt aConnDim = anInfo->GetConnDim(); + INITMSG(MYDEBUG, "GetPCellInfo - theEntity = "<GetConnSlice(iElem); + for (TInt iConn = 0; iConn < aConnDim; iConn++) { + ADDMSG(MYVALUEDEBUG, aConnSlice[iConn]<<","); + } + ADDMSG(MYVALUEDEBUG, " "); + } + ADDMSG(MYDEBUG, std::endl); + + BEGMSG(MYVALUEDEBUG, "GetPCellInfo - GetFamNum: "); + for (TInt iElem = 0; iElem < aNbElem; iElem++) { + ADDMSG(MYVALUEDEBUG, anInfo->GetFamNum(iElem)<<", "); + } + ADDMSG(MYVALUEDEBUG, std::endl); + + if (anInfo->IsElemNum()) { + BEGMSG(MYVALUEDEBUG, "GetPCellInfo - GetElemNum: "); + for (TInt iElem = 0; iElem < aNbElem; iElem++) { + ADDMSG(MYVALUEDEBUG, anInfo->GetElemNum(iElem)<<", "); + } + ADDMSG(MYVALUEDEBUG, std::endl); + } + ADDMSG(MYDEBUG, std::endl); +#endif + + return anInfo; + } + + //---------------------------------------------------------------------------- + EGeometrieElement + TWrapper + ::GetBallGeom(const TMeshInfo& theMeshInfo) + { + TFileWrapper aFileWrapper(myFile, eLECTURE); + + // read med_geometry_type of "MED_BALL" element + char geotypename[ MED_NAME_SIZE + 1] = MED_BALL_NAME; + return EGeometrieElement(MEDstructElementGeotype(myFile->Id(), geotypename)); + } + + //---------------------------------------------------------------------------- + TInt + TWrapper + ::GetNbBalls(const TMeshInfo& theMeshInfo) + { + TFileWrapper aFileWrapper(myFile, eLECTURE); + + EGeometrieElement ballType = GetBallGeom(theMeshInfo); + if (ballType < 0) + return 0; + + return GetNbCells(theMeshInfo, eSTRUCT_ELEMENT, ballType, eNOD); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::GetBallInfo(TBallInfo& theInfo, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + // check geometry of MED_BALL + if (theInfo.myGeom == eBALL) + { + theInfo.myGeom = GetBallGeom(*theInfo.myMeshInfo); + if (theInfo.myGeom < 0) { + if (!theErr) + EXCEPTION(std::runtime_error, "GetBallInfo - no balls in the mesh"); + *theErr = theInfo.myGeom; + return; + } + } + + // read nodes ids + GetCellInfo(theInfo); + + // read diameters + TValueHolder aMeshName (theInfo.myMeshInfo->myName); + TValueHolder aGeom (theInfo.myGeom); + TValueHolder aDiam (theInfo.myDiameters); + char varattname[ MED_NAME_SIZE + 1] = MED_BALL_DIAMETER; + + TErr aRet = MEDmeshStructElementVarAttRd(myFile->Id(), &aMeshName, + MED_NO_DT, MED_NO_IT, + aGeom, + varattname, + &aDiam); + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetBallInfo - pb at reading diameters"); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetBallInfo(const TBallInfo& theInfo, + TErr* theErr) + { + SetBallInfo(theInfo, eLECTURE_ECRITURE, theErr); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetBallInfo(const TBallInfo& theInfo, + EModeAcces theMode, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, theMode, theErr); + + TErr ret; + char ballsupportname[MED_NAME_SIZE+1] = "BALL_SUPPORT_MESH"; + EGeometrieElement ballGeom = GetBallGeom(*theInfo.myMeshInfo); + if (ballGeom < 0) + { + // no ball model in the file, create support mesh for it + char dummyname [MED_NAME_SIZE*3+1] = ""; + if ((ret = MEDsupportMeshCr(myFile->Id(), + ballsupportname, + theInfo.myMeshInfo->GetSpaceDim(), + theInfo.myMeshInfo->GetDim(), + "Support mesh for a ball model", + MED_CARTESIAN, + /*axisname=*/dummyname, + /*unitname=*/dummyname)) < 0) { + if (!theErr) + EXCEPTION(std::runtime_error, "SetBallInfo - MEDsupportMeshCr"); + *theErr = ret; + return; + } + // write coordinates of 1 node + med_float coord[3] = {0, 0, 0}; + if ((ret = MEDmeshNodeCoordinateWr(myFile->Id(), + ballsupportname, MED_NO_DT, MED_NO_IT, 0.0, + MED_FULL_INTERLACE, /*nnode=*/1, coord)) < 0) { + if (!theErr) + EXCEPTION(std::runtime_error, "SetBallInfo - MEDmeshNodeCoordinateWr"); + *theErr = ret; + return; + } + // ball model creation + char geotypename[ MED_NAME_SIZE + 1] = MED_BALL_NAME; + if ((ballGeom = (EGeometrieElement) MEDstructElementCr(myFile->Id(), + geotypename, + theInfo.myMeshInfo->GetSpaceDim(), + ballsupportname, + MED_NODE,MED_NONE)) < 0) { + if (!theErr) + EXCEPTION(std::runtime_error, "SetBallInfo - MEDstructElementCr"); + *theErr = ret; + return; + } + // create diameter attribute + if ((ret = MEDstructElementVarAttCr(myFile->Id(), + geotypename, MED_BALL_DIAMETER, + MED_ATT_FLOAT64, /*ncomp=*/1)) < 0) { + if (!theErr) + EXCEPTION(std::runtime_error, "SetBallInfo - MEDstructElementVarAttCr"); + *theErr = ret; + return; + } + } // ballGeom < 0 + + TBallInfo& aBallInfo = ((TBallInfo&) theInfo); + aBallInfo.myGeom = ballGeom; + + // write node ids + SetCellInfo(theInfo, theMode, theErr); + if (theErr && theErr < 0) + return; + + // write diameter + TValueHolder aMeshName (aBallInfo.myMeshInfo->myName); + TValueHolder aGeom (aBallInfo.myGeom); + TValueHolder aDiam (aBallInfo.myDiameters); + ret = MEDmeshStructElementVarAttWr(myFile->Id(), &aMeshName, + MED_NO_DT, MED_NO_IT, + aGeom, MED_BALL_DIAMETER, + theInfo.myNbElem, &aDiam); + if (theErr) + *theErr = ret; + else if (ret < 0) + EXCEPTION(std::runtime_error, "SetBallInfo - MEDmeshStructElementVarAttWr"); + } + + //---------------------------------------------------------------------------- + PBallInfo + TWrapper + ::CrBallInfo(const PMeshInfo& theMeshInfo, + TInt theNbBalls, + EBooleen theIsElemNum) + { + return PBallInfo(new TTBallInfo(theMeshInfo, theNbBalls, theIsElemNum)); + } + + //---------------------------------------------------------------------------- + PBallInfo + TWrapper + ::CrBallInfo(const PMeshInfo& theMeshInfo, + const TIntVector& theNodes, + TFloatVector& theDiameters, + const TIntVector& theFamilyNums, + const TIntVector& theElemNums) + { + return PBallInfo(new TTBallInfo(theMeshInfo, theNodes, theDiameters, + theFamilyNums, theElemNums)); + } + + //---------------------------------------------------------------------------- + PBallInfo + TWrapper + ::CrBallInfo(const PMeshInfo& theMeshInfo, + const PBallInfo& theInfo) + { + return PBallInfo(new TTBallInfo(theMeshInfo, theInfo)); + } + + //---------------------------------------------------------------------------- + PBallInfo + TWrapper + ::GetPBallInfo(const PMeshInfo& theMeshInfo) + { + TInt nbBalls = GetNbBalls(theMeshInfo); + if (nbBalls < 1) return PBallInfo(); + + PBallInfo anInfo = CrBallInfo(theMeshInfo, nbBalls); + GetBallInfo(anInfo); + + return anInfo; + } + + //----------------------------------------------------------------- + TInt + TWrapper + ::GetNbFields(TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return -1; + + return MEDnField(myFile->Id()); + } + + //---------------------------------------------------------------------------- + TInt + TWrapper + ::GetNbComp(TInt theFieldId, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return -1; + + return MEDfieldnComponent(myFile->Id(), theFieldId); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::GetFieldInfo(TInt theFieldId, + MED::TFieldInfo& theInfo, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return; + + TString aFieldName(256); // Protect from memory problems with too long names + TValueHolder aType(theInfo.myType); + TValueHolder aCompNames(theInfo.myCompNames); + TValueHolder anUnitNames(theInfo.myUnitNames); + MED::TMeshInfo& aMeshInfo = theInfo.myMeshInfo; + + TErr aRet; + med_bool local; + char dtunit[MED_SNAME_SIZE+1]; + char local_mesh_name[MED_NAME_SIZE+1]=""; + med_int nbofstp; + theInfo.myNbComp = MEDfieldnComponent(myFile->Id(), theFieldId); + aRet = MEDfieldInfo(myFile->Id(), + theFieldId, + &aFieldName[0], + local_mesh_name, + &local, + &aType, + &aCompNames, + &anUnitNames, + dtunit, + &nbofstp); + + if (strcmp(&aMeshInfo.myName[0], local_mesh_name) != 0) { + if (theErr) + *theErr = -1; + return; + } + + theInfo.SetName(aFieldName); + + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetFieldInfo - MEDfieldInfo(...)"); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetFieldInfo(const MED::TFieldInfo& theInfo, + TErr* theErr) + { + TErr aRet; + SetFieldInfo(theInfo, eLECTURE_ECRITURE, &aRet); + + if (aRet < 0) + SetFieldInfo(theInfo, eLECTURE_AJOUT, &aRet); + + if (theErr) + *theErr = aRet; + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetFieldInfo(const MED::TFieldInfo& theInfo, + EModeAcces theMode, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, theMode, theErr); + + if (theErr && *theErr < 0) + return; + + MED::TFieldInfo& anInfo = const_cast(theInfo); + + TValueHolder aFieldName(anInfo.myName); + TValueHolder aType(anInfo.myType); + TValueHolder aCompNames(anInfo.myCompNames); + TValueHolder anUnitNames(anInfo.myUnitNames); + MED::TMeshInfo& aMeshInfo = anInfo.myMeshInfo; + TErr aRet; + char dtunit[MED_SNAME_SIZE+1]; + std::fill(dtunit, dtunit+MED_SNAME_SIZE+1, '\0'); + aRet = MEDfieldCr(myFile->Id(), + &aFieldName, + aType, + anInfo.myNbComp, + &aCompNames, + &anUnitNames, + dtunit, + &aMeshInfo.myName[0]); + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "SetFieldInfo - MEDfieldCr(...)"); + } + + //---------------------------------------------------------------------------- + PFieldInfo + TWrapper + ::CrFieldInfo(const PMeshInfo& theMeshInfo, + TInt theNbComp, + ETypeChamp theType, + const std::string& theValue, + EBooleen theIsLocal, + TInt theNbRef) + { + return PFieldInfo(new TTFieldInfo + (theMeshInfo, + theNbComp, + theType, + theValue, + theIsLocal, + theNbRef)); + } + + //---------------------------------------------------------------------------- + PFieldInfo + TWrapper + ::CrFieldInfo(const PMeshInfo& theMeshInfo, + const PFieldInfo& theInfo) + { + return PFieldInfo(new TTFieldInfo + (theMeshInfo, + theInfo)); + } + + //---------------------------------------------------------------------------- + PFieldInfo + TWrapper + ::GetPFieldInfo(const PMeshInfo& theMeshInfo, + TInt theId, + TErr* theErr) + { + TInt aNbComp = GetNbComp(theId); + PFieldInfo anInfo = CrFieldInfo(theMeshInfo, aNbComp); + GetFieldInfo(theId, *anInfo, theErr); + +#ifdef _DEBUG_ + INITMSG(MYDEBUG, + "GetPFieldInfo "<< + "- aName = '"<GetName()<<"'"<< + "; aType = "<GetType()<< + "; aNbComp = "<Id()); + } + + //---------------------------------------------------------------------------- + TGaussInfo::TInfo + TWrapper + ::GetGaussPreInfo(TInt theId, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return TGaussInfo::TInfo(TGaussInfo::TKey(ePOINT1, ""), 0); + + med_int aNbGaussPoints = med_int(); + TVector aName(GetNOMLength()+1); + med_geometry_type aGeom = MED_NONE; + + TErr aRet; + med_int dim; + char geointerpname[MED_NAME_SIZE+1] = ""; + char ipointstructmeshname[MED_NAME_SIZE+1] = ""; + med_int nsectionmeshcell; + med_geometry_type sectiongeotype; + aRet = MEDlocalizationInfo (myFile->Id(), + theId, + &aName[0], + &aGeom, + &dim, + &aNbGaussPoints, + geointerpname, + ipointstructmeshname, + &nsectionmeshcell, + §iongeotype); + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetGaussPreInfo - MEDlocalizationInfo(...)"); + return TGaussInfo::TInfo(TGaussInfo::TKey(EGeometrieElement(aGeom), &aName[0]), + TInt(aNbGaussPoints)); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::GetGaussInfo(TInt theId, + TGaussInfo& theInfo, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return; + + TValueHolder aRefCoord(theInfo.myRefCoord); + TValueHolder aGaussCoord(theInfo.myGaussCoord); + TValueHolder aWeight(theInfo.myWeight); + TValueHolder aModeSwitch(theInfo.myModeSwitch); + TValueHolder aGaussName(theInfo.myName); + + TErr aRet; + aRet = MEDlocalizationRd(myFile->Id(), + &aGaussName, + aModeSwitch, + &aRefCoord, + &aGaussCoord, + &aWeight); + + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetGaussInfo - MEDlocalizationRd(...)"); + } + + //---------------------------------------------------------------------------- + PGaussInfo + TWrapper + ::CrGaussInfo(const TGaussInfo::TInfo& theInfo, + EModeSwitch theMode) + { + return PGaussInfo(new TTGaussInfo + (theInfo, + theMode)); + } + + //----------------------------------------------------------------- + TInt + TWrapper + ::GetNbTimeStamps(const MED::TFieldInfo& theInfo, + const MED::TEntityInfo& theEntityInfo, + EEntiteMaillage& theEntity, + TGeom2Size& theGeom2Size, + TErr* theErr) + { + theEntity = EEntiteMaillage(-1); + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr) { + if (theEntityInfo.empty()) + *theErr = -1; + if (*theErr < 0) + return -1; + } + else if (theEntityInfo.empty()) + EXCEPTION(std::runtime_error, "GetNbTimeStamps - There is no any Entity on the Mesh"); + + bool anIsPerformAdditionalCheck = GetNbMeshes() > 1; + + theGeom2Size.clear(); + TInt aNbTimeStamps = 0; + TIdt anId = myFile->Id(); + + MED::TFieldInfo& anInfo = const_cast(theInfo); + TValueHolder aFieldName(anInfo.myName); + MED::TMeshInfo& aMeshInfo = anInfo.myMeshInfo; + + // workaround for IPAL13676 + MED::TEntityInfo localEntityInfo = theEntityInfo; + TEntityInfo::iterator anLocalIter = localEntityInfo.find(eMAILLE); + if (anLocalIter != localEntityInfo.end()) { + localEntityInfo[eNOEUD_ELEMENT] = anLocalIter->second; + } + + TEntityInfo::const_iterator anIter = localEntityInfo.begin(); + for (; anIter != localEntityInfo.end(); anIter++) { + med_entity_type anEntity = med_entity_type(anIter->first); + const TGeom2Size& aGeom2Size = anIter->second; + TGeom2Size::const_iterator anGeomIter = aGeom2Size.begin(); + for (; anGeomIter != aGeom2Size.end(); anGeomIter++) { + med_geometry_type aGeom = med_geometry_type(anGeomIter->first); + char aMeshName[MED_NAME_SIZE+1]; + med_bool islocal; + med_field_type ft; + char dtunit[MED_SNAME_SIZE+1]; + med_int myNbComp = MEDfieldnComponentByName(anId, &aFieldName); + char *cname=new char[myNbComp*MED_SNAME_SIZE+1]; + char *unitname=new char[myNbComp*MED_SNAME_SIZE+1]; + TInt aNbStamps; + MEDfieldInfoByName(anId, + &aFieldName, + aMeshName, + &islocal, + &ft, + cname, + unitname, + dtunit, + &aNbStamps); + delete [] cname; + delete [] unitname; + med_int nval = 0; + med_int aNumDt; + med_int aNumOrd; + med_float aDt; + if (aNbStamps > 0) + { + MEDfieldComputingStepInfo(anId, + &aFieldName, + 1, + &aNumDt, + &aNumOrd, + &aDt); + char profilename[MED_NAME_SIZE+1]; + char locname[MED_NAME_SIZE+1]; + med_int profilsize; + med_int aNbGauss; + + // protection from crash (division by zero) + // inside MEDfieldnValueWithProfile function + // caused by the workaround for IPAL13676 (see above) + if (anEntity == MED_NODE_ELEMENT && aGeom % 100 == 0) + continue; + + nval = MEDfieldnValueWithProfile(anId, + &aFieldName, + aNumDt, + aNumOrd, + anEntity, + med_geometry_type(aGeom), + 1, + MED_COMPACT_STMODE, + profilename, + &profilsize, + locname, + &aNbGauss); + } + bool anIsSatisfied =(nval > 0); + if (anIsSatisfied) { + INITMSG(MYDEBUG, + "GetNbTimeStamps aNbTimeStamps = "<second; + theEntity = EEntiteMaillage(anEntity); + aNbTimeStamps = aNbStamps; + } + } + if (!theGeom2Size.empty()) + break; + } + return aNbTimeStamps; + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::GetTimeStampInfo(TInt theTimeStampId, + MED::TTimeStampInfo& theInfo, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + const TGeom2Size& aGeom2Size = theInfo.myGeom2Size; + + if (theErr) { + if (aGeom2Size.empty()) + *theErr = -1; + if (*theErr < 0) + return; + } + else if (aGeom2Size.empty()) + EXCEPTION(std::runtime_error, "GetTimeStampInfo - There is no any cell"); + + MED::TFieldInfo& aFieldInfo = *theInfo.myFieldInfo; + MED::TMeshInfo& aMeshInfo = *aFieldInfo.myMeshInfo; + + TValueHolder aFieldName(aFieldInfo.myName); + TValueHolder anEntity(theInfo.myEntity); + TValueHolder aNumDt(theInfo.myNumDt); + TValueHolder aNumOrd(theInfo.myNumOrd); + TValueHolder anUnitDt(theInfo.myUnitDt); + TValueHolder aDt(theInfo.myDt); + TValueHolder aMeshName(aMeshInfo.myName); + TValueHolder anIsLocal(aFieldInfo.myIsLocal); + TValueHolder aNbRef(aFieldInfo.myNbRef); + + TGeom2NbGauss& aGeom2NbGauss = theInfo.myGeom2NbGauss; + + // just to get a time stamp unit (anUnitDt) + med_field_type aFieldType; + med_int aNbComp = MEDfieldnComponentByName(myFile->Id(), &aFieldName); + char *aCompName = new char[aNbComp*MED_SNAME_SIZE+1]; + char *aCompUnit = new char[aNbComp*MED_SNAME_SIZE+1]; + TInt aNbStamps; + MEDfieldInfoByName(myFile->Id(), + &aFieldName, + &aMeshName, + &anIsLocal, + &aFieldType, + aCompName, + aCompUnit, + &anUnitDt, + &aNbStamps); + delete [] aCompName; + delete [] aCompUnit; + + TGeom2Size::const_iterator anIter = aGeom2Size.begin(); + for (; anIter != aGeom2Size.end(); anIter++) { + const EGeometrieElement& aGeom = anIter->first; + med_int aNbGauss = -1; + + TErr aRet; + aRet = MEDfieldComputingStepInfo(myFile->Id(), + &aFieldName, + theTimeStampId, + &aNumDt, + &aNumOrd, + &aDt); + char profilename[MED_NAME_SIZE+1]; + med_int profilsize; + char locname[MED_NAME_SIZE+1]; + MEDfieldnValueWithProfile(myFile->Id(), + &aFieldName, + aNumDt, + aNumOrd, + anEntity, + med_geometry_type(aGeom), + 1, + MED_COMPACT_STMODE, + profilename, + &profilsize, + locname, + &aNbGauss); + + static TInt MAX_NB_GAUSS_POINTS = 32; + if (aNbGauss <= 0 || aNbGauss > MAX_NB_GAUSS_POINTS) + aNbGauss = 1; + + aGeom2NbGauss[aGeom] = aNbGauss; + + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetTimeStampInfo - MEDfieldnValueWithProfile(...)"); + } + } + + //---------------------------------------------------------------------------- + PTimeStampInfo + TWrapper + ::CrTimeStampInfo(const PFieldInfo& theFieldInfo, + EEntiteMaillage theEntity, + const TGeom2Size& theGeom2Size, + const TGeom2NbGauss& theGeom2NbGauss, + TInt theNumDt, + TInt theNumOrd, + TFloat theDt, + const std::string& theUnitDt, + const TGeom2Gauss& theGeom2Gauss) + { + return PTimeStampInfo(new TTTimeStampInfo + (theFieldInfo, + theEntity, + theGeom2Size, + theGeom2NbGauss, + theNumDt, + theNumOrd, + theDt, + theUnitDt, + theGeom2Gauss)); + } + + //---------------------------------------------------------------------------- + PTimeStampInfo + TWrapper + ::CrTimeStampInfo(const PFieldInfo& theFieldInfo, + const PTimeStampInfo& theInfo) + { + return PTimeStampInfo(new TTTimeStampInfo + (theFieldInfo, + theInfo)); + } + + //---------------------------------------------------------------------------- + PTimeStampInfo + TWrapper + ::GetPTimeStampInfo(const PFieldInfo& theFieldInfo, + EEntiteMaillage theEntity, + const TGeom2Size& theGeom2Size, + TInt theId, + TErr* theErr) + { + PTimeStampInfo anInfo = CrTimeStampInfo(theFieldInfo, theEntity, theGeom2Size); + GetTimeStampInfo(theId, *anInfo, theErr); + +#ifdef _DEBUG_ + INITMSG(MYDEBUG, "GetPTimeStampInfo - anEntity = "<GetEntity()<<"\n"); + TGeom2NbGauss& aGeom2NbGauss = anInfo->myGeom2NbGauss; + TGeom2NbGauss::const_iterator anIter = aGeom2NbGauss.begin(); + for (; anIter != aGeom2NbGauss.end(); anIter++) { + const EGeometrieElement& aGeom = anIter->first; + INITMSG(MYDEBUG, "aGeom = "<Id()); + } + + //---------------------------------------------------------------------------- + TProfileInfo::TInfo + TWrapper + ::GetProfilePreInfo(TInt theId, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return TProfileInfo::TInfo(); + + med_int aSize = -1; + TVector aName(GetNOMLength()+1); + + TErr aRet; + aRet = MEDprofileInfo(myFile->Id(), + theId, + &aName[0], + &aSize); + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetProfilePreInfo - MEDprofileInfo(...)"); + + return TProfileInfo::TInfo(&aName[0], aSize); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::GetProfileInfo(TInt theId, + TProfileInfo& theInfo, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return; + + TProfileInfo& anInfo = const_cast(theInfo); + TValueHolder anElemNum(anInfo.myElemNum); + TValueHolder aProfileName(anInfo.myName); + + TErr aRet; + aRet = MEDprofileRd(myFile->Id(), + &aProfileName, + &anElemNum); + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetProfileInfo - MEDprofileRd(...)"); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetProfileInfo(const TProfileInfo& theInfo, + TErr* theErr) + { + TErr aRet; + SetProfileInfo(theInfo, eLECTURE_ECRITURE, &aRet); + + if (aRet < 0) + SetProfileInfo(theInfo, eLECTURE_AJOUT, &aRet); + + if (aRet < 0) + SetProfileInfo(theInfo, eCREATION, &aRet); + + if (theErr) + *theErr = aRet; + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetProfileInfo(const TProfileInfo& theInfo, + EModeAcces theMode, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, theMode, theErr); + + if (theErr && *theErr < 0) + return; + + TProfileInfo& anInfo = const_cast(theInfo); + TValueHolder anElemNum(anInfo.myElemNum); + TValueHolder aProfileName(anInfo.myName); + + TErr aRet; + aRet = MEDprofileWr(myFile->Id(), // descripteur du fichier. + &aProfileName, // tableau de valeurs du profil. + theInfo.GetSize(), // taille du profil. + &anElemNum); // nom profil. + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "SetProfileInfo - MEDprofileWr(...)"); + } + + //---------------------------------------------------------------------------- + PProfileInfo + TWrapper + ::CrProfileInfo(const TProfileInfo::TInfo& theInfo, + EModeProfil theMode) + { + return PProfileInfo(new TTProfileInfo + (theInfo, + theMode)); + } + + //---------------------------------------------------------------------------- + PProfileInfo + TWrapper + ::GetPProfileInfo(TInt theId, + EModeProfil theMode, + TErr* theErr) + { + TProfileInfo::TInfo aPreInfo = GetProfilePreInfo(theId); + PProfileInfo anInfo = CrProfileInfo(aPreInfo, theMode); + GetProfileInfo(theId, *anInfo, theErr); + + return anInfo; + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::GetTimeStampValue(const PTimeStampValueBase& theTimeStampValue, + const TMKey2Profile& theMKey2Profile, + const TKey2Gauss& theKey2Gauss, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return; + + TIdt anId = myFile->Id(); + + TValueHolder aModeSwitch(theTimeStampValue->myModeSwitch); + MED::TGeom2Profile& aGeom2Profile = theTimeStampValue->myGeom2Profile; + + MED::PTimeStampInfo aTimeStampInfo = theTimeStampValue->myTimeStampInfo; + TValueHolder anEntity(aTimeStampInfo->myEntity); + TValueHolder aNumDt(aTimeStampInfo->myNumDt); + TValueHolder aNumOrd(aTimeStampInfo->myNumOrd); + + MED::PFieldInfo aFieldInfo = aTimeStampInfo->myFieldInfo; + TValueHolder aFieldName(aFieldInfo->myName); + TValueHolder anIsLocal(aFieldInfo->myIsLocal); + + MED::PMeshInfo aMeshInfo = aFieldInfo->myMeshInfo; + TValueHolder aMeshName(aMeshInfo->myName); + + TGeom2Gauss& aGeom2Gauss = aTimeStampInfo->myGeom2Gauss; + TVector aGaussName(GetNOMLength()+1); + + med_storage_mode aProfileMode = med_storage_mode(boost::get<0>(theMKey2Profile)); + MED::TKey2Profile aKey2Profile = boost::get<1>(theMKey2Profile); + TVector aProfileName(GetNOMLength()+1); + + TGeom2Size& aGeom2Size = aTimeStampInfo->myGeom2Size; + TGeom2Size::iterator anIter = aGeom2Size.begin(); + for (; anIter != aGeom2Size.end(); anIter++) { + EGeometrieElement aGeom = anIter->first; + TInt aNbElem = anIter->second; + med_int profilesize, aNbGauss; + + TInt aNbVal = MEDfieldnValueWithProfile(anId, + &aFieldName, + aNumDt, + aNumOrd, + anEntity, + med_geometry_type(aGeom), + 1, + aProfileMode, + &aProfileName[0], + &profilesize, + &aGaussName[0], + &aNbGauss); + + if (aNbVal <= 0) { + if (theErr) { + *theErr = -1; + return; + } + EXCEPTION(std::runtime_error, "GetTimeStampValue - MEDfieldnValueWithProfile(...) - aNbVal == "<myNbComp; + TInt aNbValue = aNbVal;// / aNbGauss; rules in MED changed + theTimeStampValue->AllocateValue(aGeom, + aNbValue, + aNbGauss, + aNbComp); + TInt aValueSize = theTimeStampValue->GetValueSize(aGeom); + + INITMSG(MYDEBUG, + "TWrapper::GetTimeStampValue - aGeom = "<GetType() != eNON_STRUCTURE) - return PCellInfo(); - TInt aNbElem = GetNbCells(theMeshInfo,theEntity,theGeom,theConnMode); - PCellInfo anInfo = CrCellInfo(theMeshInfo,theEntity,theGeom,aNbElem,theConnMode); - GetCellInfo(anInfo,theErr); + MED::PGaussInfo aGaussInfo; + TGaussInfo::TKey aKey(aGeom, &aGaussName[0]); + if (strcmp(&aGaussName[0], "") != 0) { + MED::TKey2Gauss::const_iterator anIter = theKey2Gauss.find(aKey); + if (anIter != theKey2Gauss.end()) { + aGaussInfo = anIter->second; + aGeom2Gauss[aGeom] = aGaussInfo; + } + } -#ifdef _DEBUG_ - TInt aConnDim = anInfo->GetConnDim(); - INITMSG(MYDEBUG,"GetPCellInfo - theEntity = "<GetConnSlice(iElem); - for(TInt iConn = 0; iConn < aConnDim; iConn++){ - ADDMSG(MYVALUEDEBUG,aConnSlice[iConn]<<","); + MED::PProfileInfo aProfileInfo; + if (strcmp(&aProfileName[0], MED_NO_PROFILE) != 0) { + MED::TKey2Profile::const_iterator anIter = aKey2Profile.find(&aProfileName[0]); + if (anIter != aKey2Profile.end()) { + aProfileInfo = anIter->second; + aGeom2Profile[aGeom] = aProfileInfo; + } } - ADDMSG(MYVALUEDEBUG," "); - } - ADDMSG(MYDEBUG, std::endl); - BEGMSG(MYVALUEDEBUG,"GetPCellInfo - GetFamNum: "); - for(TInt iElem = 0; iElem < aNbElem; iElem++){ - ADDMSG(MYVALUEDEBUG,anInfo->GetFamNum(iElem)<<", "); - } - ADDMSG(MYVALUEDEBUG, std::endl); + if (aGaussInfo && aNbGauss != aGaussInfo->GetNbGauss()) { + if (theErr) { + *theErr = MED_FALSE; + return; + } + EXCEPTION(std::runtime_error, "GetTimeStampValue - aNbGauss != aGaussInfo->GetNbGauss()"); + } - if(anInfo->IsElemNum()){ - BEGMSG(MYVALUEDEBUG,"GetPCellInfo - GetElemNum: "); - for(TInt iElem = 0; iElem < aNbElem; iElem++){ - ADDMSG(MYVALUEDEBUG,anInfo->GetElemNum(iElem)<<", "); + if (aProfileInfo && aProfileInfo->IsPresent()) { + TInt aNbSubElem = aProfileInfo->GetSize(); + TInt aProfileSize = aNbSubElem*aNbComp*aNbGauss; + if (aProfileSize != aValueSize) { + if (theErr) { + *theErr = -1; + return; + } + EXCEPTION(std::runtime_error, + "GetTimeStampValue - aProfileSize("<myGeom2NbGauss; - TGeom2NbGauss::const_iterator anIter = aGeom2NbGauss.begin(); - for(; anIter != aGeom2NbGauss.end(); anIter++){ - const EGeometrieElement& aGeom = anIter->first; - INITMSG(MYDEBUG,"aGeom = "<myGeom2Value; - typename TimeStampValueType::TTGeom2Value::const_iterator anIter = aGeom2Value.begin(); - for(; anIter != aGeom2Value.end(); anIter++){ - const EGeometrieElement& aGeom = anIter->first; - const typename TimeStampValueType::TTMeshValue& aMeshValue = anIter->second; - TInt aNbElem = aMeshValue.myNbElem; - TInt aNbGauss = aMeshValue.myNbGauss; - TInt aNbComp = aMeshValue.myNbComp; - INITMSG(MYDEBUG,"aGeom = "<GetFieldInfo(); PTimeStampValueBase anInfo = CrTimeStampValue(theTimeStampInfo, aFieldInfo->GetType()); - GetTimeStampValue(anInfo, - theMKey2Profile, + GetTimeStampValue(anInfo, + theMKey2Profile, theKey2Gauss, theErr); #ifdef _DEBUG_ - if(aFieldInfo->GetType() == eFLOAT64) + if (aFieldInfo->GetType() == eFLOAT64) Print(anInfo); else Print(anInfo); @@ -537,7 +3526,7 @@ namespace MED } //---------------------------------------------------------------------------- - void + void TWrapper ::GetTimeStampVal(const PTimeStampVal& theVal, const TMKey2Profile& theMKey2Profile, @@ -546,7 +3535,7 @@ namespace MED { PTimeStampInfo aTimeStampInfo = theVal->GetTimeStampInfo(); PFieldInfo aFieldInfo = aTimeStampInfo->GetFieldInfo(); - if(aFieldInfo->GetType() == eFLOAT64) + if (aFieldInfo->GetType() == eFLOAT64) GetTimeStampValue(theVal, theMKey2Profile, theKey2Gauss, @@ -571,7 +3560,7 @@ namespace MED { PTimeStampInfo aTimeStampInfo = theVal->GetTimeStampInfo(); PFieldInfo aFieldInfo = aTimeStampInfo->GetFieldInfo(); - if(aFieldInfo->GetType() == eFLOAT64) + if (aFieldInfo->GetType() == eFLOAT64) SetTimeStampValue(theVal, theErr); else{ PTimeStampValueBase aVal = CrTimeStampValue(aTimeStampInfo, @@ -608,7 +3597,7 @@ namespace MED } //---------------------------------------------------------------------------- - PTimeStampVal + PTimeStampVal TWrapper ::GetPTimeStampVal(const PTimeStampInfo& theTimeStampInfo, const TMKey2Profile& theMKey2Profile, @@ -616,8 +3605,8 @@ namespace MED TErr* theErr) { PTimeStampVal anInfo = CrTimeStampVal(theTimeStampInfo); - GetTimeStampVal(anInfo, - theMKey2Profile, + GetTimeStampVal(anInfo, + theMKey2Profile, theKey2Gauss, theErr); return anInfo; @@ -628,22 +3617,22 @@ namespace MED TWrapper ::GetPGrilleInfo(const PMeshInfo& theMeshInfo) { - if(theMeshInfo->GetType() != eSTRUCTURE) + if (theMeshInfo->GetType() != eSTRUCTURE) return PGrilleInfo(); EGrilleType type; - GetGrilleType(*theMeshInfo,type); + GetGrilleType(*theMeshInfo, type); PGrilleInfo anInfo; - if(type == eGRILLE_STANDARD){ + if (type == eGRILLE_STANDARD) { const TInt nnoeuds = GetNbNodes(*theMeshInfo); - anInfo = CrGrilleInfo(theMeshInfo,type,nnoeuds); + anInfo = CrGrilleInfo(theMeshInfo, type, nnoeuds); } else { TIntVector aVec; aVec.resize(theMeshInfo->GetDim()); - for(int aAxe=0;aAxeGetDim();aAxe++){ + for (int aAxe=0;aAxeGetDim();aAxe++) { ETable aATable = eCOOR_IND1; - switch(aAxe){ + switch (aAxe) { case 0: aATable = eCOOR_IND1; break; @@ -654,52 +3643,411 @@ namespace MED aATable = eCOOR_IND3; break; } - aVec[aAxe] = GetNbNodes(*theMeshInfo,aATable); + aVec[aAxe] = GetNbNodes(*theMeshInfo, aATable); } - anInfo = CrGrilleInfo(theMeshInfo,type,aVec); + anInfo = CrGrilleInfo(theMeshInfo, type, aVec); } GetGrilleInfo(anInfo); anInfo->SetGrilleType(type); #ifdef _DEBUG_ - INITMSG(MYDEBUG,"GetPGrilleInfo: "); + INITMSG(MYDEBUG, "GetPGrilleInfo: "); { TInt aNbElem = anInfo->GetNbNodes(); - BEGMSG(MYVALUEDEBUG,"GetFamNumNode: "); - for(TInt iElem = 0; iElem < aNbElem; iElem++){ - ADDMSG(MYVALUEDEBUG,anInfo->GetFamNumNode(iElem)<<", "); + BEGMSG(MYVALUEDEBUG, "GetFamNumNode: "); + for (TInt iElem = 0; iElem < aNbElem; iElem++) { + ADDMSG(MYVALUEDEBUG, anInfo->GetFamNumNode(iElem)<<", "); } TInt aNbCells = anInfo->GetNbCells(); - BEGMSG(MYVALUEDEBUG,"GetFamNum: "); - for(TInt iElem = 0; iElem < aNbCells; iElem++){ - ADDMSG(MYVALUEDEBUG,anInfo->GetFamNum(iElem)<<", "); + BEGMSG(MYVALUEDEBUG, "GetFamNum: "); + for (TInt iElem = 0; iElem < aNbCells; iElem++) { + ADDMSG(MYVALUEDEBUG, anInfo->GetFamNum(iElem)<<", "); } ADDMSG(MYVALUEDEBUG, std::endl); - BEGMSG(MYVALUEDEBUG,"GetCoordName: "); - for(TInt iElem = 0; iElem < theMeshInfo->GetDim(); iElem++){ - ADDMSG(MYVALUEDEBUG,anInfo->GetCoordName(iElem)<<", "); + BEGMSG(MYVALUEDEBUG, "GetCoordName: "); + for (TInt iElem = 0; iElem < theMeshInfo->GetDim(); iElem++) { + ADDMSG(MYVALUEDEBUG, anInfo->GetCoordName(iElem)<<", "); } ADDMSG(MYVALUEDEBUG, std::endl); - BEGMSG(MYVALUEDEBUG,"GetCoordUnit: "); - for(TInt iElem = 0; iElem < theMeshInfo->GetDim(); iElem++){ - ADDMSG(MYVALUEDEBUG,anInfo->GetCoordUnit(iElem)<<", "); + BEGMSG(MYVALUEDEBUG, "GetCoordUnit: "); + for (TInt iElem = 0; iElem < theMeshInfo->GetDim(); iElem++) { + ADDMSG(MYVALUEDEBUG, anInfo->GetCoordUnit(iElem)<<", "); } ADDMSG(MYVALUEDEBUG, std::endl); - + } #endif - + return anInfo; } - + //---------------------------------------------------------------------------- PGrilleInfo TWrapper ::GetPGrilleInfo(const PMeshInfo& theMeshInfo, const PGrilleInfo& theInfo) { - PGrilleInfo anInfo = CrGrilleInfo(theMeshInfo,theInfo); + PGrilleInfo anInfo = CrGrilleInfo(theMeshInfo, theInfo); return anInfo; - } + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::GetGrilleInfo(TGrilleInfo& theInfo, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return; + + MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo; + TValueHolder aMeshName(aMeshInfo.myName); + EMaillage aMaillageType = aMeshInfo.myType; + + GetGrilleType(aMeshInfo, theInfo.myGrilleType, theErr); + EGrilleType aGrilleType = theInfo.myGrilleType; + + TErr aRet = 0; + if (aMaillageType == eSTRUCTURE && aGrilleType == eGRILLE_STANDARD) { + GetGrilleStruct(aMeshInfo, theInfo.myGrilleStructure, theErr); + + TValueHolder aCoord(theInfo.myCoord); + TValueHolder aModeSwitch(theInfo.myModeSwitch); + TValueHolder aCoordNames(theInfo.myCoordNames); + TValueHolder aCoordUnits(theInfo.myCoordUnits); + //med_axis_type aRepere; + + aRet = MEDmeshNodeCoordinateRd(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + aModeSwitch, + &aCoord); + + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetGrilleInfo - MEDmeshNodeCoordinateRd(...)"); + + //TInt aNbNodes = theInfo.GetNbNodes();//GetNbFamilies(aMeshInfo); + TValueHolder aFamNumNode(theInfo.myFamNumNode); + + aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_NODE, + MED_NO_GEOTYPE, + &aFamNumNode); + + if (aRet < 0) { + // if (aRet == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files + { + int mySize = (int)theInfo.myFamNumNode.size(); + theInfo.myFamNumNode.clear(); + theInfo.myFamNumNode.resize(mySize,0); + aRet = 0; + } + // else + // EXCEPTION(std::runtime_error, "GetGrilleInfo - MEDmeshEntityFamilyNumberRd(...)"); + } + if (theErr) + *theErr = aRet; + + //============================ + } + + if (aMaillageType == eSTRUCTURE && aGrilleType != eGRILLE_STANDARD) { + ETable aTable = eCOOR_IND1; + for (med_int anAxis = 1; anAxis <= aMeshInfo.myDim; anAxis++) { + switch (anAxis) { + case 1: + aTable = eCOOR_IND1; + break; + case 2: + aTable = eCOOR_IND2; + break; + case 3: + aTable = eCOOR_IND3; + break; + default: + aRet = -1; + } + + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetGrilleInfo - anAxis number out of range(...)"); + + TInt aNbIndexes = GetNbNodes(aMeshInfo, aTable); + if (aNbIndexes < 0) + EXCEPTION(std::runtime_error, "GetGrilleInfo - Erreur a la lecture de la taille de l'indice"); + + TValueHolder anIndexes(theInfo.GetIndexes(anAxis-1)); + //TValueHolder table(aTable); + //char aCompNames[MED_SNAME_SIZE+1]; + //char anUnitNames[MED_SNAME_SIZE+1]; + aRet=MEDmeshGridIndexCoordinateRd(myFile->Id(), + &aMeshName, + MED_NO_DT,MED_NO_IT, + anAxis, + &anIndexes); + + //theInfo.SetCoordName(anAxis-1, aCompNames); + //theInfo.SetCoordUnit(anAxis-1, anUnitNames); + theInfo.SetGrilleStructure(anAxis-1, aNbIndexes); + + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetGrilleInfo - MEDindicesCoordLire(...)"); + } + } + + EGeometrieElement aGeom = theInfo.GetGeom(); + EEntiteMaillage aEntity = theInfo.GetEntity(); + TInt aNbCells = theInfo.GetNbCells(); + + theInfo.myFamNum.resize(aNbCells); + TValueHolder aFamNum(theInfo.myFamNum); + + aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(), + &aMeshName, MED_NO_DT, MED_NO_IT, med_entity_type(aEntity), + med_geometry_type(aGeom), &aFamNum); + + if (aMeshInfo.myDim == 3) + { + aGeom = theInfo.GetSubGeom(); + aEntity = theInfo.GetSubEntity(); + aNbCells = theInfo.GetNbSubCells(); + + theInfo.myFamSubNum.resize(aNbCells, 0); + TValueHolder aFamNum(theInfo.myFamSubNum); + + aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + med_entity_type(aEntity), + med_geometry_type(aGeom), + &aFamNum); + } + if (aRet < 0) { + // if (aRet == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files + { + int mySize = (int)theInfo.myFamNumNode.size(); + theInfo.myFamNumNode.clear(); + theInfo.myFamNumNode.resize(mySize, 0); + aRet = 0; + } + // else + // EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshEntityFamilyNumberRd(...)"); + } + if (theErr) + *theErr = aRet; + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetGrilleInfo(const MED::TGrilleInfo& theInfo, + TErr* theErr) + { + SetGrilleInfo(theInfo, eLECTURE_ECRITURE, theErr); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::SetGrilleInfo(const MED::TGrilleInfo& theInfo, + EModeAcces theMode, + TErr* theErr) + { + if (theInfo.myMeshInfo->myType != eSTRUCTURE) + return; + TFileWrapper aFileWrapper(myFile, theMode, theErr); + + if (theErr && *theErr < 0) + return; + + MED::TGrilleInfo& anInfo = const_cast(theInfo); + + MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo; + TValueHolder aMeshName(aMeshInfo.myName); + + TValueHolder aGrilleType(anInfo.myGrilleType); + + TErr aRet = 0; + aRet = MEDmeshGridTypeRd(myFile->Id(), + &aMeshName, + &aGrilleType); + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "SetGrilleInfo - MEDmeshGridTypeRd(...)"); + + if (anInfo.myGrilleType == eGRILLE_STANDARD) { + TValueHolder aCoord(anInfo.myCoord); + TValueHolder aModeSwitch(anInfo.myModeSwitch); + TValueHolder aCoordNames(anInfo.myCoordNames); + TValueHolder aCoordUnits(anInfo.myCoordUnits); + med_int aNbNoeuds = med_int(anInfo.myCoord.size() / aMeshInfo.myDim); + //med_axis_type aRepere = MED_CARTESIAN; + + aRet = MEDmeshNodeCoordinateWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_UNDEF_DT, + aModeSwitch, + aNbNoeuds, + &aCoord); + + if (aRet < 0) + EXCEPTION(std::runtime_error, "SetGrilleInfo - MEDmeshNodeCoordinateWr(...)"); + + TValueHolder aGrilleStructure(anInfo.myGrilleStructure); + aRet = MEDmeshGridStructWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_UNDEF_DT, + &aGrilleStructure); + if (aRet < 0) + EXCEPTION(std::runtime_error, "SetGrilleInfo - MEDmeshGridStructWr(...)"); + + } + else { + for (med_int aAxis = 0; aAxis < aMeshInfo.myDim; aAxis++) { + aRet = MEDmeshGridIndexCoordinateWr(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + MED_UNDEF_DT, + aAxis+1, + anInfo.GetIndexes(aAxis).size(), + &anInfo.GetIndexes(aAxis)[0]); + + if (aRet < 0) + EXCEPTION(std::runtime_error, "SetGrilleInfo - MEDmeshGridIndexCoordinateWr(...)"); + } + + } + + return; + } + + //---------------------------------------------------------------------------- + PGrilleInfo + TWrapper + ::CrGrilleInfo(const PMeshInfo& theMeshInfo, + const PGrilleInfo& theInfo) + { + return PGrilleInfo(new TTGrilleInfo + (theMeshInfo, + theInfo)); + } + + //---------------------------------------------------------------------------- + PGrilleInfo + TWrapper + ::CrGrilleInfo(const PMeshInfo& theMeshInfo) + { + return PGrilleInfo(); // not implemented???? + } + + //---------------------------------------------------------------------------- + PGrilleInfo + TWrapper + ::CrGrilleInfo(const PMeshInfo& theMeshInfo, + const EGrilleType& type) + { + return PGrilleInfo(new TTGrilleInfo + (theMeshInfo, + type)); + } + + //---------------------------------------------------------------------------- + PGrilleInfo + TWrapper + ::CrGrilleInfo(const PMeshInfo& theMeshInfo, + const EGrilleType& type, + const TInt& nbNodes) + { + return PGrilleInfo(new TTGrilleInfo + (theMeshInfo, + type, + nbNodes)); + } + + //---------------------------------------------------------------------------- + PGrilleInfo + TWrapper + ::CrGrilleInfo(const PMeshInfo& theMeshInfo, + const EGrilleType& type, + const MED::TIntVector& nbNodeVec) + { + return PGrilleInfo(new TTGrilleInfo + (theMeshInfo, + type, + nbNodeVec)); + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::GetGrilleType(const MED::TMeshInfo& theMeshInfo, + EGrilleType& theGridType, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + EXCEPTION(std::runtime_error, " GetGrilleType - aFileWrapper (...)"); + + MED::TMeshInfo& aMeshInfo = const_cast(theMeshInfo); + + if (aMeshInfo.myType == eSTRUCTURE) { + TValueHolder aMeshName(aMeshInfo.myName); + TValueHolder aGridType(theGridType); + TErr aRet = MEDmeshGridTypeRd(myFile->Id(), + &aMeshName, + &aGridType); + + if (aRet < 0) + EXCEPTION(std::runtime_error, "GetGrilleInfo - MEDmeshGridTypeRd(...)"); + } + } + + //---------------------------------------------------------------------------- + void + TWrapper + ::GetGrilleStruct(const MED::TMeshInfo& theMeshInfo, + TIntVector& theStruct, + TErr* theErr) + { + TFileWrapper aFileWrapper(myFile, eLECTURE, theErr); + + if (theErr && *theErr < 0) + return; + + TErr aRet; + MED::TMeshInfo& aMeshInfo = const_cast(theMeshInfo); + + TValueHolder aMeshName(aMeshInfo.myName); + TValueHolder aGridStructure(theStruct); + + aRet = MEDmeshGridStructRd(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + &aGridStructure); + if (theErr) + *theErr = aRet; + else if (aRet < 0) + EXCEPTION(std::runtime_error, "GetGrilleInfo - MEDmeshGridStructRd(...)"); + } } diff --git a/src/MEDWrapper/MED_Wrapper.hxx b/src/MEDWrapper/MED_Wrapper.hxx index 10a9907a7..a8d8ec39a 100644 --- a/src/MEDWrapper/MED_Wrapper.hxx +++ b/src/MEDWrapper/MED_Wrapper.hxx @@ -32,428 +32,430 @@ namespace MED { //---------------------------------------------------------------------------- - //! Define a base class that wraps the MED API - struct MEDWRAPPER_EXPORT TWrapper + class TFile; + typedef boost::shared_ptr PFile; + + typedef enum {eLECTURE, eLECTURE_ECRITURE, eLECTURE_AJOUT, eCREATION} EModeAcces; + + //---------------------------------------------------------------------------- + //! Class that wraps the MED API + class MEDWRAPPER_EXPORT TWrapper { + friend class TLockProxy; + typedef boost::mutex TMutex; - //! This is a syncronization primitive which allow to support thread safety for the MED access + //! Syncronization primitive that allows supporting thread safety for the MED access TMutex myMutex; + TWrapper(); + TWrapper(const TWrapper&); + TWrapper& operator=(const TWrapper&); + + public: + TWrapper(const std::string& theFileName); + virtual ~TWrapper(); - //---------------------------------------------------------------------------- - //! Creates a MEDWrapper MED Mesh representation - virtual - PMeshInfo - CrMeshInfo(TInt theDim = 0, TInt theSpaceDim = 0, - const std::string& theValue = "", - EMaillage theType = eNON_STRUCTURE, - const std::string& theDesc = "") = 0; - - //! A copy-constructor for the MEDWrapper MED Mesh representation - virtual - PMeshInfo - CrMeshInfo(const PMeshInfo& theInfo) = 0; - - //! Read number of MED Mesh entities in the defined MED file - virtual - TInt - GetNbMeshes(TErr* theErr = NULL) = 0; - + //! Read number of MED Mesh entities in the MED file + virtual + TInt + GetNbMeshes(TErr* theErr = NULL); + //! Read a MEDWrapper MED Mesh representation by its number - virtual - void - GetMeshInfo(TInt theMeshId, + virtual + void + GetMeshInfo(TInt theMeshId, TMeshInfo& theInfo, - TErr* theErr = NULL) = 0; + TErr* theErr = NULL); - //! Write the MEDWrapper MED Mesh representation in the defined MED file - virtual + //! Write the MEDWrapper MED Mesh representation into the MED file + virtual void SetMeshInfo(const TMeshInfo& theInfo, - TErr* theErr = NULL) = 0; - - //! Read a MEDWrapper MED Mesh representation by its number - virtual + TErr* theErr = NULL); + + void + SetMeshInfo(const MED::TMeshInfo& theInfo, + EModeAcces theMode, + TErr* theErr = NULL); + + //! Create a MEDWrapper MED Mesh representation + virtual + PMeshInfo + CrMeshInfo(TInt theDim = 0, + TInt theSpaceDim = 0, + const std::string& theValue = "", + EMaillage theType = eNON_STRUCTURE, + const std::string& theDesc = ""); + + //! Copy constructor for the MEDWrapper MED Mesh representation + virtual + PMeshInfo + CrMeshInfo(const PMeshInfo& theInfo); + + //! Get a MEDWrapper MED Mesh representation by its number + virtual PMeshInfo GetPMeshInfo(TInt theId, TErr* theErr = NULL); - //---------------------------------------------------------------------------- - //! Read number of MED Family entities in the defined MED file - virtual + //! Read number of MED Family entities in the MED file + virtual TInt GetNbFamilies(const TMeshInfo& theMeshInfo, - TErr* theErr = NULL) = 0; + TErr* theErr = NULL); - //! Read number of attributes for defined MED Family - virtual + //! Read number of attributes for MED Family + virtual TInt - GetNbFamAttr(TInt theFamId, + GetNbFamAttr(TInt theFamId, const TMeshInfo& theInfo, - TErr* theErr = NULL) = 0; - - //! Read number of MED Groups where MED Family with the number belong to + TErr* theErr = NULL); + + //! Read number of MED Groups to which the MED Family belongs to virtual TInt - GetNbFamGroup(TInt theFamId, + GetNbFamGroup(TInt theFamId, const TMeshInfo& theInfo, - TErr* theErr = NULL) = 0; - + TErr* theErr = NULL); + //! Read a MEDWrapper MED Family representation by its number virtual void - GetFamilyInfo(TInt theFamId, + GetFamilyInfo(TInt theFamId, TFamilyInfo& theInfo, - TErr* theErr = NULL) = 0; - - //! Write a MEDWrapper MED Family representation by its number + TErr* theErr = NULL); + + //! Write a MEDWrapper MED Family representation into the MED file virtual void SetFamilyInfo(const TFamilyInfo& theInfo, - TErr* theErr = NULL) = 0; - - //! Creates a MEDWrapper MED Family representation - virtual + TErr* theErr = NULL); + + void + SetFamilyInfo(const MED::TFamilyInfo& theInfo, + EModeAcces theMode, + TErr* theErr = NULL); + + //! Create a MEDWrapper MED Family representation + virtual PFamilyInfo CrFamilyInfo(const PMeshInfo& theMeshInfo, - TInt theNbGroup = 0, + TInt theNbGroup = 0, TInt theNbAttr = 0, TInt theId = 0, - const std::string& theValue = "") = 0; - - //! Creates a MEDWrapper MED Family representation - virtual + const std::string& theValue = ""); + + //! Create a MEDWrapper MED Family representation + virtual PFamilyInfo CrFamilyInfo(const PMeshInfo& theMeshInfo, const std::string& theValue, TInt theId, - const TStringSet& theGroupNames, - const TStringVector& theAttrDescs = TStringVector(), - const TIntVector& theAttrIds = TIntVector(), - const TIntVector& theAttrVals = TIntVector()) = 0; - - //! A copy-constructor for the MEDWrapper MED Family representation + const TStringSet& theGroupNames, + const TStringVector& theAttrDescs = TStringVector(), + const TIntVector& theAttrIds = TIntVector(), + const TIntVector& theAttrVals = TIntVector()); + + //! Copy constructor for the MEDWrapper MED Family representation virtual PFamilyInfo CrFamilyInfo(const PMeshInfo& theMeshInfo, - const PFamilyInfo& theInfo) = 0; - - //! Write a MEDWrapper MED Family representation by its number + const PFamilyInfo& theInfo); + + //! Get a MEDWrapper MED Family representation by its number PFamilyInfo - GetPFamilyInfo(const PMeshInfo& theMeshInfo, + GetPFamilyInfo(const PMeshInfo& theMeshInfo, TInt theId, TErr* theErr = NULL); - - //---------------------------------------------------------------------------- + //! Read sequence of names for any descendant of TElemInfo virtual void GetNames(TElemInfo& theInfo, TInt theNb, - EEntiteMaillage theEntity, + EEntiteMaillage theEntity, EGeometrieElement theGeom, - TErr* theErr = NULL) - {} + TErr* theErr = NULL); + + //! Write sequence of names for any descendant of TElemInfo + virtual + void + SetNames(const TElemInfo& theInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TErr* theErr = NULL); - //! Read sequence of numerous for any descendant of TElemInfo + void + SetNames(const TElemInfo& theInfo, + EModeAcces theMode, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TErr* theErr = NULL); + + //! Read sequence of numerated data for any descendant of TElemInfo virtual void GetNumeration(TElemInfo& theInfo, TInt theNb, - EEntiteMaillage theEntity, + EEntiteMaillage theEntity, EGeometrieElement theGeom, - TErr* theErr = NULL) - {} + TErr* theErr = NULL); - //! Read sequence MED Family indexes for any descendant of TElemInfo + //! Write sequence of numerated data for any descendant of TElemInfo virtual void - GetFamilies(TElemInfo& theInfo, - TInt theNb, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr = NULL) - {} + SetNumeration(const TElemInfo& theInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TErr* theErr = NULL); - //! Write sequence of names for any descendant of TElemInfo - virtual void - SetNames(const TElemInfo& theInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr = NULL) - {} + SetNumeration(const TElemInfo& theInfo, + EModeAcces theMode, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TErr* theErr = NULL); - //! Write sequence of numerous for any descendant of TElemInfo + //! Read sequence of MED Families' indices for any descendant of TElemInfo virtual void - SetNumeration(const TElemInfo& theInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, - TErr* theErr = NULL) - {} + GetFamilies(TElemInfo& theInfo, + TInt theNb, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TErr* theErr = NULL); - //! Write sequence MED Family indexes for any descendant of TElemInfo + //! Write sequence of MED Families' indices for any descendant of TElemInfo virtual void SetFamilies(const TElemInfo& theInfo, - EEntiteMaillage theEntity, + EEntiteMaillage theEntity, EGeometrieElement theGeom, - TErr* theErr = NULL) - {} + TErr* theErr = NULL); - //! Read a MEDWrapper MED Element representation from defined MED file - PElemInfo - GetPElemInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity = eNOEUD, - EGeometrieElement theGeom = ePOINT1, - EConnectivite theConnMode = eNOD, - TErr* theErr = NULL); + void + SetFamilies(const TElemInfo& theInfo, + EModeAcces theMode, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, + TErr* theErr = NULL); - //---------------------------------------------------------------------------- - //! Read number of nodes in defined MED Mesh + //! Read number of nodes in MED Mesh virtual TInt GetNbNodes(const TMeshInfo& theMeshInfo, - TErr* theErr = NULL) = 0; - + TErr* theErr = NULL); + virtual TInt GetNbNodes(const TMeshInfo& theMeshInfo, ETable theTable, - TErr* theErr = NULL) - { - return 0; - } + TErr* theErr = NULL); - //! Read a MEDWrapper MED Nodes representation from defined MED file + //! Read a MEDWrapper MED Nodes representation from the MED file virtual void GetNodeInfo(TNodeInfo& theInfo, - TErr* theErr = NULL) = 0; + TErr* theErr = NULL); - //! Write the MEDWrapper MED Nodes representation into defined MED file - virtual + //! Write the MEDWrapper MED Nodes representation into the MED file + virtual void SetNodeInfo(const TNodeInfo& theInfo, - TErr* theErr = NULL) = 0; - - //! Creates a MEDWrapper MED Nodes representation - virtual - PElemInfo - CrElemInfo(const PMeshInfo& theMeshInfo, - TInt theNbElem, - EBooleen theIsElemNum = eVRAI, - EBooleen theIsElemNames = eVRAI) - { - return PElemInfo(); - } + TErr* theErr = NULL); - //! Creates a MEDWrapper MED Nodes representation - virtual - PElemInfo - CrElemInfo(const PMeshInfo& theMeshInfo, - TInt theNbElem, - const TIntVector& theFamNum, - const TIntVector& aElemNum, - const TStringVector& aElemNames) - { - return PElemInfo(); - } + void + SetNodeInfo(const MED::TNodeInfo& theInfo, + EModeAcces theMode, + TErr* theErr = NULL); - //! Creates a MEDWrapper MED Nodes representation + //! Create a MEDWrapper MED Nodes representation virtual PNodeInfo - CrNodeInfo(const PMeshInfo& theMeshInfo, + CrNodeInfo(const PMeshInfo& theMeshInfo, TInt theNbElem, EModeSwitch theMode = eFULL_INTERLACE, - ERepere theSystem = eCART, + ERepere theSystem = eCART, EBooleen theIsElemNum = eVRAI, - EBooleen theIsElemNames = eVRAI) = 0; + EBooleen theIsElemNames = eVRAI); - //! Creates a MEDWrapper MED Nodes representation - virtual + //! Create a MEDWrapper MED Nodes representation + virtual PNodeInfo - CrNodeInfo(const PMeshInfo& theMeshInfo, + CrNodeInfo(const PMeshInfo& theMeshInfo, const TFloatVector& theNodeCoords, EModeSwitch theMode = eFULL_INTERLACE, - ERepere theSystem = eCART, + ERepere theSystem = eCART, const TStringVector& theCoordNames = TStringVector(), const TStringVector& theCoordUnits = TStringVector(), const TIntVector& theFamilyNums = TIntVector(), const TIntVector& theElemNums = TIntVector(), - const TStringVector& theElemNames = TStringVector()) = 0; - - //! A copy-constructor for the MEDWrapper MED Nodes representation + const TStringVector& theElemNames = TStringVector()); + + //! Copy constructor for the MEDWrapper MED Nodes representation virtual PNodeInfo CrNodeInfo(const PMeshInfo& theMeshInfo, - const PNodeInfo& theInfo) = 0; - - //! Read a MEDWrapper MED Nodes representation from defined MED file + const PNodeInfo& theInfo); + + //! Get a MEDWrapper MED Nodes representation from the MED file PNodeInfo GetPNodeInfo(const PMeshInfo& theMeshInfo, TErr* theErr = NULL); - - //---------------------------------------------------------------------------- - //! Read a MEDWrapper MED Polygones representation from defined MED file - /*! This feature is supported only for version of 2.2 and higher */ + + //! Create a MEDWrapper MED Elements representation virtual - void - GetPolygoneInfo(TPolygoneInfo& theInfo, - TErr* theErr = NULL) - {} + PElemInfo + CrElemInfo(const PMeshInfo& theMeshInfo, + TInt theNbElem, + EBooleen theIsElemNum = eVRAI, + EBooleen theIsElemNames = eVRAI); - //! Write a MEDWrapper MED Polygones representation from defined MED file - /*! This feature is supported only for version of 2.2 and higher */ + //! Create a MEDWrapper MED Elements representation virtual - void - SetPolygoneInfo(const TPolygoneInfo& theInfo, - TErr* theErr = NULL) - {} + PElemInfo + CrElemInfo(const PMeshInfo& theMeshInfo, + TInt theNbElem, + const TIntVector& theFamNum, + const TIntVector& aElemNum, + const TStringVector& aElemNames); - //! Read number of MED Polygones in defined MED Mesh - /*! This feature is supported only for version of 2.2 and higher */ + //! Get a MEDWrapper MED Element representation from the MED file + PElemInfo + GetPElemInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity = eNOEUD, + EGeometrieElement theGeom = ePOINT1, + EConnectivite theConnMode = eNOD, + TErr* theErr = NULL); + + //! Read number of MED Polygones in MED Mesh virtual TInt GetNbPolygones(const TMeshInfo& theMeshInfo, EEntiteMaillage theEntity, EGeometrieElement theGeom, EConnectivite theConnMode = eNOD, - TErr* theErr = NULL) - { - return 0; - } + TErr* theErr = NULL); - //! Read connectivity infroamtion for the MED Polygones in defined MED Mesh - /*! This feature is supported only for version of 2.2 and higher */ + //! Read connectivity information for the MED Polygones in defined MED Mesh virtual TInt GetPolygoneConnSize(const TMeshInfo& theMeshInfo, EEntiteMaillage theEntity, EGeometrieElement theGeom, EConnectivite theConnMode = eNOD, - TErr* theErr = NULL) - { - return 0; - } - - //! Creates a MEDWrapper MED Polygones representation - /*! This feature is supported only for version of 2.2 and higher */ - virtual + TErr* theErr = NULL); + + //! Read a MEDWrapper MED Polygones representation from the MED file + virtual + void + GetPolygoneInfo(TPolygoneInfo& theInfo, + TErr* theErr = NULL); + + //! Write a MEDWrapper MED Polygones representation into the MED file + virtual + void + SetPolygoneInfo(const TPolygoneInfo& theInfo, + TErr* theErr = NULL); + + void + SetPolygoneInfo(const MED::TPolygoneInfo& theInfo, + EModeAcces theMode, + TErr* theErr = NULL); + + //! Create a MEDWrapper MED Polygones representation + virtual PPolygoneInfo - CrPolygoneInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, + CrPolygoneInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, EGeometrieElement theGeom, TInt theNbElem, TInt theConnSize, EConnectivite theConnMode = eNOD, EBooleen theIsElemNum = eVRAI, - EBooleen theIsElemNames = eVRAI) - { - return PPolygoneInfo(); - } - - //! Creates a MEDWrapper MED Polygones representation - /*! This feature is supported only for version of 2.2 and higher */ + EBooleen theIsElemNames = eVRAI); + + //! Create a MEDWrapper MED Polygones representation virtual - PPolygoneInfo - CrPolygoneInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, + PPolygoneInfo + CrPolygoneInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, EGeometrieElement theGeom, const TIntVector& theIndexes, const TIntVector& theConnectivities, EConnectivite theConnMode = eNOD, const TIntVector& theFamilyNums = TIntVector(), const TIntVector& theElemNums = TIntVector(), - const TStringVector& theElemNames = TStringVector()) - { - return PPolygoneInfo(); - } + const TStringVector& theElemNames = TStringVector()); - //! A copy-constructor for the MEDWrapper MED Polygones representation + //! Copy constructor for the MEDWrapper MED Polygones representation virtual PPolygoneInfo CrPolygoneInfo(const PMeshInfo& theMeshInfo, - const PPolygoneInfo& theInfo) - { - return PPolygoneInfo(); - } - - //! Read a MEDWrapper MED Polygones representation from defined MED file - /*! This feature is support only for version of 2.2 and higher */ + const PPolygoneInfo& theInfo); + + //! Get a MEDWrapper MED Polygones representation from the MED file PPolygoneInfo GetPPolygoneInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, EConnectivite theConnMode = eNOD); - - //---------------------------------------------------------------------------- - //! Read a MEDWrapper MED Polyedres representation from defined MED file - /*! This feature is support only for version of 2.2 and higher */ - virtual - void - GetPolyedreInfo(TPolyedreInfo& theInfo, - TErr* theErr = NULL) - {} - //! Write a MEDWrapper MED Polyedres representation from defined MED file - /*! This feature is support only for version of 2.2 and higher */ - virtual - void - SetPolyedreInfo(const TPolyedreInfo& theInfo, - TErr* theErr = NULL) - {} - - //! Read number of MED Polyedres in defined MED Mesh - /*! This feature is support only for version of 2.2 and higher */ + //! Read number of MED Polyedres in MED Mesh virtual TInt GetNbPolyedres(const TMeshInfo& theMeshInfo, EEntiteMaillage theEntity, EGeometrieElement theGeom, EConnectivite theConnMode = eNOD, - TErr* theErr = NULL) - { - return 0; - } + TErr* theErr = NULL); - //! Read connectivity infroamtion for the MED Polyedres in defined MED Mesh - /*! This feature is support only for version of 2.2 and higher */ - virtual + //! Read connectivity information for the MED Polyedres in MED Mesh + virtual void GetPolyedreConnSize(const TMeshInfo& theMeshInfo, TInt& theNbFaces, TInt& theConnSize, EConnectivite theConnMode = eNOD, - TErr* theErr = NULL) - { - theNbFaces = theConnSize = 0; - } - + TErr* theErr = NULL); + + //! Read a MEDWrapper MED Polyedres representation from the MED file + virtual + void + GetPolyedreInfo(TPolyedreInfo& theInfo, + TErr* theErr = NULL); + + //! Write a MEDWrapper MED Polyedres representation into the MED file + virtual + void + SetPolyedreInfo(const TPolyedreInfo& theInfo, + TErr* theErr = NULL); + + void + SetPolyedreInfo(const MED::TPolyedreInfo& theInfo, + EModeAcces theMode, + TErr* theErr = NULL); + + //! Create a MEDWrapper MED Polyedres representation virtual PPolyedreInfo - CrPolyedreInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, + CrPolyedreInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, EGeometrieElement theGeom, TInt theNbElem, TInt theNbFaces, TInt theConnSize, EConnectivite theConnMode = eNOD, EBooleen theIsElemNum = eVRAI, - EBooleen theIsElemNames = eVRAI) - { - return PPolyedreInfo(); - } - - //! Creates a MEDWrapper MED Polyedres representation - /*! This feature is support only for version of 2.2 and higher */ + EBooleen theIsElemNames = eVRAI); + + //! Create a MEDWrapper MED Polyedres representation virtual PPolyedreInfo - CrPolyedreInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, + CrPolyedreInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, EGeometrieElement theGeom, const TIntVector& theIndexes, const TIntVector& theFaces, @@ -461,270 +463,254 @@ namespace MED EConnectivite theConnMode = eNOD, const TIntVector& theFamilyNums = TIntVector(), const TIntVector& theElemNums = TIntVector(), - const TStringVector& theElemNames = TStringVector()) - { - return PPolyedreInfo(); - } + const TStringVector& theElemNames = TStringVector()); - //! A copy-constructor for the MEDWrapper MED Polyedres representation + //! Copy constructor for the MEDWrapper MED Polyedres representation virtual PPolyedreInfo CrPolyedreInfo(const PMeshInfo& theMeshInfo, - const PPolyedreInfo& theInfo) - { - return PPolyedreInfo(); - } - - //! Read a MEDWrapper MED Polyedres representation from defined MED file - /*! This feature is support only for version of 2.2 and higher */ + const PPolyedreInfo& theInfo); + + //! Get a MEDWrapper MED Polyedres representation from the MED file PPolyedreInfo GetPPolyedreInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, EConnectivite theConnMode = eNOD); - - //---------------------------------------------------------------------------- - //! Get TEntityInfo which contains brief information about existing cells and their destribution among MED ENTITIES + + //! Get TEntityInfo which contains brief information about existing cells + // and their destribution among MED ENTITIES virtual TEntityInfo GetEntityInfo(const TMeshInfo& theMeshInfo, EConnectivite theConnMode = eNOD, - TErr* theErr = NULL) = 0; - - //! Read number of cells for defined MED Mesh, ENTITY and geometrical type with define mode of connectivity + TErr* theErr = NULL); + + //! Read number of cells for defined MED Mesh, ENTITY and geometrical type with given connectivity mode virtual TInt - GetNbCells(const TMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, + GetNbCells(const TMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, EConnectivite theConnMode = eNOD, - TErr* theErr = NULL) = 0; - - //! Read a MEDWrapper MED Cells representation from defined MED file + TErr* theErr = NULL); + + //! Read a MEDWrapper MED Cells representation from the MED file virtual void GetCellInfo(TCellInfo& theInfo, - TErr* theErr = NULL) = 0; - - //! Write the MEDWrapper MED Cells representation into defined MED file - virtual + TErr* theErr = NULL); + + //! Write the MEDWrapper MED Cells representation into the MED file + virtual void SetCellInfo(const TCellInfo& theInfo, - TErr* theErr = NULL) = 0; - - //! Creates a MEDWrapper MED Cells representation + TErr* theErr = NULL); + + void + SetCellInfo(const MED::TCellInfo& theInfo, + EModeAcces theMode, + TErr* theErr = NULL); + + //! Create a MEDWrapper MED Cells representation virtual PCellInfo - CrCellInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, + CrCellInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, EGeometrieElement theGeom, TInt theNbElem, EConnectivite theConnMode = eNOD, EBooleen theIsElemNum = eVRAI, EBooleen theIsElemNames = eVRAI, - EModeSwitch theMode = eFULL_INTERLACE) = 0; - - //! Creates a MEDWrapper MED Cells representation + EModeSwitch theMode = eFULL_INTERLACE); + + //! Create a MEDWrapper MED Cells representation virtual PCellInfo - CrCellInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, + CrCellInfo(const PMeshInfo& theMeshInfo, + EEntiteMaillage theEntity, EGeometrieElement theGeom, const TIntVector& theConnectivities, EConnectivite theConnMode = eNOD, const TIntVector& theFamilyNums = TIntVector(), const TIntVector& theElemNums = TIntVector(), const TStringVector& theElemNames = TStringVector(), - EModeSwitch theMode = eFULL_INTERLACE) = 0; - - //! A copy-constructor for the MEDWrapper MED Cells representation + EModeSwitch theMode = eFULL_INTERLACE); + + //! Copy constructor for the MEDWrapper MED Cells representation virtual PCellInfo CrCellInfo(const PMeshInfo& theMeshInfo, - const PCellInfo& theInfo) = 0; - - //! Read a MEDWrapper MED Cells representation from defined MED file + const PCellInfo& theInfo); + + //! Get a MEDWrapper MED Cells representation from the MED file PCellInfo GetPCellInfo(const PMeshInfo& theMeshInfo, - EEntiteMaillage theEntity, - EGeometrieElement theGeom, + EEntiteMaillage theEntity, + EGeometrieElement theGeom, EConnectivite theConnMode = eNOD, TErr* theErr = NULL); - //---------------------------------------------------------------------------- + //! Read geom type of MED_BALL structural element + EGeometrieElement + GetBallGeom(const TMeshInfo& theMeshInfo); + //! Read number of balls in the Mesh /*! This feature is supported since version 3.0 */ virtual TInt - GetNbBalls(const TMeshInfo& theMeshInfo) - { - return 0; - } + GetNbBalls(const TMeshInfo& theMeshInfo); - //! Read a MEDWrapped representation of MED_BALL from the MED file + //! Read a MEDWrapper representation of MED_BALL from the MED file /*! This feature is supported since version 3.0 */ virtual void GetBallInfo(TBallInfo& theInfo, - TErr* theErr = NULL) - {} + TErr* theErr = NULL); - //! Write a MEDWrapped representation of MED_BALL to the MED file + //! Write a MEDWrapper representation of MED_BALL into the MED file /*! This feature is supported since version 3.0 */ virtual void SetBallInfo(const TBallInfo& theInfo, - TErr* theErr = NULL) - {} + TErr* theErr = NULL); + + void + SetBallInfo(const TBallInfo& theInfo, + EModeAcces theMode, + TErr* theErr); - //! Creates a MEDWrapper MED Balls representation + //! Create a MEDWrapper MED Balls representation /*! This feature is supported since version 3.0 */ - virtual + virtual PBallInfo - CrBallInfo(const PMeshInfo& theMeshInfo, - TInt theNbBalls, - EBooleen theIsElemNum = eVRAI) - { - return PBallInfo(); - } + CrBallInfo(const PMeshInfo& theMeshInfo, + TInt theNbBalls, + EBooleen theIsElemNum = eVRAI); - //! Creates a MEDWrapper MED Balls representation + //! Create a MEDWrapper MED Balls representation /*! This feature is supported since version 3.0 */ virtual - PBallInfo - CrBallInfo(const PMeshInfo& theMeshInfo, + PBallInfo + CrBallInfo(const PMeshInfo& theMeshInfo, const TIntVector& theNodes, - TFloatVector& theDiameters, + TFloatVector& theDiameters, const TIntVector& theFamilyNums = TIntVector(), - const TIntVector& theElemNums = TIntVector()) - { - return PBallInfo(); - } + const TIntVector& theElemNums = TIntVector()); - //! A copy-constructor for the MEDWrapped MED Balls representation + //! Copy constructor for the MEDWrapper MED Balls representation + /*! This feature is supported since version 3.0 */ virtual PBallInfo CrBallInfo(const PMeshInfo& theMeshInfo, - const PBallInfo& theInfo) - { - return PBallInfo(); - } - - //! Read a MEDWrapped MED Balls representation from defined MED file + const PBallInfo& theInfo); + + //! Get a MEDWrapper MED Balls representation from the MED file /*! This feature is supported since version 3.0 */ virtual PBallInfo GetPBallInfo(const PMeshInfo& theMeshInfo); - //---------------------------------------------------------------------------- - //! Read number of MED FIELDS in defined MED Mesh - virtual + //! Read number of MED FIELDS in the MED Mesh + virtual TInt - GetNbFields(TErr* theErr = NULL) = 0; - - //! Read number of components for the defined MED FIELD by its order number + GetNbFields(TErr* theErr = NULL); + + //! Read number of components for the MED FIELD by its order number virtual TInt GetNbComp(TInt theFieldId, - TErr* theErr = NULL) = 0; - - //! Read MEDWrapper MED FIELD representation by its order number - virtual + TErr* theErr = NULL); + + //! Read MEDWrapper MED FIELD representation from the MED file by its order number + virtual void - GetFieldInfo(TInt theFieldId, + GetFieldInfo(TInt theFieldId, TFieldInfo& theInfo, - TErr* theErr = NULL) = 0; + TErr* theErr = NULL); - //! Write MEDWrapper MED FIELD representation into defined MED file - virtual + //! Write MEDWrapper MED FIELD representation into the MED file + virtual void SetFieldInfo(const TFieldInfo& theInfo, - TErr* theErr = NULL) = 0; - - //! Creates a MEDWrapper MED FIELD representation - virtual + TErr* theErr = NULL); + + void + SetFieldInfo(const MED::TFieldInfo& theInfo, + EModeAcces theMode, + TErr* theErr = NULL); + + //! Create a MEDWrapper MED FIELD representation + virtual PFieldInfo - CrFieldInfo(const PMeshInfo& theMeshInfo, + CrFieldInfo(const PMeshInfo& theMeshInfo, TInt theNbComp = 0, ETypeChamp theType = eFLOAT64, const std::string& theValue = "", EBooleen theIsLocal = eVRAI, - TInt theNbRef = 1) = 0; + TInt theNbRef = 1); - //! A copy-constructor for the MEDWrapper MED FIELD representation - virtual + //! Copy constructor for the MEDWrapper MED FIELD representation + virtual PFieldInfo CrFieldInfo(const PMeshInfo& theMeshInfo, - const PFieldInfo& theInfo) = 0; - - //! Read a MEDWrapper MED FIELD representation from defined MED file + const PFieldInfo& theInfo); + + //! Get a MEDWrapper MED FIELD representation from the MED file PFieldInfo - GetPFieldInfo(const PMeshInfo& theMeshInfo, + GetPFieldInfo(const PMeshInfo& theMeshInfo, TInt theId, TErr* theErr = NULL); - //---------------------------------------------------------------------------- - //! Read number of MED GAUSS in defined MED Mesh - /*! This feature is support only for version of 2.2 and higher */ - virtual + //! Read number of MED GAUSS in the MED Mesh + virtual TInt - GetNbGauss(TErr* theErr = NULL) - { - return TInt(); - } + GetNbGauss(TErr* theErr = NULL); - //! Read brief MED GAUSS information by its order number from defined MED Mesh - /*! This feature is support only for version of 2.2 and higher */ - virtual + //! Read brief MED GAUSS information by its order number from the MED file + virtual TGaussInfo::TInfo - GetGaussPreInfo(TInt theId, - TErr* theErr = NULL) - { - return TGaussInfo::TInfo( TGaussInfo::TKey(ePOINT1,""),0 ); - } - - //! Read a MEDWrapper MED GAUSS representation by its order number from defined MED file - /*! This feature is support only for version of 2.2 and higher */ - virtual + GetGaussPreInfo(TInt theId, + TErr* theErr = NULL); + + //! Read a MEDWrapper MED GAUSS representation by its order number from the MED file + virtual void - GetGaussInfo(TInt theId, + GetGaussInfo(TInt theId, TGaussInfo& theInfo, - TErr* theErr = NULL) - {} + TErr* theErr = NULL); - //! Creates a MEDWrapper MED GAUSS representation - /*! This feature is support only for version of 2.2 and higher */ + //! Create a MEDWrapper MED GAUSS representation virtual PGaussInfo CrGaussInfo(const TGaussInfo::TInfo& theInfo, - EModeSwitch theMode = eFULL_INTERLACE) = 0; + EModeSwitch theMode = eFULL_INTERLACE); - //---------------------------------------------------------------------------- - //! Read number of MED TIMESTAMPS in defined MED Mesh + //! Read number of MED TIMESTAMPS in the MED Mesh /*! - By the way some additional information can be obtained: - - to what MED ENTITY the MED TIMESTAMP conntected to; - - on what geometrical types the MED TIMESTAMP defined to. + In addition, the following information can be obtained: + - what MED ENTITY the MED TIMESTAMP is connected to; + - what geometrical types the MED TIMESTAMP is defined on. */ - virtual + virtual TInt - GetNbTimeStamps(const TFieldInfo& theInfo, + GetNbTimeStamps(const TFieldInfo& theInfo, const TEntityInfo& theEntityInfo, EEntiteMaillage& theEntity, TGeom2Size& theGeom2Size, - TErr* theErr = NULL) = 0; - - //! Read MEDWrapper MED TIMESTAMP representation by its order number - virtual + TErr* theErr = NULL); + + //! Read MEDWrapper MED TIMESTAMP representation by its order number from the MED file + virtual void - GetTimeStampInfo(TInt theTimeStampId, + GetTimeStampInfo(TInt theTimeStampId, TTimeStampInfo& theInfo, - TErr* theErr = NULL) = 0; + TErr* theErr = NULL); - //! Creates a MEDWrapper MED TIMESTAMP representation - virtual + //! Create a MEDWrapper MED TIMESTAMP representation + virtual PTimeStampInfo - CrTimeStampInfo(const PFieldInfo& theFieldInfo, + CrTimeStampInfo(const PFieldInfo& theFieldInfo, EEntiteMaillage theEntity, const TGeom2Size& theGeom2Size, const TGeom2NbGauss& theGeom2NbGauss = TGeom2NbGauss(), @@ -732,15 +718,15 @@ namespace MED TInt theNumOrd = 0, TFloat theDt = 0, const std::string& theUnitDt = "", - const TGeom2Gauss& theGeom2Gauss = TGeom2Gauss()) = 0; + const TGeom2Gauss& theGeom2Gauss = TGeom2Gauss()); - //! A copy-constructor for the MEDWrapper MED TIMESTAMP representation - virtual - PTimeStampInfo + //! Copy constructor for the MEDWrapper MED TIMESTAMP representation + virtual + PTimeStampInfo CrTimeStampInfo(const PFieldInfo& theFieldInfo, - const PTimeStampInfo& theInfo) = 0; - - //! Read MEDWrapper MED TIMESTAMP representation by its order number + const PTimeStampInfo& theInfo); + + //! Get MEDWrapper MED TIMESTAMP representation from the MED file PTimeStampInfo GetPTimeStampInfo(const PFieldInfo& theFieldInfo, EEntiteMaillage theEntity, @@ -748,215 +734,218 @@ namespace MED TInt theId, TErr* theErr = NULL); - //---------------------------------------------------------------------------- - //! Read number of MED PROFILES in defined MED Mesh - virtual + //! Read number of MED PROFILES in the MED file + virtual TInt - GetNbProfiles(TErr* theErr = NULL) = 0; + GetNbProfiles(TErr* theErr = NULL); - //! Read brief MED PROFILE information by its order number from defined MED Mesh - virtual + //! Read brief MED PROFILE information by its order number from the MED file + virtual TProfileInfo::TInfo - GetProfilePreInfo(TInt theId, - TErr* theErr = NULL) = 0; + GetProfilePreInfo(TInt theId, + TErr* theErr = NULL); - //! Read a MEDWrapper MED PROFILE representation by its order number from defined MED file - virtual + //! Read a MEDWrapper MED PROFILE representation by its order number from the MED file + virtual void - GetProfileInfo(TInt theId, + GetProfileInfo(TInt theId, TProfileInfo& theInfo, - TErr* theErr = NULL) = 0; + TErr* theErr = NULL); - //! Creates a MEDWrapper MED PROFILE representation + //! Write a MEDWrapper MED PROFILE representation into the MED file virtual - PProfileInfo - CrProfileInfo(const TProfileInfo::TInfo& theInfo, - EModeProfil theMode = eCOMPACT) = 0; + void + SetProfileInfo(const TProfileInfo& theInfo, + TErr* theErr = NULL); - //! Write a MEDWrapper MED PROFILE representation - virtual void SetProfileInfo(const TProfileInfo& theInfo, - TErr* theErr = NULL) = 0; + EModeAcces theMode, + TErr* theErr = NULL); - //! Read a MEDWrapper MED PROFILE representation by its order number from defined MED file + //! Create a MEDWrapper MED PROFILE representation + virtual + PProfileInfo + CrProfileInfo(const TProfileInfo::TInfo& theInfo, + EModeProfil theMode = eCOMPACT); + + //! Get a MEDWrapper MED PROFILE representation from the MED file PProfileInfo GetPProfileInfo(TInt theId, EModeProfil theMode = eCOMPACT, TErr* theErr = NULL); - //---------------------------------------------------------------------------- - //! Read the values for MEDWrapper MED TIEMSTAMP from defined MED file - virtual + //! Read the values for MEDWrapper MED TIMESTAMP from the MED file + virtual void GetTimeStampValue(const PTimeStampValueBase& theTimeStampValue, const TMKey2Profile& theMKey2Profile, const TKey2Gauss& theKey2Gauss, - TErr* theErr = NULL) = 0; - - //! Write the values for MEDWrapper MED TIEMSTAMP to defined MED file - virtual + TErr* theErr = NULL); + + //! Write the values for MEDWrapper MED TIMESTAMP into the MED file + virtual void SetTimeStampValue(const PTimeStampValueBase& theTimeStampValue, - TErr* theErr = NULL) = 0; - - //! Creates the values for MEDWrapper MED TIEMSTAMP representation + TErr* theErr = NULL); + + void + SetTimeStampValue(const PTimeStampValueBase& theTimeStampValue, + EModeAcces theMode, + TErr* theErr = NULL); + + //! Create the values for MEDWrapper MED TIMESTAMP representation virtual PTimeStampValueBase CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo, ETypeChamp theTypeChamp, const TGeom2Profile& theGeom2Profile = TGeom2Profile(), - EModeSwitch theMode = eFULL_INTERLACE) = 0; + EModeSwitch theMode = eFULL_INTERLACE); - //! Creates the values for MEDWrapper MED TIEMSTAMP representation + //! Create the values for MEDWrapper MED TIMESTAMP representation virtual PTimeStampValueBase CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo, const TGeom2Profile& theGeom2Profile = TGeom2Profile(), EModeSwitch theMode = eFULL_INTERLACE); - //! A copy-constructor for the values for MEDWrapper MED TIEMSTAMP representation - virtual + //! Copy constructor for the values for MEDWrapper MED TIMESTAMP representation + virtual PTimeStampValueBase CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo, const PTimeStampValueBase& theInfo, - ETypeChamp theTypeChamp) = 0; - - //! A copy-constructor for the values for MEDWrapper MED TIEMSTAMP representation - virtual + ETypeChamp theTypeChamp); + + //! Copy constructor for the values for MEDWrapper MED TIMESTAMP representation + virtual PTimeStampValueBase CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo, const PTimeStampValueBase& theInfo); - - //! Read the values for MEDWrapper MED TIEMSTAMP from defined MED file + + //! Get the values for MEDWrapper MED TIMESTAMP from the MED file PTimeStampValueBase GetPTimeStampValue(const PTimeStampInfo& theTimeStampInfo, const TMKey2Profile& theMKey2Profile, const TKey2Gauss& theKey2Gauss, TErr* theErr = NULL); - - //---------------------------------------------------------------------------- - // Backward compatibility declarations - //! Read the values for MEDWrapper MED TIEMSTAMP from defined MED file - virtual + + // + // Backward compatibility declarations + // + + //! Read the values for MEDWrapper MED TIMESTAMP from the MED file + virtual void GetTimeStampVal(const PTimeStampVal& theVal, const TMKey2Profile& theMKey2Profile, const TKey2Gauss& theKey2Gauss, TErr* theErr = NULL); - - //! Write the values for MEDWrapper MED TIEMSTAMP to defined MED file - virtual + + //! Write the values for MEDWrapper MED TIMESTAMP into the MED file + virtual void SetTimeStamp(const PTimeStampVal& theVal, TErr* theErr = NULL); - - //! Creates the values for MEDWrapper MED TIEMSTAMP representation + + //! Create the values for MEDWrapper MED TIMESTAMP representation virtual PTimeStampVal CrTimeStampVal(const PTimeStampInfo& theTimeStampInfo, const TGeom2Profile& theGeom2Profile = TGeom2Profile(), EModeSwitch theMode = eFULL_INTERLACE); - //! A copy-constructor for the values for MEDWrapper MED TIEMSTAMP representation - virtual + //! Copy constructor for the values for MEDWrapper MED TIMESTAMP representation + virtual PTimeStampVal CrTimeStampVal(const PTimeStampInfo& theTimeStampInfo, const PTimeStampVal& theInfo); - - //! Read the values for MEDWrapper MED TIEMSTAMP from defined MED file + + //! Get the values for MEDWrapper MED TIMESTAMP from the MED file PTimeStampVal GetPTimeStampVal(const PTimeStampInfo& theTimeStampInfo, const TMKey2Profile& theMKey2Profile, const TKey2Gauss& theKey2Gauss, TErr* theErr = NULL); - //---------------------------------------------------------------------------- - //! Read a MEDWrapper MED Grille representation from defined MED file - /*! This feature is support only for version of 2.2 and higher */ + //! Read a MEDWrapper MED Grille representation from the MED file PGrilleInfo GetPGrilleInfo(const PMeshInfo& theMeshInfo); - //! Read a MEDWrapper MED Grille representation from defined MED file - /*! This feature is support only for version of 2.2 and higher */ + //! Read a MEDWrapper MED Grille representation from the MED file PGrilleInfo GetPGrilleInfo(const PMeshInfo& theMeshInfo, const PGrilleInfo& theInfo); - //! Read a MEDWrapper MED Grille representation from defined MED file - /*! This feature is support only for version of 2.2 and higher */ + //! Read a MEDWrapper MED Grille representation from the MED file virtual void GetGrilleInfo(TGrilleInfo& theInfo, - TErr* theErr = NULL) - {} + TErr* theErr = NULL); - //! Write the MEDWrapper MED Grille representation into defined MED file - /*! This feature is support only for version of 2.2 and higher */ - virtual + //! Write the MEDWrapper MED Grille representation into the MED file + virtual void SetGrilleInfo(const TGrilleInfo& theInfo, - TErr* theErr = NULL) - {} + TErr* theErr = NULL); + + void + SetGrilleInfo(const MED::TGrilleInfo& theGrilleInfo, + EModeAcces theMode, + TErr* theErr = NULL); - /*! This feature is support only for version of 2.2 and higher */ + //! Create the MEDWrapper MED Grille representation virtual PGrilleInfo CrGrilleInfo(const PMeshInfo& theMeshInfo, - const PGrilleInfo& theGrilleInfo) - { - return PGrilleInfo(); - } + const PGrilleInfo& theGrilleInfo); - /*! This feature is support only for version of 2.2 and higher */ + //! Create the MEDWrapper MED Grille representation virtual PGrilleInfo - CrGrilleInfo(const PMeshInfo& theMeshInfo) - { - return PGrilleInfo(); - } - - /*! This feature is support only for version of 2.2 and higher */ + CrGrilleInfo(const PMeshInfo& theMeshInfo); + + //! Create the MEDWrapper MED Grille representation virtual PGrilleInfo CrGrilleInfo(const PMeshInfo& theMeshInfo, - const EGrilleType& type) - { - return PGrilleInfo(); - } - - /*! This feature is support only for version of 2.2 and higher */ + const EGrilleType& type); + + //! Create the MEDWrapper MED Grille representation virtual PGrilleInfo CrGrilleInfo(const PMeshInfo& theMeshInfo, const EGrilleType& type, - const TInt& nbNodes) - { - return PGrilleInfo(); - } + const TInt& nbNodes); - /*! This feature is support only for version of 2.2 and higher */ + //! Create the MEDWrapper MED Grille representation virtual PGrilleInfo CrGrilleInfo(const PMeshInfo& theMeshInfo, const EGrilleType& type, - const MED::TIntVector& nbNodeVec) - { - return PGrilleInfo(); - } + const MED::TIntVector& nbNodeVec); - /*! This feature is support only for version of 2.2 and higher */ + //! Get a MEDWrapper MED Grille type virtual void GetGrilleType(const TMeshInfo& theMeshInfo, EGrilleType& type, - TErr* theErr = NULL) - { - } + TErr* theErr = NULL); + + //! Get a MEDWrapper MED Grille structure + void + GetGrilleStruct(const MED::TMeshInfo& theMeshInfo, + TIntVector& theStruct, + TErr* theErr = NULL); + + protected: + PFile myFile; }; //---------------------------------------------------------------------------- - //! This class provide thread-safety for MEDWrapper interaction + typedef SharedPtr PWrapper; + + //---------------------------------------------------------------------------- + //! This class provides thread-safety for MEDWrapper interaction class MEDWRAPPER_EXPORT TLockProxy { TLockProxy& operator=(const TLockProxy& ); @@ -964,15 +953,14 @@ namespace MED public: TLockProxy(TWrapper* theWrapper); - ~TLockProxy(); - TWrapper * operator-> () const; + TWrapper* operator->() const; }; //---------------------------------------------------------------------------- - //! To specialize the SharedPtr for TWrapper - template<> + //! Specialization of SharedPtr for TWrapper + template<> class MEDWRAPPER_EXPORT SharedPtr: public boost::shared_ptr { public: @@ -983,57 +971,57 @@ namespace MED {} template - explicit SharedPtr(Y * p): - boost::shared_ptr(p) + explicit SharedPtr(Y* p): + boost::shared_ptr(p) {} template - SharedPtr(SharedPtr const & r): + SharedPtr(const SharedPtr& r): boost::shared_ptr(boost::dynamic_pointer_cast(r)) {} template - SharedPtr& - operator=(SharedPtr const & r) + SharedPtr& + operator=(const SharedPtr& r) { SharedPtr(r).swap(*this); return *this; } - template - SharedPtr& - operator()(Y * p) // Y must be complete + template + SharedPtr& + operator()(Y* p) // Y must be complete { return operator=(SharedPtr(p)); } - template - SharedPtr& - operator()(SharedPtr const & r) // Y must be complete + template + SharedPtr& + operator()(const SharedPtr& r) // Y must be complete { return operator=(SharedPtr(r)); } - TLockProxy operator-> () const // never throws + TLockProxy + operator->() const // never throws { return TLockProxy(this->get()); } - + protected: - operator const TWrapper& () const; + operator const TWrapper&() const; - operator TWrapper& (); + operator TWrapper&(); - TWrapper& operator* () const; + TWrapper& + operator*() const; - TWrapper * get() const // never throws + TWrapper* + get() const // never throws { return boost::shared_ptr::get(); } }; - - //---------------------------------------------------------------------------- - typedef SharedPtr PWrapper; } #endif // MED_Wrapper_HeaderFile diff --git a/src/SMESHGUI/SMESHGUI_FileInfoDlg.cxx b/src/SMESHGUI/SMESHGUI_FileInfoDlg.cxx index 4cb1bb4b1..b7f1b0dde 100644 --- a/src/SMESHGUI/SMESHGUI_FileInfoDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_FileInfoDlg.cxx @@ -23,8 +23,6 @@ // #include "SMESHGUI_FileInfoDlg.h" -#include "MED_Common.hxx" - #include #include #include -- 2.30.2