Tilbake til startsida IKT i praksis - Pascal

Meny
 
 
 
 
 
 
Figurar
 
 
 
 
canvas femkant

 

Å lage geometriske figurar

 

Pascal har ein del ferdige funksjonar for å teikne sirklar, firkantar og mangekantar på teikneflata (canvas). Desse blir omtala i dette avsnittet.

Plasseringa av figuren på lerretet blir bestemt ved hjelp av dei vanlege koordinata som er omtalte i kapitlet generelt.

Strekbreidde, strekstil og strekfarge blir styrt av innstilingane for pen.

Bakgrunnen, altså innsida av figuren, blir bestemt med verdiane sette for brush.

 

Firkantar

canvas rectangle

Rette hjørne

Bildet til høgre viser eit rektangel laga med funksjonen Canvas.Rectangle(x1,y1,x2,y2).
Alle verdiar er sette til normalverdiane. Altså er Pen, som teiknar streken rundt rektangelet, sett til svart og med ei breidde på 1 piksel, medan Brush, som bestemmer fargen inne i rektangelet, er sett til kvit. Verdiane for x1,y1,x2,y2 er koordinatverdiane for hjørna i rektangelet. x1,y1 er koordinata for det øvre, høgre hjørnet medan x2,y2 er koordinata for hjørnet nede til høgre.

canvas rectangle

Fargen på innhaldet i firkanten blir altså bestemt med Brush.Color. På det neste bildet er denne fargen sett slik: Canvas.Brush.Color := clSilver;

I tillegg er strekfargen forandra frå det normale svart til raudt med kommandoen Canvas.Pen.Color := clRed og strekbreidda er sett slik: Canvas.Pen.Width := 3

I staden for koordinata x1,y1,x2,y2 kan ein bruke TRect. Sjå nærare om dette i Koordinata som rektangel.

 

canvas rectangle

Avrunda hjørne

For å lage rektangel med avrunda hjørne, bruker ein dei same kommandoane som for å lage rektangel, men må i tillegg oppgi radius for rundinga.
Canvas.RoundRect(x1,y1,x2,y2,RX,RY).
På bildet til venstre er x- og y-verdiane dei same som for rektangelet øvst. RX og RY er sett til 30.

Også her kan ein i staden for koordinata x1,y1,x2,y2 bruke TRect. Sjå nærare om dette i Koordinata som rektangel.

 

canvas rectangle

Sirklar

Funksjonen Ellipse vil teikne ei ellipse innføre rektangelet som er oppgitt med dei vanlege koordinata. På figuren til høgre er det omligjande rektangelet teikna inn for å vise metoden. Komandoen vi teikne bare ellipsen. Her er det brukt dei same verdiane som i rektangelet øvst på sida. Dersom det omkransande rektangelet er eit kvadrat, vil figuren bli ein sirkel. Kommandoen er:
Canvas.Ellipse(x1,y1,x2,y2)

Også her kan ein i staden for koordinata x1,y1,x2,y2 bruke TRect. Sjå nærare om dette i Koordinata som rektangel.

canvas rectangle

I funksjonen EllipseC blir sentrum for figuren definert og deretter dei to radiusane. Den generelle formelen er
EllipseC(x,y: Integer; rx,ry: Longword)
der (x,y) er koordinata for sentrum. rx er den vassrette radiusen og ry den loddrette radiusen. Eksempel på bruk:
Canvas.EllipseC(200,100,100,75).
Dersom rx = ry blir figuren ein sirkel.

Både Ellipse og EllipseC bruker dei gjeldande innstillingane for Pen for å teikne omrisset og Brush for å fylle figuren.

 

Mangekantar

Med fyll

canvas femkant

Funksjonen Polygon(Punktliste) blir brukt for å lage mangekantar eller for å lage firkantar som ligg «skeivt» i høve til skjermen.

Hjørna i mangekanten blir definerte i ei punktliste der koordinata til kvart hjørne blir skrive inn. Endå ein gong er det enklast med eit eksempel.
Figuren til høgre viser ein femkant. Hjørna er definerte i ei liste kalla femkantPts. Programmet ser slik ut:
var femkantPts: array[1..5] of TPoint;
begin
   femkantPts[1] := Point( 50,125);
   femkantPts[2] := Point( 150,50);
   femkantPts[3] := Point( 250,125);
   femkantPts[4] := Point( 200,200);
   femkantPts[5] := Point( 100,200);
   Canvas.Polygon(femkantPts);
end;

I dokumentasjonen står det at det siste punktet (eit punkt 6) må vere det same som startpunktet. I praksis viser det seg at funksjonen legg til den siste linja sjølv.

