Revision: 44303
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44303
Author:   nazgul
Date:     2012-02-21 17:24:05 +0000 (Tue, 21 Feb 2012)
Log Message:
-----------
- Remove unused code in bmesh interpolation module and switch it to using 
mathutils
  functions instead of own macros for vectors.
- Double precision isn't needed here at all. It only makes it impossible to use
  mathutils, adds extra float<->double conversions without any benefits.
  (current multires interpolation is already an approximate method and it can't
  be improved using double precision)

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_interp.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_interp.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_interp.c    2012-02-21 
17:23:32 UTC (rev 44302)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_interp.c    2012-02-21 
17:24:05 UTC (rev 44303)
@@ -233,145 +233,6 @@
        BLI_array_fixedstack_free(blocks);
 }
 
-/* some math stuff for dealing with doubles, put here to
- * avoid merge errors - joeedh */
-
-#define VECMUL(a, b) (((a)[0] = (a)[0] * (b)), ((a)[1] = (a)[1] * (b)), 
((a)[2] = (a)[2] * (b)))
-#define VECADD2(a, b) (((a)[0] = (a)[0] + (b)[0]), ((a)[1] = (a)[1] + (b)[1]), 
((a)[2] = (a)[2] + (b)[2]))
-#define VECSUB2(a, b) (((a)[0] = (a)[0] - (b)[0]), ((a)[1] = (a)[1] - (b)[1]), 
((a)[2] = (a)[2] - (b)[2]))
-
-/* find closest point to p on line through l1, l2 and return lambda,
- * where (0 <= lambda <= 1) when cp is in the line segement l1, l2
- */
-static double closest_to_line_v3_d(double cp[3], const double p[3], const 
double l1[3], const double l2[3])
-{
-       double h[3], u[3], lambda;
-       VECSUB(u, l2, l1);
-       VECSUB(h, p, l1);
-       lambda = INPR(u, h) / INPR(u, u);
-       cp[0] = l1[0] + u[0] * lambda;
-       cp[1] = l1[1] + u[1] * lambda;
-       cp[2] = l1[2] + u[2] * lambda;
-       return lambda;
-}
-
-/* point closest to v1 on line v2-v3 in 3D */
-static void UNUSED_FUNCTION(closest_to_line_segment_v3_d)(double *closest, 
double v1[3], double v2[3], double v3[3])
-{
-       double lambda, cp[3];
-
-       lambda = closest_to_line_v3_d(cp, v1, v2, v3);
-
-       if (lambda <= 0.0) {
-               VECCOPY(closest, v2);
-       }
-       else if (lambda >= 1.0) {
-               VECCOPY(closest, v3);
-       }
-       else {
-               VECCOPY(closest, cp);
-       }
-}
-
-static double UNUSED_FUNCTION(len_v3_d)(const double a[3])
-{
-       return sqrt(INPR(a, a));
-}
-
-static double UNUSED_FUNCTION(len_v3v3_d)(const double a[3], const double b[3])
-{
-       double d[3];
-
-       VECSUB(d, b, a);
-       return sqrt(INPR(d, d));
-}
-
-static void cent_quad_v3_d(double *cent, double *v1, double *v2, double *v3, 
double *v4)
-{
-       cent[0] = 0.25 * (v1[0] + v2[0] + v3[0] + v4[0]);
-       cent[1] = 0.25 * (v1[1] + v2[1] + v3[1] + v4[1]);
-       cent[2] = 0.25 * (v1[2] + v2[2] + v3[2] + v4[2]);
-}
-
-static void UNUSED_FUNCTION(cent_tri_v3_d)(double *cent, double *v1, double 
*v2, double *v3)
-{
-       cent[0] = (1.0 / 3.0) * (v1[0] + v2[0] + v3[0]);
-       cent[1] = (1.0 / 3.0) * (v1[1] + v2[1] + v3[1]);
-       cent[2] = (1.0 / 3.0) * (v1[2] + v2[2] + v3[2]);
-}
-
-static void UNUSED_FUNCTION(cross_v3_v3v3_d)(double r[3], const double a[3], 
const double b[3])
-{
-       r[0] = a[1] * b[2] - a[2] * b[1];
-       r[1] = a[2] * b[0] - a[0] * b[2];
-       r[2] = a[0] * b[1] - a[1] * b[0];
-}
-
-/* distance v1 to line-piece v2-v3 */
-static double UNUSED_FUNCTION(dist_to_line_segment_v2_d)(double v1[3], double 
v2[3], double v3[3])
-{
-       double labda, rc[2], pt[2], len;
-       
-       rc[0] = v3[0] - v2[0];
-       rc[1] = v3[1] - v2[1];
-       len = rc[0] * rc[0] + rc[1] * rc[1];
-       if (len == 0.0) {
-               rc[0] = v1[0] - v2[0];
-               rc[1] = v1[1] - v2[1];
-               return sqrt(rc[0] * rc[0] + rc[1] * rc[1]);
-       }
-       
-       labda = (rc[0] * (v1[0] - v2[0]) + rc[1] * (v1[1] - v2[1])) / len;
-       if (labda <= 0.0) {
-               pt[0] = v2[0];
-               pt[1] = v2[1];
-       }
-       else if (labda >= 1.0) {
-               pt[0] = v3[0];
-               pt[1] = v3[1];
-       }
-       else {
-               pt[0] = labda * rc[0] + v2[0];
-               pt[1] = labda * rc[1] + v2[1];
-       }
-
-       rc[0] = pt[0] - v1[0];
-       rc[1] = pt[1] - v1[1];
-       return sqrt(rc[0] * rc[0] + rc[1] * rc[1]);
-}
-
-
-MINLINE double line_point_side_v2_d(const double *l1, const double *l2, const 
double *pt)
-{
-       return  ((l1[0] - pt[0]) * (l2[1] - pt[1])) -
-               ((l2[0] - pt[0]) * (l1[1] - pt[1]));
-}
-
-/* point in quad - only convex quads */
-static int isect_point_quad_v2_d(double pt[2], double v1[2], double v2[2], 
double v3[2], double v4[2])
-{
-       if (line_point_side_v2_d(v1, v2, pt) >= 0.0) {
-               if (line_point_side_v2_d(v2, v3, pt) >= 0.0) {
-                       if (line_point_side_v2_d(v3, v4, pt) >= 0.0) {
-                               if (line_point_side_v2_d(v4, v1, pt) >= 0.0) {
-                                       return 1;
-                               }
-                       }
-               }
-       }
-       else {
-               if (! (line_point_side_v2_d(v2, v3, pt) >= 0.0)) {
-                       if (! (line_point_side_v2_d(v3, v4, pt) >= 0.0)) {
-                               if (! (line_point_side_v2_d(v4, v1, pt) >= 
0.0)) {
-                                       return -1;
-                               }
-                       }
-               }
-       }
-       
-       return 0;
-}
-
 /***** multires interpolation*****
  *
  * mdisps is a grid of displacements, ordered thus:
@@ -385,50 +246,50 @@
  *      y
  */
 
