V 1.0 Programozás III. Ismétlés (Grafikai lehetőségek WPF-ben) Visual utódok.

Slides:



Advertisements
Hasonló előadás
Krizsán Zoltán iit 1.1.  Aszinkron történésről értesítés egy vagy több objektum számára.  Delegátumok segítségével valósítja meg a C#.  event típus,
Advertisements

C++ programozási nyelv Gyakorlat hét
Felhasználói felületek és üzleti logika Bollobás Dávid ASP.NET
Programozás III KOLLEKCIÓK 2..
Számítógépes geometriai leíró nyelvek
Öröklődés 2..
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 5. Gyakorlat Öröklődés, virtuális függvények,
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Mutatók, tömbök, függvények
Grafika a programban Készítette: Pető László. Bevezetés Valójában nem a célobjektumra rajzolunk, hanem annak festővászon területére (canvas). Csak olyan.
Transzformációk kucg.korea.ac.kr.
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Java programozási nyelv 5. rész – Osztályok III.
C# tagfüggvények.
C# tagfüggvények.
3. Vetületi ábrázolások számítási eljárásai
Programozás I Függvények általános jellemzői
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Turbo Pascal 11..
Grafikus tervezőrendszerek programozása 11. előadás.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Vizuális alkalmazások a FoxProban Páll Éva Boglárka.
Rajzolás WPF alkalmazásokban
Objektum orientált programozás a gyakorlatban
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
Java programozási nyelv Metódusok
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
2. gyakorlat DirectX 2007/2008 tavasz Klár Gergely
Grafikai lehetőségek WPF-ben Egyszerű grafika (Shape-ek)
Programozás III KOLLEKCIÓK.
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Objektumorientált alapjai ISZAM III.évf. részére Bunkóczi László.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Vizualizáció és képszintézis Sugárkövetés (Dart + GLSL) Szécsi László.
Grafikus programozás Készítette: Csernok László
Ficsor Lajos Objektumok inicializálása CPP4 / 1 Objektumok inicializálása Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Windows Forms alkalmazás készítése Czigléczky Gábor 2009.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
V 1.0 OE-NIK, Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök Gyakorló feladatok.
V 1.0 Programozás III. Gyakorlás. V 1.0ÓE-NIK, 2014 Gyakorlás –Feladat: Tic Tac Toe játék –Szabályok: A játékosok felváltva teszik le a jelöléseiket.
Ismétlés (Grafikai lehetőségek WPF-ben)
Windows Presentation Foundation
„Designer-barát” játéklogika
Unity 3D alapok + gyakorlás.
Ismétlés (Grafikai lehetőségek WPF-ben) Visual utódok
Neumann János Informatikai Kar
Neumann János Informatikai Kar
Programozás III. Ismétlés (Grafikai lehetőségek WPF-ben)
3D szerkesztőprogram alapok, szkriptelési alapok, procedurális modellezési alapok Blender Python.
Ismétlés (Grafikai lehetőségek WPF-ben) Visual utódok
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Dependency Injection Tesztduplikátumok, Mock-ok, Fake-ek Feladat
B M Java Programozás 1. Gy: Java alapok IT A N Ismétlés ++
Konverziós operátorok
Függvénysablonok használata
Előadás másolata:

V 1.0 Programozás III. Ismétlés (Grafikai lehetőségek WPF-ben) Visual utódok

V 1.0ÓE-NIK, 2014 Grafikai lehetőségek WPF-ben Shape-ek (System.Windows.Shapes.Shape leszármazottak) –Egyszerű, előre elkészített grafikai alakzatok –Toolboxban is szerepelnek –FrameworkElement utódok: input, fókusz, események… –Csak kevés számú (max 100) objektum esetén Drawing objektumok (System.Windows.Media.Drawing leszármazottak) –Nincs belső támogatásuk input eseményekhez –Nem képesek maguktól a megjelenésre, hosztoló objektumban kell őket elhelyezni –Legtöbbször XAML-ból kezeljük –Gyorsabb a Shape-eknél (max néhány 100 objektumig) Visual objektumok (System.Windows.Media.Visual) –Legbonyolultabb, leggyorsabb (max kb objektumig) –XAML lehetőségek korlátozottak, mindig kódból kezeljük 2

V 1.0ÓE-NIK, 2014 Visual Ahhoz biztosít szolgáltatásokat, hogy a leszármazott típus renderelhető legyen Több speciális célú utódosztály: pl. DrawingVisual (2D), Viewport3DVisual (3D) Az ezzel való rajzolásnak elsősorban kétféle variációja létezik: –Egy adott grafikusfelület-elem „vizuális gyermekei” (kirajzolandó objektumok) közé beteszünk újabb Visual objektumokat –Egyedi leszármazott típust definiálunk valamelyik grafikusfelület- elemből (tipikusan: FrameworkElement), kihasználva, hogy a GUI- elemek maguk is Visual utódok 3

V 1.0ÓE-NIK, 2014 DrawingVisual 2D rajzolásra –RenderOpen() függvényét kell hívni, DrawingContext objektumot ad vissza A DrawingContext segítségével „tölthetjük fel” a Visualt (vagy egy DrawingGroupot) tartalommal –Pl. a következő függvények értelmezettek rajta: –DrawEllipse() –DrawRectangle() –DrawGeometry() –DrawImage() … –A grafikai parancsok igazából nem rajzolnak, hanem csak tárolják/ megadják a kirajzolandó dolgokat (visszatartott módú grafikai rendszer) –A Visualon belül Drawingok formájában vannak tárolva a rajzok (DrawingGroupban). –A rajzolás időpontját a rendszer dönti el 4