Til vanleg treng ein ikkje fleire parametrar for Polygon-funksjonen, men det finst noen til:
Canvas.Polygon(Points: array of TPoint; Winding: Boolean = False; StartIndex: Integer = 0; NumPts: Integer = -1).
Points er ei liste tilsvarande femkantPts brukt i eksemplet.
Winding skal gi deg valet mellom to ulike fyllmetodar for mangekanten. Eg har ikkje fått dette til å virke og har heller ikkje funne nærare forklaring på desse fyllmetodane. Polygon(femkantPoints, True) og Polygon(femkantPoints, False) gir tilsynelatande same resultatet.
Dei to siste parametra kan brukast dersom punktlista inneheld fleire punkt enn det som trengst for å laga mangekanten. StartIndex er indeksen til det første punktet i tabellen funksjonen skal byrje frå. Eventuelle punkt framføre dette blir ignorerte. NumPts er kor mange punkt som skal brukast etter StartIndex. Dersom dette er sett til -1, som er normalen, vil funksjonen bruke alle punkta i tabellen frå StartIndex til slutten av tabellen.

canvas femkant

Utan fyll

Det er også mogleg å teikne mangekantar utan fyllfarge. Då bruker ein kommandoen PolyLine() i staden for Polygon(). Parametra er dei same som for Polygon() med unnatak av at Winding, som styrer fyllmetoden, naturleg nok ikkje er tatt med sidan det ikkje er noe fyll involvert her. Definisjonane er:
PolyLine(Points: array of TPoint)
PolyLine(Points: array of TPoint; StartIndex: Integer; NumPts: Integer = -1)
PolyLine(Points: array of TPoint; NumPts: Integer)

Dersom det siste punktet i punktlista er ulikt det første punktet i lista, vil PolyLine ikkje gå tilbake til det første punktet i lista. Figuren blir ein ufullstendig mangekant, dvs. ei strekteikning. Teikninga over er laga med PolyLine(femkantPts); der punktlista er den same som brukt i Polygon ovanfor. Legg merke til at den siste streken ikkje er teikna.

Dersom du endeleg må vite det, stjerna på toppen av sida er laga ved å definere ein tikant med Polygon-kommandoen.

Spesielle

Pie

canvas femkant

Pie teiknar eit «kakestykke» definert som ein del av ein ellipse. Frå endane på ellipsedelane blir det trekt linjer til sentrum i ellipsen. Omrisset av kakestykket blir teikna med Pen medan området inne i kakestykket blir fyllt med Brush. Kommandoen er:
Pie(x1,y1,x2,y2,sx,sy,ex,ey: Integer)
der x1,y1,x2,y2 er koordinata for rektanglet som rommar heile ellipsen, medan sx,sy,ex,ey definerer punkta som linjene ut frå sentrum og ut mot sirkelen skal gå gjennom. På figuren til høgre viser punktet 3 kvar koordinata (sx,sy) ligg og punktet 4 kvar koordinata (ex,ey) er. Sjølve kakestykket i figuren blei laga med kommandoen
Pie(50,30,250,200,100,60,120,150).

RadialPie

canvas femkant

Denne gjer det same som Pie, men i staden for å oppgi koordinat for strålene ut frå sentrum, blir det brukt vinklar. Vinklane blir oppgitt i grader × 16. Ein vinkel på 90º blir altså oppgitt som 90 × 16 (= 1440). Null grader er klokka 3 (aust) på sirkelen. Kakestykket blir teikna mot klokka mellom den første og den andre vinkelen.

Den generelle kommandoen er RadialPie(x1,y1,x2,y2,vinkel1*16,vinkel2*16).
x1,y1,x2,y2 er koordinata for det rektangelet som den heile ellipsen ville blitt teikna i. vinkel1 er startvinkelen for kakestykket og vinkel2 er vinkelopninga for sektoren, altså for sjølve kakestykket. Kakestykket på figuren til høgre er teikna med blå farge og laga med kommandoen RadialPie(x1,y1,x2,y2, 45*16, 270*16);. Det grøne, prikka rektangelet er det rektangelet ellipsen er teikna innføre. Dei rette, prikka strekane viser senterlinjene for rektangelet. (Desse prikka strekane blir ikkje laga av RadialPie, men er teikna inn for å vise systemet).

Dokumentasjonen for RadialPie er feil i Lazarus. Ikkje bry deg om den. Forklaringa ovanfor er korrekt. Endå ein gong mykje ekstraarbeid pga. manglande eller feil dokumentasjon.


Send melding

© Innhald og design:  Kolbjørn StuestølStuestøl heimesideSist endra 11. april 2013