Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics...

79
Programozás I. Grafika Programozás I. 1. gyakorlat Bevezetés, grafika Surányi Márton PPKE-ITK 2013.02.11. 1/1

Transcript of Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics...

Page 1: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Programozás I.1. gyakorlat

Bevezetés, grafika

Surányi Márton

PPKE-ITK

2013.02.11.

1 / 1

Page 2: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

libgraphics

az előző félévben konzolon dolgoztunk, idén grafikus felületenis fogunka felhasznált library „hazai” (ITK-s) fejlesztés, az SDL-t(Simple DirectMedia Layer) használjahasználatának legegyszerűbb módja a: kezdőkit (windows-ra)linux-hoz van forrás (ubuntu: libsdl1.2-dev csomag kellhozzá)ez a lib nem csak grafikát, hanem beviteli eszközöket is kezel(billentyűzet, egér)a library-ben szereplő elemek a genv névtérben találhatóak

1 / 1

Page 3: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

libgraphics

az előző félévben konzolon dolgoztunk, idén grafikus felületenis fogunka felhasznált library „hazai” (ITK-s) fejlesztés, az SDL-t(Simple DirectMedia Layer) használjahasználatának legegyszerűbb módja a: kezdőkit (windows-ra)linux-hoz van forrás (ubuntu: libsdl1.2-dev csomag kellhozzá)ez a lib nem csak grafikát, hanem beviteli eszközöket is kezel(billentyűzet, egér)a library-ben szereplő elemek a genv névtérben találhatóak

1 / 1

Page 4: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

libgraphics

az előző félévben konzolon dolgoztunk, idén grafikus felületenis fogunka felhasznált library „hazai” (ITK-s) fejlesztés, az SDL-t(Simple DirectMedia Layer) használjahasználatának legegyszerűbb módja a: kezdőkit (windows-ra)linux-hoz van forrás (ubuntu: libsdl1.2-dev csomag kellhozzá)ez a lib nem csak grafikát, hanem beviteli eszközöket is kezel(billentyűzet, egér)a library-ben szereplő elemek a genv névtérben találhatóak

1 / 1

Page 5: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

libgraphics

az előző félévben konzolon dolgoztunk, idén grafikus felületenis fogunka felhasznált library „hazai” (ITK-s) fejlesztés, az SDL-t(Simple DirectMedia Layer) használjahasználatának legegyszerűbb módja a: kezdőkit (windows-ra)linux-hoz van forrás (ubuntu: libsdl1.2-dev csomag kellhozzá)ez a lib nem csak grafikát, hanem beviteli eszközöket is kezel(billentyűzet, egér)a library-ben szereplő elemek a genv névtérben találhatóak

1 / 1

Page 6: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

libgraphics

az előző félévben konzolon dolgoztunk, idén grafikus felületenis fogunka felhasznált library „hazai” (ITK-s) fejlesztés, az SDL-t(Simple DirectMedia Layer) használjahasználatának legegyszerűbb módja a: kezdőkit (windows-ra)linux-hoz van forrás (ubuntu: libsdl1.2-dev csomag kellhozzá)ez a lib nem csak grafikát, hanem beviteli eszközöket is kezel(billentyűzet, egér)a library-ben szereplő elemek a genv névtérben találhatóak

1 / 1

Page 7: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

libgraphics

az előző félévben konzolon dolgoztunk, idén grafikus felületenis fogunka felhasznált library „hazai” (ITK-s) fejlesztés, az SDL-t(Simple DirectMedia Layer) használjahasználatának legegyszerűbb módja a: kezdőkit (windows-ra)linux-hoz van forrás (ubuntu: libsdl1.2-dev csomag kellhozzá)ez a lib nem csak grafikát, hanem beviteli eszközöket is kezel(billentyűzet, egér)a library-ben szereplő elemek a genv névtérben találhatóak

1 / 1

Page 8: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

#include "graphics.hpp"

using namespace genv;

const static int SX = 640;const static int SY = 480;

