Четверг, 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. Тем не менее, для полноценного графика еще нехватает аппарата рисования текстов и преобразования координат. Перейдем к рисованию текстов.

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

Увлечения информационных технологий

Человек стремится к счастью, и для каждого человека оно своё. Счастье для человека может быть разным: семья, работа, хобби, ребёнок, любовь, образ жизни, общение и так далее, с самыми разными перечисл...

Операционные системы Apple Mac OS

Операционные системы Apple Mac OS

Пользователи новейших компьютеров с операционной системой Windows обычно сталкиваются с неприятностями и даже диким страхом, что если войти в Интернет без защиты антивирусной, то все документы заразят...

Banner sidebar

Вопрос дня

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

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

Увлечения информационных техно…

Человек стремится к счастью, и для каждого человека оно своё. Счастье для человека может быть разным: семья, работа, хобби, ребёнок, любовь, образ жиз...

Информационные технологии буду…

Информационные технологии будущего: что нас ожидает?

Совсем недавно был опубликован список, в который входят самые зажигающие информационные технологии будущего.Как говорят специалисты, они скоро сыграют...