Четверг, 17 Октябрь 2013 10:58

Команды создания простых графических объектов

Оцените материал
(0 голосов)

Команды создания простых графических объектовДля создания конкретного графического объекта мало знать траекторию контура. Нужно задать параметры, такие как цвет, толщину линии, степень закраски, пунктир, степень обработки углов и концов и многие другие. Все такие команды будут описаны в этом разделе. Итак

setrgbcolor - берет из стека три числа (B,G,R) и задает текущий цвет для рисования всего как комбинацию трех цветов - красного (R), зеленого (G) и синего (B). Это стандартный способ задания цвета. Важно только помнить, что числа задаются в диапазоне от 0 (отсутствие) до 1 (полная яркость). Так что черный нужно задавать как 0 0 0 а белый как 1 1 1.

setgray - берет из стека одно число G и задает яркость серого. Эта команда первоначально была создана для черно-белых принтеров, но она остается и сейчас и часто используется. Дело в том, что черно-белые графики еще часто создаются, например в публикациях научных статей. Фактически команда G setgray эквивалентна команде G G G setrgbcolor.

setlinewidth - берет из стека одно число W и задает толщину рисования линий по контуру.

setlinejoin - берет из стека одно число N и задает модификацию обработки углов ломаной толстой линии. Есть три способа: N=0 реальный угол как есть, N=1 сглаженный угол по дуге, N=2 обрезаный угол.

setlinecap - берет из стека одно число N и задает модификацию обработки концов толстой линии. Есть три способа: N=0 укороченный конец (точно по контуру), N=1 сглаженный конец по дуге, N=2 удлиненный конец с учетом толщины.

setdash - берет из стека одно число D и массив [...] и задает способ рисования линии пунктиром. В массиве может быть разное число элементов в зависимости от сложности пунктира. Проще всего это показать на примерах. Так [] 0 setdash - это сплошная линия, [3] 0 setdash - это простая пунктирная линия 3 pt чертим, 3pt не чертим и так далее. Для простоты я буду использовать английский язык, он короче - итак 3 on, 3 off, 3 on, 3 off, etc., [4 2] 0 setdash - это более фасонная пунктирная линия: 4 on, 2 off, 4 on, 2 off, etc., [3 5] 6 setdash - это пунктирная линия с начальной фазой.

Тут алгоритм следующий. Линия сначала прокручивается вхолостую, пока не достигнет начальной фазы. И с нее начинается рисование. В данном примере начальная фаза 6, проходим 3 on вхолостую, так как меньше начальной фазы, проходим 5 off, при этом движении начальная фаза пересекается после 3 off, значит реально будет начерчено 2 off, 3 on, 5 off, etc.. 11 setdash - попробуйте догадаться, что ответ будет таким 1 on, 3 off, 2 on, 3 off, etc..

stroke - эта команда заканчивает траекторию и реально рисует линию с учетом всех параметров, определенных в других командах. Для прямоугольных контуров введен специальный оператор, для которого предварительного задания контура не требуется, так как параметры прямоугольника являются его аргументами. Он называется

rectstroke - и он имеет четыре аргумента x, y, w, h, то есть координаты левого нижнего угла прямоугольника, ширина и высота. Естественно из стека он берет эти числа в обратном порядке. Вместо чисел можно задавать массив или строку, которые содержат эти числа. Причем в массиве и строке могут быть описаны не один, а несколько прямоугольников сразу. Есть даже и более сложная форма, в которой после четырех чисел задается матрица CTM (об этом можно будет прочитать позднее). Эта матрица умножается на текущую матрицу перед рисованием.

fill - эта команда заливает внутреннюю область контура цветом или уровнем серого. Если контур не замкнут, она его замыкает, соединяя последнюю точку с первой. Очень часто приходится заливать цветом прямоугольные области. Для удобства записи введет оператор

rectfill - для которого прямоугольный контур можно задавать непосредственно перед его использованием в виде четырех чисел x, y, w, h, то есть координаты левого нижнего угла прямоугольника, ширину и высоту. Естественно из стека он берет эти числа в обратном порядке. Вместо чисел можно задавать массив или строку, которые содержат эти числа.

Набор указанных команд позволяет в принципе создать чертеж любой степени сложности. Некоторые из этих команд используются очень часто, поэтому разумно ввести для них более короткие обозначения. В языке vkPS используются следующие определения

p{newpath}bd

/m{np moveto}bd - два аргумента

/l{lineto}bd - два аргумента

/rl{rlineto}bd - два аргумента

/c{curveto}bd - шесть аргументов

/slw{setlinewidth}bd - один аргумент

/srgb{setrgbcolor}bd - три аргумента

/sg{setgray}bd - один аргумент

/sl{stroke}bd

/ls{m l sl}bd - четыре аргумента

Использование новых определений команд позволяет намного компактнее записывать программы. Платой за это является просто предварительная запись всех определений в Прологе файла. Правда для человека, не знающего этих определений, программа может показаться написанной вовсе не на постскрипте, а на каком-то другом языке.

Это свойство всех интерпретируемых языков. Более того, практически каждая программа постскрипт-генератор начинает с того, что вводит свои определения. Поэтому прежде чем разбирать постскрипт файл, созданный какой-то программой надо сначала выучить ее язык. Моя программа PS-Figure начинает с того, что вводит все определения, после чего ими можно смело пользоваться. Вот несколько примеров рисования простых объектов.

Контур красного квадрата: 1 0 0 srgb 2 slw 0 0 m 50 0 rl 0 50 rl -50 0 rl 0 -50 rl sl

Синяя окружность на зеленом треугольнике: 0 1 0 srgb 2 slw 10 10 m 50 0 rl -25 30 rl -25 -30 rl sl 0 0 1 srgb 55 60 m 35 60 20 0 360 arc sl

Указанных команд вполне достаточно, чтобы нарисовать чертеж сколь угодно сложной формы и даже изображение поверхности в трехмерном пространстве с помощью сетки линий на осях координат. Все что требуется - это вычисление координат точек прямолинейных отрезков и дуг.

Вот эту работу как раз можно выполнить на любом другом вычислительном языке и просто записать тысячи повторений простых команд типа m l rl sl. Тем не менее, для полноценного графика еще нехватает аппарата рисования текстов и преобразования координат. Перейдем к рисованию текстов.

Интересные статьи

Азартные игры помогут сделать ваш досуг …

Азартные игры привлекают внимание многих современных людей. Сложно найти человека, который хотя бы раз не играл в рулетку, покер или не наслаждался слотами. При этом одни делают это за реальные деньги...

Фильм "Попутчик" 2007 г.

Фильм "Попутчик" 2007 г.

Влюбленная пара Джим и Грейс едут на отдых на автомобиле. Начинается дождь, вокруг туман, бесконечная дорога, темнота - все это создает напряженную обстановку

Banner sidebar

Вопрос дня

Какая из мобильных ОС лучше?

Популярные статьи

Операционные системы: достоинс…

Операционные системы: достоинства и недостатки Windows и Linux

Уже на протяжении долгого времени, не переставая идут споры, какая же все-таки операционная система лучше: Windows или Linux? Но пока что никто не при...

Кино и деньги

Кино и деньги

Капиталистический запад понял, что такую невероятную новинку как 3дэ-фильмы люди быстро полюбят. И пошло поехало... Сейчас все стараются снимать фильм...