int main(){gout.open(SX, SY);

gout << move_to(10,10) <<color(255,255,255) <<dot <<refresh;

gout << move(200,200) << color(255,0,0) << box(20,20);

2 / 1

Page 9: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

gout << color(0,255,0) << line(-100,0);

gout << color(255,255,0) << line_to(400,400) << refresh;

gout << move_to(200,100) << color(255,255,255) <<text("HELLO, WORLD!") << refresh;

event ev;while (gin >> ev) { }// az alkalmazásból az X megnyomásával léphetünk kireturn 0;

}

3 / 1

Page 10: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

gout

a gout-on keresztül érhetjük el a grafikus felületet (cout-hozhasonlóan a konzolt)Első lépés: ablakot kell nyitni, megadott mérettel (pixelben):

gout.open(640, 480);

ezek után rajzolhatunk a „rajzvászonra”a gout-ra hasonlóképp adhatunk utasításokat, mint a cout-ra,pl:

gout « move_to(30,20) « color(255,0,0) « box(40,20);

4 / 1

Page 11: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

gout

a gout-on keresztül érhetjük el a grafikus felületet (cout-hozhasonlóan a konzolt)Első lépés: ablakot kell nyitni, megadott mérettel (pixelben):

gout.open(640, 480);

ezek után rajzolhatunk a „rajzvászonra”a gout-ra hasonlóképp adhatunk utasításokat, mint a cout-ra,pl:

gout « move_to(30,20) « color(255,0,0) « box(40,20);

4 / 1

Page 12: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

gout

a gout-on keresztül érhetjük el a grafikus felületet (cout-hozhasonlóan a konzolt)Első lépés: ablakot kell nyitni, megadott mérettel (pixelben):

gout.open(640, 480);

ezek után rajzolhatunk a „rajzvászonra”a gout-ra hasonlóképp adhatunk utasításokat, mint a cout-ra,pl:

gout « move_to(30,20) « color(255,0,0) « box(40,20);

4 / 1

Page 13: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

gout

a gout-on keresztül érhetjük el a grafikus felületet (cout-hozhasonlóan a konzolt)Első lépés: ablakot kell nyitni, megadott mérettel (pixelben):

gout.open(640, 480);

ezek után rajzolhatunk a „rajzvászonra”a gout-ra hasonlóképp adhatunk utasításokat, mint a cout-ra,pl:

gout « move_to(30,20) « color(255,0,0) « box(40,20);

4 / 1

Page 14: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

gout

a gout-on keresztül érhetjük el a grafikus felületet (cout-hozhasonlóan a konzolt)Első lépés: ablakot kell nyitni, megadott mérettel (pixelben):

gout.open(640, 480);

ezek után rajzolhatunk a „rajzvászonra”a gout-ra hasonlóképp adhatunk utasításokat, mint a cout-ra,pl:

gout « move_to(30,20) « color(255,0,0) « box(40,20);

4 / 1

Page 15: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

gout

érdemes úgy elképzelni, hogy van rengeteg színes ceruzánk,amiket cserélgethetünk (color)mozgathatjuk a kezünket a rajzvászon fölött (move, move_to)és rajzolhatunk (dot, line, line_to, box, box_to)az elvégzett műveletek nem rajzolódnak ki azonnal, hanem egyköztes memóriarészben (buffer) tárolódnak, és a refreshutasítás hatására rajzolódnak ténylegesen a képernyőre

5 / 1

Page 16: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

gout

érdemes úgy elképzelni, hogy van rengeteg színes ceruzánk,amiket cserélgethetünk (color)mozgathatjuk a kezünket a rajzvászon fölött (move, move_to)és rajzolhatunk (dot, line, line_to, box, box_to)az elvégzett műveletek nem rajzolódnak ki azonnal, hanem egyköztes memóriarészben (buffer) tárolódnak, és a refreshutasítás hatására rajzolódnak ténylegesen a képernyőre

5 / 1

Page 17: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

gout

érdemes úgy elképzelni, hogy van rengeteg színes ceruzánk,amiket cserélgethetünk (color)mozgathatjuk a kezünket a rajzvászon fölött (move, move_to)és rajzolhatunk (dot, line, line_to, box, box_to)az elvégzett műveletek nem rajzolódnak ki azonnal, hanem egyköztes memóriarészben (buffer) tárolódnak, és a refreshutasítás hatására rajzolódnak ténylegesen a képernyőre

