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

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

Трехмерная графика

Трехмерная графика

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

Как выбрать флешку?

Как выбрать флешку?

Когда-то информацию перекидывали на дискеты, но это было давно и на данный момент это неудобно, потому что появились флешки. Но официальное название флешки – USB накопитель, также ее называют USB Flas...

Banner sidebar

Вопрос дня

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

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

Компьютеры HP: какие поломки п…

Компьютеры HP: какие поломки преследуют этот компьютер?

Без огромного преувеличения можно сказать, что переносимые компьютеры марки HP считаются самыми популярными. Это связано с тем, что компьютеры HP выде...

Правила игры в слоты и автомат…

Если вы являйтесь азартным человеком и хотите оказаться в шикарных залах мировых казино, то этот сайт для вас. Онлайн казино “Вулкан” предлагает изыск...