diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-07-28 23:46:33 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-07-28 23:46:33 +0400 |
commit | c754eaa0f9ace116250d232f806beabb27d28951 (patch) | |
tree | 067c60f7b7a1e7b2fd58598149f14a07c0edeb6d /source/blender | |
parent | fc4a7775112045c604bef0eacbe1dc3cc609d0f3 (diff) |
add inline functions getting a single axis from mul_m3_v3()
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenlib/BLI_math_vector.h | 3 | ||||
-rw-r--r-- | source/blender/blenlib/intern/math_vector_inline.c | 12 | ||||
-rw-r--r-- | source/blender/bmesh/operators/bmo_connect_pair.c | 18 |
3 files changed, 21 insertions, 12 deletions
diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h index 304e2ea7fde..6be679a90b6 100644 --- a/source/blender/blenlib/BLI_math_vector.h +++ b/source/blender/blenlib/BLI_math_vector.h @@ -116,6 +116,9 @@ MINLINE void mul_v3_v3v3(float r[3], const float a[3], const float b[3]); MINLINE void mul_v4_fl(float r[4], float f); MINLINE void mul_v4_v4fl(float r[3], const float a[3], float f); MINLINE float mul_project_m4_v3_zfac(float mat[4][4], const float co[3]); +MINLINE float mul_m3_v3_single_x(float M[3][3], const float a[3]); +MINLINE float mul_m3_v3_single_y(float M[3][3], const float a[3]); +MINLINE float mul_m3_v3_single_z(float M[3][3], const float a[3]); MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f); MINLINE void madd_v3_v3v3(float r[3], const float a[3], const float b[3]); diff --git a/source/blender/blenlib/intern/math_vector_inline.c b/source/blender/blenlib/intern/math_vector_inline.c index d77b1ecf017..eff735ef8d5 100644 --- a/source/blender/blenlib/intern/math_vector_inline.c +++ b/source/blender/blenlib/intern/math_vector_inline.c @@ -418,6 +418,18 @@ MINLINE float mul_project_m4_v3_zfac(float mat[4][4], const float co[3]) (mat[2][3] * co[2]) + mat[3][3]; } +MINLINE float mul_m3_v3_single_x(float M[3][3], const float a[3]) +{ + return M[0][0] * a[0] + M[1][0] * a[1] + M[2][0] * a[2]; +} +MINLINE float mul_m3_v3_single_y(float M[3][3], const float a[3]) +{ + return M[0][1] * a[0] + M[1][1] * a[1] + M[2][1] * a[2]; +} +MINLINE float mul_m3_v3_single_z(float M[3][3], const float a[3]) +{ + return M[0][2] * a[0] + M[1][2] * a[1] + M[2][2] * a[2]; +} MINLINE void madd_v2_v2fl(float r[2], const float a[2], float f) { diff --git a/source/blender/bmesh/operators/bmo_connect_pair.c b/source/blender/bmesh/operators/bmo_connect_pair.c index 872f1cea2c7..fb9ebe31c62 100644 --- a/source/blender/bmesh/operators/bmo_connect_pair.c +++ b/source/blender/bmesh/operators/bmo_connect_pair.c @@ -84,17 +84,11 @@ typedef struct PathLinkState { float co_prev[3]; } PathLinkState; -/* only the x axis */ -static float mul_v1_m3v3(float M[3][3], const float a[3]) -{ - return M[0][0] * a[0] + M[1][0] * a[1] + M[2][0] * a[2]; -} - static int state_isect_co_pair(const PathContext *pc, const float co_a[3], const float co_b[3]) { - const float diff_a = mul_v1_m3v3((float (*)[3])pc->matrix, co_a) - pc->axis_sep; - const float diff_b = mul_v1_m3v3((float (*)[3])pc->matrix, co_b) - pc->axis_sep; + const float diff_a = mul_m3_v3_single_x((float (*)[3])pc->matrix, co_a) - pc->axis_sep; + const float diff_b = mul_m3_v3_single_x((float (*)[3])pc->matrix, co_b) - pc->axis_sep; const int test_a = (fabsf(diff_a) < CONNECT_EPS) ? 0 : (diff_a < 0.0f) ? -1 : 1; const int test_b = (fabsf(diff_b) < CONNECT_EPS) ? 0 : (diff_b < 0.0f) ? -1 : 1; @@ -110,7 +104,7 @@ static int state_isect_co_pair(const PathContext *pc, static int state_isect_co_exact(const PathContext *pc, const float co[3]) { - const float diff = mul_v1_m3v3((float (*)[3])pc->matrix, co) - pc->axis_sep; + const float diff = mul_m3_v3_single_x((float (*)[3])pc->matrix, co) - pc->axis_sep; return (fabsf(diff) <= CONNECT_EPS); } @@ -119,8 +113,8 @@ static float state_calc_co_pair_fac(const PathContext *pc, { float diff_a, diff_b, diff_tot; - diff_a = fabsf(mul_v1_m3v3((float (*)[3])pc->matrix, co_a) - pc->axis_sep); - diff_b = fabsf(mul_v1_m3v3((float (*)[3])pc->matrix, co_b) - pc->axis_sep); + diff_a = fabsf(mul_m3_v3_single_x((float (*)[3])pc->matrix, co_a) - pc->axis_sep); + diff_b = fabsf(mul_m3_v3_single_x((float (*)[3])pc->matrix, co_b) - pc->axis_sep); diff_tot = (diff_a + diff_b); return (diff_tot > FLT_EPSILON) ? (diff_a / diff_tot) : 0.5f; } @@ -443,7 +437,7 @@ void bmo_connect_vert_pair_exec(BMesh *bm, BMOperator *op) normalize_v3_v3(pc.matrix[2], basis_nor); invert_m3(pc.matrix); - pc.axis_sep = mul_v1_m3v3(pc.matrix, pc.v_a->co); + pc.axis_sep = mul_m3_v3_single_x(pc.matrix, pc.v_a->co); } /* add first vertex */ |