5 / 1

Page 18: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

gout

érdemes úgy elképzelni, hogy van rengeteg színes ceruzánk,amiket cserélgethetünk (color)mozgathatjuk a kezünket a rajzvászon fölött (move, move_to)és rajzolhatunk (dot, line, line_to, box, box_to)az elvégzett műveletek nem rajzolódnak ki azonnal, hanem egyköztes memóriarészben (buffer) tárolódnak, és a refreshutasítás hatására rajzolódnak ténylegesen a képernyőre

5 / 1

Page 19: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

A képernyő - a vászon

6 / 1

Page 20: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Szín beállítása

szín beállítása:

gout « color(R,G,B)

ahol az R, G, B helyére a szín piros, zöld és kék színekkomponensei kerülnek 0-255 között.pl. a color(0,0,0) jelenti a feketét (mindegyik komponens 0)a color(255,255,255) jelenti a fehéret (mindegyik komponensmax.)255,0,0: piros;0,255,0: zöld;0,0,255: kék;255,255,0: sárgaTovábbi színek RGB kódjai:http://www.tayloredmktg.com/rgb/

7 / 1

Page 21: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Szín beállítása

szín beállítása:

gout « color(R,G,B)

ahol az R, G, B helyére a szín piros, zöld és kék színekkomponensei kerülnek 0-255 között.pl. a color(0,0,0) jelenti a feketét (mindegyik komponens 0)a color(255,255,255) jelenti a fehéret (mindegyik komponensmax.)255,0,0: piros;0,255,0: zöld;0,0,255: kék;255,255,0: sárgaTovábbi színek RGB kódjai:http://www.tayloredmktg.com/rgb/

7 / 1

Page 22: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Szín beállítása

szín beállítása:

gout « color(R,G,B)

ahol az R, G, B helyére a szín piros, zöld és kék színekkomponensei kerülnek 0-255 között.pl. a color(0,0,0) jelenti a feketét (mindegyik komponens 0)a color(255,255,255) jelenti a fehéret (mindegyik komponensmax.)255,0,0: piros;0,255,0: zöld;0,0,255: kék;255,255,0: sárgaTovábbi színek RGB kódjai:http://www.tayloredmktg.com/rgb/

7 / 1

Page 23: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Szín beállítása

szín beállítása:

gout « color(R,G,B)

ahol az R, G, B helyére a szín piros, zöld és kék színekkomponensei kerülnek 0-255 között.pl. a color(0,0,0) jelenti a feketét (mindegyik komponens 0)a color(255,255,255) jelenti a fehéret (mindegyik komponensmax.)255,0,0: piros;0,255,0: zöld;0,0,255: kék;255,255,0: sárgaTovábbi színek RGB kódjai:http://www.tayloredmktg.com/rgb/

7 / 1

Page 24: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Szín beállítása

szín beállítása:

gout « color(R,G,B)

ahol az R, G, B helyére a szín piros, zöld és kék színekkomponensei kerülnek 0-255 között.pl. a color(0,0,0) jelenti a feketét (mindegyik komponens 0)a color(255,255,255) jelenti a fehéret (mindegyik komponensmax.)255,0,0: piros;0,255,0: zöld;0,0,255: kék;255,255,0: sárgaTovábbi színek RGB kódjai:http://www.tayloredmktg.com/rgb/

7 / 1

Page 25: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Szín beállítása

szín beállítása:

gout « color(R,G,B)

ahol az R, G, B helyére a szín piros, zöld és kék színekkomponensei kerülnek 0-255 között.pl. a color(0,0,0) jelenti a feketét (mindegyik komponens 0)a color(255,255,255) jelenti a fehéret (mindegyik komponensmax.)255,0,0: piros;0,255,0: zöld;0,0,255: kék;255,255,0: sárgaTovábbi színek RGB kódjai:http://www.tayloredmktg.com/rgb/

7 / 1

Page 26: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Szín beállítása

szín beállítása:

gout « color(R,G,B)

