diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-12-12 04:36:10 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-12-12 04:36:10 +0300 |
commit | 4f343642b14f67b595720542deac89eaf18852fb (patch) | |
tree | e055b9b8426edf00438f540ff1a2d2e4928b0987 /source/blender/blenlib | |
parent | 1ad15c37aa60ec223f072cdca2209e1017c3d8ef (diff) |
isect_seg_seg_v2_point was modifying the value of line vectors passed.
this could be confusing later on, now swap the pointers rather then changing their values.
Diffstat (limited to 'source/blender/blenlib')
-rw-r--r-- | source/blender/blenlib/BLI_math_geom.h | 6 | ||||
-rw-r--r-- | source/blender/blenlib/intern/math_geom.c | 12 |
2 files changed, 8 insertions, 10 deletions
diff --git a/source/blender/blenlib/BLI_math_geom.h b/source/blender/blenlib/BLI_math_geom.h index 7dae49f067d..3c2c6312f4d 100644 --- a/source/blender/blenlib/BLI_math_geom.h +++ b/source/blender/blenlib/BLI_math_geom.h @@ -71,9 +71,9 @@ void closest_to_line_segment_v3(float r[3], float p[3], float l1[3], float l2[3] #define ISECT_LINE_LINE_EXACT 1 #define ISECT_LINE_LINE_CROSS 2 -int isect_line_line_v2(float a1[2], float a2[2], float b1[2], float b2[2]); -int isect_line_line_v2_short(short a1[2], short a2[2], short b1[2], short b2[2]); -int isect_seg_seg_v2_point(float v1[2], float v2[2], float v3[2], float v4[2], float vi[2]); +int isect_line_line_v2(const float a1[2], const float a2[2], const float b1[2], const float b2[2]); +int isect_line_line_v2_short(const short a1[2], const short a2[2], const short b1[2], const short b2[2]); +int isect_seg_seg_v2_point(const float *v1, const float *v2, const float *v3, const float *v4, float vi[2]); /* Returns the number of point of interests * 0 - lines are colinear diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c index ac62eb71e97..673d8113f32 100644 --- a/source/blender/blenlib/intern/math_geom.c +++ b/source/blender/blenlib/intern/math_geom.c @@ -233,7 +233,7 @@ float dist_to_line_segment_v3(float *v1, float *v2, float *v3) /******************************* Intersection ********************************/ /* intersect Line-Line, shorts */ -int isect_line_line_v2_short(short *v1, short *v2, short *v3, short *v4) +int isect_line_line_v2_short(const short *v1, const short *v2, const short *v3, const short *v4) { /* return: -1: colliniar @@ -258,7 +258,7 @@ int isect_line_line_v2_short(short *v1, short *v2, short *v3, short *v4) } /* intersect Line-Line, floats */ -int isect_line_line_v2(float *v1, float *v2, float *v3, float *v4) +int isect_line_line_v2(const float *v1, const float *v2, const float *v3, const float *v4) { /* return: -1: colliniar @@ -285,7 +285,7 @@ int isect_line_line_v2(float *v1, float *v2, float *v3, float *v4) /* get intersection point of two 2D segments and return intersection type: -1: colliniar 1: intersection */ -int isect_seg_seg_v2_point(float v1[2], float v2[2], float v3[2], float v4[2], float vi[2]) +int isect_seg_seg_v2_point(const float *v1, const float *v2, const float *v3, const float *v4, float vi[2]) { float a1, a2, b1, b2, c1, c2, d; float u, v; @@ -309,10 +309,8 @@ int isect_seg_seg_v2_point(float v1[2], float v2[2], float v3[2], float v4[2], f if(len_v2v2(v1, v2)==0.0f) { if(len_v2v2(v3, v4)>eps) { /* use non-point segment as basis */ - SWAP(float, v1[0], v3[0]); - SWAP(float, v1[1], v3[1]); - SWAP(float, v2[0], v4[0]); - SWAP(float, v2[1], v4[1]); + SWAP(const float *, v1, v3); + SWAP(const float *, v2, v4); } else { /* both of segments are points */ if(equals_v2v2(v1, v3)) { /* points are equal */ copy_v2_v2(vi, v1); |