2D-grafik. Något om FrameWorks

Slides:



Advertisements
Liknande presentationer
Föreläsning 9 Programmeringsteknik och Matlab 2D1312/2D1305
Advertisements

Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Klasser och objekt.
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Klassarv och inkapsling
Objektorienterad Realtidsprogrammering
Metoder i java Det finns två typer av metoder i java
Föreläsning 4 Python: mera om funktioner och parametrar
Välkommen Vahid Mosavat
Programmeringsteknik K och Media
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Programkodens uppbyggnad
Att programmera i språket Java
1 ITK:P1 Föreläsning 4 Grafiska gränssnitt och händelsehantering DSV Peter Mozelius.
Föreläsning 8 Appletprogram/fristående grafiska program Rita linjer, rektanglar mm Skriva text Byta färg Appletprogram html.
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Next previous Innehåll Inledning Några enkla exempel Pekare till och kort beskrivning av större exempel Speciella referenser (som används i marginalen)
1 ITK:P1 Föreläsning 6 Layoutmodeller i Java DSV Marie Olsson.
Next previous Introduktion till Java Av Björn Eiderbäck Adress: Rum 1641, 6tr NADA Osquars Backe 2 Tel: OOMPAE 2000.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
1 Föreläsning 8 Grafik AWT. 2 Grafik Frame använder man för att skapa ett fönster Button använder man om man vill ha en knapp att trycka på Canvas är.
Föreläsning 13 Polymorfism, Paket och JAR-filer. Polymorfism Ordet härstammar från grekiskan Poly – många Morf – form Polymorf – många former Någonting.
Föreläsning 11 Arrayer.
Objektorienterad programmering i Java
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Klasser och objekt Klasser, objekt och instansvariabler
Next previous Grafik: 2D-geometri. Något om dubbelbuffring. Java: 2D, awt & Swing. Föreläsning 3 Innehåll 2D-transformationer Mer om 2D-grafik i Java Något.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Objektorienterad Modellering Programmering och Analys
Arv.
TÄNK PÅ ETT HELTAL MELLAN 1-50
Programmeringsteknik för Media1 & K1
1 Joomla © 2009 Stefan Andersson 1. 2 MÅL 2 3 Begrepp Aktör: en användare som interagerar med webbplatsen. I diagrammet till höger finns två aktörer:
1 Föreläsning 7 Repetition Instansvariabler och klassvariabler Klassmetoder och Instansmetoder.
Mitt första Java program Mahmud Al Hakim Copyright, Mahmud Al Hakim, 1.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 ITK:P1 Föreläsning 8 Multimedia för spelkonstruktion DSV Peter Mozelius.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Java paket och jar-filer
Föreläsning 8 Programmeringsteknik och Matlab DD1312 Klassmetoder Egen modul, Self Metoderna: __str__, __lt__,… Meddelande Arv, Överlagring av metoder,
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Föreläsning 4 Klasser Och Objekt.
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
1. Ett problem/uppgift.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Introduktion till programmeringsspråket Java -Den allmänna.
1 Objektorienterad programmering i Java Föreläsning 5 Kort om Java-Applets.
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
Föreläsning 13 Appletprogram/fristående grafiska program Arv Rita linjer, rektanglar mm Skriva text, byta färg Appletprogram & HTML Grafiska användargränssnitt.
Föreläsning 9 Arv kap 8.1 Interface kap 9.2 Grafiska användargränssnitt (GUI) kap 10.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
OOP - teori1 OOP del II– Föreläsning 5 vecka 6. OOP - teori2 Klasser Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
OOP&M - teori1 OOPM del II – Föreläsning vecka Abstrakta klasser/metoder igen Gränssnitt/Interface klasser igen tillämpat.
Föreläsning 5: Att använda klasser & objekt
Presentationens avskrift:

2D-grafik. Något om FrameWorks 2D-grafik. Något om FrameWorks. Java en kort introduktion och något exempel med AWT, Swing och Graphics2D Föreläsning 2 Innehåll Något om utmatning hårdvara, tekniker och modeller rastergrafik, primitiver och attribut Java mini-introduktion Vi tittar också på Tutorialen om 2D-grafik från Sun (http://java.sun.com/docs/books/tutorial/2d/index.html)

Utmatningstekniker Vektoriserade (linjeritande) skärmar Refresh rate var ganska vanliga fram till en bit in på 80-talet utritning sker genom att linje för linje i en slumpmässig ordning ritas ut på skärmen, därför den engelska termen random scan kunde rita linjer mellan godtyckliga punkter på skärmen Refresh rate Skärmens fosforyta efterlyser endast en viss tid måste uppdateras flera gånger i sekunden (typiskt 30-70) för att undvika flimmer.

... Rasterskärm Raster skärmen uppbyggd som en bitkarta bilderna lagras i en speciell refresh buffer Raster hela bilden skapas från ett raster, som är en uppsättning horisontella svep-linjer

... Interlacing (sve. radsprång) varannan sveplinje uppdateras i varje svep bra för skärmar med låg uppdateringshastighet (med typiskt 30 ggr per sekund). Reducerar flimmer.

... Monokrom skärm ritar med två färger Pixmap (pixel map), bitkarta en representation av en rektangulär area med en vektor av punkter bestående av heltal Namnet pixmap kan betyda både innehållet i refreshbufferten och buffertens minne. För att inte skapa förvirring brukar det senare kallas för frame buffer.

... Exempel bitkarta till bild (från VisualWorks) Cursor normal 0000000000000000 0100000000000000 0110000000000000 0111000000000000 0111100000000000 0111110000000000 0111111000000000 0111111100000000 0100110000000000 0000011000000000 0000001100000000 0000000110000000 0001101001110000 0010011001001000 0010011001001010 0001001001001101 0001001001001001 0110100000001001 1001100000000001 1000100000000010 0100000000000010 0010000000000010 0001000000000100 0000100000001000 0000010000001000 Cursor normal Cursor hand

... Svepkonvertering/rastrering (matematiska) (linje-)beskrivningar översätts till rasterpunkter R2 = x2 + y2 y = mx + b

Aliasing en term från signalprocessing för fel som uppstår då en kontinuerlig signal diskretiseras I grafiska sammanhang syns detta genom att räta linjer blir trappor.

Antialiasing tekniker för att reducera aliasing-effekter vanlig teknik är att låta intensiteten vara proportionell mot hur mycket en viss rasterpunkt befinner sig inom den ideala linjen Utan antialiasing Antialiasing

Frameworks (FW) Ett FW är centralt för konstruktion av interaktiva applikationer Varför ett framework? svårt att tränga in i toolkits, eller följa givna designregler återanvändbar applikationsdesign eller delsystem representeras av ett antal abstrakta klasser och definitioner av hur dessa klasser samarbetar, vilket vägleder programutvecklaren och gör det enklare att konstruera enhetliga gränssnitt och applikationer snabbare mer uniformt

Vad är ett Framework? Ett framework beskriver hur ett problem skall brytas ner Inte bara klasserna utan också hur deras instanser samverkar definierar invarianter som objekten måste dela och anger också hur dom skall användas Ett framework “påtvingar” en modell som programmeraren måste anpassa sig till

Hollywood Omvänd kontroll (Hollywood-principen) Ring inte oss vi ringer er! Koda med klassbibliotek Koda med framework Användarkod Framework kod i klassbibliotek användarkod

Grafiskt ”Framework” Ett grafiskt system fungerar ofta som ett framework i vilket man infogar egna applikationer Man anropar initieringsrutiner sätter upp anrop till egna rutiner (call-backs) huvudlooprutin (som sedan anropar dom tidigare definierade call-back-rutinerna)

Penplottermodell (alt sköldpaddsgrafik) En vanlig modell för 2D-grafik är penplottermodellen Baseras i huvudsak på man kan flyttar en penna som antingen ritar om vidrör pappret eller bara byter position om den är lyft Används bla av LOGO GKS PostScript Passar ej bra för 3D eller högre dimensioner

Koordinatsystem och koordinater Vanligen jobbar vi i Cartesiska koordinater Vissa system har origo nere till vänster andra uppe till vänster Världskoordinater Är dom koordinater vi använder i våra applikationer Här bryr vi inte oss om vilka pixlar på skärmen som kommer representera dem Skärmkoordinater De koordinater som verkligen representerar punkter på skärmen

Vanliga ritrutiner och attribut Dom flesta grafiska paket innehåller åtminstone stöd för att rita (2D) Punkter Av olika storlek Linjer Heldragna, streckade, prickade osv Polygoner Fyllda eller icke fyllda Text Med olika storlek och typsnitt Kurvor Som splines och Bezierkurvor

Attribut Det finns också stöd för att ange Färg eller mönster Linjebredd Prickad streckad I OpenGL kommer vi senare se prov på fler attribut, tex för att ange olika typer av polygoner och (självklart) i tre dimensioner

Klippning Då man konstruerar ett fönster att rita i brukar (eller kan) man också ange klipprektanglar Dvs ange dom områden där objekten skall synas Objekt utanför, eller delvis utanför, ”klipps” mot området

Fönster och vyer Ett fönster brukar ofta delas in i delvyer (viewports) I varje viewport jobbar man med ett lokalt koordinatsystem (fönstret har ocksp ett koordinatystem)

Attribut Linjetjocklek Linjeändor Linjehörn

Javas API (Application Programming Interface) Java:s API innehåller bla awt (abstract windowing toolkit) som delvis kan användas som ett FrameWork som bla stödjer konstruktion av applikationer med fönster Den fundementala klassen Frame subklassas beteendet ändras, dvs anpassas till dom egna önskemålen, genom att lämpliga metoder skrivs om i den konkreta (egna) subklassen

Frame och Applet java.lang java.awt java.applet Ofta är det tillräckligt att (Java 1.1) subklassa Frame och implementera tex WindowListener, MouseListener och MouseMotionListener senare skall vi titta på hur vi istället kan använda adaptorer skriva public static void main(String args[]) instansiera den egna klassen, ange fönsterstorlek och ange att fönster och mushändelser skall tas emot (addWindowListener(this) osv), öppna det hela skriva public void paint(Graphics g) rita på skärmen konstruera metoder för dom gränssnitt för dom "lyssnare" vi angett att vi skall implementera java.lang java.awt java.applet Object Component Container Panel Applet Window Frame

Java: grunder och syntax Java konstruerat på SUN Första versionen släpptes 1995 Statiskt typat Virtuell maskin som gör det maskinoberoende Klassbibliotek språkklasser, stränghantering, grafik, gränssnitt, fönster, nät, händelsehantering, processer, collections, mm Bindning till WWW, med applets och liknande Har fått sin huvudsakliga spridning via Internet Syntax som C, semantik och klasser mer som Smalltalk

Java språkets grundbyggstenar Java uppbyggt kring dom objektorienterade fundamenten klass attribut metod, meddelande polymorfi inkapsling arv konstruktör Inför också interface package

Konstruera klass Klassnamn = filnamn Definition av klass, mall En klass skall ha samma namn som den fil den placeras i Klassen Circle i filen Circle.java En fil kan innehålla flera klasser men bara en av dem kan vara deklarerad public, Det är den publika klassens namn som motsvarar filens Definition av klass, mall public class KlassNamn extends SuperKlassNamn{ attribut (instans- och klassvariabler) metoder (instans- och klassmetoder) konstruktörer }

Deklarera och instansiera Deklaration av instans KlassNamn variabelNamn; Instansiering variabelNamn = new KlassNamn(); alternativt, både deklaration och instansiering på en gång KlassNamn variabelNamn = new KlassNamn();

Sätt upp omgivning Environmentvariabel Gör först (NADA) module add java För att använda senaste versionen, JDK1.2 (idag 000119) module add jdk/latest Hemma bör du explicit sätta path (se systemdokumentation) Om du har en egen java-katalog kan det vara idé att sätta environmentvariabeln CLASSPATH setenv CLASSPATH $HOME/MyJAVA:.

Kompilera och köra Kompilera med javac filnamn Kör med java klassnamn javac Klassnamn.java om allt går bra skapas då en fil med namnet Klassnamn.class Kör med java klassnamn java Klassnamn

Exempel 1 package untitled3; import java.awt.*; // Klassdefinition (utan extends medför subklass till Object) public class MyApplication { public static void main(String s []) { Frame f = new Frame("Mitt första fönster"); f.setSize(200, 300); f.setVisible(true); }

... och så sparar vi, kompilerar och kör Spara filen med samma namn som klassen med extension .java, dvs här MyApplication.java Kompilera javac MyApplication.java Skapar en fil MyApplication.class Kör java MyApplication

Exempel 2 package untitled3; import java.awt.*; public class MyFrame extends Frame { public MyFrame() { } public MyFrame(String s) { super(s); } public void paint(Graphics g) { int x = 100, y = 200; for (int i = 0; i < 100; i++) { g.drawOval(x, y, i, i); } } public static void main(String s []) { MyFrame f = new MyFrame("Mitt andra fönster"); f.setSize(200, 300); f.setVisible(true); } }

Exempel 3, Swing, Graphics2D och JFrame package untitled3; import java.awt.*; import javax.swing.*; public class MyJFrame extends JFrame { public void paint(Graphics g) { Graphics2D g2d = (Graphics2D)g; g2d.drawOval(0, 0, getSize().width-1, getSize().height-1); } public static void main(String s []) { MyJFrame f = new MyJFrame(); f.setSize(200, 300); f.setVisible(true);

Exempel: Eka argument Skapa fil Echo.java (som ekar givna argument) public class Echo { public static void main(String argv[]) { for(int i = 0; i < argv.length; i++) System.out.print(argv[i] + " "); System.out.print("\n"); System.exit(0); }} Kompilera javac Echo.java Kör java Echo detta är input

Syntax sammanfattning public class Echo extends Object{ public static void main(String argv[]) { for(int i = 0; i < argv.length; i++) System.out.print(argv[i] + " "); System.out.print("\n"); System.exit(0); } metoden main beskriver huvudprogrammet (då man kör från terminal) public anger att klass eller metod är synlig för alla klasser, metoder och variabler måste alltid deklareras med typ klassdefinition superklass (kan utelämnas om Object skall vara superklass) klassmetod med static vektor med strängar for-loop "begin" skriv ut på terminal ny rad avbryt programmet "end"