ahol az R, G, B helyére a szín piros, zöld és kék színekkomponensei kerülnek 0-255 között.pl. a color(0,0,0) jelenti a feketét (mindegyik komponens 0)a color(255,255,255) jelenti a fehéret (mindegyik komponensmax.)255,0,0: piros;0,255,0: zöld;0,0,255: kék;255,255,0: sárgaTovábbi színek RGB kódjai:http://www.tayloredmktg.com/rgb/

7 / 1

Page 27: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Mozgatás

kétféleképpen mozgathatjuk a ceruzát a levegőben:relatív:

gout « move(X,Y);

és abszolút módon:

gout « move_to(X,Y);

relatív módban mindig a aktuális pozícióhoz adódik hozzá az Xés Yabszolút módban az (X,Y) koordinátájú pixelre áll a „kurzor”

8 / 1

Page 28: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Mozgatás

kétféleképpen mozgathatjuk a ceruzát a levegőben:relatív:

gout « move(X,Y);

és abszolút módon:

gout « move_to(X,Y);

relatív módban mindig a aktuális pozícióhoz adódik hozzá az Xés Yabszolút módban az (X,Y) koordinátájú pixelre áll a „kurzor”

8 / 1

Page 29: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Mozgatás

kétféleképpen mozgathatjuk a ceruzát a levegőben:relatív:

gout « move(X,Y);

és abszolút módon:

gout « move_to(X,Y);

relatív módban mindig a aktuális pozícióhoz adódik hozzá az Xés Yabszolút módban az (X,Y) koordinátájú pixelre áll a „kurzor”

8 / 1

Page 30: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Mozgatás

kétféleképpen mozgathatjuk a ceruzát a levegőben:relatív:

gout « move(X,Y);

és abszolút módon:

gout « move_to(X,Y);

relatív módban mindig a aktuális pozícióhoz adódik hozzá az Xés Yabszolút módban az (X,Y) koordinátájú pixelre áll a „kurzor”

8 / 1

Page 31: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Mozgatás

kétféleképpen mozgathatjuk a ceruzát a levegőben:relatív:

gout « move(X,Y);

és abszolút módon:

gout « move_to(X,Y);

relatív módban mindig a aktuális pozícióhoz adódik hozzá az Xés Yabszolút módban az (X,Y) koordinátájú pixelre áll a „kurzor”

8 / 1

Page 32: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Mozgatás

kétféleképpen mozgathatjuk a ceruzát a levegőben:relatív:

gout « move(X,Y);

és abszolút módon:

gout « move_to(X,Y);

relatív módban mindig a aktuális pozícióhoz adódik hozzá az Xés Yabszolút módban az (X,Y) koordinátájú pixelre áll a „kurzor”

8 / 1

Page 33: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Pont és vonal rajzolás

pontot a dot paranccsal rajzolhatunk, oda ahova legutóbbmozgattukvonal rajzolása mindig az aktuális pozíciótól kezdődik, avégpontot pedig relatív, illetve abszolút módon adhatjuk meg:

gout « move_to(30,45) « line(0,10);

gout « move_to(30,45) « line_to(30, 55);

(a fenti két példa ugyanazt a vonalat rajzolja)

9 / 1

Page 34: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Pont és vonal rajzolás

pontot a dot paranccsal rajzolhatunk, oda ahova legutóbbmozgattukvonal rajzolása mindig az aktuális pozíciótól kezdődik, avégpontot pedig relatív, illetve abszolút módon adhatjuk meg:

gout « move_to(30,45) « line(0,10);

gout « move_to(30,45) « line_to(30, 55);

(a fenti két példa ugyanazt a vonalat rajzolja)

9 / 1

Page 35: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Pont és vonal rajzolás

pontot a dot paranccsal rajzolhatunk, oda ahova legutóbbmozgattukvonal rajzolása mindig az aktuális pozíciótól kezdődik, avégpontot pedig relatív, illetve abszolút módon adhatjuk meg:

gout « move_to(30,45) « line(0,10);

gout « move_to(30,45) « line_to(30, 55);

(a fenti két példa ugyanazt a vonalat rajzolja)

9 / 1