V 1.0ÓE-NIK, 2014 Visual használat – 1. variáció Minden Visual utódnak (így a grafikusfelület-elemeknek is) vannak „vizuális gyermekei” (kirajzolandók) Új Visual objektumokat (pl. DrawingVisualokat) kell létrehozni és azokat elhelyezni a „vizuális gyermekek” között Kötelező felülírni az új Visualok „tulajdonosában” a VisualChildrenCount, GetVisualChild tulajdonságokat –VisualChildrenCount: adjuk vissza, hogy hány „vizuális gyermek” van. –GetVisualChild: adjuk vissza az n. „vizuális gyermeket”. Lehetséges az új Visual objektumokat az objektumfákban is elhelyezni (AddVisualChild(), AddLogicalChild()) –Események és találattesztelés támogatása miatt 5

V 1.0ÓE-NIK, 2014 Visual használat 1. variáció példa public partial class MainWindow : Window { //sokszor nem a MainWindow-ban DrawingVisual visualChild; //csináljuk, hanem egy FrameworkElement public MainWindow() //utódot származtatunk és azt rakjuk { //a MainWindow-ra majd InitializeComponent(); visualChild = new DrawingVisual(); using (DrawingContext context = visualChild.RenderOpen()) { context.DrawEllipse(Brushes.Red, null, new Point(50, 50),10,10); } AddVisualChild(visualChild); AddLogicalChild(visualChild); } protected override int VisualChildrenCount { get { return base.VisualChildrenCount + 1; } } protected override Visual GetVisualChild(int index) { if (index < base.VisualChildrenCount) return base.GetVisualChild(index); else return visualChild; } 6

V 1.0ÓE-NIK, 2014 Visual használat 2. variáció Kihasználjuk, hogy az ablak (vagy bármilyen más GUI elem) is Visual Amikor rajzolódik, az OnRender() metódusa hívódik –Ez felülírható, DrawingContext objektumot kap paraméterül, a DrawingContext-en keresztül tudunk rajzolni a Visualra Új rajzolás mindig kikényszeríthető az InvalidateVisual() függvénnyel class MainWindow : Window //tipikusan ezt sem a MainWindow-ban, { //hanem pl. FrameworkElement utód... //... //- ablaknál Background=Transparent kell. protected override void OnRender(DrawingContext drawingContext) { drawingContext.DrawGeometry(Brushes.Blue, new Pen(Brushes.Red, 2), geometry); } 7

V 1.0ÓE-NIK, 2014 Feladat – Asteroids 8

V 1.0ÓE-NIK, 2014 Asteroids szabályok: –Játékos csak foroghat és lőhet. –Az aszteroida véletlenszerű irányba egyenletesen mozog, ha a képernyő szélére ér, visszatér a másik oldalon –Ha a játékos lövése eltalál egy aszteroidát, az eltűnik. (Nehezebb verzió: két kisebb és gyorsabban mozgó részre válik szét, egy bizonyos mérethatárig.) –Ha a játékos lövése a képernyő szélére ér, visszatér a másik oldalon. Viszont a lövés csak bizonyos ideig „él”, egy idő után eltűnik. 9

V 1.0ÓE-NIK, 2014 Transzformációk Transform utódokkal reprezentálódnak (transzformációs mátrix) –Forgatás (RotateTransform) –Skálázás (ScaleTransform) –Nyújtás (SkewTransform) –Mozgatás (MoveTransform) –Általános transzformáció (MatrixTransform) –Több transzformáció egymás után (TransformGroup) 10

V 1.0ÓE-NIK, 2014 Transzformáció alkalmazásai GUI-elemeken (FrameworkElement utódok): –LayoutTransform (kihelyezés előtt transzformál) –RenderTransform (kihelyezés után transzformál) Geometriákon: –Transform Figyelem: nem módosít koordinátákat! –A Transform-ot levéve (xxx.Transform = Transform.Identity) az eredeti koordinátákon marad az objektum –Metszésnél esetleg gondot okoz 11

V 1.0ÓE-NIK, 2014 Geometriák metszése (érintésvizsgálat) Geometriák metsződésének vizsgálatához az elmetszéssel létrejött új geometriát létre kell hozni (Geometry.Combine()), majd a területét vizsgálni (GetArea()) Figyelem: LineGeometry-nak nincs kiterjedése, így a metszet területe 0 –Megoldása a vonal „kiterjesztésével” –geometry.GetWidenedPathGeometry(new Pen(Brushes.Blue, 2)) Geometry intersection = Geometry.Combine(geometry, otherGeometry, GeometryCombineMode.Intersect, null); return intersection.GetArea() != 0; 12

V 1.0ÓE-NIK, 2014 Feladat – Flappy Birds Turbo 13

V 1.0ÓE-NIK, 2014 Megoldási alternatíva Minden játékelem Geometry típusú adattagja úgy kerül beállításra, hogy a középpont koordinátája (0;0) legyen Kirajzolás/ütközésvizsgálat előtt transzformáljuk a megfelelő pozícióba TransformGroup tg = new TransformGroup(); tg.Children.Add(new TranslateTransform(cx, cy)); tg.Children.Add(new RotateTransform(degree, cx, cy)); Geometry copy = area.Clone(); copy.Transform = tg; return copy.GetFlattenedPathGeometry(); 14

V 1.0ÓE-NIK, 2014 Grafikai lehetőségek WPF-ben 15 MegközelítésEseménykezelés / rajzolás vezérlése HasználatObjektumok száma ShapeRajzolt objektumonként külön XAML + Binding~100 DrawingHosztoló objektum kezeli, az összes rajzolt objektumot együtt XAML + Binding + Converterek (xxx  Geometry) ~1000 VisualHosztoló objektum kezeli, egyedi kirajzoló metódus CS kód: OnRender + DrawingContext + Geometry ~10000