Целью данной темы является:
- освоение учащимися основ работы с персональным компьютером;
- освоение учащимися навыков навигации по файловой системе;
- освоение учащимися навыков редактирования текста простым текстовым
редактором;
- начальные навыки программирования.
Для навигации по файловой ситеме используется текстовая
оболочка Midnight Commander. Внешне эта текстовая оболочка похожа на все
остальные текстовые оболочки (Norton Commander, Volkov Commander, etc.). Запуск
Midnight Commander'а производится командой
mc, в окне
терминала.
Данная оболочка является настраиваемой. В двух окнах
отображается содежимое двух (м.б. различных) каталогов. Оболочка имеет функции
подсветки содержимого в зависимости от типа файла, его атрибутов. Каталог ".."
означает переход на один уровень вверх. При нажатии клавиши "Enter" на файле с
PostScript-программой, происходит автоматический запуск интерпретатора
PostScript и отображение на экране данного файла.
Учащимся предлагается
использовать текстовый редактор, встроенный в Midnight Commander. Этот текстовый
редактор вызывается функциональной клавишей F4, при установленном на файле
курсоре оболочке.
Текстовый редактор имеет несколько "горячих" клавиш -
F1..F10, назначение которых можно посмотреть на нижней панели редактора. Кроме
того, редактор обладает разветвленным меню, вызываемым функциональной клавишей
F9.
Наиболее употребительные операции при редактировании текстового
файла:
- вставка символов - производится при включенном режиме "вставка"
("insert"). Набираемые символы вставляются на месте курсора, старый текст
сдвигается вправо от курсора;
- замена символов - производится с помощью удаления старых (клавиша
"Backspace" удаляет символ слева от курсора, клавиша "Del" удаляет символ
справа от курсора) и вставки новых символов. Альтернативный способ (редко
используемый) состоит в переключении в режим "замены" ("Replace"), в котором
набираемые символы заменяют собой существующие символы;
- удаление строк - сочетание ctrl-Y или F8;
- вставка строк - "Enter";
- выделение текста - начинается и завершается нажатием клавиши F3;
- копирование выделенного текста в точку положения курсора - F5;
- перемещение выделенного текста в точку положения курсора - F6;
- удаление выделенного фрагмента текста - F8;
- сохранение изменений - F2;
- выход из редактора - F10.
Как было сказано выше, при
нажатии на клавишу "Enter" в Midnight Commander'е, PostScript-программа
запускается в интерпретаторе PostScript. Для отображения результата работы
программы система запускает стандартный интерпретатор GhostScript и программу
отображения GhostView. Программа отображения позволяет просмотреть результат в
разных масштабах, распечатать результат на принтере, получить от интерпретатора
новую версию отображения.
Интерпретатор и Midnight Commander работают
одновременно, не мешая друг другу. Учащиеся могут переключаться между ними
клавишами alt+Tab.
Язык PostScript
изобретен фирмой Adobe corp. в 1985 году. Назначение языка - стандартизация
вывода информации, независимость результата вывода от устройства вывода и от
программы, этот вывод инициирующей.
Язык PostScript - это язык описания
страниц. Описание производится с помощью математических формул и объектов, что
дает абсолютную переносимость описания страницы между платформами и
операционными системами. Все, чем оперирует язык PostScript, - графические
объекты, в том числе и текст.
На сегодняшний день язык PostScript
является издательским и типографским стандартом. Интерпретаторы языка PostScript
встраиваются в большинство бытовых печатных систем. Наличие же интерпретатора
PostScript в издательской технике является обязательным.
Язык PostScript
использует постфиксную нотацию для записи математических выражений.
Язык
PostScript подразумевает, что программа состоит из слов, разделенных
разделителями, в роли которых могут выступать пробел, комментарии, табуляция,
символы конца строки и страницы. Несколько последовательных разделителей
обрабатываются так же, как и один. Комментариями считается все, начиная от знака
% и до конца строки.
Язык PostScript не накладывает ограничений на длину
строк или на количество слов в строке.
Основа языка PostScript - стеки. В рамках
данной темы учащимся предлагается усвоить только лишь понятие о стеке операндов,
не упоминая остальные стеки языка.
Описание работы стека дается на
примере работы монетницы.
Стек - это особая область памяти, организованная по принципу
"последний вошел - первый вышел".
Учащимся предлагается самим
привести примеры стека из жизни. Обычно учащиеся вспоминают: лифт, автоматный
магазин, хозяйственную сумку.
Язык PostScript использует
постфиксную нотацию (обратную запись). Еще такой способ записи называется
"польская запись".
Смысл такого способа записи состоит в том, что сначала
записывают операнды, затем - операторы. На примере показываем, как выглядит
обычное математическое выражение в постфиксной нотации:
Описываем принцип прочтения обратной записи:
- читаем первое слово ("8"); определяем, что это - константа; заносим
константу в стек; с краю стека будет находиться константа "8".
- читаем следующее слово ("7"); определяем, что это - константа; заносим
константу в стек; с краю стека будет находиться константа "7".
- читаем следующее слово ("+"); определяем, что это - оператор сложения;
выполняем операцию, соответствующую оператору сложения: извлекаем из стека два
крайних элемента, находим их сумму и результат помещаем в стек; с краю стека
будет находиться сумма 7 и 8 ("15").
- читаем следующее слово ("5"); определяем, что это - константа; заносим
константу в стек; с краю стека будет находиться константа "5".
- читаем следующее слово ("/"); определяем, что это - оператор деления;
выполняем операцию, соответствующую оператору деления: извлекаем из стека два
крайних элемента, находим их частное и результат помещаем в стек; с краю стека
будет находиться результат деления 15 на 5 ("3").
Предлагаем учащимся
несколько примеров на самостоятельное построение.
PostScript используем свою единицу
измерения - пункт (point), обозначаемую пт (pt). В одном стандартном дюйме
(inch) помещается 72 пункта (pt).
Как
пример перевода длины из миллиметров в пункты, используем подпрограмму
cmm учебной программы.
В качестве угловой меры в PostScript
используется градус (полная окружность = 360 градусов). Положительное
направление отсчета углов - против часовой стрелки.
PostScript-программа
имеет в своем составе некие начальные и конечные служебные операторы, и
собственно операторы рисования, между ними заключенные. Поскольку изучение
служебных инструкций не входит в нашу тему, проговариваем их смысл по учебной
программе, только лишь для общего развития, без записи в тетрадях.
В PostScript вместо обычных
знаков математических операций используются специальные слова, обозначающие эти
математические операции:
Изучаем действие арифметических операторов на примере подпрограммы
cmm учебной программы.
Прорабатываем применение арифметических
операторов на примерах (самостоятельно):
Программа может содержать
несколько блоков графических операторов. Блок графических операторов называется
путь. Внутри блока могут действовать свои графические параметры, действие
которых может распространяться, а может и не распространяться за пределы
блока.
При открытии страницы начало
координат находится в левом нижнем углу. Оператор
translate смещает
начало координат в указанную точку:
10 20 translate
После выполения этого оператора начало координат сместится в точку
(10,20).
Оператор
rotate поворачивает
систему координат на произвольный угол (положительное направление - против
часовой стрелки):
90 rotate
Поворачивает систему координат на 90 градусов
против часовой стрелки.
-90 rotate
Поворачивает систему
координат на 90 градусов по часовой стрелке.
Графические построения состоят из
нескольких этапов:
- инициализация нового графического пути;
- построение графического пути с помощью графических операторов;
- определение типа линии;
- прорисовка линии вдоль построенного пути.
Оператор
newpath
начинает новый путь.
После построения пути вдоль него может
быть проведена линия. Это осуществляет оператор
stroke. Путь, кроме того,
можно "закрыть", при этом от текущей точки до первой определенной в пути точки
проводится прямая линия. "Закрывает" путь оператор
closepath.
У линии можно задать несколько свойств:
толщину, скругленность хвостиков, пунктирность, цвет и т.д. В нашей теме
рассматривается только лишь толщина линии. Толщина линии задается оператором
setlinewidth:
2.0 setlinewidth
Устанавливает толщину линии 2 пункта
(2pt)
После построения пути, с ним
можно выполнять различные операции: использовать как маску для дальнейших
построений, масштабировать, искривлять и т.д. В нашей теме мы используем
построенный путь для вывода линий. Вдоль построенного пути можно нарисовать
линии заданных параметров, с помощью оператора
stroke.
Смещение текущей точки можно
произвести двумя способами:
Оператор |
Синтаксис |
Описание |
moveto |
xPyPmoveto |
смещает текущую точку в точку с указанными координатами (x,y) |
rmoveto |
dxPdyPrmoveto |
смещает текущую точку по вектору с указанными координатами
(dx,dy) |
По сути, оператор, начинающийся с буквы
r, означает, что передаваемые ему координаты считаются не от начала
координат, а от текущей точки.
Примеры:
200 150 moveto
100 32 rmoveto
Оператор |
Синтаксис |
Описание |
lineto |
xPyPlineto |
проводит прямую линию от текущей точки в точку с указанными
координатами (x,y) |
rlineto |
dxPdyPrlineto |
проводит прямую линию от текущей точки в точку, отстоящую от нее на
указанном расстоянии по горизонтали dx и по вертикали dy (по вектору с
указанными координатами) |
После выполнения этих команд,
последняя точка прямой линии становится текущей точкой.
Примеры:
201 110 lineto
10 302 rlineto
Дуга окружности, или
окружность, строится оператором
arc.
Syntax:
x0
y0 R a1 a2 arcx0
y0 - координаты центра окружности;
R - радиус
окружности;
a1 a2 - начальный и конечный угол
дуги окружности (0..360).
Угол
0 совпадает с положительным
направлением оси
OX.
Особенность оператора: если текущая точка пути
определена, то от нее до начальной точки дуги проводится прямая линия!
После
построения дуги, последняя ее точка становится текущей.
Дуга всегда рисуется
против часовой стрели, независимо от соответствия углов друг другу. Для
проведения дуги в обратном направлении (по часовой стрелке) применяют
аналогичный по синтаксису оператор
arcn.
Пример:
201 110 22 0 360 arc
В
приложении А приведен
листинг учебной программы, с пронумерованными строками.
Строки 1-20 и
65-67 содержат начальные и конечные служебные инструкции,
соответственно.
Описание некоторых строк программы:
1. Программа
написана на языке PostScript, languagelevel 2
2. Создатель
3. Наименование
документа
4. Дата создания документа
5. Количество страниц в
документе
6. Порядок страниц
9. Подпрограмма перевода длины из миллиметров
в пункты
12. Требуемое разрешение устройства вывода
14. Начало страницы
1
22. Сохранение текущих графических настроек
23-59. Операторы построения
пути
61. Установим толщину линии
62. Проводим линию с заданными
параметрами вдоль построенного пути
63. Восстанавливаем графические
настройки
64. Показываем страницу
Написать программу, пользуясь учебной
программой, которая бы рисовала фамилию, имя и отчество учащегося. Размер буквы
- 10 мм на 20 мм, расстояние между буквами - 5 мм.
При необходимости
использовать поворот координатной системы (если одно из слов не помещается
поперек листа формата А4.
Учащимся предлагается изменить часть программы,
содержащую графические операторы (выделена на примере жирным
шрифтом).
Сначала необходимо нарисовать слова, в масштабе 1:1, в рабочей
тетради. Затем - составить программу рисования этих слов.
После выполнения заданий этой темы
учащиеся овладевают начальными навыками работы с персональным компьютером,
навыками редактирования текста в простом текстовом редакторе, навыками запуска
программ из командной строки и из меню графического интерфейса операционной
системы.
Результатом является распечатанная работа (фамилия, имя,
отчество). Один экземпляр остается в классе, один экземпляр выдается учащемуся в
качестве подарка за успешное освоение темы.
1. %!PS-Adobe-2.0
2. %%Creator: MAV
3. %%Title: TEST. PU-29
4. %%CreationDate: Sun Jan 12 13:38:48 2003
5. %%Pages: 1
6. %%PageOrder: Ascend
7. %%BoundingBox: 0 0 585 842
8. %%EndComments
9. /cmm { 72.0 mul 25.4 div } def % перевод из миллиметров в пункты
10. %%EndProlog
11. %%BeginSetup
12. %%Feature: *Resolution 600dpi
13. %%EndSetup
14. %%Page: A 1
15. %%BeginSetup
16. %
17. %%BeginFeature: *PageSize A4
18. <</PageSize [595 842] /ImagingBBox null>> setpagedevice
19. %%EndFeature
20. %%EndSetup
21. % начальные служебные инструкции закончены
22. gsave
23. 30 cmm 230 cmm translate % передвинем начало отсчета
24. newpath % начнем новый путь
25. 0 0 moveto % установим начальную точку в начало отсчета
26.
27. % начинаем рисовать буквы "ПУ-29"
28. % ширина буквы - 10 мм, высота буквы - 20 мм, расстояние между буквами - 5 мм.
29.
30. % нарисуем букву "П"
31. 0 cmm 20 cmm rlineto % проводим линию на 20 мм вверх
32. 10 cmm 0 cmm rlineto % проводим линию на 10 мм вправо
33. 0 cmm -20 cmm rlineto % проводим линию на 20 мм вниз
34.
35. % нарисуем букву "У"
36. 5 cmm 0 cmm rmoveto % смещаем текущую точку на 5 мм вправо
37. 10 cmm 20 cmm rlineto % проводим диагональ (10 мм вправо и 20 мм вверх)
38. -10 cmm 0 cmm rmoveto % смещаем текущую точку на 10 мм влево
39. 5 cmm -10 cmm rlineto % проводим диагональ (5 мм вправо и 10 мм вниз)
40.
41. % нарисуем тире
42. 10 cmm 0 cmm rmoveto % смещаем текущую точку на 10 мм вправо
43. 10 cmm 0 cmm rlineto % проводим линию на 10 мм вправо
44.
45. % нарисуем цифру "2"
46. 5 cmm 10 cmm rmoveto
47. 10 cmm 0 cmm rlineto
48. 0 cmm -10 cmm rlineto
49. -10 cmm -10 cmm rlineto
50. 10 cmm 0 cmm rlineto
51.
52. % нарисуем цифру "9"
53. 5 cmm 0 cmm rmoveto
54. 10 cmm 10 cmm rlineto
55. 0 cmm 10 cmm rlineto
56. -10 cmm 0 cmm rlineto
57. 0 cmm -10 cmm rlineto
58. 10 cmm 0 cmm rlineto
59.
60. % буквы нарисовали, далее следуют инструкции отображения пути
61. 2.0 setlinewidth % установим толщину линии
62. stroke % проводим линию устаноленной толщины вдоль построенного пути
63. grestore
64. showpage
65. %%PageTrailer
66. %%Trailer
67. %%EOF
PostScript позволяет регулировать толщину
линии (
setlinewidth), ее "пунктирность" (
setdash), "серость"
(
setgray), "круглохвостость" (
setlinecap) и пр.
[4 5] 0 setdash
установить тип линни "пунктир",
4 пункта линия, 5 пунктов пропуск, смещение (оффсет) - 0.
1.5
setlinewidth
установить толщину линии в 1,5 пункта.
1
setlinecap
установить "скругление" хвостиков линий.
newpath % линии разметки
90 400 moveto 220 0 rlineto
90 450 moveto 220 0 rlineto
90 500 moveto 220 0 rlineto
100 390 moveto 100 510 lineto
300 390 moveto 300 510 lineto
0 setlinecap 0.5 setlinewidth stroke
newpath % нижняя линия
100 400 moveto 200 0 rlineto
5.0 setlinewidth 0 setlinecap stroke
newpath % средняя линия
100 450 moveto 200 0 rlineto
5.0 setlinewidth 1 setlinecap stroke
newpath % верхняя линия
100 500 moveto 200 0 rlineto
5.0 setlinewidth 2 setlinecap stroke
Далее
представлен фрагмент программы для этих линий:
newpath 0 cmm 65 cmm moveto 160 cmm 0 rlineto
1.0 setlinewidth
[] 0 setdash % сплошная
currentpoint % координаты текущей точки заносятся в стек
stroke % построение линии вдоль пути
moveto % перемещение в занесенные ранее в стек координаты
/Times findfont 10 scalefont setfont (01) show % пишем цифры 01
newpath 0 cmm 70 cmm moveto % перемещение
160 cmm 0 rlineto % рисуем линию
1.0 setlinewidth % устанавливаем толщину линии
[3 3] 0 setdash % тип пунктирной линии
currentpoint % координаты текущей точки заносятся в стек
stroke % построение линии вдоль пути
moveto % перемещение в занесенные ранее в стек координаты
/Times findfont 10 scalefont setfont (02) show
newpath 0 cmm 75 cmm moveto 160 cmm 0 rlineto
3.0 setlinewidth
[3] 0 setdash % пунктир из квадратов
currentpoint % координаты текущей точки заносятся в стек
stroke % построение линии вдоль пути
moveto % перемещение в занесенные ранее в стек координаты
/Times findfont 10 scalefont setfont (03) show
newpath 0 cmm 80 cmm moveto 160 cmm 0 rlineto
3.0 setlinewidth
1 setlinecap % скругляем хвостики
[0 14] 0 setdash % пунктир из точек
currentpoint % координаты текущей точки заносятся в стек
stroke % построение линии вдоль пути
moveto % перемещение в занесенные ранее в стек координаты
/Times findfont 10 scalefont setfont (04) show
newpath 0 cmm 85 cmm moveto 160 cmm 0 rlineto
3.0 setlinewidth 0 setlinecap
[21 7 7 7] 0 setdash % штрих-пунктир обычный
currentpoint % координаты текущей точки заносятся в стек
stroke % построение линии вдоль пути
moveto % перемещение в занесенные ранее в стек координаты
/Times findfont 10 scalefont setfont (05) show
newpath 0 cmm 90 cmm moveto 160 cmm 0 rlineto
3.0 setlinewidth
1 setlinecap % скругляем хвостики
[21 7 7 7] 0 setdash % штрих-пунктир
currentpoint % координаты текущей точки заносятся в стек
stroke % построение линии вдоль пути
moveto % перемещение в занесенные ранее в стек координаты
/Times findfont 10 scalefont setfont (06) show
newpath 0 cmm 95 cmm moveto 160 cmm 0 rlineto
3.0 setlinewidth
0 setlinecap % убираем скругление хвостика
[21 7 7 7] 10 setdash % штрих-пунктир со смещением узора
currentpoint % координаты текущей точки заносятся в стек
stroke % построение линии вдоль пути
moveto % перемещение в занесенные ранее в стек координаты
/Times findfont 10 scalefont setfont (07) show
newpath 0 cmm 100 cmm moveto 160 cmm 0 rlineto
1.0 setlinewidth 0 setlinecap
[21 7 7 7] 0 setdash % штрих-пунктир
currentpoint % координаты текущей точки заносятся в стек
stroke % построение линии вдоль пути
moveto % перемещение в занесенные ранее в стек координаты
/Times findfont 10 scalefont setfont (08) show
Путь (path),
начатый оператором
newpath и сотворенный операторами рисования
lineto,
moveto,
rlineto,
rmoveto,
arc,
arcn,
curveto и пр., может служить не только для проведения линии
(
stroke), но и как маска.
Для реализации этой возможности применим
операторы
gsave и
grestore, которые сохраняют и восстанавливают
(соответственно) текущие графические параметры.
В качестве примера -
заливка контура (
fill). Оператор
setgray устанавливает текущую
"серость", при этом 0 - черное, 1 - белое.
И - соответствующий фрагмент программы.
% звезда с заливкой без границ
gsave
newpath
70 cmm 180 cmm moveto
20 cmm 0 rlineto
10 cmm 20 cmm rlineto
-10 cmm 20 cmm rlineto
-20 cmm 0 rlineto
-10 cmm -20 cmm rlineto
10 cmm -20 cmm rlineto
0.8 setgray fill
grestore
Если мы хотим с
построенной фигурой (путем) сделать еще что-нибудь, то эти действия обрамляются
парой операторов
gsave-
grestore.
Примеры множественного
использования одной фигуры: Звезда со штриховкой и контуром; звезда с заливкой,
круговой штриховкой и толстым контуром (смотри также "шрифт как маска").
% звезда - штриховка и контур (слева на рисунке)
newpath % начинаем путь
20 cmm 180 cmm moveto
20 cmm 0 rlineto
10 cmm 20 cmm rlineto
-10 cmm 20 cmm rlineto
-20 cmm 0 rlineto
-10 cmm -20 cmm rlineto
10 cmm -20 cmm rlineto
gsave % сохраняем текущие графические параметры
clip % устанавливаем путь как маску
0.4 setgray 0.1 setlinewidth % устанавливаем цвет линии и толщину линии
-70 2 70 {newpath cmm 180 cmm moveto 50 cmm 50 cmm rlineto stroke} for % цикл
grestore % восстанавливаем графические параметры "до штриховки"
stroke % рисуем контур вдоль пути
% звезда - заливка, штрих и границы (справа на рисунке)
gsave % сохраняем графические параметры
newpath % начинаем путь
120 cmm 180 cmm moveto
20 cmm 0 rlineto
10 cmm 20 cmm rlineto
-10 cmm 20 cmm rlineto
-20 cmm 0 rlineto
-10 cmm -20 cmm rlineto
10 cmm -20 cmm rlineto
gsave % сохраняем текущие графические параметры
0.9 setgray fill % зальем фигуру светло-серым
grestore % восстанавливаем графические параметры "до заливки"
gsave % и сохраняем их опять
clip % устанавливаем путь как маску
2 10 120 {newpath 0 setgray 0.5 setlinewidth exch 130 cmm exch 200 cmm exch 0 360 arc stroke} for % цикл рисования окружностей
grestore % восстанавливаем графические параметры "до штриховки"
0 setgray 2.0 setlinewidth stroke % рисуем контур вдоль пути (граница)
grestore % восстанавливаем графические параметры "до пути"
Квадрат как маска - два варианта:
A-1) штриховка и границы,
A-2)
только штриховка
% квадрат со штриховкой и границами (слева на рисунке)
newpath
10 cmm 120 cmm moveto
50 cmm 0 rlineto 0 50 cmm rlineto -50 cmm 0 rlineto 0 -50 cmm rlineto
gsave
clip
0.8 setgray .5 setlinewidth
-40 2 70 {newpath cmm 120 cmm moveto 50 cmm 50 cmm rlineto stroke} for
grestore
stroke
/Times findfont 10 scalefont setfont 30 cmm 115 cmm moveto (A-1) show
% квадрат со штриховкой и без границ (справа на рисунке)
newpath
100 cmm 120 cmm moveto
50 cmm 0 rlineto 0 50 cmm rlineto -50 cmm 0 rlineto 0 -50 cmm rlineto
gsave
clip
0.5 setgray 1.0 setlinewidth
50 2 200 {newpath cmm 120 cmm moveto 50 cmm 50 cmm rlineto stroke} for
grestore
/Times findfont 10 scalefont setfont 120 cmm 115 cmm moveto (A-2) show
Маска может состоять из несвязанных областей:
% звезда разрывная - заливка, штрих
gsave
newpath
120 cmm 230 cmm moveto
20 cmm 0 cmm rlineto
-20 cmm 40 cmm rlineto
20 cmm 0 cmm rlineto
-20 cmm -40 cmm rlineto
gsave
0.9 setgray
fill
grestore
gsave
clip
2 10 120
{newpath
0 setgray
0.5 setlinewidth
130 cmm exch 250 cmm exch 0 360 arc stroke
} for
grestore
grestore
На чертежах часто возникает
необходимость сопряжения прямых линий. Для этого можно использовать оператор
arcto. От текущей точки рисуется прямая линия по направлению к первой
точке, производится сопряжение с линией, проведенной от первой точки ко второй.
После сопряжения рисование прекращается. Параметры: координаты первой точки,
координаты второй точки, радиус закругления. Необходима определенность текущей
точки!
% сопряжение линий дугой радиусом 3 мм
gsave
newpath
20 cmm 230 cmm moveto
30 cmm 0 rlineto
-20 cmm 10 cmm rlineto
1 setlinecap % скругляем хвостики
[3 3] 0 setdash % пунктир из точек
0.1 setlinewidth
stroke
newpath
20 cmm 230 cmm moveto
50 cmm 230 cmm 30 cmm 240 cmm 3 cmm arcto 30 cmm 240 cmm lineto
[ ] 0 setdash 4.0 setlinewidth
stroke
grestore
Универсальные кубические кривулины.
Проводятся от текущей точки по трем базовым. Оператор называется
curveto.
Параметры - координаты трех базовых точек.
Примеры.
% кривая Безье
gsave
newpath 90 cmm 230 cmm moveto
20 cmm 40 cmm rlineto currentpoint
-50 cmm 0 cmm rlineto currentpoint
10 cmm -40 cmm rlineto currentpoint
[3 3] 0 setdash 0.1 setlinewidth
stroke
newpath
90 cmm 230 cmm moveto curveto 2.0 setlinewidth [] 0 setdash stroke
grestore
% кривая Безье
gsave
newpath 90 cmm 275 cmm moveto
-30 cmm 40 cmm rlineto currentpoint
50 cmm 0 cmm rlineto currentpoint
-50 cmm -40 cmm rlineto currentpoint
[3 3] 0 setdash 0.1 setlinewidth
stroke
newpath
90 cmm 275 cmm moveto curveto 2.0 setlinewidth [] 0 setdash stroke
grestore
Если рисунок не помещается на странице
- его не потребуется переделывать заново полностью, его достаточно
масштабировать (оператор
scale) - смотри масштабированные шестиугольники.
Масштабирование производится по двум координатам - X, Y.
изображение примера
смотри в
приложении 1.
% масштабированные шестиугольники
/star6 { 20 cmm 0 rlineto
10 cmm 20 cmm rlineto
-10 cmm 20 cmm rlineto
-20 cmm 0 rlineto
-10 cmm -20 cmm rlineto
10 cmm -20 cmm rlineto } def % определили процедуру
newpath
10 10 200 {
gsave
newpath
50 cmm 10 cmm moveto
100 div dup scale
star6 stroke grestore
} for
stroke
Шрифты рекомендуется внедрять в документ -
меньше проблем. Шрифт сначала ищется, масштабируется, определяется. Для вывода
текста необходима текущая точка.
Вывод осуществляется простыми текстом -
в круглых скобках, либо двузначными шестнадцатеричными кодами - в угловых
скобках. Команда
show.
Примеры смотри в
приложении 2.
%текст разного размера
newpath
/Times findfont 20 scalefont setfont
20 cmm 100 cmm moveto
(The Times) show
/Times findfont 30 scalefont setfont
20 cmm 110 cmm moveto
(The Times) show
/Times findfont 40 scalefont setfont
20 cmm 120 cmm moveto
(The Times) show
/Times findfont 50 scalefont setfont
20 cmm 140 cmm moveto
(The Times) show
% текст под разными углами (поворот системы координат)
90 cmm 190 cmm translate
0 20 180 { pop 0 0 moveto (The Times) show 20 rotate} for
stroke
% Текст как маска
% буква "A" не заливается, но используется как контурный путь
newpath
/Times findfont 350 scalefont setfont
0 cmm -90 cmm moveto
(A) false charpath
gsave
0.8 setgray fill
grestore
gsave clip
10 20 600 {newpath 0 exch -90 cmm exch 0 360 arc stroke} for
grestore
4.0 setlinewidth
stroke