7.2. Линии
В состав API Windows входит несколько функций, которые рисуют прямые и кривые линии:
D AngleArc — дуга окружности с заданием углов; D Arc, ArcTo — дуга эллипса;
□ LineDDA — вычисление координат пикселов отрезка прямой линии и вызов определяемой пользователем функции вывода пикселов;
□ LineTo — рисование отрезка прямой линии от текущей позиции к заданной точке;
□ MoveToEx — задание текущей позиции графического вывода;
□ PoIyBezier, PoIyBezierTo — один или несколько связанных между собой кубических сплайнов Безье;
□ PoIyDraw — несколько связанных отрезков прямых и сплайнов Безье;
□ Polyline, PolylineTo — ломаная линия из многих связанных между собой отрезков прямых (полилиния);
□ PolyPoIyline — несколько полилиний как единый объект.
Примеры для линий— графических примитивов API Windows— даны в табл. 7.1.
Таблица 7.1


Стиль линии. Перо
В терминологии Windows API перо описывает следующие характеристики линии — цвет, толщину и стиль (пунктир). Перо — один из атрибутов контекста графического устройства. По умолчанию в контекст выбрано перо, которое соответствует черной тонкой непрерывной линии. Такое перо относится к стандартным перьям.
Все линии, рисуемые вашей программой с помощью функций GDI Windows API, выводятся одним и тем же цветом, имеют одинаковую толщину и тот же стиль до тех пор, пока не изменить перо. Функции рисования линий не имеют аргументов для указания текущих атрибутов линий (это характерно для графических библиотек, в которых подобные характеристики рисуемых объектов записываются как глобальные переменные, чтобы уменьшить количество аргументов вызова функций рисования). Перо относится ко всем линиям и контурам фигур.
Чтобы начать рисовать линии, например, другим цветом, необходимо создать новое перо и выбрать его в контексте графического устройства. Отныне все
f линии будут рисоваться данным пером до тех пор, пока вы не выберете в ! контексте устройства очередное перо.
! Важно то, что, создавая новое перо, нужно обязательно позаботиться об [ уничтожении предыдущего пера. Перо есть объект GDI, для него выделяется специальная область памяти. Перо существует до тех пор, пока его не унич-; тожить. Завершение работы прикладной программы может и не привести к автоматическому уничтожению объектов GDI и освобождению памяти компьютера. Своевременное уничтожение неиспользуемых объектов GDI возлагается на вашу программу. Иначе для некоторых версий Windows могут возникнуть утечки памяти, накопление которых может привести к нежелательным последствиям.
Не следует пытаться уничтожить стандартные перья.
Для определения стиля линий используются функции, которые имеют в своем названии —Реп—. Типичная последовательность для вывода линии с заданным стилем может быть такой:

Здесь создается перо, которое соответствует тонкой красной штрих-пунктирной линии. После использования перо уничтожается.
Меридианы и параллели
РаССМОТрИМ Пример Программы, В КОТОРОЙ ИСПОЛЬЗуЮТСЯ фуНКЦИИ MoveToEx
и Ыпето для рисования меридианов и параллелей шара. Текст программы studex2о. срр:




Изображение
шара приведено на рис. 7.9. Запустите
программу, выберите пункт меню "Графика"
и вы увидите шар, который, как кажется,
вращается вокруг оси. Здесь вращается
не шар, а система координат. Для этого
использовано соответствующее
преобразование координат при создании
проек* ции — повороты координат. Углы
наклона камеры в
этом примере следующие: а=0... 180,β=45
градусов. ^г^ппетш^
Меридианы
и параллели рисуются только для тех
точек поверхности, для которых координата
Z
больше нуля (в повернутой системе).
Положительные значения Z
соответствуют видимой части шара.
Рисование меридианов и параллелей
сделано в виде одной функции
MeridOrParal
для уменьшения размера текста программы.
Необходимо отметить, что эта программа
разработана как раз для шара. Чтобы
нарисовать подобным образом, например, эллипсоид, необходимо сделать существенные изменения в тексте программы.
Фрактал из линий
В следующем примере программы мы используем линии для рисования фрактала. Этот фрактал немного напоминает папоротник (рис. 7.10). Используем перья различных оттенков зеленого цвета для имитации ствола, ветвей и листвы.
В этом примере рисуются линии различной толщины: для листвы линии толстые, а для ствола и ветвей — тонкие (можно и наоборот — для листвы более толстые линии).

Рис. 7.10. Фрактал из линий Текст программы studex2i. срр:


!
