[目次へもどる] [前へ] [次へ]

図形を描く

では,いよいよ実際に図形の描き方を説明します.直線であろうと,長方形で あろうが,円弧であろうが,(実は文字もそうなんですが)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)で作画されます. 実際の出力結果を次の図に示します.

line.jpg
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"すると,次の図のようになります.

s_square.jpg
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"の出力結果は次のとおりです.

f_square.jpg
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" しています.出力結果は次のとおりです.

arc.jpg
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

これを出力すると,下の図のようになります.

arcs.jpg
30dpiでA4用紙に出力

毎度毎度怪しくてすみません.5行目は"closepath"でパスを閉じて弦を描かせた 例です.図の一番下の図形に対応します.6行目は5行目と同じような内容を 上下逆に"fill"したものです.9行目と10行目はどちらも同じ角度の範囲で弧を 描かせるものですが,9行目は"arc",10行目は"arcn"でパスが作られています. "arcn"は時計周りに円弧を描くオペレータで,図の中心付近に描かれた円弧の ような違いがあります.12〜15行目は,まず円弧の中心へペンを移動させ, その後に円弧のパスを追加し6Pチーズのような扇型を"stroke"した例です.


[目次へもどる] [前へ] [次へ]