Как да пиша програмно линии с правилен ъгъл между тях в PostScript?

Опитвах се да отида малко отвъд уменията си за PostScript и се опитах да напиша 12 фрази с 30 ъгъл между тях.

Всъщност не знам как да нарека проблема, затова заглавието е малко странно...

Ето докъде стигнах досега:

%!
/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 презаписват останалите в средата

Някаква помощ?


person EuAndreh    schedule 08.10.2014    source източник


Отговори (2)


Както е предложено от KenS, целият код между translate и showpage може да бъде заменен с:

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

Ако искате да избегнете припокриване, използвайте това например:

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

person lhf    schedule 09.10.2014
comment
Браво, това работи добре. Ако искам да покажа съдържание от дефиниран от мен масив, трябва да направя: myArray { 0 0 moveto show 30 rotate } forall? Редактиране: Да! Това беше! благодаря =] - person EuAndreh; 09.10.2014

Можете да използвате for или цикъл вместо изрично кодиране на всяка стъпка.

Тъй като започвате всеки ред текст от едно и също място, тогава да, първоначалните глифове ще се припокриват частично. За мен не е очевидно какво искате да се случи в този случай, има две опции, за които мога веднага да се сетя:

1) изтрийте подлежащата област до бяло, след което напишете текста

2) започнете текста с отместване, така че началните глифове да не се припокриват.

Можете да направите 1, като използвате charpath и pathbbox, за да определите координатите на рамката на текста, след което ги преобразувайте в правоъгълник и го запълнете с бяло.

Можете да направите 2, като определите височината на първоначалния глиф, отново charpath pathbbox е ваш приятел, след това умножете по 'n' (където n е броят на повторенията), за да ви даде приближение до обиколката на кръг, около който всички началните глифове ще паснат. След това изчислете радиуса на този кръг, като използвате проста геометрия, използвайте 0 moveto вместо 0 0 moveto, преди да нарисувате текста.

person KenS    schedule 08.10.2014