では,いよいよ実際に図形の描き方を説明します.直線であろうと,長方形で あろうが,円弧であろうが,(実は文字もそうなんですが)Postscriptでは, まず図形のパスを次々と指定してカレントパスに蓄えていき,そのあとに線を 引くとか塗りつぶすとかをの命令を下します.ですから,図形を描くことは カレントパスを指定することに他なりません.
まず,"line.ps"を見てください.
line.ps |
001 %!PS-Adobe-3.0 002 003 5 setlinewidth 004 005 newpath 006 100 100 moveto 007 400 400 lineto 008 stroke 009 010 showpage 011 |
"line.ps"の3行目の"setlinewidth"は線の太さを指定するオペレータ で,ここでは線の太さを5ptに設定します.5行目の"newpath"は カレントパスを空にするオペレータで,パスを指定する前にカレントパスを 空に初期化して,新たにパスを作成するオペレータです.6行目の"moveto"は ペンを移動するオペレータで,ここでは(x,y)=(100,100)へペンを移動しています. 7行目の"lineto"はペンを移動して,カレントパスに追加するオペレータです. ここでは(x,y)=(400,400)へ移動し,パスを追加しています. ここまで(5〜7行目)で,カレントパスの中には(100,100)から(400,400)への 直線分が設定されたことになります.8行目の"stroke"はカレントパスで そのパスに沿った線を作画するオペレータで,これで(100,100)から(400,400) への線分が,設定した線の太さ(5pt)で作画されます. 実際の出力結果を次の図に示します.
TD> |
30dpiでA4用紙に出力 |
"line.ps"では"lineto"オペレータを使ってパスを絶対位置で指定しましたが, "rlineto"オペレータを使えば,前のペンの位置からの相対位置で指定できます. 次の"r_line.ps"は"lineto"のかわりに"rlineto"を使い,位置は(400,400)を (100,100)からの相対位置である(300,300)で指定しています.この"r_line.ps" の出力結果はもちろん"line.ps"と同じ結果になります.
r_line.ps |
001 %!PS-Adobe-3.0 002 003 5 setlinewidth 004 005 newpath 006 100 100 moveto 007 300 300 rlineto 008 stroke 009 010 showpage 011 |
次は多角形の描き方を説明します."s_square.ps"を見てください.
s_square.ps |
001 %!PS-Adobe-3.0 002 003 5 setlinewidth 004 005 newpath 006 100 100 moveto 007 300 0 rlineto 008 0 300 rlineto 009 -300 0 rlineto 010 closepath 011 stroke 012 013 showpage 014 |
5〜9行目でパスを指定しています.(相対位置で指定していますが,正方形 を描こうとしていることはすぐに分かりますよね)10行目の"closepath"は カレントパスの始点と終点を結び,パスを閉じるオペレータです. で,これを"stroke"すると,次の図のようになります.
30dpiでA4用紙に出力 |
閉じたパスは塗りつぶすことができます."f_square.ps"を見てください.
s_square.ps |
001 %!PS-Adobe-3.0 002 003 newpath 004 100 100 moveto 005 300 0 rlineto 006 0 300 rlineto 007 -300 0 rlineto 008 closepath 009 fill 010 011 showpage 012 |
今度は,"stroke"の変わりに,カレントパスを塗りつぶす"fill"オペレーターを 使用しています.この"f_square.ps"の出力結果は次のとおりです.
30dpiでA4用紙に出力 |
今回は例として4角形を描きましたが,"lineto","rlineto"を使ってパスを 指定することにより,自由に多角形が描ける訳です.おっと,忘れていましたが, 相対位置を使ってペンの移動のみをおこなう(カレントパスには追加しない) "rmoveto"オペレータもあります.(使い方は容易に想像できると思います)
次に円弧の描き方を説明します."arc.ps"を見てください.
arc.ps |
001 %!PS-Adobe-3.0 002 003 5 setlinewidth 004 005 newpath 300 200 200 0 180 arc stroke 006 007 newpath 300 300 100 0 360 arc fill 008 009 showpage 010 |
"arc"オペレータは"<中心x> <中心y> <半径> <角度の始点> <角度の終点> arc" でカレントパスに円弧を追加します.(角度は反時計周りです) 5行目は中心(300,200)で半径200,角度が 0〜180度の円弧をカレントパスに追加し,"stroke"しています.7行目は中心 (300,300)で半径100,角度が0〜360度の円弧をカレントパスに追加し,"fill" しています.出力結果は次のとおりです.
30dpiでA4用紙に出力 |
怪しい図でごめんなさい.次に色々な円弧を描きましょう. "arcs.ps"を見てください.
arcs.ps |
001 %!PS-Adobe-3.0 002 003 5 setlinewidth 004 005 newpath 300 300 200 225 315 arc closepath stroke 006 007 newpath 300 50 200 45 135 arc closepath fill 008 009 newpath 300 400 100 0 290 arc stroke 010 newpath 300 400 130 0 290 arcn stroke 011 012 newpath 013 200 600 moveto 014 200 600 200 -30 30 arc closepath 015 stroke 016 017 showpage 018 |
これを出力すると,下の図のようになります.
30dpiでA4用紙に出力 |
毎度毎度怪しくてすみません.5行目は"closepath"でパスを閉じて弦を描かせた 例です.図の一番下の図形に対応します.6行目は5行目と同じような内容を 上下逆に"fill"したものです.9行目と10行目はどちらも同じ角度の範囲で弧を 描かせるものですが,9行目は"arc",10行目は"arcn"でパスが作られています. "arcn"は時計周りに円弧を描くオペレータで,図の中心付近に描かれた円弧の ような違いがあります.12〜15行目は,まず円弧の中心へペンを移動させ, その後に円弧のパスを追加し6Pチーズのような扇型を"stroke"した例です.