]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
Correction of bug concerning -1D mesh.
authorageay <ageay>
Fri, 19 Feb 2010 11:35:46 +0000 (11:35 +0000)
committerageay <ageay>
Fri, 19 Feb 2010 11:35:46 +0000 (11:35 +0000)
src/MEDCoupling/MEDCouplingUMesh.cxx
src/MEDCoupling/MEDCouplingUMesh.hxx
src/MEDCoupling/MEDCouplingUMeshDesc.cxx
src/MEDCoupling/MEDCouplingUMeshDesc.hxx

index ab3ca95c1b845d64ef98524947422c9703acef44..984704e1ab1f9acd48cf078c21b605308d98aaa8 100644 (file)
@@ -433,10 +433,22 @@ DataArrayInt *MEDCouplingUMesh::mergeNodes(double precision, bool& areNodesMerge
 
 MEDCouplingPointSet *MEDCouplingUMesh::buildPartOfMySelf(const int *start, const int *end, bool keepCoords) const
 {
-  MEDCouplingUMesh *ret=buildPartOfMySelfKeepCoords(start,end);
-  if(!keepCoords)
-    ret->zipCoords();
-  return ret;
+  if(getMeshDimension()!=-1)
+    {
+      MEDCouplingUMesh *ret=buildPartOfMySelfKeepCoords(start,end);
+      if(!keepCoords)
+        ret->zipCoords();
+      return ret;
+    }
+  else
+    {
+      if(end-start!=1)
+        throw INTERP_KERNEL::Exception("-1D mesh has only one cell !");
+      if(start[0]!=0)
+        throw INTERP_KERNEL::Exception("-1D mesh has only one cell : 0 !");
+      incrRef();
+      return (MEDCouplingUMesh *)this;
+    }
 }
 
 /*!
@@ -543,6 +555,11 @@ void MEDCouplingUMesh::renumberNodes(const int *newNodeNumbers, int newNbOfNodes
  */
 void MEDCouplingUMesh::giveElemsInBoundingBox(const double *bbox, double eps, std::vector<int>& elems)
 {
+  if(getMeshDimension()==-1)
+    {
+      elems.push_back(0);
+      return;
+    }
   int dim=getSpaceDimension();
   double* elem_bb=new double[2*dim];
   const int* conn      = getNodalConnectivity()->getConstPointer();
@@ -686,6 +703,11 @@ void MEDCouplingUMesh::getTinySerializationInformation(std::vector<int>& tinyInf
     tinyInfo.push_back(-1);
 }
 
+bool MEDCouplingUMesh::isEmptyMesh(const std::vector<int>& tinyInfo) const
+{
+  return tinyInfo[4]<=0;
+}
+
 /*!
  * @param tinyInfo must be equal to the result given by getTinySerializationInformation method.
  */
index 7743d2e9991997a51aea6730850db5a9808e883f..e793c931c8b2d35c1fad1fbddf745e3003234c4e 100644 (file)
@@ -52,6 +52,7 @@ namespace ParaMEDMEM
     int getMeshLength() const;
     //! size of returned tinyInfo must be always the same.
     void getTinySerializationInformation(std::vector<int>& tinyInfo, std::vector<std::string>& littleStrings) const;
+    bool isEmptyMesh(const std::vector<int>& tinyInfo) const;
     void resizeForUnserialization(const std::vector<int>& tinyInfo, DataArrayInt *a1, DataArrayDouble *a2, std::vector<std::string>& littleStrings);
     void serialize(DataArrayInt *&a1, DataArrayDouble *&a2) const;
     void unserialization(const std::vector<int>& tinyInfo, DataArrayInt *a1, DataArrayDouble *a2,
index 35e6ad11c31acfc9d54e26d51784b1c852ab6811..1dba15e9a1e05dc03ff1bf8c9267a60d98c83c41 100644 (file)
@@ -119,6 +119,11 @@ void MEDCouplingUMeshDesc::getTinySerializationInformation(std::vector<int>& tin
   tinyInfo.push_back(getFaceMeshLength());
 }
 
+bool MEDCouplingUMeshDesc::isEmptyMesh(const std::vector<int>& tinyInfo) const
+{
+  return tinyInfo[5]<=0;
+}
+
 void MEDCouplingUMeshDesc::resizeForUnserialization(const std::vector<int>& tinyInfo, DataArrayInt *a1, DataArrayDouble *a2, std::vector<std::string>& littleStrings)
 {
   std::vector<int> tinyInfoTmp(tinyInfo.begin()+1,tinyInfo.end());
index 14589cdef55737b962cb9a63143af52d3c3f13a9..b6ef8aa0c1d5afec32bec6c7b0ef5a3f6a3dba82 100644 (file)
@@ -43,6 +43,7 @@ namespace ParaMEDMEM
     void setConnectivity(DataArrayInt *descConn, DataArrayInt *descConnIndex, DataArrayInt *nodalFaceConn, DataArrayInt *nodalFaceConnIndx);
     //tools to overload
     void getTinySerializationInformation(std::vector<int>& tinyInfo, std::vector<std::string>& littleStrings) const;
+    bool isEmptyMesh(const std::vector<int>& tinyInfo) const;
     void resizeForUnserialization(const std::vector<int>& tinyInfo, DataArrayInt *a1, DataArrayDouble *a2, std::vector<std::string>& littleStrings);
     void serialize(DataArrayInt *&a1, DataArrayDouble *&a2) const;
     void unserialization(const std::vector<int>& tinyInfo, DataArrayInt *a1, DataArrayDouble *a2,