Main Page   Class Hierarchy   Compound List   File List   Compound Members  

mgobject.h

00001 
00002 // © Copyright Marko Grönroos 1996, all rights reserved.                     //
00003 // Omistusoikeus Marko Grönroos, 1996, kaikki oikeudet pidätetään.           //
00004 //   Tämän tiedoston kopiointi, lukeminen ja käyttö ja erityisesti tämän     //
00005 // ilmoitustekstin muuttaminen on kiellettyä ilman asianmukaista lupaa.      //
00006 //                                                                           //
00007 //                                             Marko Grönroos (magi@utu.fi)  //
00009 
00010 #ifndef _GOBJECT_H
00011 #define _GOBJECT_H
00012 
00013 #include "magic/mobject.h"
00014 #include "magic/mcoord.h"
00015 
00016 //- Moduuli sisältää kaikenlaisia kivoja grafiikkaobjekteja, kuten viivoja,
00017 //- ympyröitä, nelikulmioita, jne. ja niiden käsittelyyn liittyviä apufunktioita.<BR>
00018 //- Mukana ei kuitenkaan ole mitään varsinaisia ikkunaobjekteja, vaan nämä ovat
00019 //- täysin puhtaan loogisia objekteja.
00020 
00022 // Logical graphic structures
00023 
00024 // Nelikulmio (Rectangle).<BR>
00025 // Oletetaan, että <I>{x0&lt;x1</I> && <I>y0&lt;y1}</I>, tai muutoin
00026 // tapahtuu jotain hyvin omituista, kuten että nelikulmioon kuuluvat
00027 // kaikki pisteet, jotka ovat ko. alueen ulkopuolella...
00028 class Rect {
00029   protected:
00030     Coord2D mCorner1;
00031     Coord2D mCorner2;
00032   public:
00033 
00034                     Rect        () : mCorner1(0,0), mCorner2(0,0) {;}
00035                     Rect        (float x0, float y0, float x1, float y1) {
00036                         mCorner1.moveTo (x0, y0);
00037                         mCorner2.moveTo (x1, y1);
00038                     }
00039                     Rect        (const Coord2D& s, const Coord2D& e) : mCorner1(s), mCorner2(e) {
00040                     }
00041 
00042     void            operator=   (const Rect& other);
00043 
00044     // Koon muutokset ja luvut
00045 
00046     // Asettaa kaikki tiedot kerralla
00047     void            set         (float x0, float y0, float x1, float y1) {
00048         mCorner1.moveTo (x0, y0);
00049         mCorner2.moveTo (x1, y1);
00050     }
00051     void            set         (const Coord2D& s, const Coord2D& e) {
00052         mCorner1.copy (s);
00053         mCorner2.copy (e);
00054     }
00055 
00056     // Hakee kaikki koordinaattitiedot kerralla
00057     void            get         (float& x0, float& y0, float& x1, float& y1) const;
00058 
00059     const Coord2D&  lowerLeft   () const {return mCorner1;}
00060     Coord2D&        lowerLeft   () {return mCorner1;}
00061     const Coord2D&  upperRight  () const {return mCorner2;}
00062     Coord2D&        upperRight  () {return mCorner2;}
00063     
00064     // Asettaa vasemman yläkulman sijainnin
00065     void            setPos      (float x, float y);
00066 
00067     // Asettaa koon
00068     void            setSize     (float xsize, float ysize);
00069 
00070     // Lukee koon
00071     void            getSize     (float& xsize, float& ysize) const;
00072 
00073     float           width       () const {return fabs(mCorner2.x-mCorner1.x);}
00074     float           height      () const {return fabs(mCorner2.y-mCorner1.y);}
00075     
00076     // Siirtäminen
00077 
00078     // Siirretään annettuun alkupaikkaan
00079     void            moveTo      (const Coord2D& pos);
00080 
00081     // Siirretään halutun offsetin verran
00082     void            moveBy      (const Coord2D& offset);
00083 
00084     // Muut
00085 
00086     // Testaa, onko annettu koordinaatti nelikulmion sisäpuolella
00087     bool            isInside    (const Coord2D& pos) const {
00088         return (pos.x>=mCorner1.x && pos.x<=mCorner2.x &&
00089                 pos.y>=mCorner1.y && pos.y<=mCorner2.y);
00090     }   
00091 
00092     // Testaa koskettaako nelikulmio toista
00093     bool            touches     (const Rect& other) const;
00094 };
00095 
00096 #endif

Generated at Tue Dec 4 19:53:25 2001 for MagiC++ by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001