BLI Rect: utility function to transform a point using 2 rect's
authorCampbell Barton <ideasman42@gmail.com>
Sun, 9 Mar 2014 04:48:09 +0000 (15:48 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 9 Mar 2014 04:48:09 +0000 (15:48 +1100)
source/blender/blenlib/BLI_rect.h
source/blender/blenlib/intern/rct.c

index dddfb8c6ea92d7242af82957cc97a136dedef07b..b86a5bc51b0e8a3795c1dbd0a59161e67b02182c 100644 (file)
@@ -52,6 +52,8 @@ void BLI_rctf_init_minmax(struct rctf *rect);
 void BLI_rcti_do_minmax_v(struct rcti *rect, const int xy[2]);
 void BLI_rctf_do_minmax_v(struct rctf *rect, const float xy[2]);
 
 void BLI_rcti_do_minmax_v(struct rcti *rect, const int xy[2]);
 void BLI_rctf_do_minmax_v(struct rctf *rect, const float xy[2]);
 
+void BLI_rctf_transform_pt_v(const rctf *dst, const rctf *src, float xy_dst[2], const float xy_src[2]);
+
 void BLI_rctf_translate(struct rctf *rect, float x, float y);
 void BLI_rcti_translate(struct rcti *rect, int x, int y);
 void BLI_rcti_recenter(struct rcti *rect, int x, int y);
 void BLI_rctf_translate(struct rctf *rect, float x, float y);
 void BLI_rcti_translate(struct rcti *rect, int x, int y);
 void BLI_rcti_recenter(struct rcti *rect, int x, int y);
index 51bd9eee0a6330509d5f0ad6e2279911cc6f1bba..61e5783cd3e76c106993c1c5e74fd4c5b77716d4 100644 (file)
@@ -347,6 +347,16 @@ void BLI_rctf_do_minmax_v(rctf *rect, const float xy[2])
        if (xy[1] > rect->ymax) rect->ymax = xy[1];
 }
 
        if (xy[1] > rect->ymax) rect->ymax = xy[1];
 }
 
+/* given 2 rectangles - transform a point from one to another */
+void BLI_rctf_transform_pt_v(const rctf *dst, const rctf *src, float xy_dst[2], const float xy_src[2])
+{
+       xy_dst[0] = ((xy_src[0] - src->xmin) / (src->xmax - src->xmin));
+       xy_dst[0] =               dst->xmin + ((dst->xmax - dst->xmin) * xy_dst[0]);
+
+       xy_dst[1] = ((xy_src[1] - src->ymin) / (src->ymax - src->ymin));
+       xy_dst[1] =               dst->ymin + ((dst->ymax - dst->ymin) * xy_dst[1]);
+}
+
 void BLI_rcti_translate(rcti *rect, int x, int y)
 {
        rect->xmin += x;
 void BLI_rcti_translate(rcti *rect, int x, int y)
 {
        rect->xmin += x;