Clipping for RECT types. Breaks a little.
[ipdf/code.git] / src / quadtree.cpp
1 #ifndef QUADTREE_REMOVED
2 #include "quadtree.h"
3
4 namespace IPDF {
5
6 Rect TransformToQuadChild(const Rect& src, QuadTreeNodeChildren child_type)
7 {
8         Rect dst = src;
9         dst.x *= 2;
10         dst.y *= 2;
11         dst.w *= 2;
12         dst.h *= 2;
13         if (child_type == QTC_BOTTOM_LEFT || child_type == QTC_BOTTOM_RIGHT)
14         {
15                 dst.y -= 1;
16         }
17         if (child_type == QTC_TOP_RIGHT || child_type == QTC_BOTTOM_RIGHT)
18         {
19                 dst.x -= 1;
20         }
21         return dst;
22 }
23
24 Rect TransformFromQuadChild(const Rect& src, QuadTreeNodeChildren child_type)
25 {
26         Rect dst = src;
27         if (child_type == QTC_BOTTOM_LEFT || child_type == QTC_BOTTOM_RIGHT)
28         {
29                 dst.y += 1;
30         }
31         if (child_type == QTC_TOP_RIGHT || child_type == QTC_BOTTOM_RIGHT)
32         {
33                 dst.x += 1;
34         }
35         dst.x *= 0.5;
36         dst.y *= 0.5;
37         dst.w *= 0.5;
38         dst.h *= 0.5;
39         return dst;
40 }
41
42 bool IntersectsQuadChild(const Rect& src, QuadTreeNodeChildren child_type)
43 {
44         Rect std = {0,0,1,1};
45         Rect dst = TransformFromQuadChild(std, child_type);
46         if (src.x + src.w < dst.x) return false;
47         if (src.y + src.h < dst.y) return false;
48         if (src.x > dst.x + dst.w) return false;
49         if (src.y > dst.y + dst.h) return false;
50         Debug("%s is contained in %s\n", src.Str().c_str(), dst.Str().c_str());
51         return true;
52 }
53
54 bool ContainedInQuadChild(const Rect& src, QuadTreeNodeChildren child_type)
55 {
56         Rect std = {0,0,1,1};
57         Rect dst = TransformFromQuadChild(std, child_type);
58         if (src.x < dst.x) return false;
59         if (src.y < dst.y) return false;
60         if (src.x + src.w > dst.x + dst.w) return false;
61         if (src.y + src.h > dst.y + dst.h) return false;
62         Debug("%s is contained in %s... \n", src.Str().c_str(), dst.Str().c_str());
63         return true;
64 }
65
66 }
67
68 #endif

UCC git Repository :: git.ucc.asn.au