]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
bug mantis 20457
authorageay <ageay>
Fri, 2 Oct 2009 08:07:48 +0000 (08:07 +0000)
committerageay <ageay>
Fri, 2 Oct 2009 08:07:48 +0000 (08:07 +0000)
src/INTERP_KERNEL/VolSurfFormulae.hxx

index 7effb8eff760bd3dc16abcaa6731a0894b0aad5b..6e4a3d18ab106b608fa25ff4bd560c3ebc65dfb2 100644 (file)
@@ -373,9 +373,9 @@ namespace INTERP_KERNEL
                     + 2.0*(I + R + U + X + Y + Z) + AA ) / 27.0 ;
   }
 
-  // =========================
-  // Calculate Volume for Poly
-  // =========================
+  // =========================================================================================================================
+  // Calculate Volume for Generic Polyedron, even not convex one, WARNING !!! The polyedron's faces must be correctly ordered
+  // =========================================================================================================================
   inline double calculateVolumeForPolyh(const double ***pts,
                                         const int *nbOfNodesPerFaces,
                                         int nbOfFaces,
@@ -397,6 +397,30 @@ namespace INTERP_KERNEL
     return -volume/3.;
   }
 
+  // ============================================================================================================================================
+  // Calculate Volume for NON Generic Polyedron. Only polydrons with bary included in pts is supported by this method. Result is always positive.
+  // ============================================================================================================================================
+  inline double calculateVolumeForPolyhAbs(const double ***pts,
+                                           const int *nbOfNodesPerFaces,
+                                           int nbOfFaces,
+                                           const double *bary)
+  {
+    double volume=0.;
+    
+    for ( int i=0; i<nbOfFaces; i++ )
+      {
+        double normal[3];
+        double vecForAlt[3];
+
+        calculateNormalForPolyg(pts[i],nbOfNodesPerFaces[i],normal);
+        vecForAlt[0]=bary[0]-pts[i][0][0];
+        vecForAlt[1]=bary[1]-pts[i][0][1];
+        vecForAlt[2]=bary[2]-pts[i][0][2];
+        volume+=fabs(vecForAlt[0]*normal[0]+vecForAlt[1]*normal[1]+vecForAlt[2]*normal[2]);
+      }
+    return volume/3.;
+  }
+
   template<int N>
   inline double addComponentsOfVec(const double **pts, int rk)
   {