Számítógépes Grafika 2. gyakorlat Programtervező informatikus (esti) 2011/2012 őszi félév
Utasítások PImage:.gif,.jpg,.tga és.png képek megjelenítését szolgáló osztály A.width és.height mezők az adott kép szélességét és magasságát tárolják A.pixels tömbje pedig a színeket
Utasítások loadImage(eleres): visszaad egy PImage-t, ami az első paraméterben megadott elérési útvonalon található (lehet URL is!) image(img, x, y, width, height): kirajzol Az img nevű PImage típusú képet kifeszíti az (x, y, width, height) által meghatározott téglalapra (ha kell nagyít/kicsinyít)
Utasítások A pixels[] tömb használata a következő: Először img.loadPixels() függvényhívás kell, ami feltölti a pixels[] tömböt Utána használhatjuk a img.pixels[]-t a kép pixeleinek lekérdezésére és módosítására (1D-s a tömb!) Végül ha módosításokat végeztünk, akkor img.updatePixels()-t kell hívnunk
Példa PImage i ; void setup() { size(600,600) ; i = loadImage(" ; } void draw() { image(i,10,10) ; }
Feladat 1 Töltsetek be egy tetszőleges képet a netről Bal kattintás jelölje ki a kép bal felső pozícióját Jobb kattintás pedig a jobb alsót
Adatszerkezetek A Processing támogatja alapból a következő tároló típusokat: ArrayList HashMap Array stb… Használatuk a Java referencia szerint
Adatszerkezetek PVector: 2 vagy 3 dimenziós vektor Adatmezők: x, y, z Eljárások: set(), get(), mag(), add(), sub(), normalize(), …
ArrayList példa ArrayList al = new ArrayList(); al.add(new PVector(3, 2)); al.add(new PVector(35, 22)); for (int i=0; i<al.size(); ++i) { PVector p = (PVector)al.get(i); print(p); }
Feladat 2 Írjuk programot, ami minden bal egérgombbal történő kattintást rögzít és hozzáadja egy listához. Minden ponthármasra rajzoljunk ki egy háromszöget.
Fájl output PrintWriter: Fájlba kiírásra Használat: StreamWriter w = createWriter(“file.txt”); Eljárások: print() println() flush() close()
Fájl input String[] loadStrings( ) : Betölti a paraméterben kapott fájlt soronként, visszaadja a beolvasás eredményét Használat: String lines[] = loadStrings("szoveg.txt");
Szövegek feldolgozása String[] split(str, delim): –String gy = "alma, korte”; String[] l = split(gy, ','); String[] splitTokens(str, delims): –String gy = "alma, korte; eper”; String[] l = splitTokens(gy,“,;”);
String osztály Eljárások Java-ból ami ismerős: substring(int fi, int li); trim() … Számmá alakítás: parseInt(s); parseFloat(s);
Feladat 3 Az „s” billentyű lenyomására lehessen fájlba menteni az aktuális állapotot! Az „l” billentyű segítségével pedig töltsük vissza a legutóbbit!
Szövegkirajzolás PFont: A Processing karakterkészlet osztálya Használat: PFont fnt = createFont("Arial", 12); textFont(PFont): Az aktuális kirajzolási karakterkészletet a paraméterben kapottra módosítja text(str, x, y[, w, h, z]) textSize(int)
Szövegkirajzolás textAlign(xAlign, yAlign): vízszintes és függőleges szövegigazítás, lehetséges értékei LEFT, CENTER, RIGHT loadFont(fájlnév): külső fájlból tölthetünk be vele karaterkészletet PFont fnt = loadFont("font.flw");
Példa void setup() { size(600,600); PFont fnt = createFont("Arial",20) ; textFont(fnt) ; } void draw() { text("Helló",100,100) ; }
Feladat 4 Minden kattintásra annak helyére írjátok ki a kattintás gombját és pozicióját.
Osztályok Osztályok definiálása szokásos módon: class OsztNev { void fv() {...} int i; }
Osztályok Az osztály egy példányának létrehozása szintén: OsztNev o = new OsztNev();
Feladat Írjatok egy PattogoKor osztályt! Legyen szín és sugár jellemzője Szóköz billentyű megnyomására jöjjön létre egy új pattogó kör, ami a képernyő keretein belül pattog! (véletlen sugár és szín attributumokkal) NEHEZÍTÉS (Házi Feladat): A körök egymásról is pattanjanak vissza
Feladat Csináljunk egy Teglalap osztályt! Legyen pozíció és szélesség/magasság, szin adattagja Szóköz lenyomására jelenjen meg egy a képernyőn (véletlen helyen, véletlen attributumokkal) A téglalap közepére legyen beleírva színe RGB kódja, és a poziciója A téglalap kirajzolásáért annak Draw() metódusa feleljen
Feladat / Házi feladat Jobb gombbal való kattintásra változzon a téglalap kapjon új véletlen színt Bal egérgombbal lehessen a kiválasztott téglalapot előtérbe hozni Legyen lehetőség a bal egérgombbal a téglalap vonszolására Törekedjetek az OOP elvű megvalósításra!