Page 36: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Pont és vonal rajzolás

pontot a dot paranccsal rajzolhatunk, oda ahova legutóbbmozgattukvonal rajzolása mindig az aktuális pozíciótól kezdődik, avégpontot pedig relatív, illetve abszolút módon adhatjuk meg:

gout « move_to(30,45) « line(0,10);

gout « move_to(30,45) « line_to(30, 55);

(a fenti két példa ugyanazt a vonalat rajzolja)

9 / 1

Page 37: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Doboz rajzolás

A vonalhoz hasonlóan a doboz rajzolása mindig az aktuálispozíciótól kezdődik, végpont pedig relatív, vagy abszolút:

gout « move_to(40,40) « box(10,10);

gout « move_to(40,40) « box_to(50,50);

(a fenti két példa ugyanazt a dobozt rajzolja)

10 / 1

Page 38: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Doboz rajzolás

A vonalhoz hasonlóan a doboz rajzolása mindig az aktuálispozíciótól kezdődik, végpont pedig relatív, vagy abszolút:

gout « move_to(40,40) « box(10,10);

gout « move_to(40,40) « box_to(50,50);

(a fenti két példa ugyanazt a dobozt rajzolja)

10 / 1

Page 39: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Doboz rajzolás

A vonalhoz hasonlóan a doboz rajzolása mindig az aktuálispozíciótól kezdődik, végpont pedig relatív, vagy abszolút:

gout « move_to(40,40) « box(10,10);

gout « move_to(40,40) « box_to(50,50);

(a fenti két példa ugyanazt a dobozt rajzolja)

10 / 1

Page 40: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Szöveg kiírása, segédfüggvények

szöveg kiírása az aktuális pozíciótól (a szöveg baseline-jakezdődik az aktuális pozíción):

gout « move_to(54,56) « text("Hello, World!");

A text() argumentumaként megadhatunk string-et, vagychar-t(FONTOS: int-et, double-t nem! Ezeket pl. stringstream-enkeresztül lehet).

11 / 1

Page 41: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Szöveg kiírása, segédfüggvények

szöveg kiírása az aktuális pozíciótól (a szöveg baseline-jakezdődik az aktuális pozíción):

gout « move_to(54,56) « text("Hello, World!");

A text() argumentumaként megadhatunk string-et, vagychar-t(FONTOS: int-et, double-t nem! Ezeket pl. stringstream-enkeresztül lehet).

11 / 1

Page 42: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Szöveg kiírása, segédfüggvények

szöveg kiírása az aktuális pozíciótól (a szöveg baseline-jakezdődik az aktuális pozíción):

gout « move_to(54,56) « text("Hello, World!");

A text() argumentumaként megadhatunk string-et, vagychar-t(FONTOS: int-et, double-t nem! Ezeket pl. stringstream-enkeresztül lehet).

11 / 1

Page 43: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

Szöveg kiírása, segédfüggvények

szöveg kiírása az aktuális pozíciótól (a szöveg baseline-jakezdődik az aktuális pozíción):

gout « move_to(54,56) « text("Hello, World!");

A text() argumentumaként megadhatunk string-et, vagychar-t(FONTOS: int-et, double-t nem! Ezeket pl. stringstream-enkeresztül lehet).

11 / 1

Page 44: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

REFRESH

FONTOS! A képernyőre a rajzolás csak akkor válik láthatóvá,ha kiadtuk a refresh parancsot!(ez sokszor hiba, hogy lemarad)ezt azért kell külön kiadni, mert egy időigényes művelet, és hasokat rajzolunk (pl. egy cikluson belül), akkor belassulhat aprogram(El lehet úgy képzelni, mintha paint-ben rajzolnánk, és mindigcsak egy-egy pixelt, vonalat rajzolunk, majd minden egyesrajzművelet után kinyomtatjuk ugyanarra a lapra. Így sokkallassabban fog elkészülni a kép.)

12 / 1

Page 45: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

REFRESH

