GRAFIKA Moduł graphicsh zawiera funkcje umożliwiające: obsługę kart graficznych wybór i zmianę trybu graficznego rysowanie różnych figur geometrycznych z zastosowaniem linii o różnej grubości i fakturze wypełnianie obszarów różnymi wzorcami tworzenie napisów z wykorzystaniem różnych krojów pisma i w różnych kierunkach obsługę błędów operacji graficznych ORGANIZACJA I ZARZĄDZANIE EKRANEM W zależności od posiadanej karty, różna może być rozdzielczość i liczba kolorów Schemat programu zainicjowanie grafiki operacje w trybie graficznym Inicjowanie grafiki zakończenie grafiki void far initgraph(int *sterownik, int *tryb, const char *ścieżka); sterownik wskaźnik zmiennej zawierającej liczbę określającą sterownik Stałe definiujące sterowniki: DETECT, CGA, MCGA, EGA, EGA64, EGAMONO, IBM8514, HERCMONO, ATT400, VGA, PC3270, CURRENT_DRIVER=-1
tryb wskaźnik zmiennej zawierającej numer trybu graficznego dla danego sterownika Stałe trybów graficznych ekranu: CGAC0 = 0, /*320x200 paleta 0; 1 strona*/ VGAL0 = 0, /*640x200 16 kolorów; 4 strony*/ VGAMED =1, /*640x350 16 kolorów; 2 strony*/ VGAHI =2, /*640x480 16 kolorów; 1 strona*/ ścieżka łańcuch zawierający ścieżkę do skorowidza ze sterownikami grafiki (plikibgi) Informacje o sterowniku i trybie graficznym void far detectgraph(int *sterownik, int *tryb); int ster, tryb; detectgraph(&ster, &tryb); initgraph(&ster,&tryb, C:\\BORLAND\\BGI ); Zamknięcie trybu graficznego: void far closegraph(void); Przywracanie trybu tekstowego aktualnego w momencie inicjowania grafiki: void far restorecrtmode(void); Zmiana trybu tekstowego na graficzny void far setgraphmode(int tryb);
Okna graficzne X abs 0,0 X wzg Y abs Y wzg Okno graficzne xmax, ymax Wartości maksymalne dla ekranowych współrzędnych X i Y int far getmaxx(void); int far getmaxy(void); Nowe parametry okna void far setviewport(int left, int top, int right, int bottom, int clip); left, top right, bottom clip różny od 0, wszystkie operacje odnoszą się do zdefiniowanego okna Czyszczenie okna void far cleardevice(void); czyści cały ekran, kursor na 0,0 (abs) void far clearviewport(void); czyści aktualne okno, kursor na 0,0 (wzg)
Błędy int far graphresult(void); kod ostatnio popełnionego błędu grok =0, /*brak błędu*/ grnoinitgraph =-1, /*nie zainicjowano grafiki*/ grnotdetected =-2, /*nie wykryto karty grficznej*/ char* grapherrormsg(int błąd); wskaźnik do łańcucha zawierającego komunikat o błędzie o podanym kodzie int ster, tryb, blad; ster=detect; initgraph(&ster,&tryb, ); blad=graphresult(); if(blad!=grok) { printf( Grafika nie jest OK: %s \n,grapherrormsg(blad); exit(1); } else
Kolory void far setbkcolor(int kolor); ustalenie koloru tła void far setcolor(int kolor); ustala kolor rysowania Stałe kolorów: BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE /*ciemne kolory*/ /*jasne kolory*/ Funkcje rysowania linii: void far moverel(int dx, int dy); przesunięcie o wskaźnik dx, dy void far moveto(int x, int y); przesunięcie do punktu x, y void far setlinestyle(int styl, unsigned wzor, int grubosc); ustalenie aktualnego rodzaju linii Stałe rodzajów linii (styl): SOLID_LINE =0, /*linia ciągła*/ DOTTED_LINE =1, /*linia kropkowana*/ CENTER_LINE =2, /*linia symetrii*/ DASHED_LINE =3, /*linia przerywana*/ USERBIT_LINE =4 /*linia definiowana przez użytkownika*/
wzór podajemy, gdy styl został ustawiony na 4 grubość NORM_WIDTH =1, THICK_WIDTH =3 void far putpixel(int x, int y int kolor); rysuje punkt o współrzędnych (x, y) w podanym kolorze void far line(int x1, int y1, int x2, int y2); rysuje linię łączącą punkty (x1, y1) i (x2, y2); wskaźnik zostaje w miejscu void far linerel(int dx, int dy); rysuje linię od aktualnej pozycji do punktu oddalonego o (dx, dy); wskaźnik ustawiony w nowym miejscu void far lineto(int x, int y); rysuje linię od aktualnej pozycji do punktu o współrzędnych (x, y); wskaźnik ustawiony na punkt (x, y) void far rectangle(int left, int top, int right, int bottom); rysuje prostokąt left, top right, bottom void far drawpoly(int numpoints, const int far *polypoints); rysuje linię łamaną o numpoints wierzchołkach; polypoints powinien wskazywać tablicę liczb całkowitych zawierającą współrzędne punktów x1, y1, x2, y2 (wielokąty n+1 współrzędnych n wsp =0 wsp ) void far circle (int x, int y, int promień); rysuje okrąg o podanym promieniu i środku w punkcie (x, y)
void far arc(int x, int y, int stangle, int endangle, int promień); łuk o środku (x, y) podanym promieniu od kąta stangle do kąta endangle void far ellipse(int x, int y, int stangle, int endangle, int promienx, int promieny); kreśli eliptyczny łuk Wypełnianie figur: void far setfillstyle(int wzor, int kolor); ustalenie wzorca i koloru wypełnienia Predefiniowane wzorce: EMPTY_FILL, /*wypełnienie kolorem tła*/ SOLID_FILL, /*wypełnienie kolorem ustalonym*/ LINE_FILL, /*wypełnienie liniami poziomymi*/ LTSLASH_FILL, USER_FILL /*wypełnienie liniami ukośnymi*/ /*wypełnienie wzorcem zdefiniowanym przez użytkownika*/ void far setfillpattern(const char *upattern, int kolor); pozwala zdefiniować wzorzec przez użytkownika; parametr upattern wskazuje tablicę ośmiu bajtów definiujących wzorzec np char tab[8]={195,195,0,0,0,0,195,195}; 195 11000011 195 11000011 0 00000000 0 00000000 0 00000000 0 00000000 195 11000011 195 11000011
void far bar(int left, int top, int right, int bottom); wypełnienie prostokąta bez rysowania konturów void far bar3d(int left, int top, int right, int bottom, int depth, int topflag); rysuje prostopadłościan; wypełnia przednią ścianę left, top depth right, bottom wypełnienie wzorem i kolorem topflag =0 nie rysuje górnej powierzchni; można umieszczać jeden prostopadłościan na drugim void far fillpoly(int numpoints, const int far *polypoints); rysuje linię łamaną i wypełnia ją (jeśli nie zamknięta to łączy punkt pierwszy z ostatnim) void far pieslice(int x, int y, int stangle, int endangle, int promień); rysuje i wypełnia wycinek koła void far sector(int x, int y, int stangle, int endangle, int promieńx, int promieńy); rysuje i wypełnia wycinek elipsy void far fillellipse(int x, int y, int promieńx, int promieńy); rysuje i wypełnia elipsę void far floodfill(int x, int y, int kolor); wypełnia obszar otoczony konturem w podanym kolorze; (x, y) współrzędne punktu wewnątrz obszaru
Teksty w grafice void far settextstyle(int font, int kierunek, int rozmiar); ustala krój, kierunek i rozmiar tekstu font stałe określające krój pisma DEFAULT_FONT =0, TRIPLEX_FONT =1, SMALL_FONT =2, SANS_SERIF_FONT =3, GOTHIC_FONT =4, kierunek wyprowadzanego tekstu HORIZ_DIR 0 /*od lewej do prawej*/ VERT_DIR 1 /*z góry na dół*/ rozmiar znaków od 1 do 10 void far settextjustify(int poziom, int pion); służy do justowania tekstu poziom LEFT_TEXT CENTER_TEXT RIGHT_TEXT pion BOTTOM_TEXT CENTER_TEXT TOP_TEXT =0, /*wyrównanie do lewego marginesu*/ =1, /*środkowanie*/ =2, /*wyrównanie do prawego marginesu*/ =0, /*wyrównanie do dolnego marginesu*/ =1, /*środkowanie w pionie*/ =2, /*wyrównanie do górnego marginesu*/ void far outtext(const char *łańcuch); wyświetlenie tekstu względem aktualnej pozycji wskaźnika
void far outtextxy(int x, int y, const char *łańcuch); wyświetlenie tekstu względem punktu (x, y)