HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Tetszőleges grafika elforgatása egy adott szögben


Példaprogram letöltése

7604 bájt

Egy apró grafikai trükkel elérhetjük azt, hogy egy tetszőleges általunk kirajzolt grafikát tetszőleges szögben elforgatva ismételten megjeleníthetünk.

Ehhez a következőket kell tennünk. Először is szükség van valamilyen rajzra, melyet majdan elforgatunk. A kirajzolást most a Form hátterére tesszük meg, ezért felhasználjuk annak Paint eseményét, mely akkor jön létre mikor a rajzot valamilyen okból frissíteni kell. Itt a paraméterként kapott „e” változó Graphics property-e egy Graphics típusú osztályt tárol, mellyel a rajzolás elvégezhető. A rajzunk most igen egyszerű lesz: húzunk egy egyenes vonalat, majd a végére egy kis kört rajzolunk. A megvalósítás módja viszont már itt eltérő lesz egy hagyományos rajztól, mivel azt egy GraphicsPath típusú osztály segítségével végezzük el. Itt az egyes rajz függvények tulajdonképpen még nem végeznek igazi, látható rajzolást, hanem csak előkészítik azt. Amikor például a GraphicsPath osztály AddLine függvényét használva „rajzolunk” egy egyenes vonalat a megadott két x, y koordináta közé, akkor valójában a GraphicsPath „megjegyzi” ennek a vonalnak a tulajdonságait, de még nem jeleníti meg azt. Így tetszőleges számú grafikai objektumot létrehozhatunk, majd a végén egy lépésben megjeleníthetünk.
A vonal után az AddEllipse függvénnyel létrehozzuk a kört is a vonal végén. Ehhez a kör x, y koordinátáját, valamint a vízszintes és függőleges sugarát kell megadnunk. Persze, ha e két érték különböző, akkor már nem beszélhetünk körről, mivel ez esetben ellipszis jönne létre.
      protected void Form1_Paint (object sender, System.WinForms.PaintEventArgs e)
      {
        Graphics g = e.Graphics; 
        GraphicsPath gp = new GraphicsPath();
        gp.AddLine(220, 220, 300, 300);        
        gp.AddEllipse(305, 305, 10, 10);
Ezt követően létrehozunk egy példányt a Matrix osztályból, melynek segítségével különféle transzformációkat végezhetünk el. Például a RotateAt függvényével valósíthatjuk meg a forgatást, melyre most szükségünk van. Itt első paraméterként az elfordulás szögét, másodikként pedig annak középpontját kell megadnunk. Ez még nem valósítja meg az elforgatást, hanem csak előkészíti azt.
        Matrix m = new Matrix(1, 0, 0, 1, 0, 0);        
        m.RotateAt(360.0f / trackBar1.Value, new PointF(200.0f, 200.0f));
Ezután egy ciklust kezdünk, melynek magja annyiszor fut, amely értéken áll aktuálisan a TrackBar komponensünk. A ciklusmagban a GraphicsPath osztály Transform függvényét meghívva a Matrix osztályban meghatározott transzformáció hajtódik végre. Vagyis ez lesz az a pillanat, amikor a GraphicsPath-hoz hozzáadott grafikák a megadott szögben elfordulnak. Ezt követően történik a tényleges megjelenítés, melyhez a Graphics osztály DrawPath függvényét használhatjuk fel. Ez képes arra, hogy egy GraphicsPath-ban tárolt tetszőleges grafikát kirajzoljon egy megadott színnel. Ehhez első paraméterként a színt kell megadnunk, majd ezt követően magát a GraphicsPath példányát.
        for (int i = 0; i < trackBar1.Value; i++)
        {
          gp.Transform(m);
          g.DrawPath(Pens.Black, gp);
        }
      }
Végül már csak arról kell gondoskodnunk, hogy amikor a felhasználó mozgatja a TrackBar komponenst, akkor a kirajzolás újra megtörténjen. Ez esetben az Invalidate függvény hívásával érvénytelenítjük a Form területét, melynek az lesz az eredménye, hogy annak újrarajzolása érdekében meghívásra kerül a Paint eseményében tárolt eseménykezelő függvény, vagyis lefut a fenti kirajzoló algoritmusunk.
      protected void trackBar1_Scroll (object sender, System.EventArgs e)
      {
        Invalidate();
      }

Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2001 évkönyv 115. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |