]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
Duplication of nodes.
authorageay <ageay>
Thu, 14 Jun 2012 13:52:25 +0000 (13:52 +0000)
committerageay <ageay>
Thu, 14 Jun 2012 13:52:25 +0000 (13:52 +0000)
src/MEDCoupling/MEDCouplingPointSet.cxx
src/MEDCoupling/MEDCouplingPointSet.hxx

index 597f71a006b88e1d234423ebef29bbf4e64c5662..55e61ee1e161d54ad5be3c232a1e7073af7a03fd 100644 (file)
@@ -457,6 +457,22 @@ void MEDCouplingPointSet::tryToShareSameCoords(const MEDCouplingPointSet& other,
   setCoords(other._coords);
 }
 
+/*!
+ * This method duplicates the nodes whose ids are in [\b nodeIdsToDuplicateBg, \b nodeIdsToDuplicateEnd) and put the result of their duplication at the end
+ * of existing node ids.
+ * 
+ * \param [in] nodeIdsToDuplicateBg begin of node ids (included) to be duplicated in connectivity only
+ * \param [in] nodeIdsToDuplicateEnd end of node ids (excluded) to be duplicated in connectivity only
+ */
+void MEDCouplingPointSet::duplicateNodesInCoords(const int *nodeIdsToDuplicateBg, const int *nodeIdsToDuplicateEnd) throw(INTERP_KERNEL::Exception)
+{
+  if(!_coords)
+    throw INTERP_KERNEL::Exception("MEDCouplingPointSet::duplicateNodesInCoords : no coords set !");
+  MEDCouplingAutoRefCountObjectPtr<DataArrayDouble> newCoords=_coords->selectByTupleIdSafe(nodeIdsToDuplicateBg,nodeIdsToDuplicateEnd);
+  MEDCouplingAutoRefCountObjectPtr<DataArrayDouble> newCoords2=DataArrayDouble::Aggregate(_coords,newCoords);
+  setCoords(newCoords2);
+}
+
 /*!
  * This method is expecting to be called for meshes so that getSpaceDimension() returns 3.
  * This method returns in 'nodes' output all the nodes that are at a distance lower than epsilon from plane
index 09b6ef6748f048d64765153cc892b0d25475b091..8f7d789937f629c72a80bc92cb92ba9db0d36fe5 100644 (file)
@@ -81,6 +81,7 @@ namespace ParaMEDMEM
     void scale(const double *point, double factor);
     void changeSpaceDimension(int newSpaceDim, double dftVal=0.) throw(INTERP_KERNEL::Exception);
     void tryToShareSameCoords(const MEDCouplingPointSet& other, double epsilon) throw(INTERP_KERNEL::Exception);
+    void duplicateNodesInCoords(const int *nodeIdsToDuplicateBg, const int *nodeIdsToDuplicateEnd) throw(INTERP_KERNEL::Exception);
     virtual void tryToShareSameCoordsPermute(const MEDCouplingPointSet& other, double epsilon) throw(INTERP_KERNEL::Exception) = 0;
     void findNodesOnPlane(const double *pt, const double *vec, double eps, std::vector<int>& nodes) const throw(INTERP_KERNEL::Exception);
     void findNodesOnLine(const double *pt, const double *vec, double eps, std::vector<int>& nodes) const throw(INTERP_KERNEL::Exception);
@@ -94,7 +95,7 @@ namespace ParaMEDMEM
     virtual MEDCouplingPointSet *buildPartOfMySelf(const int *start, const int *end, bool keepCoords=true) const = 0;
     virtual MEDCouplingPointSet *buildPartOfMySelfNode(const int *start, const int *end, bool fullyIn) const = 0;
     virtual MEDCouplingPointSet *buildFacePartOfMySelfNode(const int *start, const int *end, bool fullyIn) const = 0;
-    virtual void findBoundaryNodes(std::vector<int>& nodes) const = 0;
+    virtual DataArrayInt *findBoundaryNodes() const = 0;
     virtual MEDCouplingPointSet *buildBoundaryMesh(bool keepCoords) const = 0;
     virtual void renumberNodes(const int *newNodeNumbers, int newNbOfNodes);
     virtual void renumberNodes2(const int *newNodeNumbers, int newNbOfNodes);