Библиотека VingGaph позволяет изменять такие параметры
отображаемых элементов, как цвет, местоположение, размер и др.
Это позволяет строить изображения, динамически меняющиеся по
алгоритму пользователя.
 |
Точкой привязки графического элемента считается левая верхняя
вершина прямоугольника, в который вписан этот элемент.
|
Рассмотрим функции, изменяющие текущие параметры графических элементов.
Во всех этих функциях графические элементы указываются посредством своего
идентификатора ident.
- SetColor(int ident, int color)
- Изменяет цвет элемента на color.
- Fill(int ident, int color)
- Заполняет внутреннюю область элемента цветом color.
Параметр color может быть опущен, в этом случае используется
цвет, установленный в текущей нити с
помощью SetColor(int color),
как объяснялось в разделе об установке цвета.
Значение параметра color=-1
убирает заполнение, т.е. делает элемент прозрачным (как в начальном состоянии).
Функция Fill() позволяет изменить цвет рабочей области
окна графического терминала, если ident=0.
 |
В QNX Neutrino 1.0 при работе терминала VinGraph в режиме VGOSC=0
(см. раздел о терминале VinGraph) функция Fill(0, color)
заполняет окно терминала не полностью. Для устранения этой ошибки рекомендуется
использовать следующую последовательность действий:
Hide (0), Fill (0, color), Show (0);
Указанная ошибка отсутствует в QNX Neutrino 2.0 и в режиме
VGOSC=1.
|
- MoveTo(int x, int y, int ident)
- Передвигает элемент в точку (x, y).
- Move(int ident, int dx, int dy)
- Сдвигает элемент на dx точек по горизонтали
и dy точек по вертикали. Параметры dx, dy могут
быть положительными, отрицательными или нулевыми.
- Enlarge(int ident, int left, int up, int right, int down)
- Увеличивает размер элемента на указанное количество точек
влево, вверх, вправо и вниз (по порядку следования параметров).
Если значение параметра отрицательно, то происходит уменьшение
элемента в соответствующем направлении.
- Enlarge(int ident, int dx, int dy)
- Производит центрированное увеличение элемента, т.е. увеличивает
его на dx точек одновременно влево и вправо и на dy точек
вверх и вниз. Если значение параметра отрицательно, то происходит
уменьшение элемента по соответствующей оси.
- EnlargeTo(int x, int y, int w, int h, int ident)
- Изменяет положение и размеры элемента путем указания с помощью первых
четырех параметров нового описывающего прямоугольника.
Данная функция может также использоваться для изменения
положения и размеров окна графического терминала (если ident=0 или
опущен).
- EnlargeTo(const tPoint points [], int npoints, int ident)
- Изменяет положение и конфигурацию ломаных линий и многоугольников, а также,
как частный случай, всех элементов, которые можно определить двумя точками --
координатами левой верхней и правой нижней вершин описывающего прямоугольника.
Данная функция также оказывает особое влияние на точечный элемент,
рисуемый с помощью функции Pixel(), превращая его
во множество точек, не связанных линиями. Параметр points указывает
на массив из npoints точек.
- SetLineWidth(int ident, int width)
- Изменяет толщину линий, которыми рисуется элемент.
Толщина линий становится равной width пикселов.
Рисование графических элементов толстыми линиями более трудоемко, т.к.
требуется рассчитывать большее количество точек и особо обрабатывать стыковку
линий и их окончание. Значение width=0 выключает
этот особый режим рисования.
- SetText(int ident, const char *text)
- Заменяет текст в элементе, созданном с помощью функции Text(),
на новый, задаваемый параметром text.
Рассмотрим два простых примера.
Следующая программа рисует движущиеся квадрат и круг:
#include <unistd.h>
#include <vingraph.h>
int main ()
{
ConnectGraph ();
Fill (0, RGB (255, 242, 205));
int c1 = RGB (38, 176, 136);
int f1 = Rect (10, 200, 50, 50, 0, c1);
Fill (f1, c1);
int c2 = RGB (48, 200, 240);
int f2 = Ellipse (580, 200, 50, 50, c2);
Fill (f2, c2);
delay (1000);
for (int i = 320; i; i--)
Move (f1, 2, 0), Move (f2, -3, 0), delay (20);
CloseGraph ();
return 0;
}
Вы можете посмотреть, как работает эта программа,
запустив файл exmove.demo.
Следующая программа рисует расширяющиеся квадрат и окружность:
#include <unistd.h>
#include <vingraph.h>
int main ()
{
ConnectGraph ();
Fill (0, RGB (255, 242, 205));
int f1 = Rect (280, 190, 50, 50, 0, RGB (38, 176, 136));
int f2 = Ellipse (370, 210, 200, 200, RGB (48, 200, 240));
delay (1000);
for (int i = 240; i; i--)
Enlarge (f1, 2, 2), Enlarge (f2, -1, -1), delay (20);
CloseGraph ();
return 0;
}
,
Вы можете посмотреть, как работает эта программа,
запустив файл exenlarge.demo.
Обратите внимание на нештатное поведение окружности, когда она продолжает
"умешьшаться" после достижения нулевого размера.