]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
simplification of polyedrons.
authorageay <ageay>
Mon, 18 Jun 2012 10:35:46 +0000 (10:35 +0000)
committerageay <ageay>
Mon, 18 Jun 2012 10:35:46 +0000 (10:35 +0000)
src/MEDCoupling/MEDCouplingMemArray.cxx
src/MEDCoupling_Swig/MEDCoupling.i

index 933d542a0ce4f371ffb3ac04526bf843599cbc07..cce1ae037b742b4f05c78d8beb1287e232e354d1 100644 (file)
@@ -1538,6 +1538,29 @@ void DataArrayDouble::getMinMaxPerComponent(double *bounds) const throw(INTERP_K
     }
 }
 
+/*!
+ * This method recenter tuples in \b this in order to be centered at the origin to benefit about the advantages of maximal precision to be around the box
+ * around origin of 'radius' 1.
+ * 
+ * \param [in] eps absolute epsilon. under that value of delta between max and min no scale is performed.
+ */
+void DataArrayDouble::recenterForMaxPrecision(double eps) throw(INTERP_KERNEL::Exception)
+{
+  checkAllocated();
+  int dim=getNumberOfComponents();
+  std::vector<double> bounds(2*dim);
+  getMinMaxPerComponent(&bounds[0]);
+  for(int i=0;i<dim;i++)
+    {
+      double delta=bounds[2*i+1]-bounds[2*i];
+      double offset=(bounds[2*i]+bounds[2*i+1])/2.;
+      if(delta>eps)
+        applyLin(1./delta,-offset/delta,i);
+      else
+        applyLin(1.,-offset,i);
+    }
+}
+
 double DataArrayDouble::getMaxValue(int& tupleId) const throw(INTERP_KERNEL::Exception)
 {
   if(getNumberOfComponents()!=1)
index 33403f8e900cf85f529e01f8b504ef75d6c4d5db..e85f54a874b441828774d0d161c77a02b0a43332 100644 (file)
@@ -699,6 +699,7 @@ namespace ParaMEDMEM
       bool areCoordsEqual(const MEDCouplingPointSet& other, double prec) const throw(INTERP_KERNEL::Exception);
       void zipCoords() throw(INTERP_KERNEL::Exception);
       double getCaracteristicDimension() const throw(INTERP_KERNEL::Exception);
+      void recenterForMaxPrecision(double eps) const throw(INTERP_KERNEL::Exception);
       void changeSpaceDimension(int newSpaceDim, double dftVal=0.) throw(INTERP_KERNEL::Exception);
       void tryToShareSameCoords(const MEDCouplingPointSet& other, double epsilon) throw(INTERP_KERNEL::Exception);
       virtual void tryToShareSameCoordsPermute(const MEDCouplingPointSet& other, double epsilon) throw(INTERP_KERNEL::Exception) = 0;
@@ -1970,6 +1971,7 @@ namespace ParaMEDMEM
     void convertAllToPoly();
     void convertExtrudedPolyhedra() throw(INTERP_KERNEL::Exception);
     void unPolyze() throw(INTERP_KERNEL::Exception);
+    void simplifyPolyhedra(double eps) throw(INTERP_KERNEL::Exception);
     MEDCouplingUMesh *buildSpreadZonesWithPoly() const throw(INTERP_KERNEL::Exception);
     MEDCouplingUMesh *buildExtrudedMesh(const MEDCouplingUMesh *mesh1D, int policy) throw(INTERP_KERNEL::Exception);
   };