2014-10-08 2 views
1

Я пытался немного уйти в свои навыки PostScript и попытался написать 12 фраз с 30 углами между ними.Как писать программные строки с регулярным углом между ними в PostScript?

Я не знаю, как назвать эту проблему, так что название это немного странно ...

Вот откуда я пришел до сих пор:

%! 
/Times-Roman findfont 20 scalefont setfont 
/r 360 12/def 

306 396 translate 
0 0 moveto 
(text) show 

0 0 moveto 
30 rotate 
(text) show 

0 0 moveto 
30 rotate 
(text) show 

0 0 moveto 
30 rotate 
(text) show 

0 0 moveto 
30 rotate 
(text) show 

0 0 moveto 
30 rotate 
(text) show 

0 0 moveto 
30 rotate 
(text) show 

0 0 moveto 
30 rotate 
(text) show 

0 0 moveto 
30 rotate 
(text) show 

0 0 moveto 
30 rotate 
(text) show 

0 0 moveto 
30 rotate 
(text) show 

0 0 moveto 
30 rotate 
(text) show 

showpage 

Но есть некоторые проблемы с этим кодом:

  1. он использует явные шаги вместо итерации (хотя он работает)
  2. все text перезаписывает другие в середине

Любая помощь?

ответ

2

Как полагает KENS, весь код между translate и showpage можно заменить:

12 { 0 0 moveto (text) show 30 rotate } repeat

Если вы хотите, чтобы избежать дублирования, использовать это, например:

12 { 50 0 moveto (text) show 30 rotate } repeat

+1

Ницца, это хорошо. Если бы я хотел показать некоторый контент из массива, который я определил, я должен сделать: 'myArray {0 0 moveto show 30 rotate} forall'? Редактировать: Да! Вот и все! Спасибо =] – EuAndreh

2

Вы можете использовать для или цикл вместо явного кодирования каждого шага.

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

1) стереть основную область на белый затем написать текст

2) начать текст в смещение, чтобы исходные глифы не перекрывались.

Вы можете сделать 1, используя charpath и pathbbox, чтобы определить координаты текстового ограничивающего прямоугольника, затем преобразовать их в прямоугольник и заполнить его белым.

Вы можете сделать 2, определив высоту начального глифа, снова charpath pathbbox - ваш друг, затем умножьте на 'n' (где n - число итераций), чтобы дать вам приблизительное окружность круга вокруг которого подойдут все начальные глифы. Затем выработайте радиус этого круга с использованием простой геометрии, используйте 0 moveto вместо 0 0 moveto, прежде чем рисовать текст.