#ifndef _IMGBOX2D_H #define _IMGBOX2D_H #include "IMGBBox.h" namespace IMG { //* this class represents a 2d bound box for a texture class Box2d { public: inline Box2d() { mMinimum.x = BOUNDINGBOX_MAXVALUE; mMinimum.y = BOUNDINGBOX_MAXVALUE; mMaximum.x = -BOUNDINGBOX_MAXVALUE; mMaximum.y = -BOUNDINGBOX_MAXVALUE; }; // GametoolsError -- Isma 17/08/2005 inline Box2d & operator =(const Box2d & p) { mMinimum = p.mMinimum; mMaximum = p.mMaximum; }; inline Ogre::Vector2 GetMinimum() { return mMinimum; }; inline Ogre::Vector2 GetMaximum() { return mMaximum; }; inline void SetBoundBox(float x, float y, float X, float Y) { mMinimum.x = x; mMinimum.y = y; mMaximum.x = X; mMaximum.y = Y; }; inline void AddBoundingVector3(float x, float y) { if (x < mMinimum.x) mMinimum.x = x; if (x > mMaximum.x) mMaximum.x = x; if (y < mMinimum.y) mMinimum.y = y; if (y > mMaximum.y) mMaximum.y = y; }; inline void Print() { printf("\nValor de la Caixa: (%.4f, %.4f) - (%.4f, %.4f)", mMinimum.x, mMinimum.y, mMaximum.x, mMaximum.y); }; inline Ogre::Vector2 * GetCorner(int corner) const { //if (corner < 0 || corner > 7) return Ogre::Vector3 (-1111111111, -1111111111, -1111111111); //return Ogre::AxisAlignedBox::getAllCorners ()[corner]; //printf("\nGetCorner: %d", corner); if (corner < 0 || corner > 4) return NULL; Ogre::Vector2 *vector; switch (corner) { case BOX_CORNER_xy: vector = new Ogre::Vector2(mMinimum.x, mMinimum.y ); break; case BOX_CORNER_xY: vector = new Ogre::Vector2(mMinimum.x, mMaximum.y ); break; case BOX_CORNER_Xy: vector = new Ogre::Vector2(mMaximum.x, mMinimum.y ); break; case BOX_CORNER_XY: vector = new Ogre::Vector2(mMaximum.x, mMaximum.y ); break; } return vector; }; inline bool In(int w, int h) { if (w <= (mMaximum.x - mMinimum.x) && h <= (mMaximum.y - mMinimum.y)) return true; return false; }; inline bool FitPerfect(int w, int h) { if (w == (mMaximum.x - mMinimum.x) && h == (mMaximum.y - mMinimum.y)) return true; return false; }; ~Box2d(); private: Ogre::Vector2 mMinimum, mMaximum; }; } #endif