Salome HOME
LOT7: fix compilation at med_int==int64
[modules/smesh.git] / src / DriverMED / DriverMED_W_SMESHDS_Mesh.cxx
index a1902daac8aafe9f4cfc43d9c83906a2e769242f..30f3ac4a31223b8caaadccd4bba229b0aee15e02 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2019  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
@@ -34,6 +34,7 @@
 #include "SMDS_MeshNode.hxx"
 #include "SMDS_SetIterator.hxx"
 #include "SMESHDS_Mesh.hxx"
+#include "MED_Common.hxx"
 
 #include <med.h>
 
@@ -61,12 +62,14 @@ DriverMED_W_SMESHDS_Mesh::DriverMED_W_SMESHDS_Mesh():
   myDoGroupOfBalls(false),
   myAutoDimension(false),
   myAddODOnVertices(false),
-  myDoAllInGroups(false)
+  myDoAllInGroups(false),
+  myVersion(-1),
+  myZTolerance(-1.)
 {}
 
-void DriverMED_W_SMESHDS_Mesh::SetFile(const std::string& theFileName, int theMinor)
+void DriverMED_W_SMESHDS_Mesh::SetFile(const std::string& theFileName, int theVersion)
 {
-  myMinor = theMinor;
+  myVersion = theVersion;
   Driver_SMESHDS_Mesh::SetFile(theFileName);
 }
 
@@ -74,7 +77,7 @@ void DriverMED_W_SMESHDS_Mesh::SetFile(const std::string& theFileName, int theMi
  * MED version is either the latest available, or with an inferior minor,
  * to ensure backward compatibility on writing med files.
  */
-string DriverMED_W_SMESHDS_Mesh::GetVersionString(int theVersion, int theNbDigits)
+string DriverMED_W_SMESHDS_Mesh::GetVersionString(int theMinor, int theNbDigits)
 {
   TInt majeur, mineur, release;
   majeur=MED_MAJOR_NUM;
@@ -82,12 +85,12 @@ string DriverMED_W_SMESHDS_Mesh::GetVersionString(int theVersion, int theNbDigit
   release=MED_RELEASE_NUM;
   TInt imposedMineur = mineur;
 
-  if (theVersion < 0)
+  if (theMinor < 0)
     imposedMineur = mineur;
-  else if (theVersion > MED_MINOR_NUM)
+  else if (theMinor > MED_MINOR_NUM)
     imposedMineur = mineur;
   else
-    imposedMineur = theVersion;
+    imposedMineur = theMinor;
 
   ostringstream name;
   if ( theNbDigits > 0 )
@@ -416,6 +419,8 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
         anIsXDimension = (aBounds[1] - aBounds[0]) + abs(aBounds[1]) + abs(aBounds[0]) > EPS;
         anIsYDimension = (aBounds[3] - aBounds[2]) + abs(aBounds[3]) + abs(aBounds[2]) > EPS;
         anIsZDimension = (aBounds[5] - aBounds[4]) + abs(aBounds[5]) + abs(aBounds[4]) > EPS;
+        if ( myZTolerance > 0 && anIsZDimension )
+          anIsZDimension = (aBounds[5] > myZTolerance || aBounds[4] < -myZTolerance );
         aSpaceDimension = Max( aMeshDimension, anIsXDimension + anIsYDimension + anIsZDimension );
         if ( !aSpaceDimension )
           aSpaceDimension = 3;
@@ -457,7 +462,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
       }
     }
 
-    MED::PWrapper myMed = CrWrapperW(myFile, myMinor);
+    MED::PWrapper myMed = CrWrapperW(myFile, myVersion);
     PMeshInfo aMeshInfo = myMed->CrMeshInfo(aMeshDimension,aSpaceDimension,aMeshName);
     //MESSAGE("Add - aMeshName : "<<aMeshName<<"; "<<aMeshInfo->GetName());
     myMed->SetMeshInfo(aMeshInfo);
@@ -549,6 +554,10 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
       for(TInt iCoord = 0; iCoord < aSpaceDimension; iCoord++){
         aTCoordSlice[iCoord] = aCoordHelperPtr->GetCoord(iCoord);
       }
+      if ( aSpaceDimension == 3 &&
+           -myZTolerance < aTCoordSlice[2] && aTCoordSlice[2] < myZTolerance )
+        aTCoordSlice[2] = 0.;
+
       // node number
       int aNodeID = aCoordHelperPtr->GetID();
       aNodeInfo->SetElemNum( iNode, aNodeID );