[700] | 1 | #ifndef _IMGBOX2D_H |
---|
| 2 | #define _IMGBOX2D_H |
---|
| 3 | |
---|
| 4 | #include "IMGBBox.h" |
---|
| 5 | |
---|
| 6 | namespace IMG { |
---|
| 7 | |
---|
| 8 | //* this class represents a 2d bound box for a texture |
---|
| 9 | class Box2d { |
---|
| 10 | public: |
---|
| 11 | inline Box2d() { |
---|
| 12 | mMinimum.x = BOUNDINGBOX_MAXVALUE; |
---|
| 13 | mMinimum.y = BOUNDINGBOX_MAXVALUE; |
---|
| 14 | |
---|
| 15 | mMaximum.x = -BOUNDINGBOX_MAXVALUE; |
---|
| 16 | mMaximum.y = -BOUNDINGBOX_MAXVALUE; |
---|
| 17 | }; |
---|
| 18 | |
---|
| 19 | // GametoolsError -- Isma 17/08/2005 |
---|
| 20 | inline Box2d & operator =(const Box2d & p) { |
---|
| 21 | mMinimum = p.mMinimum; |
---|
| 22 | mMaximum = p.mMaximum; |
---|
| 23 | }; |
---|
| 24 | |
---|
| 25 | inline Ogre::Vector2 GetMinimum() { |
---|
| 26 | return mMinimum; |
---|
| 27 | }; |
---|
| 28 | |
---|
| 29 | inline Ogre::Vector2 GetMaximum() { |
---|
| 30 | return mMaximum; |
---|
| 31 | }; |
---|
| 32 | |
---|
| 33 | inline void SetBoundBox(float x, float y, float X, float Y) { |
---|
| 34 | mMinimum.x = x; |
---|
| 35 | mMinimum.y = y; |
---|
| 36 | mMaximum.x = X; |
---|
| 37 | mMaximum.y = Y; |
---|
| 38 | }; |
---|
| 39 | |
---|
| 40 | inline void AddBoundingVector3(float x, float y) { |
---|
| 41 | if (x < mMinimum.x) mMinimum.x = x; if (x > mMaximum.x) mMaximum.x = x; |
---|
| 42 | if (y < mMinimum.y) mMinimum.y = y; if (y > mMaximum.y) mMaximum.y = y; |
---|
| 43 | }; |
---|
| 44 | |
---|
| 45 | inline void Print() { |
---|
| 46 | printf("\nValor de la Caixa: (%.4f, %.4f) - (%.4f, %.4f)", mMinimum.x, mMinimum.y, mMaximum.x, mMaximum.y); |
---|
| 47 | }; |
---|
| 48 | |
---|
| 49 | inline Ogre::Vector2 * GetCorner(int corner) const { |
---|
| 50 | |
---|
| 51 | //if (corner < 0 || corner > 7) return Ogre::Vector3 (-1111111111, -1111111111, -1111111111); |
---|
| 52 | //return Ogre::AxisAlignedBox::getAllCorners ()[corner]; |
---|
| 53 | //printf("\nGetCorner: %d", corner); |
---|
| 54 | |
---|
| 55 | if (corner < 0 || corner > 4) return NULL; |
---|
| 56 | |
---|
| 57 | Ogre::Vector2 *vector; |
---|
| 58 | switch (corner) |
---|
| 59 | { |
---|
| 60 | case BOX_CORNER_xy: vector = new Ogre::Vector2(mMinimum.x, mMinimum.y ); break; |
---|
| 61 | case BOX_CORNER_xY: vector = new Ogre::Vector2(mMinimum.x, mMaximum.y ); break; |
---|
| 62 | case BOX_CORNER_Xy: vector = new Ogre::Vector2(mMaximum.x, mMinimum.y ); break; |
---|
| 63 | case BOX_CORNER_XY: vector = new Ogre::Vector2(mMaximum.x, mMaximum.y ); break; |
---|
| 64 | |
---|
| 65 | } |
---|
| 66 | |
---|
| 67 | return vector; |
---|
| 68 | }; |
---|
| 69 | |
---|
| 70 | inline bool In(int w, int h) { |
---|
| 71 | if (w <= (mMaximum.x - mMinimum.x) && |
---|
| 72 | h <= (mMaximum.y - mMinimum.y)) return true; |
---|
| 73 | |
---|
| 74 | return false; |
---|
| 75 | }; |
---|
| 76 | |
---|
| 77 | inline bool FitPerfect(int w, int h) { |
---|
| 78 | if (w == (mMaximum.x - mMinimum.x) && |
---|
| 79 | h == (mMaximum.y - mMinimum.y)) return true; |
---|
| 80 | |
---|
| 81 | return false; |
---|
| 82 | }; |
---|
| 83 | |
---|
| 84 | ~Box2d(); |
---|
| 85 | |
---|
| 86 | private:
|
---|
| 87 | Ogre::Vector2 mMinimum, mMaximum; |
---|
| 88 | }; |
---|
| 89 | |
---|
| 90 | } |
---|
| 91 | #endif |
---|