FONTOS! A képernyőre a rajzolás csak akkor válik láthatóvá,ha kiadtuk a refresh parancsot!(ez sokszor hiba, hogy lemarad)ezt azért kell külön kiadni, mert egy időigényes művelet, és hasokat rajzolunk (pl. egy cikluson belül), akkor belassulhat aprogram(El lehet úgy képzelni, mintha paint-ben rajzolnánk, és mindigcsak egy-egy pixelt, vonalat rajzolunk, majd minden egyesrajzművelet után kinyomtatjuk ugyanarra a lapra. Így sokkallassabban fog elkészülni a kép.)

12 / 1

Page 46: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

REFRESH

FONTOS! A képernyőre a rajzolás csak akkor válik láthatóvá,ha kiadtuk a refresh parancsot!(ez sokszor hiba, hogy lemarad)ezt azért kell külön kiadni, mert egy időigényes művelet, és hasokat rajzolunk (pl. egy cikluson belül), akkor belassulhat aprogram(El lehet úgy képzelni, mintha paint-ben rajzolnánk, és mindigcsak egy-egy pixelt, vonalat rajzolunk, majd minden egyesrajzművelet után kinyomtatjuk ugyanarra a lapra. Így sokkallassabban fog elkészülni a kép.)

12 / 1

Page 47: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.Grafika

REFRESH

FONTOS! A képernyőre a rajzolás csak akkor válik láthatóvá,ha kiadtuk a refresh parancsot!(ez sokszor hiba, hogy lemarad)ezt azért kell külön kiadni, mert egy időigényes művelet, és hasokat rajzolunk (pl. egy cikluson belül), akkor belassulhat aprogram(El lehet úgy képzelni, mintha paint-ben rajzolnánk, és mindigcsak egy-egy pixelt, vonalat rajzolunk, majd minden egyesrajzművelet után kinyomtatjuk ugyanarra a lapra. Így sokkallassabban fog elkészülni a kép.)

12 / 1

Page 48: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Eseménykezelés

Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:

typekeycodepos_x, pos_ybuttontime

13 / 1

Page 49: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Eseménykezelés

Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:

typekeycodepos_x, pos_ybuttontime

13 / 1

Page 50: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Eseménykezelés

Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:

typekeycodepos_x, pos_ybuttontime

13 / 1

Page 51: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Eseménykezelés

Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:

typekeycodepos_x, pos_ybuttontime

13 / 1

Page 52: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Eseménykezelés

Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:

typekeycodepos_x, pos_ybuttontime

13 / 1

Page 53: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Eseménykezelés

Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:

typekeycodepos_x, pos_ybuttontime

13 / 1

Page 54: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Eseménykezelés

Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:

typekeycodepos_x, pos_ybuttontime

13 / 1

Page 55: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Eseménykezelés

Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:

typekeycodepos_x, pos_ybuttontime

13 / 1

Page 56: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Eseménykezelés

Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:

typekeycodepos_x, pos_ybuttontime

13 / 1

Page 57: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Eseménykezelés

Nem csak rajzolni tudunk, hanem lehet interaktívalkalmazásokat készíteniinterakció: (itt) egér, billentyűzet által beavatkozunk aprogram működésébea graphics-ben események segítségével tudjuk kezelni ezeketaz esemény típusa: eventaz event egy struct, aminek vannak adattagjai:

typekeycodepos_x, pos_ybuttontime

13 / 1

Page 58: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

event adattagjai, lehetséges értékek

type: esemény típusa: ev_key, ev_mouse, ev_timerkeycode: billenytűesemény esetén: billentyű azonosítójapos_x, pos_y: egérmozgatás esetén: az egérkurzor pozíciójabutton: egéresemény (gomb) esetén: egérgomb azonosítója:btn_left, btn_right, btn_middle, btn_wheelup,btn_wheeldowntime: időzítőesemény esetén: a program indítása óta eltelt időmillisec-ben

14 / 1

Page 59: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

event adattagjai, lehetséges értékek

type: esemény típusa: ev_key, ev_mouse, ev_timerkeycode: billenytűesemény esetén: billentyű azonosítójapos_x, pos_y: egérmozgatás esetén: az egérkurzor pozíciójabutton: egéresemény (gomb) esetén: egérgomb azonosítója:btn_left, btn_right, btn_middle, btn_wheelup,btn_wheeldowntime: időzítőesemény esetén: a program indítása óta eltelt időmillisec-ben

