Здавалка
Главная | Обратная связь

SetFillPattern(PP, N); - процедура установки орнамента пользователя PP



и цвета с номером "N"для заполняемых фигур.

Параметр PP имеет тип FillPatternType или array [1. . 8] of byte.Байт состоит из восьми битов и соответствует ряду из 8 пикселов, т. е. параметр РР определяет элемент орнамента размером 8*8 пикселов (восемь рядов по восемь пикселов). Если бит равен 1, то пиксел высвечивается заданным цветом, если бит равен 0 - текущим цветом фона.

Приведем процедуры построения заполненных установленным орнаментом фигур.Граница заполняемых фигур рисуется текущим цветом для линий.

Bar(X1, Y1, X2, Y2); - построить заполненный прямоугольникс заданными

координатами левого верхнего (X1, Y1) и правого

нижнего (X2, Y2) углов. Аналог процедуры: Rectangle(X1, Y1, X2, Y2);.

Bar3d(X1, Y1, X2, Y2, d, t);-построить параллелепипед с заполненной

передней гранью. Координаты углов: (X1, Y1), (X2, Y2), глубина "d". Переменная "t" типа boolean задает вывод верхней грани. При t=TopOn(true) верхняя грань показывается, при t=TopOff (false) - нет.

FillEllipse(X, Y, RX, RY);- построитьзаполненный эллипсс центром в точке (X, Y) и радиусами ( полуосями ) : RX - по горизонтали, RY - по вертикали.

Sector(X, Y, A1, A2, RX, RY);- построитьзаполненный сектор эллипса.A1 и A2 - начальный и конечный углы (в градусах), отсчитываемые против часовой стрелки относительно направления оси Х. Аналог процедуры: Ellipse(X, Y, A1, A2, RX, RY); строит сектор эллипса без автоматического заполнения.

PieSlice(X, Y, A1, A2, R);- построить заполненный сектор круга с центром в точке (X, Y) и радиусом R. Аналог процедуры:Arc(X, Y, A1, A2, R); строит дугу окружности.

FillPoly(N, M);- заполнить произвольную плоскую фигуру с границей, описанной массивом точек. N - число точек границы, М - параметр - переменная типа PointType, определяемая в модуле Graph в виде: TYPE PointType = Record x, y: Integer End;

В программе массив можно описать операторами: Const N=100; Var M: array[1..N] of PointType;

Присвоение значений можно провести в цикле:

For i:=1 to 3 do begin M[i].x:=random(95); M[i].y:=random(95) end;

Выбранным из стандартных или определенным орнаментом можно заполнить любую замкнутую область с границей цвета "N" оператором

FloodFill(X, Y, N);

Заполнение начинает производится из точки X, Y и ограничивается при достижении границы цвета с номером "N". Например: Rectangle(x1, y1, x2, y2); FloodFill((x1+x2) div 2, (y1+y2) div 2, Red); Если область не замкнута или цвет границы не равен "N", то заполнение "разольется" по экрану.

Работа с линиями

В графическом режиме курсор невидим, его положение можно определить функциями, возвращающими значения координат:

GetX;- по оси "Х", GetY; - по оси "Y".

Следующие процедуры перемещают курсор без рисования:

MoveTo(x, y);- переместить курсор в точку с координатами (x, y),

MoveRel(dx,dy);- сместить курсорна расстояние dx, dy от текущего положения.

Для построения многоугольников и ломаных линий удобно использовать процедуры:

LineTo(x, y); - провести отрезок прямой линииот текущего положения курсора до точки с координатами X, Y.

LineRel(dX, dY);- провести отрезок прямой линии от текущего положения курсора до точки, смещенной на расстояние dX, dY по соответствующим осям.

В отличие от процедуры Line(x1, y1, x2, y2);процедуры LineTo(x, y); и LineRel(dX, dY);при своем исполнении перемещают текущий указатель.

Для отрезков прямых линий и процедур с их использованием можно задать режимы построения прямых линий оператором:

SetWriteMode(N);

N=0 - замещение линией изображения на экране ( режим CopyPut ) используется по умолчанию,

N=1 - изображение комбинируется ( режимXorPut). Работа функции состоит в изменении согласно логической операции "исключающее ИЛИ" исходного значения цвета пиксела (числа "1" или "0"). Логическая функция Xor, примененная к одной переменной дважды, восстанавливает ее исходное значение:( J xor I ) xor I = J. Следовательно при повторном проведении линии в режиме XorPut изображение этой линии уничтожается, а цвет пикселов экрана становится исходным. На этом правиле основаны некоторые программы построения движущихся изображений.

Толщину и форму (стиль) линийотрезков прямых, прямоугольников, окружностей, эллипсов можно задать оператором

SetLineStyle(F, P, T);

Здесь F - форма линии из стандартного набора BGI: F=0 - сплошная, F=1 - пунктирная, F=2 - штрих-пунктирная, F=3 - штриховая. F=4 - форма линии задается параметром Р.При F<4 значение Р игнорируется. Параметры F, P, T типа Word.

Стиль линии Р - число, двоичное представление которого отображает заполнение линии длиной 16 пикселов. Если разряд числа равен 1, то пиксел высвечивается, 0 - не высвечивается.

T - толщина линии может принимать два значения: T= 1 - тонкая (1 пиксел), T= 3 - толстая (3 пиксела).

Например, операторы: SetLineStyle(4, $5555, 3); Line(x1, y1, x2, y2); определяют толстую мелким пунктиром линию.

Пример операторов для рисования движущегося прямоугольника:

SetWriteMode(1);

a:= 100; b:= 50;{ стороны прямоугольника }

x1:= 0; y1:= GetMaxY div 2;

N:= GetMaxX - x1 - a;{ N - число перемещений }

for i:= 0 to N do begin

Rectangle(x1+i, y1, x1+a+i, y1+b); { рисование прямоугольника }

delay(10); Rectangle(x1+i,y1,x1+a+i,y1+b);{ стирание прямоугольника }

end;

Приведем пример задания закона движения линии относительно своего "центра":

for j:= 1 to Nf do begin

A:= 2 * pi * j/Nf;{ угол поворота линии вокруг своего "центра" }

Kx1:= FKx1(j); Ky1:= FKy1(j); Kx2:= FKx2(j); Ky2:= FKy2(j);

{ координаты 1-ой точки фигуры }

xx1:= xf + round(Kx1 * ((x1-xf)*cos(A) - (y1-yf)*sin(A)));

yy1:= yf + round(Ky1 * ((y1-yf)*cos(A) + (x1-xf)*sin(A)));

{ координаты 2-ой точки фигуры }

xx2:= xf + round(Kx2* ((x2-xf)*cos(A) - (y2-yf)*sin(A)));

yy2:= yf + round(Ky2* ((y2-yf)*cos(A) + (x2-xf)*sin(A)));

SetColor(14); line(xx1, yy1, xx2, yy2); delay(100);

end;

x1, y1, x2, y2 - исходные координаты точек фигуры,

xx1, yy1, xx2, yy2 - координаты 1-ой и 2-ой точек фигуры на i-ом шаге рисования.

В этом фрагменте многократно (Nf - раз) рисуется линия, вращающаяся на угол "A” относительно своего центра xf, yf. Фигура может искажаться (деформироваться), если не соблюдаются равенства: Fkx1( j)= Fky1( j)= Fkx2( j)= Fky2( j)= K= 1.

Если центр узора перемещается, то изменение его координат необходимо задать во внешнем цикле.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.