440 likes | 577 Vues
Hoofdstuk 3. Methoden om te tekenen. Methode-aanroep. void TekenScherm(object o, PaintEventArgs pea) { Graphics gr; gr = pea.Graphics; gr . DrawString (" Hallo! ", new Font(" Tahoma ", 30) , Brushes.Blue, 10, 20 );.
E N D
Hoofdstuk 3 Methodenom te tekenen
Methode-aanroep void TekenScherm(object o, PaintEventArgs pea) { Graphics gr; gr = pea.Graphics; gr . DrawString ("Hallo!", new Font("Tahoma", 30) , Brushes.Blue, 10, 20 ); gr . FillRectangle (Brushes.Red, 10,20, 50,60 );gr . DrawLine (Pens.Black, 70,30, 20,20 ); } methode uitde klasseGraphics andere methodenuit Graphics
x y Methoden uit Graphics • DrawString hallo • DrawLine • DrawRectangle • DrawEllipse • FillRectangle • FillEllipse • DrawImage
x y Methoden uit Graphics Pen parametervoor de kleur • DrawString hallo • DrawLine Brush parametervoor de kleur Brush parametervoor de kleur • DrawRectangle • DrawEllipse • FillRectangle • FillEllipse • DrawImage
Klassen en objecten methode uitde klasse Graphicsvan object gr • Klasse beschrijftmogelijkheden van object • methoden • properties Graphics gr;gr = pea.Graphics; gr . DrawLine ( Pens.Red , 10,10, 20,20); string s;s = Console.ReadLine(); ... s . Length ... • Objecten • kunnen dingen doen • hebben geheugen property uitde klasse stringvan object s
Tekenen compositie metblauw en rood(vrij naar Piet Mondriaan) gr.DrawRectangle( Pens.Black, 0, 0, 200, 100 ); gr.FillRectangle( Brushes.Black, 10, 0, 10, 100 ); gr.FillRectangle( Brushes.Black, 50, 0, 10, 100 ); gr.FillRectangle( Brushes.Black, 90, 0, 10, 100 ); gr.FillRectangle( Brushes.Black, 0, 40, 200, 10 ); gr.FillRectangle( Brushes.Black, 0, 70, 200, 10 ); gr.FillRectangle( Brushes.Blue, 0, 50, 10, 20 ); gr.FillRectangle( Brushes.Red, 100, 0, 100, 40 );
Tekening aanpassen • Aanpassen van de dikte van de balken • Aanpassen van de hoogte van het plaatje • Aanpassen van de breedte van het plaatje gr.DrawRectangle( Pens.Black, 0, 0, 200, 100 ); erg veel werk... gr.FillRectangle( Brushes.Black, 10, 0, 10, 100 ); gr.FillRectangle( Brushes.Black, 50, 0, 10, 100 ); gr.FillRectangle( Brushes.Black, 90, 0, 10, 100 ); gr.FillRectangle( Brushes.Black, 0, 40, 200, 10 ); gr.FillRectangle( Brushes.Black, 0, 70, 200, 10 ); gr.FillRectangle( Brushes.Blue, 0, 50, 10, 20 ); gr.FillRectangle( Brushes.Red, 100, 0, 100, 40 );
Variabelen declaratie:aankondigen vanvariabelenen hun type type int: geheel getal int balk, breedte, hoogte; toekennings-opdrachten:variabelen krijgeneen waarde balk = 10;breedte = 200;hoogte = 100; gr.FillRectangle( Brushes.Black, 10, 0, balk, hoogte ); gr.FillRectangle( Brushes.Black, 50, 0, balk, hoogte ); gr.FillRectangle( Brushes.Black, 90, 0, balk, hoogte ); gr.FillRectangle( Brushes.Black, 0, 40, breedte, balk ); gr.FillRectangle( Brushes.Black, 0, 70, breedte, balk ); gebruik vanvariabelen
Variabelen declaratie:aankondigen vanvariabelenen hun type type string:tekst string naam, groet; toekennings-opdrachten:variabelen krijgeneen waarde naam = Console.ReadLine(); groet = "Hallo " + naam + "!"; Console.WriteLine(groet); gebruik vanvariabelen
Variabelen declaratie:aankondigen vanvariabelenen hun type type Label:opschrift Label groet; toekennings-opdrachten:variabelen krijgeneen waarde groet = new Label (); groet . Text = "Hallo"; this.Controls . Add (groet); gebruik vanvariabelen
Syntax van opdracht opdracht klasse naam methode naam ( expressie ) ; . , object expressie property naam += variabele = expressie ;
const = expressie var type klasse naam int string Syntax van declaratie declaratie type naam ; ,
Plaats van een declaratie blok declaratie { } opdracht
Variabelen int balk, breed, hoog; balk=10; breed=200; hoog=100; gr.FillRectangle( Brushes.Black, 10, 0, 10, 100 ); gr.FillRectangle( Brushes.Black, 50, 0, 10, 100 ); gr.FillRectangle( Brushes.Black, 90, 0, 10, 100 ); gr.FillRectangle( Brushes.Black, 0, 40, 200, 10 ); gr.FillRectangle( Brushes.Black, 0, 70, 200, 10 ); gr.FillRectangle( Brushes.Blue, 0, 50, 10, 20 ); gr.FillRectangle( Brushes.Red, 100, 0, 100, 40 );
x1 x2 x3 y1 y2 Variabelen int balk, breed, hoog; int x1, x2, x3, y1, y2; x1=10; x2=50; x3=90; y1=40; y2=70; balk=10; breed=200; hoog=100; gr.FillRectangle( Brushes.Black, 10, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, 50, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, 90, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, 0, 40, breed, balk ); gr.FillRectangle( Brushes.Black, 0, 70, breed, balk ); gr.FillRectangle( Brushes.Blue, 0, 50, 10, 20 ); gr.FillRectangle( Brushes.Red, 100, 0, 100, 40 );
x1 x2 x3 y1 y2 Variabelen int balk, breed, hoog; int x1, x2, x3, y1, y2; x1=10; x2=50; x3=90; y1=40; y2=70; balk=10; breed=200; hoog=100; gr.FillRectangle( Brushes.Black, x1, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, x2, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, x3, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, 0, y1, breed, balk ); gr.FillRectangle( Brushes.Black, 0, y2, breed, balk ); gr.FillRectangle( Brushes.Blue, 0, 50, 10, 20 ); gr.FillRectangle( Brushes.Red, 100, 0, 100, 40 );
x1 x2 x3 y1 y2 Variabelen int balk, breed, hoog; int x1, x2, x3, y1, y2; x1=10; x2=50; x3=90; y1=40; y2=70; balk=10; breed=200; hoog=100; gr.FillRectangle( Brushes.Black, x1, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, x2, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, x3, 0, balk, hoog ); gr.FillRectangle( Brushes.Black, 0, y1, breed, balk ); gr.FillRectangle( Brushes.Black, 0, y2, breed, balk ); gr.FillRectangle( Brushes.Blue, 0, y1+balk, x1, y2-y1-balk ); gr.FillRectangle( Brushes.Red, x3+balk, 0, br-(x3+balk), y1 );
Expressies • Expressie:stukje programma met een waarde • Gebruik van expressies: • Rechterkant van een toekennings-opdracht • Parameter van een methode x3 = x2+40 ; gr.FillRectangle(Brushes.Blue , 0, y1+balk, x1, y2-(y1+balk) ) ;
Opbouw van expressies • constante 5 • variabele hoogte x + y • ... operator ... + 1 (y + 1) • ( ... ) x - expressie expressie expressie
Operatoren • + optellen • - aftrekken • * vermenigvuldigen • / delen bij deling van int-waarden:cijfers achter de kommaworden afgekapt! • % rest bij deling 14 / 3 geeft 4 want 14 is 4*3 + 2 14 % 3 geeft 2
en delen en aftrekken Prioriteit van operatoren • Vermenigvuldigengaat voor optellen 1 + 2 * 3 geeft 7 • Bij gelijke prioriteit:van links naar rechts 10 - 5 - 2 geeft 3 • Wil je ’t anders:zet haakjes (1+2) * 3 geeft 9
Syntax van expressies expressie getal ” ” symbool variabele expressie operator expressie ( expressie )
Gebruik van expressiesin opdrachten opdracht klasse naam methode naam ( expressie ) ; . , object expressie property naam += variabele = expressie ;
Gebruik van expressiesin opdrachten opdracht klasse naam methode naam ( expressie ) ; . , object expressie property naam += variabele = expressie ;
expressie constante variabele expressie operator expressie ( expressie ) Gebruik van expressiesin opdrachten en expressies opdracht klasse naam methode naam ( expressie ) ; . , object expressie property naam += variabele = expressie ;
type klasse naam int string Het type van een expressie int • 98765 • "Hallo" • breedte • 67890+1 • "Hallo " + naam • naam.Length • "Hallo " + naam.Length • Brushes.Black string int int string int string Brush
Het type van een expressie • Brushes.Black Brush • Pens.Blue Pen • new Form() Form • new Font("Arial",10) Font • new Pen(Brushes.Red, 5) Pen • new HatchBrush(HatchStyle.ZigZag , Color.Blue, Color.Red) Brush • new Color(255, 128, 0) Color
Kleuren Color(...) (0,255,0) (255,0,0) (255,255,0) (255,255,255) (0,255,255) (255,0,255) (0,0,255) (0,0,0)
Mengkleuren • new Color(255, 0, 0) • new Color(255, 255, 0) • new Color(255, 64, 0) • new Color(255, 128, 0) • new Color(255, 192, 0)
klasse naam new klasse naam methode naam ( expressie ) , object expressie property naam this expressie -syntax getal ” ” symbool variabele expressie operator expressie ( expressie ) .
Graphics gr = pea.Graphics; gr.FillRectangle(Brushes.Black, x1, 0, balk, hoogte); gr.FillRectangle(Brushes.Black, x2, 0, balk, hoogte); gr.FillRectangle(Brushes.Black, x3, 0, balk, hoogte); gr.FillRectangle(Brushes.Black, 0, y1, breedte,balk); gr.FillRectangle(Brushes.Black, 0, y2, breedte,balk); gr.FillRectangle(Brushes.Blue, 0, y1 + balk, x1, y2 - (y1 + balk)); gr.FillRectangle(Brushes.Red, x3+balk, 0, breedte-(x3+balk), y1); } static void Main() { Application.Run( new Mondriaan()); } } using System.Windows.Forms; using System.Drawing; class Mondriaan : Form { Mondriaan() { this.Text = "Mondriaan"; this.BackColor = Color.White; this.ClientSize = new Size(200, 100); this.Paint += this.tekenScherm; } void tekenScherm(object obj, PaintEventArgs pea) { int breedte, hoogte, balk, x1, x2, x3, y1, y2; breedte = pea.ClipRectangle.Width; hoogte = pea.ClipRectangle.Height; x1 = 10; x2 = 50; x3 = 90; y1 = 40; y2 = 70; balk = 10; Programma • asd
Graphics gr = pea.Graphics; gr.FillRectangle(Brushes.Black, x1, 0, balk, hoogte); gr.FillRectangle(Brushes.Black, x2, 0, balk, hoogte); gr.FillRectangle(Brushes.Black, x3, 0, balk, hoogte); gr.FillRectangle(Brushes.Black, 0, y1, breedte,balk); gr.FillRectangle(Brushes.Black, 0, y2, breedte,balk); gr.FillRectangle(Brushes.Blue, 0, y1 + balk, x1, y2 - (y1 + balk)); gr.FillRectangle(Brushes.Red, x3+balk, 0, breedte-(x3+balk), y1); } static void Main() { Application.Run( new Mondriaan()); } } using System.Windows.Forms; using System.Drawing; class Mondriaan : Form { Mondriaan() { this.Text = "Mondriaan"; this.BackColor = Color.White; this.ClientSize = new Size(200, 100); this.Paint += this.tekenScherm; } void tekenScherm(object obj, PaintEventArgs pea) { int breedte, hoogte, balk, x1, x2, x3, y1, y2; breedte = pea.ClipRectangle.Width; hoogte = pea.ClipRectangle.Height; x1 = 10; x2 = 50; x3 = 90; y1 = 40; y2 = 70; balk = 10; Programma met commentaar /* Dit programma tekent een Mondriaan-like "compositie met rood en blauw” */ // zwarte balken • asd // gekleurde vakken // posities van de lijnen
Commentaar • Tekst voor de menselijke lezer,genegeerd door de compiler • Twee vormen: • van /* tot */ • van // tot einde regel
Hoofdstuk 3.6 Methode-declaraties
Tekenen public void TekenScherm(object o, PaintEventArgs pea){ Graphics gr = pea.Graphics; Pen p = Pens.Black; gr.DrawRectangle(p,20,60,40,40);gr.DrawLine(p,20,60,40,40);gr.DrawLine(p,40,40,60,60); grote bendecoördinaten! gr.DrawRectangle(p,70,60,40,40);gr.DrawLine(p,70,60,90,40);gr.DrawLine(p,90,40,110,60); gr.DrawRectangle(p,120,40,60,60);gr.DrawLine(p,120,40,150,10);gr.DrawLine(p,150,10,180,40); }
Nieuwe methoden private void tekenHuis(…){ … . DrawRectangle (…); … . DrawLine (…); … . DrawLine (…);} • Methode:groepje opdrachten met een naam public void TekenScherm (object o, PaintEventArgs pea){ … . tekenHuis (…); … . tekenHuis (…); … . tekenHuis (…);} Aanroepvan een methode voert opdrachten uitin de body daarvan
Parameters welk Graphics-objectnemen deze methodenonder handen? private void tekenHuis (…){ (Graphics gr, … ) … . DrawRectangle (…);… . DrawLine (…);… . DrawLine (…); gr gr gr parameterdeclareren } public void TekenScherm (object o, PaintEventArgs pea){ en bij aanroepmeegeven … . tekenHuis (…);… . tekenHuis (…);… . tekenHuis (…); (pea.Graphics, …); (pea.Graphics, …); (pea.Graphics, …); }
Het object this class Huizen : Form{ } private void tekenHuis (Graphics gr, …){ gr . DrawRectangle (…); gr . DrawLine (…);gr . DrawLine (…); welk ……… - objectnemen deze methodenonder handen? Huizen } public void TekenScherm (object o, PaintEventArgs pea){ this: het object datTekenSchermook al onder handen heeft … . tekenHuis (pea.Graphics, …);… . tekenHuis (pea.Graphics, …);… . tekenHuis (pea.Graphics, …); thisthisthis }
Meer parameters teken driemaaleen net iets ander huis nog meerparameters! public void TekenScherm (object o, PaintEventArgs pea){ this . tekenHuis (pea.Graphics, …);this . tekenHuis (pea.Graphics, …);this . tekenHuis (pea.Graphics, …); 20, 100, 40); 70, 100, 40); 120, 100, 60); }
(tx,ty) (x,y) br Meer parameters private void tekenHuis (Graphics gr, … ){ int x, int y, int br) int tx, ty; tx = x + br/2; ty = y – br – br/2; gr.DrawRect (pen, … );gr.DrawLine (pen, … );gr.DrawLine (pen, … ); x, y-br, br, br x, y-br, tx, ty tx, ty, x+br, y-br } public void TekenScherm (object o, PaintEventArgs pea){ this . tekenHuis (pea.Graphics, …);this . tekenHuis (pea.Graphics, …);this . tekenHuis (pea.Graphics, …); 20, 100, 40); 70, 100, 40); 120, 100, 60); }
Huizen... int afdak = breedte / 6; Pen pen = new Pen(Color.DarkRed, 3); Brush br = new HatchBrush(HatchStyle.HorizontalBrick , Color.Silver, Color.Red );
150 Publieksvraag 100 50 • Schrijf een methode tekenCirkeldie je zo kunt aanroepen: publicvoid TekenScherm (object o, PEA pea){ } this.tekenCirkel(pea.Graphics , Brushes.Black, 150, 100, 50); midden midden straal privatevoid tekenCirkel { } (Graphics gr, Brush br, int cx, int cy, int r) gr . FillEllipse(br, cx–r, cy–r, 2*r, 2*r );
dakh h (x,y) br Flexibiliteit • Hoe meer parameters,des te flexibeler de methode private void tekenHuis (Graphics gr, int x, int y, int br, int h, int dakh, Brush kl, Brush dakKl, … ) { en des te lastigeraan te roepen...
Veel parameters: Nu lastig om te programmeren In de toekomstmisschien gemakkelijkuit te breiden Weinig parameters: Nu gemakkelijk om te programmeren In de toekomstmisschien lastigte onderhouden Flexibiliteit