]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
[LAST backport] New functionality: computeCellCenterOfMassWithPrecision() abn/backport
authorabn <adrien.bruneton@cea.fr>
Mon, 18 Feb 2019 09:47:50 +0000 (10:47 +0100)
committerabn <adrien.bruneton@cea.fr>
Tue, 19 Mar 2019 08:40:19 +0000 (09:40 +0100)
Same job as getBarycenterAndOwner(), but sets quadratic precision
so that tolerance on arc of circle detection can be finely controlled.

src/MEDCoupling/MEDCouplingUMesh.cxx
src/MEDCoupling/MEDCouplingUMesh.hxx
src/MEDCoupling_Swig/MEDCouplingCommon.i

index 3219c45a284b1f2d0250a3b5cf1b83e6a719dbc3..455b154d6bc0510ce3a38121d25e53d125c901ce 100644 (file)
@@ -7751,6 +7751,7 @@ MEDCouplingMesh *MEDCouplingUMesh::mergeMyselfWith(const MEDCouplingMesh *other)
  *  \throw If the coordinates array is not set.
  *  \throw If the nodal connectivity of cells is not defined.
  *  \sa MEDCouplingUMesh::computeIsoBarycenterOfNodesPerCell
+ *  \sa MEDCouplingUMesh::computeCellCenterOfMassWithPrecision
  */
 DataArrayDouble *MEDCouplingUMesh::getBarycenterAndOwner() const
 {
@@ -7772,6 +7773,27 @@ DataArrayDouble *MEDCouplingUMesh::getBarycenterAndOwner() const
   return ret.retn();
 }
 
+
+/*!
+ * See getBarycenterAndOwner().
+ *  \param eps a precision for the detection of degenerated arc of circles.
+ *  \return DataArrayDouble * - a new instance of DataArrayDouble, of size \a
+ *          this->getNumberOfCells() tuples per \a this->getSpaceDimension()
+ *          components. The caller is to delete this array using decrRef() as it is
+ *          no more needed.
+ *  \throw If the coordinates array is not set.
+ *  \throw If the nodal connectivity of cells is not defined.
+ *  \sa MEDCouplingUMesh::computeIsoBarycenterOfNodesPerCell
+ *  \sa MEDCouplingUMesh::getBarycenterAndOwner
+ */
+DataArrayDouble *MEDCouplingUMesh::computeCellCenterOfMassWithPrecision(double eps) const
+{
+  INTERP_KERNEL::QuadraticPlanarPrecision prec(eps);
+  MEDCouplingAutoRefCountObjectPtr<DataArrayDouble> ret = getBarycenterAndOwner();
+  return ret.retn();
+}
+
+
 /*!
  * This method computes for each cell in \a this, the location of the iso barycenter of nodes constituting
  * the cell. Contrary to badly named MEDCouplingUMesh::getBarycenterAndOwner method that returns the center of inertia of the 
index ab2a711f1706e0cd0129a0b0d4d486cb43a4d477..14f64814a0eb7268c4fa4f524ec3c14d529ce43b 100644 (file)
@@ -224,6 +224,7 @@ namespace ParaMEDMEM
     //
     MEDCOUPLING_EXPORT MEDCouplingMesh *mergeMyselfWith(const MEDCouplingMesh *other) const;
     MEDCOUPLING_EXPORT DataArrayDouble *getBarycenterAndOwner() const;
+    MEDCOUPLING_EXPORT DataArrayDouble *computeCellCenterOfMassWithPrecision(double eps) const;
     MEDCOUPLING_EXPORT DataArrayDouble *computeIsoBarycenterOfNodesPerCell() const;
     MEDCOUPLING_EXPORT DataArrayDouble *getPartBarycenterAndOwner(const int *begin, const int *end) const;
     MEDCOUPLING_EXPORT DataArrayDouble *computePlaneEquationOf3DFaces() const;
index dd90193767dc37eab38c27ec9402491b23fabda0..615f2e6170eb916b8b5d9ada235b370a7dfc4672 100644 (file)
@@ -1818,6 +1818,7 @@ namespace ParaMEDMEM
     DataArrayDouble *getBoundingBoxForBBTree2DQuadratic(double arcDetEps=1e-12) const throw(INTERP_KERNEL::Exception);
     DataArrayDouble *getBoundingBoxForBBTree1DQuadratic(double arcDetEps=1e-12) const throw(INTERP_KERNEL::Exception);
     void changeOrientationOfCells() throw(INTERP_KERNEL::Exception);
+    DataArrayDouble *computeCellCenterOfMassWithPrecision(double eps) throw(INTERP_KERNEL::Exception);
     int split2DCells(const DataArrayInt *desc, const DataArrayInt *descI, const DataArrayInt *subNodesInSeg, const DataArrayInt *subNodesInSegI, const DataArrayInt *midOpt=0, const DataArrayInt *midOptI=0) throw(INTERP_KERNEL::Exception);
     static MEDCouplingUMesh *Build0DMeshFromCoords(DataArrayDouble *da) throw(INTERP_KERNEL::Exception);
     static MEDCouplingUMesh *MergeUMeshes(const MEDCouplingUMesh *mesh1, const MEDCouplingUMesh *mesh2) throw(INTERP_KERNEL::Exception);