如何在PostScript中以编程方式在它们之间以规则角度编写线条?

时间:2014-10-08 03:04:23

标签: postscript

我试图在我的PostScript技能方面略微超越,并尝试用它们之间的30个角度编写12个短语。

我真的不知道如何命名问题,所以标题有点奇怪......

这是我到目前为止的地方:

%!
/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都会覆盖中间的其他人
  3. 任何帮助?

2 个答案:

答案 0 :(得分:2)

您可以使用for或循环而不是显式编码每个步骤。

由于您从同一位置开始每行文本然后是,因此初始字形将部分重叠。对我来说,在这种情况下你想要发生什么并不明显,我可以立即想到两个选择:

1)将基础区域擦除为白色然后写入文本

2)以偏移量开始文本,使初始字形不重叠。

您可以使用charpath和pathbbox来确定文本边界框的坐标,然后将它们转换为矩形并用白色填充。

你可以通过确定初始字形的高度来做2,再次charpath pathbbox是你的朋友,然后乘以'n'(其中n是迭代次数),以给你一个圆的圆周近似值所有初始字形都适合。然后使用简单的几何体计算出该圆的半径,在绘制文本之前使用0 moveto而不是0 0 moveto。

答案 1 :(得分:2)

根据KenS的建议,translateshowpage之间的所有代码都可以替换为:

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

如果您想避免重叠,请使用以下内容:

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