-static int compute_mdisp_quad(BMLoop *l, double v1[3], double v2[3], double 
v3[3], double v4[3],
-                              double e1[3], double e2[3])
+static int compute_mdisp_quad(BMLoop *l, float v1[3], float v2[3], float 
v3[3], float v4[3],
+                              float e1[3], float e2[3])
 {
-       double cent[3] = {0.0, 0.0, 0.0}, n[3], p[3];
+       float cent[3] = {0.0f, 0.0f, 0.0f}, n[3], p[3];
        BMLoop *l_first;
        BMLoop *l_iter;
        
        /* computer center */
        l_iter = l_first = BM_FACE_FIRST_LOOP(l->f);
        do {
-               cent[0] += (double)l_iter->v->co[0];
-               cent[1] += (double)l_iter->v->co[1];
-               cent[2] += (double)l_iter->v->co[2];
+               cent[0] += (float)l_iter->v->co[0];
+               cent[1] += (float)l_iter->v->co[1];
+               cent[2] += (float)l_iter->v->co[2];
        } while ((l_iter = l_iter->next) != l_first);
        
-       VECMUL(cent, (1.0 / (double)l->f->len));
+       mul_v3_fl(cent, (1.0 / (float)l->f->len));
        
-       VECADD(p, l->prev->v->co, l->v->co);
-       VECMUL(p, 0.5);
-       VECADD(n, l->next->v->co, l->v->co);
-       VECMUL(n, 0.5);
+       add_v3_v3v3(p, l->prev->v->co, l->v->co);
+       mul_v3_fl(p, 0.5);
+       add_v3_v3v3(n, l->next->v->co, l->v->co);
+       mul_v3_fl(n, 0.5);
        
-       VECCOPY(v1, cent);
-       VECCOPY(v2, p);
-       VECCOPY(v3, l->v->co);
-       VECCOPY(v4, n);
+       copy_v3_v3(v1, cent);
+       copy_v3_v3(v2, p);
+       copy_v3_v3(v3, l->v->co);
+       copy_v3_v3(v4, n);
        
-       VECSUB(e1, v2, v1);
-       VECSUB(e2, v3, v4);
+       sub_v3_v3v3(e1, v2, v1);
+       sub_v3_v3v3(e2, v3, v4);
        
        return 1;
 }
 
 /* funnily enough, I think this is identical to face_to_crn_interp, heh */
