SUBPROGRAME ORIETNTATE SPRE LINII, Proceduri si functii, Aplicatie



SUBPROGRAME ORIETNTATE SPRE LINII


5.1. Proceduri si functii




Line

Procedura Line deseneaza puncte de coordonate (x1, y2) si (x2, y2).

Culoarea liniei poate fi stabilita cu procedura SetColor, stilul si grosimea ei pot fi stabilite cu procedura SetLineStyle. Procedura este definita astfel:

Procedure Line (x1, y1, x2, y2:integer);

X1, Y1 sunt coordonatele de inceput ale liniei.

X2, Y2 sunt coordonate de sfarsit ale liiei.

LineTo

Procedura LineTo deseneaza o linie de la pozitia pointer-ului actual la un punct dat de coordonate (x, y).

Culoarea liniei se stabiliste cu procedura SetColor, stilul, modul si grusimea se stabilesc cu procedura SetLinesStyle. Procedura este stabilita astfel:

Procedure LineTo (x, y: integer);

X si Y sunt coordonate de sfarsit ale liniei.

LineRel

Procedura LineRel deseneaza olinie de la pozitia pointer-ului actual pana la un punctdat definit de destinatie DX si DY.

Culoarealiniei se stabileste cu procedura SetColor, stilul si grosimea se stabilesc cu procedura SetLineStyle. Procedura este definita astfel:

Procedure LineRel (DX, DY: integer);

DX si DY reprezinta distanta in sensul axei x, respectiv y.

MoveTo

Procedura MoveTo muta pointer-ul actual de coordonate x, y. Procedura este definita astfel:

Procedure MoveTo (x, y:integer);

MoveRel

Procedura MoveRel muta pointer-ul actual din pozitia curenta la un punct definit de distantele DX, DY. Procedura este definita astfel.

Procedure MoveRel (DX, DY:integer);

DX si DY reprezinta distanta in sensul axei X, respenctiv Y.

SetLineStzle

Proceura SetLineStyle stabileste stilul si grosimea liniei. Procedura este stabilita astfel:

Procedure SetLineStyle (Stil, Model, grosime:word);

Pentru desenarea unei linii se pot folosi urmatoarele constante predefinite pentru stabilirea stilului:  

Const

Solidln=0; -liniecontinua;

DottedLn=1; -linie intrerupta de forma -----;

CenterLn=2; -Linie intrerupta de forma -.-.-.;

DeshedLn=3; -Linie intrerupta de forma - - - -;

UserbitLn=4; -Stil definit de utilizator.

Daca stilul variaza intre SolidLn si  DashedLn, valoarea variabilei model

trebuie sa fie 0. Daca stilul este pozitionat la UserBitLn, stilul liniei este definit de utilizator, si in acest caz variabila model este un numar hexazecimal pe 16 biti care descrie modul de prezentare a liniei (1= semn luminos,0=fara semn ).

Grosimea liniei poate fi stabilita cu urmatoarele constante predefinite.

Const

NormWidth=1; -grosme normala;

ThickWidth=3; -Linie groasa.

GetLineSettings

Procedura GetLineSetiings returneaza stilul si grosimea liniei utilizate si este definita astfel:

Procedure GetLinSettings (var infol:lineSetiingType);

InfoLin contine informatii referitoare la linie, avand tipul predefinit LineSettingType;

Type LineSettingsType=record

LineStyle:word:

Pattern:word:

Thickness:word:

End;

SetWritemode

Procedura SetWritemode stabileste modul de scriere pe ecran a unei linii. Procedura este definita astfel:

Procedure SetWritemode (modscriere:integer);

Modscriere este o variabla de tip intreg si poate lua urmatoarele valori predefinite.

Const

CopyPut=0;

XorPut=1;

Valoarea CopyPut inseamna folosirea instructiunii MOV a asamblorului. Valoarea XOrPUT inseamna folosirea instructiunii XOR intre punctele liniilor si punctele actuale din ecran. Astfel doua instructiuni consecutive vor sterge linia, ramanand imaginea anterioara pe ecran.


5.2. Aplicatie


Programul linii arata cum se pot apela si utiliza procedurile de trasare a liniilor, cum se pot cere date despre un anumit stil de linie, cum se pot defini stilul utilizator.


Program linii;

uses crt, graph;

var gd, gm, I :integer;

stil:linesettingstype;

begin

i:=0;

gd:-=detect;

initgraph(gd, gm,'c:bpbgi');

if graphresult <> grOk then Halt (1);

randomize;

setlinestyle(dottedln, 0, thickwidth);

getlinesettings(stil);

repeat

line (random(gatmaxx), random(getmaxy);

random(getmaxx), random(gatmaxy);

moveTo(100, 200);

lineRel(100, 100);

lineTo(200, 200); cleardevice;

setLineStyle(userbitln, $45, normwidth );

rectangle(100, 300, 200, 400);

i:=i+1;

until i=100;

repeat

line (random (getmaxx), random(getmaxy);

random ((getmaxx), random(getmaxy));

moveTo(100, 200);

linerel(100,100);

lineTo(200, 200); cleardevice;

setlinestyle(Stil, LineStyle,Stil.Pattern, Stil.Thickness);

rectangle (100, 300, 200, 400);

i:=i+1;

until i:=1;

readkey;

closeGraph;

End.