X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fquadtree.cpp;h=e93a0f0fd839c496d92f39a765166b5d1c2712c1;hp=a4e0df2d62699cb4704e25c5a4cb26a2eee10771;hb=457682a07cf1346aecfec22798e5a49a16db3c1b;hpb=ffd290c0bc1da5aa2397fc88af9ad594f104b192 diff --git a/src/quadtree.cpp b/src/quadtree.cpp index a4e0df2..e93a0f0 100644 --- a/src/quadtree.cpp +++ b/src/quadtree.cpp @@ -5,40 +5,51 @@ namespace IPDF { Rect TransformToQuadChild(const Rect& src, QuadTreeNodeChildren child_type) { - Rect dst; + Rect dst = src; dst.x *= 2; dst.y *= 2; dst.w *= 2; dst.h *= 2; if (child_type == QTC_BOTTOM_LEFT || child_type == QTC_BOTTOM_RIGHT) { - dst.x -= 2; + dst.x -= 1; } if (child_type == QTC_TOP_RIGHT || child_type == QTC_BOTTOM_RIGHT) { - dst.y -= 2; + dst.y -= 1; } return dst; } Rect TransformFromQuadChild(const Rect& src, QuadTreeNodeChildren child_type) { - Rect dst; + Rect dst = src; dst.x *= 0.5; dst.y *= 0.5; dst.w *= 0.5; dst.h *= 0.5; if (child_type == QTC_BOTTOM_LEFT || child_type == QTC_BOTTOM_RIGHT) { - dst.x += 0.5; + dst.x += 1; } if (child_type == QTC_TOP_RIGHT || child_type == QTC_BOTTOM_RIGHT) { - dst.y += 0.5; + dst.y += 1; } return dst; } +bool ContainedInQuadChild(const Rect& src, QuadTreeNodeChildren child_type) +{ + Rect std = {0,0,1,1}; + Rect dst = TransformFromQuadChild(std, child_type); + if (src.x + src.w < dst.x) return false; + if (src.y + src.h < dst.y) return false; + if (src.x > dst.x + dst.w) return false; + if (src.y > dst.y + dst.h) return false; + return true; +} + } #endif