]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
*** empty log message *** V6_4_0a1
authorageay <ageay>
Tue, 25 Oct 2011 14:22:19 +0000 (14:22 +0000)
committerageay <ageay>
Tue, 25 Oct 2011 14:22:19 +0000 (14:22 +0000)
src/MEDCoupling/MEDCouplingMemArray.cxx
src/MEDCoupling/MEDCouplingMemArray.hxx
src/MEDCoupling/MEDCouplingUMesh.cxx
src/MEDCoupling/MEDCouplingUMesh.hxx
src/MEDLoader/MEDFileMesh.cxx
src/MEDLoader/MEDFileMesh.hxx
src/MEDLoader/MEDFileMeshLL.cxx
src/MEDLoader/MEDFileMeshLL.hxx
src/MEDLoader/Swig/MEDLoader.i
src/MEDLoader/Swig/MEDLoaderTest3.py

index 9f842957bf80b6b8c2538cf5cf0215f3236a330f..1addb5ea2cdca7066bd0022c5ebd578a72b6d0bd 100644 (file)
@@ -3265,6 +3265,31 @@ DataArrayInt *DataArrayInt::getIdsNotEqual(int val) const throw(INTERP_KERNEL::E
   return ret;
 }
 
+/*!
+ * This method expects that 'this' is allocated. If not an exception will be thrown.
+ * This method expect that the number of components is exactly equal to 1. If not an exception will be thrown.
+ * For each element in 'this' equal to 'oldValue' will take the value 'newValue'.
+ * @return number of elements impacted by the modification.
+ */
+int DataArrayInt::changeValue(int oldValue, int newValue) throw(INTERP_KERNEL::Exception)
+{
+  if(getNumberOfComponents()!=1)
+    throw INTERP_KERNEL::Exception("DataArrayInt::changeValue : the array must have only one component, you can call 'rearrange' method before !");
+  checkAllocated();
+  int *start=getPointer();
+  int *end=start+getNbOfElems();
+  int ret=0;
+  for(int *val=start;val!=end;val++)
+    {
+      if(*val==oldValue)
+        {
+          *val=newValue;
+          ret++;
+        }
+    }
+  return ret;
+}
+
 DataArrayInt *DataArrayInt::getIdsEqualList(const std::vector<int>& vals) const throw(INTERP_KERNEL::Exception)
 {
   if(getNumberOfComponents()!=1)
index 55f3ab7f52de9c9919d9ec8822aa01d05c40fc64..7af85fbd8bc05f5d3a253c594fa16ca9a3908ff2 100644 (file)
@@ -366,6 +366,7 @@ namespace ParaMEDMEM
     MEDCOUPLING_EXPORT DataArrayInt *getIdsNotEqual(int val) const throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT DataArrayInt *getIdsEqualList(const std::vector<int>& vals) const throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT DataArrayInt *getIdsNotEqualList(const std::vector<int>& vals) const throw(INTERP_KERNEL::Exception);
+    MEDCOUPLING_EXPORT int changeValue(int oldValue, int newValue) throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT bool presenceOfValue(const std::vector<int>& vals) const throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT int getMaxValue(int& tupleId) const throw(INTERP_KERNEL::Exception);
     MEDCOUPLING_EXPORT int getMaxValueInArray() const throw(INTERP_KERNEL::Exception);
index a1229a17a68acafd1dc835ab04e4e84284b323ba..907ef66b3a808791e8e3ae20eabf1d3a7f17d48f 100644 (file)
@@ -4773,8 +4773,11 @@ std::string MEDCouplingUMesh::getVTKDataSetType() const throw(INTERP_KERNEL::Exc
   return std::string("UnstructuredGrid");
 }
 
+/// @cond INTERNAL
+
 MEDCouplingUMesh *MEDCouplingUMesh::Intersect2DMeshes(const MEDCouplingUMesh *m1, const MEDCouplingUMesh *m2, double eps, DataArrayInt *&cellNb1, DataArrayInt *&cellNb2) throw(INTERP_KERNEL::Exception)
 {
+  throw INTERP_KERNEL::Exception("MEDCouplingUMesh::Intersect2DMeshes : functionnality not finished yet ! Will come soon !");
   std::vector< std::vector<int> > intersectEdge1, subDiv2;
   MEDCouplingUMesh *m1Desc=0,*m2Desc=0;
   DataArrayInt *desc1=0,*descIndx1=0,*revDesc1=0,*revDescIndx1=0,*desc2=0,*descIndx2=0,*revDesc2=0,*revDescIndx2=0;
@@ -4814,6 +4817,8 @@ MEDCouplingUMesh *MEDCouplingUMesh::Intersect2DMeshes(const MEDCouplingUMesh *m1
   return 0;
 }
 
+/// @endcond
+
 void MEDCouplingUMesh::BuildIntersecting2DCellsFromEdges(double eps, const MEDCouplingUMesh *m1, const std::vector<bool>& b1, const int *desc1, const int *descIndx1, const std::vector<std::vector<int> >& intesctEdges1,
                                                          const MEDCouplingUMesh *m2, const std::vector<bool>& b2, const int *desc2, const int *descIndx2, const std::vector<std::vector<int> >& intesctEdges2,
                                                          const std::vector<double>& addCoords,
index c85d8e9ba4224d79f773a91727e9c8d6b8ebebc0..d7b23a44a21dd7a98b48d90f8495804b1791dbae 100644 (file)
@@ -181,7 +181,9 @@ namespace ParaMEDMEM
     MEDCOUPLING_EXPORT static bool IsPolygonWellOriented(bool isQuadratic, const double *vec, const int *begin, const int *end, const double *coords);
     MEDCOUPLING_EXPORT static bool IsPolyhedronWellOriented(const int *begin, const int *end, const double *coords);
     MEDCOUPLING_EXPORT static void TryToCorrectPolyhedronOrientation(int *begin, int *end, const double *coords) throw(INTERP_KERNEL::Exception);
+/// @cond INTERNAL
     MEDCOUPLING_EXPORT static MEDCouplingUMesh *Intersect2DMeshes(const MEDCouplingUMesh *m1, const MEDCouplingUMesh *m2, double eps, DataArrayInt *&cellNb1, DataArrayInt *&cellNb2) throw(INTERP_KERNEL::Exception);
+/// @endcond
   private:
     MEDCouplingUMesh();
     MEDCouplingUMesh(const MEDCouplingUMesh& other, bool deepCpy);
index 5dcfcd00d6efac4d9c183c890e623a59bc447c59..42287be6cc952ab1da1b5d32ce427f9bbbc90cae 100644 (file)
@@ -387,6 +387,20 @@ void MEDFileMesh::changeGroupName(const char *oldName, const char *newName) thro
   _groups[newName]=cpy;
 }
 
+void MEDFileMesh::changeFamilyId(int oldId, int newId) throw(INTERP_KERNEL::Exception)
+{
+  changeFamilyIdArr(oldId,newId);
+  std::map<std::string,int> fam2;
+  for(std::map<std::string,int>::const_iterator it=_families.begin();it!=_families.end();it++)
+    {
+      if((*it).second==oldId)
+        fam2[(*it).first]=newId;
+      else
+        fam2[(*it).first]=(*it).second;
+    }
+  _families=fam2;
+}
+
 void MEDFileMesh::changeFamilyName(const char *oldName, const char *newName) throw(INTERP_KERNEL::Exception)
 {
   std::string oname(oldName);
@@ -1643,6 +1657,21 @@ void MEDFileUMesh::synchronizeTinyInfoOnLeaves() const
       (*it)->synchronizeTinyInfo(*this);
 }
 
+void MEDFileUMesh::changeFamilyIdArr(int oldId, int newId) throw(INTERP_KERNEL::Exception)
+{
+  DataArrayInt *arr=_fam_coords;
+  if(arr)
+    arr->changeValue(oldId,newId);
+  for(std::vector< MEDCouplingAutoRefCountObjectPtr<MEDFileUMeshSplitL1> >::iterator it=_ms.begin();it!=_ms.end();it++)
+    {
+      MEDFileUMeshSplitL1 *sp=(*it);
+      if(sp)
+        {
+          sp->changeFamilyIdArr(oldId,newId);
+        }
+    }
+}
+
 void MEDFileUMesh::computeRevNum() const
 {
   if((const DataArrayInt *)_num_coords)
@@ -1826,8 +1855,6 @@ catch(INTERP_KERNEL::Exception& e)
     throw e;
   }
 
-
-
 void MEDFileCMesh::loadCMeshFromFile(med_idt fid, const char *mName, int dt, int it) throw(INTERP_KERNEL::Exception)
 {
   MEDFileCMeshL2 loaderl2;
@@ -1901,6 +1928,16 @@ void MEDFileCMesh::loadCMeshFromFile(med_idt fid, const char *mName, int dt, int
     }
 }
 
+void MEDFileCMesh::changeFamilyIdArr(int oldId, int newId) throw(INTERP_KERNEL::Exception)
+{
+  DataArrayInt *arr=_fam_nodes;
+  if(arr)
+    arr->changeValue(oldId,newId);
+  arr=_fam_cells;
+  if(arr)
+    arr->changeValue(oldId,newId);
+}
+
 const MEDCouplingCMesh *MEDFileCMesh::getMesh() const
 {
   synchronizeTinyInfoOnLeaves();
index f90d0bd293ce63696543fea551b198cece6ca1d9..013fcb2b7314a018560fe57c44041e70ea256315 100644 (file)
@@ -83,6 +83,7 @@ namespace ParaMEDMEM
     void removeFamily(const char *name) throw(INTERP_KERNEL::Exception);
     void changeGroupName(const char *oldName, const char *newName) throw(INTERP_KERNEL::Exception);
     void changeFamilyName(const char *oldName, const char *newName) throw(INTERP_KERNEL::Exception);
+    void changeFamilyId(int oldId, int newId) throw(INTERP_KERNEL::Exception);
     int getFamilyId(const char *name) const throw(INTERP_KERNEL::Exception);
     int getMaxFamilyId() const throw(INTERP_KERNEL::Exception);
     std::vector<int> getFamiliesIds(const std::vector<std::string>& famNames) const throw(INTERP_KERNEL::Exception);
@@ -111,6 +112,7 @@ namespace ParaMEDMEM
     virtual void synchronizeTinyInfoOnLeaves() const = 0;
     void getFamilyRepr(std::ostream& oss) const;
     virtual void appendFamilyEntries(const std::set<int>& famIds, const std::vector< std::vector<int> >& fidsOfGrps, const std::vector<std::string>& grpNames);
+    virtual void changeFamilyIdArr(int oldId, int newId) throw(INTERP_KERNEL::Exception) = 0;
     static void TranslateFamilyIds(int offset, DataArrayInt *famArr, std::vector< std::vector<int> >& famIdsPerGrp);
   protected:
     int _order;
@@ -192,6 +194,7 @@ namespace ParaMEDMEM
     DataArrayDouble *checkMultiMesh(const std::vector<const MEDCouplingUMesh *>& ms) const throw(INTERP_KERNEL::Exception);
     void computeRevNum() const;
     void synchronizeTinyInfoOnLeaves() const;
+    void changeFamilyIdArr(int oldId, int newId) throw(INTERP_KERNEL::Exception);
   private:
     std::vector< MEDCouplingAutoRefCountObjectPtr<MEDFileUMeshSplitL1> > _ms;
     MEDCouplingAutoRefCountObjectPtr<DataArrayDouble> _coords;
@@ -230,6 +233,7 @@ namespace ParaMEDMEM
     void synchronizeTinyInfoOnLeaves() const;
     MEDFileCMesh(med_idt fid, const char *mName, int dt, int it) throw(INTERP_KERNEL::Exception);
     void loadCMeshFromFile(med_idt fid, const char *mName, int dt, int it) throw(INTERP_KERNEL::Exception);
+    void changeFamilyIdArr(int oldId, int newId) throw(INTERP_KERNEL::Exception);
   private:
     MEDCouplingAutoRefCountObjectPtr<MEDCouplingCMesh> _cmesh;
     MEDCouplingAutoRefCountObjectPtr<DataArrayInt> _fam_nodes;
index 73f735047c0ddc0ea176798b706837490f92abeb..6b9992bc9aa77dcbbfeafdb73a7115d6248acf73 100644 (file)
@@ -692,6 +692,13 @@ void MEDFileUMeshSplitL1::write(med_idt fid, const char *mName, int mdim) const
     }
 }
 
+void MEDFileUMeshSplitL1::changeFamilyIdArr(int oldId, int newId) throw(INTERP_KERNEL::Exception)
+{
+  DataArrayInt *arr=_fam;
+  if(arr)
+    arr->changeValue(oldId,newId);
+}
+
 void MEDFileUMeshSplitL1::setFamilyArr(DataArrayInt *famArr)
 {
   famArr->incrRef();
index 3b1cf1eedd9f76ddfad4fae0f4dc1bf96ec30911..6c20a72f1b6cae370f223c816cb4bf79ad90b57b 100644 (file)
@@ -143,6 +143,7 @@ namespace ParaMEDMEM
     //
     void setFamilyArr(DataArrayInt *famArr);
     void setRenumArr(DataArrayInt *renumArr);
+    void changeFamilyIdArr(int oldId, int newId) throw(INTERP_KERNEL::Exception);
     //
     static void ClearNonDiscrAttributes(const MEDCouplingMesh *tmp);
     static std::vector<int> GetNewFamiliesNumber(int nb, const std::map<std::string,int>& families);
index b14c4b849d0d3c6bb068a7e35cf0b727d6b1b1a6..bc8b4323fad0f6f6ab662a54c98bd46ea00a2713 100644 (file)
@@ -314,6 +314,7 @@ namespace ParaMEDMEM
     void removeFamily(const char *name) throw(INTERP_KERNEL::Exception);
     void changeGroupName(const char *oldName, const char *newName) throw(INTERP_KERNEL::Exception);
     void changeFamilyName(const char *oldName, const char *newName) throw(INTERP_KERNEL::Exception);
+    void changeFamilyId(int oldId, int newId) throw(INTERP_KERNEL::Exception);
     void setFamilyInfo(const std::map<std::string,int>& info);
     void setGroupInfo(const std::map<std::string, std::vector<std::string> >&info);
     int getFamilyId(const char *name) const throw(INTERP_KERNEL::Exception);
index c135a8e8a6eb614d0450405b145157f0e41a442a..935ebe005ebd37484cfe15b39f107990c3b28bbf 100644 (file)
@@ -903,6 +903,13 @@ class MEDLoaderTest(unittest.TestCase):
         self.assertEqual(('Family_2', 'Family_4'),mm.getFamiliesOnGroup('g1'))
         self.assertEqual(('Family_5',),mm.getFamiliesOnGroup('g2'))
         self.assertEqual(('Family_4','Family_5',),mm.getFamiliesOnGroup('g3'))
+        mm.changeFamilyId(5,6)
+        g=mm.getGroupArr(0,"g3")
+        self.assertTrue(g.isEqual(g3));
+        g=mm.getGroupArr(0,"g2")
+        self.assertTrue(g.isEqual(g2));
+        g=mm.getGroupArr(0,"g1")
+        self.assertTrue(g.isEqual(g1));
         pass
     pass