-static double quad_coord(double aa[3], double bb[3], double cc[3], double 
dd[3], int a1, int a2)
+static float quad_coord(float aa[3], float bb[3], float cc[3], float dd[3], 
int a1, int a2)
 {
-       double x, y, z, f1;
+       float x, y, z, f1;
        
        x = aa[a1] * cc[a2] - cc[a1] * aa[a2];
        y = aa[a1] * dd[a2] + bb[a1] * cc[a2] - cc[a1] * bb[a2] - dd[a1] * 
aa[a2];
        z = bb[a1] * dd[a2] - dd[a1] * bb[a2];
        
-       if (fabs(2 * (x - y + z)) > DBL_EPSILON * 10.0) {
-               double f2;
+       if (fabs(2 * (x - y + z)) > FLT_EPSILON * 10.0f) {
+               float f2;
 
                f1 = (sqrt(y * y - 4.0 * x * z) - y + 2.0 * z) / (2.0 * (x - y 
+ z));
                f2 = (-sqrt(y * y - 4.0 * x * z) - y + 2.0 * z) / (2.0 * (x - y 
+ z));
@@ -436,19 +297,19 @@
                f1 = fabs(f1);
                f2 = fabs(f2);
                f1 = MIN2(f1, f2);
-               CLAMP(f1, 0.0, 1.0 + DBL_EPSILON);
+               CLAMP(f1, 0.0f, 1.0f + FLT_EPSILON);
        }
        else {
                f1 = -z / (y - 2 * z);
-               CLAMP(f1, 0.0, 1.0 + DBL_EPSILON);
+               CLAMP(f1, 0.0f, 1.0f + FLT_EPSILON);
                
-               if (isnan(f1) || f1 > 1.0 || f1 < 0.0) {
+               if (isnan(f1) || f1 > 1.0 || f1 < 0.0f) {
                        int i;
                        
                        for (i = 0; i < 2; i++) {
-                               if (fabsf(aa[i]) < FLT_EPSILON * 100)
+                               if (fabsf(aa[i]) < FLT_EPSILON * 100.0f)
                                        return aa[(i + 1) % 2] / fabs(bb[(i + 
1) % 2] - aa[(i + 1) % 2]);
-                               if (fabsf(cc[i]) < FLT_EPSILON * 100)
+                               if (fabsf(cc[i]) < FLT_EPSILON * 100.0f)
                                        return cc[(i + 1) % 2] / fabs(dd[(i + 
1) % 2] - cc[(i + 1) % 2]);
                        }
                }
@@ -457,19 +318,19 @@
        return f1;
 }
 
-static int quad_co(double *x, double *y, double v1[3], double v2[3], double 
v3[3], double v4[3],
-                   double p[3], float n[3])
+static int quad_co(float *x, float *y, float v1[3], float v2[3], float v3[3], 
float v4[3],
+                   float p[3], float n[3])
 {
        float projverts[5][3], n2[3];
-       double dprojverts[4][3], origin[3] = {0.0f, 0.0f, 0.0f};
+       float dprojverts[4][3], origin[3] = {0.0f, 0.0f, 0.0f};
        int i;
 
        /* project points into 2d along normal */
-       VECCOPY(projverts[0], v1);
-       VECCOPY(projverts[1], v2);
-       VECCOPY(projverts[2], v3);
-       VECCOPY(projverts[3], v4);
-       VECCOPY(projverts[4], p);
+       copy_v3_v3(projverts[0], v1);
+       copy_v3_v3(projverts[1], v2);
+       copy_v3_v3(projverts[2], v3);
+       copy_v3_v3(projverts[3], v4);
+       copy_v3_v3(projverts[4], p);
 
        normal_quad_v3(n2, projverts[0], projverts[1], projverts[2], 
projverts[3]);
 
@@ -487,15 +348,15 @@
        
        /* subtract origin */
        for (i = 0; i < 4; i++) {
-               VECSUB2(projverts[i], projverts[4]);
+               sub_v3_v3(projverts[i], projverts[4]);
        }
        
-       VECCOPY(dprojverts[0], projverts[0]);
-       VECCOPY(dprojverts[1], projverts[1]);
-       VECCOPY(dprojverts[2], projverts[2]);
-       VECCOPY(dprojverts[3], projverts[3]);
+       copy_v3_v3(dprojverts[0], projverts[0]);
+       copy_v3_v3(dprojverts[1], projverts[1]);
+       copy_v3_v3(dprojverts[2], projverts[2]);
+       copy_v3_v3(dprojverts[3], projverts[3]);
 
-       if (!isect_point_quad_v2_d(origin, dprojverts[0], dprojverts[1], 
dprojverts[2], dprojverts[3])) {
+       if (!isect_point_quad_v2(origin, dprojverts[0], dprojverts[1], 
dprojverts[2], dprojverts[3])) {
                return 0;
        }
        
@@ -505,11 +366,11 @@
        return 1;
 }
 
-static void mdisp_axis_from_quad(double v1[3], double v2[3], double 
UNUSED(v3[3]), double v4[3],
+static void mdisp_axis_from_quad(float v1[3], float v2[3], float 
UNUSED(v3[3]), float v4[3],
                                 float axis_x[3], float axis_y[3])
 {
-       VECSUB(axis_x, v4, v1);
-       VECSUB(axis_y, v2, v1);
+       sub_v3_v3v3(axis_x, v4, v1);
+       sub_v3_v3v3(axis_y, v2, v1);
 
        normalize_v3(axis_x);
        normalize_v3(axis_y);
@@ -517,11 +378,11 @@
 
 /* tl is loop to project onto, l is loop whose internal displacement, co, is 
being
  * projected.  x and y are location in loop's mdisps grid of point co. */
-static int mdisp_in_mdispquad(BMesh *bm, BMLoop *l, BMLoop *tl, double p[3], 
double *x, double *y,
+static int mdisp_in_mdispquad(BMesh *bm, BMLoop *l, BMLoop *tl, float p[3], 
float *x, float *y,
                               int res, float axis_x[3], float axis_y[3])
 {
-       double v1[3], v2[3], c[3], v3[3], v4[3], e1[3], e2[3];
-       double eps = FLT_EPSILON * 4000;
+       float v1[3], v2[3], c[3], v3[3], v4[3], e1[3], e2[3];
+       float eps = FLT_EPSILON * 4000;
        
        if (len_v3(l->v->no) == 0.0f)
                BM_vert_normal_update_all(bm, l->v);
@@ -531,14 +392,14 @@
        compute_mdisp_quad(tl, v1, v2, v3, v4, e1, e2);
 
        /* expand quad a bit */
-       cent_quad_v3_d(c, v1, v2, v3, v4);
+       cent_quad_v3(c, v1, v2, v3, v4);
        
-       VECSUB2(v1, c); VECSUB2(v2, c);
-       VECSUB2(v3, c); VECSUB2(v4, c);
-       VECMUL(v1, 1.0 + eps); VECMUL(v2, 1.0 + eps);
-       VECMUL(v3, 1.0 + eps); VECMUL(v4, 1.0 + eps);
-       VECADD2(v1, c); VECADD2(v2, c);
-       VECADD2(v3, c); VECADD2(v4, c);

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to