↑ぐるぐるブン回すくらいまではできるようになった。
ただ写経するだけではおもしろくないなーと思ったのでほんの少しずつ手を加えてみた。参考資料は当記事最下に記載。
改行の位置とかそういうPostScriptコーディングの文化がとういったものかまだよくわからない。
stackの状態が良くわからなくなったらGhostScriptで確認してる。stackコマンドでスタックの状態が見れる。
四角
newpath 270 360 moveto 0 72 rlineto 72 0 rlineto 0 -72 rlineto -72 0 rlineto 4 setlinewidth stroke 370 360 moveto 0 172 rlineto 172 0 rlineto 0 -172 rlineto -172 0 rlineto 32 setlinewidth stroke 270 560 moveto 0 72 rlineto 72 0 rlineto 0 -72 rlineto -72 0 rlineto 4 setlinewidth closepath stroke 370 600 moveto 0 72 rlineto 72 0 rlineto 0 -72 rlineto -72 0 rlineto 32 setlinewidth closepath stroke showpage
座標を確認
% test moveto newpath /Times-Roman findfont 15 scalefont setfont 100 0 moveto ((100,0)) show 0 100 moveto ((0,100)) show 100 100 moveto ((100,100)) show座標がどうなってるのかわからなかったのでお試し。
x軸 y軸 movetoというようなことでよさそうですね。
色の違う四角形を描画
% step by step Draw Box newpath 100 100 moveto 0 72 rlineto closepath fill newpath 100 200 moveto 0 72 rlineto 72 0 rlineto closepath fill newpath 100 300 moveto 0 72 rlineto 72 0 rlineto 0 -72 rlineto closepath fill newpath 100 400 moveto 0 72 rlineto 72 0 rlineto 0 -72 rlineto closepath .5 setgray fill newpath 100 500 moveto 0 72 rlineto 72 0 rlineto 0 -72 rlineto closepath .9 setgray fill
四角形を描画するプロシージャを定義してみる
% draw Boxies with procedure /box { 72 0 rlineto 0 72 rlineto -72 0 rlineto closepath } def newpath 352 324 moveto box 0 setgray fill newpath 370 360 moveto box .4 setgray fill newpath 388 396 moveto box .8 setgray fill
なんか三角形が書けそうだったので
/delta { 0 72 rlineto 72 0 rlineto closepath } def newpath 352 424 moveto delta 0 setgray fill newpath 370 460 moveto delta .4 setgray fill newpath 388 496 moveto delta .8 setgray fill 388 496 moveto 0 setgray /Times-Roman findfont 15 scalefont setfont (delta) show /delta2 { 72 0 rlineto 0 72 rlineto closepath } def newpath 252 424 moveto delta2 0 setgray fill newpath 270 460 moveto delta2 .4 setgray fill newpath 288 496 moveto delta2 .8 setgray fill 288 496 moveto 0 setgray /Times-Roman findfont 15 scalefont setfont (delta 2) show showpage
もひとつプロシージャ
newpath 100 100 newpath moveto 0 300 rlineto stroke newpath /inch { 72 mul } def /box { newpath moveto 1 inch 0 rlineto 0 1 inch rlineto -1 inch 0 rlineto closepath } def /fillbox { setgray fill } def 3.5 inch 4.5 inch box 0 fillbox 3.75 inch 5 inch box .4 fillbox 4 inch 5.5 inch box .8 fillbox showpage
文字列の描画
% vertical position /vpos 720 def % drawing string /word (Typefaces) def /choosefont { findfont 15 scalefont setfont } def /newline { % decrease vpos % side effect /vpos vpos 15 sub def % goto that line 72 vpos moveto } def /printword { choosefont % show "typefaces" word show % go to next line newline } def 72 vpos moveto /Times-Roman printword /Times-Bold printword /Times-Italic printword /Times-BoldItalic printword newline /Helvetica printword /Helvetica-Bold printword /Helvetica-Oblique printword /Helvetica-BoldOblique printword newline /Courier printword /Courier-Bold printword /Courier-Oblique printword /Courier-BoldOblique printword newline /Symbol printword showpage
/Times-Roman findfont 15 scalefont setfont 72 200 moveto (typography) show /showGorilla { moveto (Gorilla) show } def /Times-Roman findfont 6 scalefont setfont 72 300 showGorilla /Times-Roman findfont 10 scalefont setfont 72 275 showGorilla /Times-Roman findfont 15 scalefont setfont 72 250 showGorilla /Times-Roman findfont 20 scalefont setfont 72 225 showGorilla /scaleTimes { /Times-Roman findfont exch scalefont setfont } def 6 scaleTimes 172 300 showGorilla 10 scaleTimes 172 275 showGorilla 15 scaleTimes 172 250 showGorilla 25 scaleTimes 172 225 showGorilla /draw { 172 exch showGorilla } def 6 scaleTimes 400 draw 10 scaleTimes 375 draw 15 scaleTimes 350 draw 25 scaleTimes 325 draw showpage
文字列と図形
/choosefont { exch findfont exch scalefont } def /MainFont { /Helvetica-Bold 15 choosefont } def /SloganFont { /Helvetica-Oblique 7 choosefont } def /OwnerFont { /Helvetica 10 choosefont } def /rightshow { dup stringwidth pop 120 exch sub 0 rmoveto show } def /CardOutline { newpath 90 90 moveto 0 144 rlineto 252 0 rlineto 0 -144 rlineto closepath .5 setlinewidth stroke } def /doBorder { 99 99 moveto 0 126 rlineto 234 0 rlineto 0 -126 rlineto closepath 2 setlinewidth stroke } def /Diamond { newpath 207 216 moveto 36 -54 rlineto -36 -54 rlineto -36 54 rlineto closepath .8 setgray fill } def /doText { 0 setgray 90 180 moveto MainFont setfont (Diamond Cafe) rightshow 90 168 moveto SloganFont setfont ("The Club of Lonely Hearts") rightshow 216 126 moveto OwnerFont setfont (Sam Spade) show 216 111 moveto (Owner) show } def CardOutline doBorder Diamond doText newpath 10 10 moveto (string1) show (string2) rightshow (string3) rightshow (string4) rightshow showpage
回転
/choosefont { exch findfont exch scalefont setfont } def /Times-Roman 30 choosefont /square { newpath 0 0 moveto 90 0 lineto 90 90 lineto 0 90 lineto closepath fill 6 92 moveto (A Box) show } def /slide { 300 150 translate 60 rotate } def square slide .5 setgray 1.5 1.5 scale square slide .7 setgray .75 1.25 scale square showpage
☆
/starside{ 72 0 lineto currentpoint translate -144 rotate } def /star{ moveto currentpoint translate %4 {starside} repeat %closepath 5 {starside} repeat gsave .5 setgray fill grestore stroke } def 200 200 star /cycling{ 15 { 30 30 star 30 rotate } repeat } def /drawing{ 5 { 30 -30 translate cycling } repeat } def drawing showpage
とりあえず今日はここまで。英語読むのもしんどいし。読み進めてるのはこちらの青本。
PostScript(R) Language Tutorial and Cookbook (APL) posted with amazlet at 09.10.07 Adobe Systems Inc. Addison-Wesley Professional 売り上げランキング: 235737 おすすめ度の平均: まず最初に読むべき入門書 効率の良いPostScript書くなら… Amazon.co.jp で詳細を見る |
0 件のコメント:
コメントを投稿