1.4. Шаблоны вывода линий и заполнения областей

Информация о виде вычерчиваемых прямолинейных отрезков с помощью функции getlinesettings заносится в структуру, объявленную в graphics.h как

struct linesettingstype {

int linestyle;         // тип линиисплошной, точками

unsigned upattern;     // 16 точек отображаемых по битам

int thickness;}        // толщина линии равная 1 либо 3

Пример 1.4

struct linesettingstype lineinfo;

getlinesettings (&lineinfo);

Установку новых атрибутов вывода отрезков можно произвести с помощью функции voidsetlinestyle(intlinestyle,unsignedupattern,intthickness), где linestyle принимает одно из следующих значений:

Если linestyle=USERBIT_LINE, то upattern представляет собой шаблон заполнения линии точками, при этом отображаются те точки, биты  которых равны 1. Например, после

setlinestyle(USERBIT_LINE,5,1);

line(0,10,getmaxx(),10);

на экран будут выведены точки (13,10), (15,10), (29,10), (31,10), … , (637,10), (639,10). Толщина линии задается с помощью аргумента thickness, а именно: NORM_WIDTH – тонкая линия, THICK_WIDTH – утолщенная линия /5/.

Атрибуты заполнения областей с помощью функции voidgetfillsettings(structfillsettingstypefar*fillinfo); возвращаются в структуру

struct fillsettingstype {

int pattern;       // шаблон заполнения

int color;}        // цвет заполнения

Здесь pattern принимает значения:

0   EMPTY_FILL                        заполнение цветом фона

1   SOLID_FILL                        сплошное заполнение

2   LINE_FILL                          заполнение символами тире

3   LTSLASH_FILL                    заполнение символами слеш (/)

4   SLASH_FILL                        заполнение символами слеш (толстая)

5   BKSLASH_FILL                    символами обратная слеш (толстая)

6   LTBKSLASH_FILL                символами обратная слеш ()

7   HATCH_FILL                        штрихи

8   XHATCH_FILL           толстые штрихи

9   INTERLEAVE_FILL              полосы

10  WIDEDOT_FILL                   редкие точки

11  CLOSEDOT_FILL                 густые точки

12  USER_FILL                         шаблон задан пользователем

Установка шаблона, заданного пользователем, задается с помощью функции voidsetfillpattern(charfar*pattern,intcolor),где pattern — символьный массив, k-й элемент которого при k=0,1,…,7 содержит отображаемые пикселы k-й строки шаблона 8×8.

Пример 1.5. Чтобы установить шаблон заполнения «+», достаточно задать массив pattern как:

unsigned char pattern[]={

0x18, //    00011000

0x18, //    00011000

0x18, //    00011000

0xFF, //    11111111

0xFF, //    11111111

0x18, //    00011000

0x18, //    00011000

0x00} //    00000000

Пример 1.6. Последовательный вывод заполнения прямоугольников с различными шаблонами заполнения.

int style;

for (style=EMPTY_FILL;style<USER_FILL;style++)

{

setfillstyle(style,WHITE);

bar (getmaxx()/4, getmaxy()/4,

getmaxx()*3/4, getmaxy()*3/4);

}

setfillpattern(pattern,WHITE);

bar   (getmaxx()/4, getmaxy()/4, getmaxx()*3/4,

 getmaxy()*3/4);

Закраску области можно осуществить с помощью функции floodfill(int x, int y, int Border). При этом закрашивается по заранее заданному шаблону внутренняя область, содержащая точку с экранными координатами (x,y) и ограниченная линией (границей), цвет которой задается аргументом Border. Шаблон и цвет закраски области могут быть заданы с помощью функций setfillstyle и setfillpattern. Если точка с координатами (x,y) находится за пределами области, то закрашивается внешняя часть этой области, ограниченная краями графического окна /5/.