X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fipdf.h;h=20e47c026675ba138574d3097de5c5327c3cd66e;hp=0264d96f550c719846cea1471bb9d02b6d3c1105;hb=b716ae547424e4e4bbda86781a151c31e3a64e67;hpb=b006386ab52e8a2c47c20bc21591d01c314d4d8e diff --git a/src/ipdf.h b/src/ipdf.h index 0264d96..20e47c0 100644 --- a/src/ipdf.h +++ b/src/ipdf.h @@ -2,30 +2,64 @@ #define _IPDF_H #include "common.h" +#include "real.h" +#include "bezier.h" +#include "rect.h" + +#include "path.h" namespace IPDF { - typedef float Real; - - inline float RealToFloat(Real r) {return r;} + + inline Real Random(Real max=1, Real min=0) + { + return min + (max-min) * (Real(rand() % (int)100) / Real(100)); + } typedef unsigned ObjectID; + /** Type of object + * NOTE: Extra entry in the enum so we can use this as an array index + */ + typedef enum + { + CIRCLE_FILLED = 0, + RECT_FILLED, + RECT_OUTLINE, + BEZIER, + PATH, + NUMBER_OF_OBJECT_TYPES + } ObjectType; - struct Rect + enum DocChunkTypes { - Real x; Real y; Real w; Real h; - Rect(Real _x, Real _y, Real _w, Real _h) : x(_x), y(_y), w(_w), h(_h) {} - std::string Str() - { - std::stringstream s; - s << "{" << x << ", " << y << ", " << w << ", " << h << "}"; - return s.str(); - } + CT_NUMOBJS, + CT_OBJTYPES, + CT_OBJBOUNDS, + CT_OBJINDICES, + CT_OBJBEZIERS, + CT_OBJPATHS }; struct Objects { - std::vector bounds; + /** Used by all objects **/ + std::vector types; // types of objects + std::vector bounds; // rectangle bounds of objects + /** Used by BEZIER and GROUP to identify data position in relevant vector **/ + std::vector data_indices; + /** Used by BEZIER only **/ + std::vector beziers; // bezier curves - look up by data_indices + /** Used by PATH only **/ + std::vector paths; + + void Clear() + { + types.clear(); + bounds.clear(); + data_indices.clear(); + beziers.clear(); + paths.clear(); + } }; class View;