Use Gmprat for Path bounds with TRANSFORM_BEZIERS_TO_PATH
[ipdf/code.git] / src / rect.h
index 3c4a105..b092fbe 100644 (file)
@@ -9,8 +9,8 @@ namespace IPDF
        struct Rect
        {
                Real x; Real y; Real w; Real h;
-               Rect() = default; // Needed so we can fread/fwrite this struct
-               Rect(Real _x, Real _y, Real _w, Real _h) : x(_x), y(_y), w(_w), h(_h) {}
+               //Rect() = default; // Needed so we can fread/fwrite this struct
+               Rect(Real _x=0, Real _y=0, Real _w=1, Real _h=1) : x(_x), y(_y), w(_w), h(_h) {}
                std::string Str() const
                {
                        std::stringstream s;
@@ -26,6 +26,15 @@ namespace IPDF
                        if (pt_y >= y + h) return false;
                        return true;
                }
+
+               inline bool Intersects(const Rect& other) const
+               {
+                       if (x + w < other.x) return false;
+                       if (y + h < other.y) return false;
+                       if (x > other.x + other.w) return false;
+                       if (y > other.y + other.h) return false;
+                       return true;
+               }
        };
 
        inline Rect TransformRectCoordinates(const Rect& view, const Rect& r)
@@ -33,10 +42,10 @@ namespace IPDF
                Rect out;
                Real w = (view.w == Real(0))?Real(1):view.w;
                Real h = (view.h == Real(0))?Real(1):view.h;
-               out.x = (r.x - view.x) / w;
-               out.y = (r.y - view.y) / h;
-               out.w = r.w / w;
-               out.h = r.h / h;
+               out.x = (r.x - view.x) / w; //r.x = out.x *w + view.x
+               out.y = (r.y - view.y) / h; // r.y = out.y*h + view.y
+               out.w = r.w / w; // r.w = out.w * w
+               out.h = r.h / h; // r.h = out.h * h
                return out;
        }
 

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