14 / 1

Page 60: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

event adattagjai, lehetséges értékek

type: esemény típusa: ev_key, ev_mouse, ev_timerkeycode: billenytűesemény esetén: billentyű azonosítójapos_x, pos_y: egérmozgatás esetén: az egérkurzor pozíciójabutton: egéresemény (gomb) esetén: egérgomb azonosítója:btn_left, btn_right, btn_middle, btn_wheelup,btn_wheeldowntime: időzítőesemény esetén: a program indítása óta eltelt időmillisec-ben

14 / 1

Page 61: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

event adattagjai, lehetséges értékek

type: esemény típusa: ev_key, ev_mouse, ev_timerkeycode: billenytűesemény esetén: billentyű azonosítójapos_x, pos_y: egérmozgatás esetén: az egérkurzor pozíciójabutton: egéresemény (gomb) esetén: egérgomb azonosítója:btn_left, btn_right, btn_middle, btn_wheelup,btn_wheeldowntime: időzítőesemény esetén: a program indítása óta eltelt időmillisec-ben

14 / 1

Page 62: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

event adattagjai, lehetséges értékek

type: esemény típusa: ev_key, ev_mouse, ev_timerkeycode: billenytűesemény esetén: billentyű azonosítójapos_x, pos_y: egérmozgatás esetén: az egérkurzor pozíciójabutton: egéresemény (gomb) esetén: egérgomb azonosítója:btn_left, btn_right, btn_middle, btn_wheelup,btn_wheeldowntime: időzítőesemény esetén: a program indítása óta eltelt időmillisec-ben

14 / 1

Page 63: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Eseményciklus

Az eseményciklus a grafikus alkalmazás egyik fő ciklusa. Amíg ez aciklus fut, addig a program képes eseményeket fogadni.

15 / 1

Page 64: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Példa

Példa: Bal egérkattintásra változtassuk meg a képernyő hátterénekszínét egy új, véletlenszerű színre!

#include "graphics.hpp"using namespace genv;

const int SX = 400;const int SY = 400;

int main() {srand(time(0));gout.open(SX, SY);

16 / 1

Page 65: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

event ev;while(gin >> ev) {if (ev.button == btn_left) {gout << color(rand() % 256, rand() % 256, rand() % 256)

<< move_to(0,0)<< box(SX,SY) << refresh;

}}return 0;

}

17 / 1

Page 66: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Példa: Bal egérkattintásra rajzoljunk ki egy 20x20-as sárganégyzetet az adott egérpozícióba! Az alkalmazás escape-re lépjenki!

#include "graphics.hpp"#include <algorithm>using namespace genv;

const int SX = 640;const int SY = 480;

int main(){gout.open(640, 480);

18 / 1

Page 67: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

event ev;while (gin >> ev) {if (ev.button == btn_left) {gout << move_to(ev.pos_x, ev.pos_y)

<< color(255,255,0)<< box(20,20) << refresh;

}else if (ev.keycode == key_escape) {exit(0);

}}

return 0;}

19 / 1

Page 68: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Fejlesszük tovább: írjunk a doboz rajzolására, illetve a véletlen színgenerálására függvényt! Valamint az enter lenyomására mentse el aképet output.bmp néven!

#include "graphics.hpp"#include <algorithm>using namespace genv;

void draw_box(int x, int y, color c, int size) {gout << move_to(x, y) << c << box(size, size);

}

color rand_color() {color ret(rand() % 256, rand() % 256, rand() % 256);return ret;

}

20 / 1

Page 69: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

int main(){gout.open(640, 480);event ev;while (gin >> ev) {if (ev.button == btn_left) {draw_box(ev.pos_x, ev.pos_y,

rand_color(),(rand() % 10) + 20);

gout << refresh;}else if (ev.keycode == key_escape) {exit(0);

}else if (ev.keycode == key_enter) {gout.save("output.bmp");

}}return 0;

}21 / 1

Page 70: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Timer

