Added function to calculate the total area of a mesh.
authorSebastian Parborg <darkdefende@gmail.com>
Mon, 9 Sep 2019 17:41:12 +0000 (19:41 +0200)
committerSebastian Parborg <darkdefende@gmail.com>
Mon, 9 Sep 2019 17:41:12 +0000 (19:41 +0200)
source/blender/blenkernel/BKE_mesh.h
source/blender/blenkernel/intern/mesh_evaluate.c

index a260621ac2cb5c0493649755c53f2333555d42bd..af40eef6ab549a2b2ba487f341869b228d07dc23 100644 (file)
@@ -477,6 +477,7 @@ void BKE_mesh_calc_poly_center(const struct MPoly *mpoly,
 float BKE_mesh_calc_poly_area(const struct MPoly *mpoly,
                               const struct MLoop *loopstart,
                               const struct MVert *mvarray);
+float BKE_mesh_calc_area(const struct Mesh *me);
 float BKE_mesh_calc_poly_uv_area(const struct MPoly *mpoly, const struct MLoopUV *uv_array);
 void BKE_mesh_calc_poly_angles(const struct MPoly *mpoly,
                                const struct MLoop *loopstart,
index 38762109167224664401242368aca5d090a5c617..7a1dcb4a5fd46f04e01912b7c73c1f4acbd05814 100644 (file)
@@ -2320,6 +2320,24 @@ float BKE_mesh_calc_poly_area(const MPoly *mpoly, const MLoop *loopstart, const
   }
 }
 
+float BKE_mesh_calc_area(const Mesh *me)
+{
+  MVert *mvert = me->mvert;
+  MLoop *mloop = me->mloop;
+  MPoly *mpoly = me->mpoly;
+
+  MPoly *mp;
+  int i = me->totpoly;
+  float total_area = 0;
+
+  for (mp = mpoly; i--; mp++) {
+    MLoop *ml_start = &mloop[mp->loopstart];
+
+    total_area += BKE_mesh_calc_poly_area(mp, ml_start, mvert);
+  }
+  return total_area;
+}
+
 float BKE_mesh_calc_poly_uv_area(const MPoly *mpoly, const MLoopUV *uv_array)
 {