Add mid_v3_v3_array function and remove redundant functions
authorLuca Rood <dev@lucarood.com>
Tue, 10 Jan 2017 19:46:31 +0000 (17:46 -0200)
committerLuca Rood <dev@lucarood.com>
Tue, 10 Jan 2017 21:58:34 +0000 (19:58 -0200)
Other than implementing a `mid_v3_v3_array` function, this removes
`cent_tri_v3` and `cent_quad_v3` in favor of `mid_v3_v3v3v3` and
`mid_v3_v3v3v3v3` respectively.

Reviewed By: mont29

Differential Revision: https://developer.blender.org/D2459

source/blender/blenkernel/intern/mesh_evaluate.c
source/blender/blenlib/BLI_math_geom.h
source/blender/blenlib/BLI_math_vector.h
source/blender/blenlib/intern/math_geom.c
source/blender/blenlib/intern/math_vector.c
source/blender/bmesh/intern/bmesh_interp.c
source/blender/render/intern/source/occlusion.c

index a3fe73e4b11c32bef9f38446922d35262ef24f04..f9eba1183830a15b58515d3b39e81ee9ff5e70a1 100644 (file)
@@ -1909,19 +1909,19 @@ void BKE_mesh_calc_poly_center(
         const MVert *mvarray, float r_cent[3])
 {
        if (mpoly->totloop == 3) {
-               cent_tri_v3(r_cent,
-                           mvarray[loopstart[0].v].co,
-                           mvarray[loopstart[1].v].co,
-                           mvarray[loopstart[2].v].co
-                           );
+               mid_v3_v3v3v3(r_cent,
+                             mvarray[loopstart[0].v].co,
+                             mvarray[loopstart[1].v].co,
+                             mvarray[loopstart[2].v].co
+                             );
        }
        else if (mpoly->totloop == 4) {
-               cent_quad_v3(r_cent,
-                            mvarray[loopstart[0].v].co,
-                            mvarray[loopstart[1].v].co,
-                            mvarray[loopstart[2].v].co,
-                            mvarray[loopstart[3].v].co
-                            );
+               mid_v3_v3v3v3v3(r_cent,
+                               mvarray[loopstart[0].v].co,
+                               mvarray[loopstart[1].v].co,
+                               mvarray[loopstart[2].v].co,
+                               mvarray[loopstart[3].v].co
+                               );
        }
        else {
                mesh_calc_ngon_center(mpoly, loopstart, mvarray, r_cent);
@@ -1978,7 +1978,7 @@ static float mesh_calc_poly_planar_area_centroid(
                tri_area = area_tri_signed_v3(v1, v2, v3, normal);
                total_area += tri_area;
 
-               cent_tri_v3(tri_cent, v1, v2, v3);
+               mid_v3_v3v3v3(tri_cent, v1, v2, v3);
                madd_v3_v3fl(r_cent, tri_cent, tri_area);
 
                copy_v3_v3(v2, v3);
index 514b0300274cc14a27760410d2a5896ad138a0b3..b5007b29f4c3e7ecc59dab5e6664755e603f76bf 100644 (file)
@@ -44,9 +44,6 @@ extern "C" {
 
 /********************************** Polygons *********************************/
 
-void cent_tri_v3(float r[3], const float a[3], const float b[3], const float c[3]);
-void cent_quad_v3(float r[3], const float a[3], const float b[3], const float c[3], const float d[3]);
-
 float normal_tri_v3(float r[3], const float a[3], const float b[3], const float c[3]);
 float normal_quad_v3(float r[3], const float a[3], const float b[3], const float c[3], const float d[3]);
 float normal_poly_v3(float r[3], const float verts[][3], unsigned int nr);
index d15fe1a95dc8b6e0e874ccbcf0d2464dfdd0a6ba..8e0884ba34794c469327342c1a2067e38a3f84c4 100644 (file)
@@ -234,6 +234,7 @@ void mid_v3_v3v3(float r[3], const float a[3], const float b[3]);
 void mid_v2_v2v2(float r[2], const float a[2], const float b[2]);
 void mid_v3_v3v3v3(float v[3], const float v1[3], const float v2[3], const float v3[3]);
 void mid_v3_v3v3v3v3(float v[3], const float v1[3], const float v2[3], const float v3[3], const float v4[3]);
+void mid_v3_v3_array(float r[3], const float (*vec_arr)[3], const unsigned int nbr);
 
 void mid_v3_v3v3_angle_weighted(float r[3], const float a[3], const float b[3]);
 void mid_v3_angle_weighted(float r[3]);
index 46d963ee26815fb843d438fa4f3fd131c2d341d7..76dac5487f279b7131563b87258d047c1d4957ed 100644 (file)
 
 /********************************** Polygons *********************************/
 
-void cent_tri_v3(float cent[3], const float v1[3], const float v2[3], const float v3[3])
-{
-       cent[0] = (v1[0] + v2[0] + v3[0]) / 3.0f;
-       cent[1] = (v1[1] + v2[1] + v3[1]) / 3.0f;
-       cent[2] = (v1[2] + v2[2] + v3[2]) / 3.0f;
-}
-
-void cent_quad_v3(float cent[3], const float v1[3], const float v2[3], const float v3[3], const float v4[3])
-{
-       cent[0] = 0.25f * (v1[0] + v2[0] + v3[0] + v4[0]);
-       cent[1] = 0.25f * (v1[1] + v2[1] + v3[1] + v4[1]);
-       cent[2] = 0.25f * (v1[2] + v2[2] + v3[2] + v4[2]);
-}
-
 void cross_tri_v3(float n[3], const float v1[3], const float v2[3], const float v3[3])
 {
        float n1[3], n2[3];
index 95d5c9fde8782cb69e3498addc61139500e515f7..dfecc3b556a8bfaa0d341bc18264ca1040d0870f 100644 (file)
@@ -280,6 +280,16 @@ void mid_v3_v3v3v3v3(float v[3], const float v1[3], const float v2[3], const flo
        v[2] = (v1[2] + v2[2] + v3[2] + v4[2]) / 4.0f;
 }
 
+void mid_v3_v3_array(float r[3], const float (*vec_arr)[3], const unsigned int nbr)
+{
+       const float factor = 1.0f / (float)nbr;
+       zero_v3(r);
+
+       for (unsigned int i = 0; i < nbr; i++) {
+               madd_v3_v3fl(r, vec_arr[i], factor);
+       }
+}
+
 /**
  * Specialized function for calculating normals.
  * fastpath for:
index f51013c3f1c4788b4f1c613e5004225b99ed7e27..20ee31251e8bdbfc3b5abad0975a18895b5897b9 100644 (file)
@@ -339,7 +339,7 @@ static bool mdisp_in_mdispquad(
        compute_mdisp_quad(l_dst, l_dst_f_center, v1, v2, v3, v4, e1, e2);
 
        /* expand quad a bit */
-       cent_quad_v3(c, v1, v2, v3, v4);
+       mid_v3_v3v3v3v3(c, v1, v2, v3, v4);
        
        sub_v3_v3(v1, c); sub_v3_v3(v2, c);
        sub_v3_v3(v3, c); sub_v3_v3(v4, c);
index b3d31e3b93ad5f39c34aecd719e20576f979e8ca..ddcd2e8452059cf73b9d0a2e20d3dc5a2ce78be6 100644 (file)
@@ -329,7 +329,7 @@ static void occ_face(const OccFace *face, float co[3], float normal[3], float *a
                if (vlr->v4)
                        mid_v3_v3v3(co, vlr->v1->co, vlr->v3->co);
                else
-                       cent_tri_v3(co, vlr->v1->co, vlr->v2->co, vlr->v3->co);
+                       mid_v3_v3v3v3(co, vlr->v1->co, vlr->v2->co, vlr->v3->co);
 
                if (obi->flag & R_TRANSFORMED)
                        mul_m4_v3(obi->mat, co);
@@ -1245,7 +1245,7 @@ static void *exec_strandsurface_sample(void *data)
                        normal_quad_v3(n, co1, co2, co3, co4);
                }
                else {
-                       cent_tri_v3(co, co1, co2, co3);
+                       mid_v3_v3v3v3(co, co1, co2, co3);
                        normal_tri_v3(n, co1, co2, co3);
                }
                negate_v3(n);