az időzítőt a gin.timer(int ms) függvénnyel tudjukbeállítani, és elindítaniParaméterként millisec-ben kell megadni a periódust, ígyminden megadott ms-ben generál egy időzítő eseménytkikapcsolni így lehet: gin.timer(0)időzítőesemény esetén az event type mezője az ev_timerértéket veszi föla time mező pedig az addig eltelt ezredmásodpercek számát

22 / 1

Page 71: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Timer

az időzítőt a gin.timer(int ms) függvénnyel tudjukbeállítani, és elindítaniParaméterként millisec-ben kell megadni a periódust, ígyminden megadott ms-ben generál egy időzítő eseménytkikapcsolni így lehet: gin.timer(0)időzítőesemény esetén az event type mezője az ev_timerértéket veszi föla time mező pedig az addig eltelt ezredmásodpercek számát

22 / 1

Page 72: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Timer

az időzítőt a gin.timer(int ms) függvénnyel tudjukbeállítani, és elindítaniParaméterként millisec-ben kell megadni a periódust, ígyminden megadott ms-ben generál egy időzítő eseménytkikapcsolni így lehet: gin.timer(0)időzítőesemény esetén az event type mezője az ev_timerértéket veszi föla time mező pedig az addig eltelt ezredmásodpercek számát

22 / 1

Page 73: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Timer

az időzítőt a gin.timer(int ms) függvénnyel tudjukbeállítani, és elindítaniParaméterként millisec-ben kell megadni a periódust, ígyminden megadott ms-ben generál egy időzítő eseménytkikapcsolni így lehet: gin.timer(0)időzítőesemény esetén az event type mezője az ev_timerértéket veszi föla time mező pedig az addig eltelt ezredmásodpercek számát

22 / 1

Page 74: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Timer

az időzítőt a gin.timer(int ms) függvénnyel tudjukbeállítani, és elindítaniParaméterként millisec-ben kell megadni a periódust, ígyminden megadott ms-ben generál egy időzítő eseménytkikapcsolni így lehet: gin.timer(0)időzítőesemény esetén az event type mezője az ev_timerértéket veszi föla time mező pedig az addig eltelt ezredmásodpercek számát

22 / 1

Page 75: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

#include "graphics.hpp"#include <algorithm>#include <sstream>using namespace genv;

const int SX = 640;const int SY = 480;

int main(){gout.open(SX, SY);event ev;gin.timer(100);std::stringstream ss;

23 / 1

Page 76: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

while (gin >> ev) {if (ev.type == ev_timer) {

ss << "Eltelt ezredmasodpercek szama: " << ev.time;gout << move_to(0,0) << color(0,0,0) << box(SX,SY);gout << move_to(20,20) << color(255,255,0) << text( ss.str() ) << refresh;ss.str("");

}else if (ev.keycode == key_escape) {

exit(0);}

}return 0;

}

24 / 1

Page 77: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Feladatok

1-1-a) Rajzoljunk egy random méretű narancssárga dobozt! (améretek legyenek 10 és 30 között)1-1-b) Rajzoljunk három darab random méretű dobozt,random pozícióba! (ügyeljünk rá, hogy véletlenül se „lóghassonle” egyik se a képernyőről!)1-1-c) Írjunk ebből függvényt: a függvény rajzoljon egyparaméterként adott pozícióba egy adott színű, randomméretű dobozt!1-1-d) Írjunk egy olyan függvényt is, ahol a doboz színét nemadhatjuk meg, hanem az is véletlenszerű!

25 / 1

Page 78: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Feladatok (folyt.)

1-2) Nyiss egy 400x400-as ablakot, és rajzold meg a következőábrákat:

1-2-a) 1-2-b) 1-2-c) 1-2-d)

26 / 1

Page 79: Programozás I.users.itk.ppke.hu/~surma/prog1/upload/01.pdfProgramozásI. Grafika libgraphics azelőzőfélévbenkonzolondolgoztunk,idéngrafikusfelületen isfogunk afelhasználtlibrary„hazai”

Programozás I.GrafikaEseménykezelés

Házi feladat

01.cpp 02.cpp 03.cpp 04.cpp

(a 01-es mappába töltsétek a házikat!)

27 / 1