pslib

名前
説明
呼び出し関数
著者
バグ
制限
文献

名前

pslib 4.0 − PostScript ベースの描画ライブラリ

説明

pslibPostScript ページの記述コードの生成をより簡単にするために作ら れた。これは画像を作るのに使うことができるツールの集まりを含むライブ ラ リ である。結果の PostScript コードはアスキーテキストでありあらゆるテキ ストエディタを用いて編集することができる。そのため、描画ファイルを改 変 す るのは例えそれが作られた後でも非常にたやすい。例えば、文字列を変えた り、新しいグレースケールやカラーを設定したり、様々なペンの太さを試し た りすることなどができる。 pslib は C で書かれているが現在は FORTRAN がバ インドされているため( WHOI の John Goff に感謝する) C と FORTRAN の両方 の プログラムから呼び出すことができる。このライブラリを使うには、描画プ ログラムを pslib.a にリンクしなければならない。 pslibGMT の画像プロ グ ラ ム の核である。 pslib の出力は Adobe Encapsulated PostScript File Specification Version 3.0 (EPSL) に適合しており、 EPS ファイルとして 使 えて、例えば Mac 上の Word 文書に挿入することもできる。詳細な手引きにつ いてはテクニカルリファレンスの付録 F を参照すること。

pslib の関数を呼び出す前に、描画システムは初期化されていなければなら な い。これは ps_plotinit を呼び出すことによって行われる。これはマクロを定 義し、描画する座標系を設定し、 [随意で]全ての PostScript コードが書き込 ま れるファイルを開く。通常は、描画コードは stdout (標準出力)に書き出さ れる。大きさや位置を測るための単位はセンチメートル( c )、インチ( i ) 、 メ ー トル( m )のどれかに設定することができる。全ての描画が終わったら、 ps_plotend を呼び出して描画システムを終了させなければならない。

pslib では赤、緑、青が別々に与えられ、それぞれの範囲が 0-255 となるダイ レ クトカラーモデルが用いられる。赤が負のときは塗りつぶしは行われない。 大部分の描画要素は輪郭付きでも無しでも描画できる。輪郭が要求されたと き は(すなわち 1 に設定されたとき)、現在の線幅及びパターンを用いて線が引か れる。 pslib では非常に最適化されたマクロ置換が使われていて出力ファイル が できるだけ小さくまとまるようにハードコピー装置の解像度によって座標が スケールされる。

ラスタ出力装置(カラー又はモノクロ)や SUN の OpenWindows のようなウィ ン ド ウ シ ステムに基づく PostScript を実行するワークステーションを含め、 PostScript をサポートする多種多様な出力装置 が 存 在 す る 。 xnews ( OpenWindows の一部)や ghostscript (パブリックドメイン)はユーザ定義の解 像度( DPI )でラスタファイルを作るのに利用でき、 Versatec や 他 の 非 PostScript ラ ス タ 装 置上で PostScript を解釈できるようにしている。 PostScript ファイルから NeWS のもとで作られた正規の SUN ラスタファイ ル は 様々なカラーハードコピー装置に送ることができる。ネットワーク上で利用 できる装置を確認すること。

呼び出し関数

以下は利用可能な関数とそれらが行うことや与えるべきパラメータを短く記 述 した一覧である。全ての浮動小数点変数は double (すなわち 8 バイト)である と見なされ、一方全ての整数は 4 バイト長であると見なされる。全ての描画関 数は整数を返す関数として宣言される。今のところ、戻り値は未定義である。

void ps_arc (x, y, radius, angle1, angle2, status)
double
x, y, radius, angle1, angle2;
int
status;

(x,y) を中心とする円弧を角度 angle1 から angle2 まで描く。角 度は小数を含む度で与えられなければならない。 angle1 > angle2 の ときは、負の弧が描かれる。 status は 0 から 3 までの値であ る。 1 は新しいアンカーポイントの設定を意味し、 2 は円を描 い た ことを意味し、 3 はその両方を意味し、 0 は上のいずれでもな いことを意味する。

void ps_axis (xpos, ypos, length, startval, stopval, tickval, label, annotpointsize, side)
double
xpos, ypos, length, startval, stopval, tickval;
double
annotpointsize, side;
char
*label;

ケ バ 、 目 盛 、 ラベル付きの軸を描画する。 xpos, ypos, 及び length はインチ(又は cm 又はメートル)単位で 、 anotpointsize はポイント( 72 ポイント = 1 インチ)単位で、その他はデータの単 位が用いられる。 side は 0, 1, 2, 3 のどれかで、それぞれ下 の x 軸 、 右 の y 軸 、 上 の x 軸、左の y 軸を選択する。 labelpointsize = 1.5 * anotpointsize である。負の tickval は 正の向きを逆にする。例えば、 y 軸は正が下向きになる。

void ps_circle (xcenter, ycenter, diameter, rgb, outline)
double
xcenter, ycenter, diameter;
int
rgb[3], outline;

円 を描きその内部を指定した色で塗りつぶす。 outline == 1 のと きは、輪郭は現在のペンの幅とパターンで描かれる。

void ps_clipoff ()

クリップパスを最後に clipon で呼び出した時の前の状態に戻す。

void ps_clipon (xarray, yarray, npoints, rgb, flag)
double
xarray[], yarray[];
int
npoints, rgb[3], flag;

ユーザ定義可能なクリップパスを設定する。この多角形の外側へ の 描画は ps_clipoff が呼び出されるまでクリップされる。 red >= 0 のときはパスの内側が指定した色で塗りつぶされる。 flag は複 数 の 不連続な領域からなる複雑なクリップパスを作るのに用いられ、 0-3 の値をとる。 flag = 1 はこれが複数セグメントのクリップ パ ス のうちの最初のパスであることを意味する。 flag = 2 はこれが 最後のセグメントであることを意味する。そして、単独のパスに は 、 flag = 3 を用いる。

void ps_colorimage (xpos, ypos, xlength, ylength, buffer, nx, ny, depth)
double
xpos, ypos, xlength, ylength;
unsigned char
buffer[];
int
nx, ny, depth;

1, 2, 4, 8, 又は 24 ビット深の画像を描画する。 こ の 関 数 は PostScript のカラー画像又は画像オペレータを呼び出すための設定 をする。 xpos, ypos, xlength, ylength は画像の左下隅の位置 及 び 大きさを(インチで)指定する。ピクセル値は buffer 、すなわち 0 が黒で 255 が白であるグレースケール又は r/g/b の値を持つ 走 査 線方向の符号無し 1 バイト配列に記憶される。 buffer[0] は左 上隅である。 depth は 1 ピクセル当たりのビット数( 24, 8, 4, 2, 又は 1 )である。 nx,ny は画像のピクセル数を示す。 buffer の配列の長さは 8/depth の倍数でなければならない。 例 え ば 、 depth = 4 のとき、 buffer[j]/16 は pixel[2j-1] の色を与え buffer[j]%16 ( 16 の剰余) は pixel[2j] の色を与える。代わりに -depth が渡されると画像の「ハードウェア」内挿が要求される。代 わりに -nx が渡されると buffer の最初の 3 バイトは PostScript レ ベ ル 3 のカラーマスク方式を使ってマスクされる画素に対する r/g/b カラーを持つ。更なる詳細についてはアドビ シ ス テ ム の PostScript リファレンスマニュアルを参照すること。

void ps_colortiles (x0, y0, xlength, ylength, buffer, nx, ny)
double
x0, y0, xlength, ylength;
int
nx, ny;
unsigned char
buffer[];

個 別のカラータイルに基づいた true color 画像を描画する。 x0, y0 はインチ単位で画像の左下隅の位置を示す。 xlength, ylength は イ ン チ 単位で画像のサイズを示す。 buffer には rgb の値が rgbrgbrgb... という形で含まれる。 nx, ny はピクセル単位で画像 のサイズを示す。

void ps_command (text)
char
*text;

生 の PostScript コマンドを PostScript 出力ファイルに書き出す 。例 "1 setlinejoin" 。

void ps_comment (text)
char
*text;

コメント (text) を PostScript 出力ファイルに書 き 出 す 。 例 "Start of graph 2" 。

void ps_cross (xcenter, ycenter, diameter)
double
xcenter, ycenter, diameter;

現 在のペン幅とパターンを用いて与えられた直径の円の内側にはま るような十字を指定された点に描く。

void ps_diamond (xcenter, ycenter, diameter, rgb, outline)
double
xcenter, ycenter, diameter;
int
rgb[3], outline;

菱形を描画して指定された色で塗りつぶす。 outline == 1 のと き 、 輪郭は現在のペン幅とパターンを用いて描かれる。記号は与えら れた直径の円の内側にはまるように描かれる。

void ps_ellipse (xcenter, ycenter, angle, major, minor, rgb, outline)
double
xcenter, ycenter, angle, major, minor;
int
rgb[3], outline;

長軸を angle 度回転させた楕円を描画して指定された色で塗りつぶ す。 outline == 1 のとき、輪郭は現在のペン幅とパターンを用 い て描かれる。

void ps_encode_font (font_no)
int
font_no;

StandardEncoding でないときに現在のコード化ベクトルを用いてこ のフォントを再コード化する。

void ps_epsimage (xpos, ypos, xlength, ylength, buffer, size, nx, ny, ox, oy)
double
xpos, ypos, xlength, ylength;
unsigned char
buffer[];
int
size, nx, ny, ox, oy;

Encapsulated PostScript (EPS) 画像を描画する。 EPS ファイルは buffer に記憶され size バイトである。この関数は単純に適切なラ ッ パ内部の PostScript 出力ストリームの画像を含む。画像の左下 隅の位置と大きさ(インチ単位)を指定すること。 nx,ny,ox,oy は BoundingBox の幅、高さ及び原点(左下隅)を示す。

void ps_flush ()

出力バッファをフラッシュする。

void ps_hexagon (xcenter, ycenter, diameter, rgb, outline)
double
xcenter, ycenter, diameter;
int
rgb[3], outline;

六 角形を描画して指定した色で塗りつぶす。 outline == 1 のとき 、輪郭は現在のペン幅とパターンを用いて描かれる。記号は与え ら れた直径の円の内側にはまるように描かれる。

void ps_image (xpos, ypos, xlength, ylength, buffer, nx, ny, bits)
double
xpos, ypos, xlength, ylength;
unsigned char
buffer[];
int
nx, ny, bits;

古い関数で、単に ps_colorimage に引き数を渡す。

void ps_imagefill (x, y, n, image, imagefile, invert, dpi, outline, f_rgb, b_rgb)
double
x[], y[], x0, y0;
int
n, image, invert, dpi, outline, f_rgb[3], b_rgb[3];
char
imagefile;

ps_polygon と似ているが、カラーやグレースケールでなく画像パタ ーンで範囲を塗りつぶす。 xy には n 点の配列が入っている。 90 の定義済みパターンが利用できる( GMT 付録 E 参照)。 image は画像番号を与える( 1-90 )。 0 に設定されたときは、 imagefile は ユ ーザの画像の名前でなければならず、 SUN の 1, 8, 又は 24 ビットのラスタファイルとして記憶されていなければならない。
1 ビット画像のみ、 (i) 設定された画素 (1) は f_rgb の RGB の 組合せを用いて着色され、一方設定されていない画素 (0) は b_rgb で塗りつぶされる。設定された画素を透明にするには f_rgb[0] を -1 に設定すること。設定されない画素を透明にするには b_rgb[0] を -1 に設定すること。 (ii) invert が TRUE のとき (1) 設定 さ れた画素と設定されない画素が描画前に交換される。
画 像の単位サイズは dpi (ドット/インチ単位)によって制御される 。ゼロに設定すると、画像は装置の解像度で描画される。 outline が TRUE のときは、現在のペン幅で多角形の輪郭が描かれる。

void ps_bitimage (xpos, ypos, xlength, ylength, buffer, nx, ny, invert, f_rgb, b_rgb)
double
xpos, ypos, xlength, ylength;
unsigned char
buffer[];
int
nx, ny, invert, f_rgb[3], b_rgb[3];

1 ビットの画像を与えられた前景色 f_rgb と背景色 b_rgb を用 い て 描画する。画像の左下隅の位置及び大きさを(インチで)指定する こと。 buffer は 1 バイト当たり 8 画素の符号無し 1 バイト配列 で あ る。 buffer の配列の長さは 8 の倍数でなければならない。 buffer[0] は左上隅である。 buffer の値は左下隅から始まり右 上 隅 で終わる列として記憶される。 invert が 0 のとき 1 のビット が前景色で塗りつぶされ、 0 のビットが背景色で塗りつぶされる。 invert が 1 のときは、前景と背景が入れ替わる。部分的に透明な 画像を得るには、前景色又は背景色の最初の要素を -1 に、すな わ ち f_rgb[0]=-1 又は b_rgb[0]=1 にすること。更なる詳細について はアドビシステムの PostScript リファレンスマニュアルを参照 す ること。

void ps_itriangle (xcenter, ycenter, diameter, rgb, outline)
double
xcenter, ycenter, diameter;
int
rgb[3], outline;

逆 三角形を描画して指定した色で塗りつぶす。 outline == 1 のと き、輪郭は現在のペン幅とパターンを用いて描かれる。記号は与 え られた直径の円の内側にはまるように描かれる。

void ps_line (xarray, yarray, npoints, type, close, split)
double
xarray[], yarray[];
int
npoints, type, close, split;

連続した線を x-y 配列の位置から描く。 close == 1 のとき、最初 と最後の点が自動的に PostScript ドライバにより閉じられる。 こ れ が複数セグメントパスの最初のセグメントのときは、 type == 1 に設定すること。セグメントを終了し線を描き終えるときは、 type == 2 に 設定すること。そして、単独のセグメントに対しては、 type は 3 でなければならない。線は現在のペン幅で描か れ る 。 split が TRUE のときだけは ps_line は複数のストロークを用いて MAX_PATH よりも長い線を描くことができる。 ps_polygon はパスが 連 続でなければならないので ps_line を split = FALSE で呼び出 す。 split が FALSE のときでパス長が MAX_PATH を超えるとき は 警告が出される。

unsigned char *ps_load_image (fp, header)
FILE
*fp;
struct imageinfo
*header;

オープンファイルポインタ fp で指定された EPS ファイル又は Sun ラスタファイルの画像の内容を読み込 む 。 こ の ル ー チ ン は Encapsulated PostScript ファイル又は、昔の、標準の、ランレン グス圧縮の、あるいは RGB スタイルの Sun フォーマットの 1, 8, 24, 又は 32 ビットのラスタファイルを扱うことができる。

void ps_octagon (xcenter, ycenter, diameter, rgb, outline)
double
xcenter, ycenter, diameter;
int
rgb[3], outline;

八 角形を描画して指定した色で塗りつぶす。 outline == 1 のとき 、輪郭は現在のペン幅とパターンを用いて描かれる。記号は与え ら れた直径の円の内側にはまるように描かれる。

void ps_patch (xarray, yarray, npoints, rgb, outline)
double
xarray[], yarray[];
int
npoints, rgb[3], outline;

多 角形が 20 点を越えてはならないことと直線セグメント上の不要 な中間点をなくしてパスを短くしようとしな い こ と を 除 い て ps_polygon と同じ。小さな多角形をたくさん描くときに優先的に用 いて出力スペースを節約する。

void ps_pentagon (xcenter, ycenter, diameter, rgb, outline)
double
xcenter, ycenter, diameter;
int
rgb[3], outline;

五角形を描画して指定した色で塗りつぶす。 outline == 1 のと き 、 輪郭は現在のペン幅とパターンを用いて描かれる。記号は与えら れた直径の円の内側にはまるように描かれる。

void ps_pie (xcenter, ycenter, radius, azimuth1, azimuth2, rgb, outline)
double
xcenter, ycenter, radius, azimuth1, azimuth2;
int
rgb[3], outline;

円のセクタを描画してその内部を指定した RGB の組合せで塗りつぶ す。 outline == 1 のとき、輪郭は現在のペン幅とパターンを用 い て描かれる。

void ps_plot (xabs, yabs, kpen)
double
xabs, yabs;
int
kpen;

現 在の線幅を用いて、絶対的な移動( kpen=3 )又は線描( kpen=2 ) を行う。確かに線が一筆で描かれるようにするには (kpen=-2) を使 うこと。

void ps_plotend (last_page)
int
last_page;

一 連の描画を終了して描画ファイルを閉じる( stdout 以外の場合) 。 last_page == 1 のとき、 PostScript の showpage コマンド が 出力され、ハードコピー装置上の印刷プロセスを初期化する。

void ps_plotinit (plotfile, overlay, mode, xoff, yoff, xscl, yscl, ncopies, dpi, unit, pagesize, rgb, encoding, eps)
char
*plotfile, *encoding;
int
overlay, mode, ncopies, dpi, unit;
double
xoff, yoff, xscl, yscl;
int
pagesize[2], rgb[3]; struct EPS * eps;

描画を初期化する。 plotfile == NULL (又は "" )のとき、出力 は stdout に送られ、それ以外のときは出力は plotfile に送られる。 既存の PostScript ファイルに付け加える場合だけ overlay を 1 に するべきである。 mode には最低の 3 ビットに 3 つのフラグが 含まれる。最低ビットは描画の向きを制御して 0 (横置き) 又は 1 ( 縦置き) になる。次のビットは、 1 に設定されたとき、フォント を再コード化して今は古くなった GMT 3.4 のコード化を用いたヨー ロッパアクセント付き文字が含まれるようにする。 ISOLatin1 のコ ード化を使うには 5 番目のビットを 1 にすること。 3 番目のビッ ト は PostScript 画像を出力するのに使われるフォーマットを制御 する。 0 はバイナリを、 1 は 16 進数を意味する。大部分のプ リ ンタは後者を必要とするが、中には 50% 小さくてより速く実行でき るバイナリを扱えるものもある。 xoff,yoff は原点を左下隅のデフ ォルトの位置から動かすのに使われる。 xscl,yscl は画像全体をス ケールするのに使われる(通常は 1.0, 1.0 に 設 定 さ れ る) 。 ncopies は 1 枚より多くのコピーを得るのに使われる。 dpi は単 位当たりのドット数でハードコピーの解像度を設定する。最適な 画 質と処理スピードのために、 dpi を目的のプロッタの解像度に合わ せて選ぶこと。例えば大部分のラ ス タ ラ イ タ に は 300 、 Linotype-300 には 2540 、 SUN スクリーンには約 85 を使うこと 。分からないときは 300 を使うこと。 unit は 0 (CM), 1 (INCH), 2 (M) のいずれかで、描画システムが距離やサイズに使う単位を示 す。この単位をどう選んでも、 dpi はインチ当たりのドット数のま ま なので注意。 pagesize は描画メディアの物理的な幅と高さをポ イントで示す (典型的には Letter は 横 612 縦 792 で A4 ラスタ ラ イタプロッタは横 595 縦 842 である)。 rgb 配列はページの色 を示す(普通は白 = 255,255,255)。 encoding は使用される文字 コ ー ド 化 ス キームの名前である。例えば、 Standard, ISOLatin1, ISO-8859-2 など。 EPS の構造は pslib.h というインクルードファ イルに定義されており EPS ファイルのコメントヘッダを構成する情 報を含んでいる。 pslib ルーチンを呼び出そうとするプログラマは ま ず pslib.h のコメントを読むべきである。 FORTRAN バインディ ングではこの最後の引き数は要求されていないので注意すること。

void ps_plotr (xrel, yrel, kpen)
double
xrel, yrel;
int
kpen;

現在の点に相対的な移動( kpen=3 )又は線描( kpen=2 ) を 行 う( ps_plot 参 照) 。 確 か に 線が一筆で描かれるようにするには (kpen=-2) を使うこと。

void ps_point (xcenter, ycenter, diameter)
double
xcenter, ycenter, diameter;

現在のペンを用いて与えられた直径の点を描画する。この関数が 機 能 するためには linecap の設定がまず 1 に設定されていなければ ならない。

void ps_polygon (xarray, yarray, npoints, rgb, outline)
double
xarray[], yarray[];
int
npoints, rgb[3], outline;

色を塗った多角形を x-y 配列の位置から描く。多角形は自動 的 に PostScript ドライバにより閉じられる。 outline == 0 のとき、輪 郭は描かれない。 outline == 1 のとき、輪郭は現在のペン幅で 描 かれる。

void ps_rect (x1, y1, x2, y2, rgb, outline)
double
x1, y1, x2, y2;
int rgb[3], outline;

色 を塗った長方形を描画する。 (x1,y1) 及び (x2,y2) は対角線上 の任意の 2 つの頂点である。 outline == 1 のとき、輪郭は現在の ペン幅及びパターンで描かれる。

void ps_rotaterect (x, y, angle, xsize, ysize, rgb, outline)
double
x, y, angle, xsize, ysize;
int rgb[3], outline;

基 準 線 か ら angle 度回転された色を塗った長方形を描画する。 (x,y) は中心で (xsize,ysize) は大きさである。 outline == 1 の とき、輪郭は現在のペン幅及びパターンで描かれる。

void ps_rotatetrans (x, y, angle)
double
x, y, angle;

angle 度だけ座標系を回転して、それから原点を (x,y) に移す。

void ps_segment (x0, y0, x1, y1)
double
x0, y0, x1, y1;

現在のペン属性を用いて 2 点を結ぶ線分を描く。

void ps_setdash (pattern, offset)
char
*pattern;
int
offset;

現在のダッシュパターンを変える。文字列 pattern を望むパターン に設定すること。例、 "4 2" 及び offset = 1 は次のように描画す る。

x ---- ---- ----

こ こで x は開始点である( x は描画されない)。すなわち、線は x から 1 単位のところから始まり、 4 単位長の線と 2 単位長の隙間 の 繰り返しのパターンで構成される。実線に戻すには、 pattern = NULL ("") と offset = 0 を指定すること。単位は dpi である。

void ps_setfont (fontnr)
int
fontnr;

現在のフォント番号を fontnr に変える。利用可能なフォントは 、 0 = Helvetica, 1 = H. Bold, 2 = H. Oblique, 3 = H. Bold-Oblique, 4 = Times, 5 = T. Bold, 6 = T. Italic, 7 = T. Bold Italic, 8 = Courier, 9 = C. Bold, 10 = C Oblique, 11 = C Bold Oblique, 12 = Symbol, 13 = AvantGarde-Book, 14 = A.-BookOblique, 15 = A.-Demi, 16 = A.-DemiOblique, 17 = Bookman-Demi, 18 = B.-DemiItalic, 19 = B.-Light, 20 = B.-LightItalic, 21 = Helvetica-Narrow, 22 = H-N-Bold, 23 = H-N-Oblique, 24 = H-N-BoldOblique, 25 = NewCenturySchlbk-Roman, 26 = N.-Italic, 27 = N.-Bold, 28 = N.-BoldItalic, 29 = Palatino-Roman, 30 = P.-Italic, 31 = P.-Bold, 32 = P.-BoldItalic, 33 = ZapfChancery-MediumItalic, 34 = ZapfDingbats, 35 = Ryumin-Light-EUC-H, 36 = Ryumin-Light-EUC-V, 37 = GothicBBB-Medium-EUC-H, 及び 38 = GothicBBB-Medium-EUC-V である。 fontnr がこれら以外のときは、 0 に設定される。

void ps_setformat (n_decimals)
int
n_decimals;

カ ラー又はグレーの値を書き出すときに使われる桁数を設定する。 デフォルト設定の 3 は赤、緑、青のそれぞれについて 1000 の選択 肢 を与える。これは大部分の 24 ビットのプラットフォームにより 与えられる 255 の選択肢よりも多い。より小さな値を選ぶことによ り 色の解像度は落ちるが出力ファイルを小さくすることができる。 それでも、 2 という値でも 100 x 100 x 100 = 100 万色となり 、 通常の目で識別できる数よりも多い。 1 に設定すると、各基本色に つき 10 種類となり全体で 1000 色となる。

void ps_setline (linewidth)
int
linewidth;

現在の線幅を DPI 単位で変更する。 0 は最も細い線だが、装置 に 依存する (大部分のレーザライタではきれいに印刷される)。

void ps_setlinecap (cap)
int
cap;

現在の線分の終端を変更する。 0 はバットキャップ[デフォルト]、 1 は丸、 2 は正方形を与える。

void ps_setlinejoin (join)
int
join;

現在の線分の接合を変更する。 0 はマイター[デフォルト]、 1 は 丸、 2 は斜角を与える。

void ps_setmiterlimit (limit)
int
limit;

現在のマイターの限界を変更する。 0 はデフォルトのマイター、他 の値はマイターが生じるカットオフ、鋭角の角度を与える。

void ps_setpaint (rgb)
int
rgb[3];

ペンと文字の現在の RGB の設定を変更する。

void ps_square (xcenter, ycenter, diameter, rgb, outline)
double
xcenter, ycenter, diameter;
int
rgb[3], outline;

正方形を描画して指定した色で塗りつぶす。 outline == 1 のと き 、 輪郭は現在のペン幅とパターンを用いて描かれる。記号は与えら れた直径の円の内側にはまるように描かれる。

void ps_star (xcenter, ycenter, diameter, rgb, outline)
double
xcenter, ycenter, diameter;
int
rgb[3], outline;

星形を描画して指定した色で塗りつぶす。 outline == 1 のとき 、 輪 郭は現在のペン幅とパターンを用いて描かれる。記号は与えられ た直径の円の内側にはまるように描かれる。

void ps_text (x, y, pointsize, text, angle, justify, form)
double
x, y, pointsize, angle;
char
*text;
int
justify, form;

text は (x,y) の点から描画され、水平と angle の角度をなす。点 (x,y) は justify に様々な値を与えることにより文字列の異なる点 に移すことができる。それは以下のように用いられる。

9------------10----------- 11
| |
5 6 7
| |
1------------ 2------------ 3

箱は文字列を表す。例えば、文字列をその重心が (x,y) に来るよう に 描 画 す る に は 、 justify == 6 を用いなければならない。 justify が負のときは、前後の空白が落とされてから描画される 。 ある文字列(フラグ)は ps_text に対して特別な意味を持つ。 @~ は 現在のフォントと Mathematical Symbols フォントの切り替えを 行 う 。 @%no% はフォントを no に設定し、 @%% は最初のフォントに 戻す。 @- は下付き文字のオン/オフ、 @+ は上付き文字のオン/ オ フ 、 @# はスモールキャピタルのオン/オフを切り替え、 @ は後ろ の 2 文字から合字を作る。フォントサイズの単位はポイントで与え ること( 72 ポイント = 1 インチ)。通常、文字は実線を用いてタイ プされる。文字の輪郭を描くには、 form == 1 を設定するこ と 。 pointsize が負のときは現在のポイントが ps_text が呼び出される 前にすでに設定されており (x,y) は無視されるべきであることを意 味する。

void ps_textbox (x, y, pointsize, text, angle, justify, outline, dx, dy, rgb)
double
x, y, angle, pointsize, dx, dy;
char
*text;
int
justify, outline, rgb[3];

この関数は文字列を囲む箱が欲しいときに ps_text とともに使われ る。 ps_text の引き数の大部分に加えて、ユーザは結果の長方形の 色と、輪郭を描くかどうかを指定しなければならない。文字と長 方 形 の間の空白は dxdy をしかるべく設定することにより得られ る。

void ps_transrotate (x, y, angle)
double
x, y, angle;

原点を (x,y) に移して、それから angle 度だけ座標系を回転す る 。

void ps_triangle (xcenter, ycenter, diameter, rgb, outline)
double
xcenter, ycenter, diameter;
int
rgb[3], outline;

三 角 形を描画して指定した RGB の組合せで塗りつぶす。 outline == 1 のとき、輪郭は現在のペン幅とパターンを用いて描かれる。記 号は与えられた直径の円の内側にはまるように描かれる。

void ps_vector (xtail, ytail, xtip, ytip, tailwidth, headlength, headwidth, headshape, rgb, outline)
double
xtail, ytail, xtip, ytip, tailwidth, headlength, headwidth, headshape;
int
rgb[3], outline;

様 々 な パラメータで指定される大きさと外見のベクトルを描く。 headshape は 0-1 の値をとりどのくらいストレートベクトルの頭の 底 辺とベクトル線の間の交点が先端の方へ動かされるかを指定する 。 0 は三角形の頭、 1.0 は矢印型の頭を与える。 outline == 1 の とき、輪郭は現在のペン幅を用いて描かれる。二重頭のベクトル を描くには outline に 8 を加えること。

void ps_words (x, y, text, n_words, line_space, par_width, par_just, font, font_size, angle, rgb, justify, draw_box, x_off, y_off, x_gap, y_gap, boxpen_width, boxpen_texture, boxpen_offset, boxpen_rgb, vecpen_width, vecpen_texture, vecpen_offset, vecpen_rgb, boxfill_rgb)
double
x, y, line_space, par_width, angle, x_off, y_off, x_gap, y_gap;
int
n_words, font, font_size, justify, draw_box, boxpen_width, boxpen_offset;
int
boxpen_rgb[3], vecpen_width, vecpen_offset, vecpen_rgb[3], boxfill_rgb[3];
char
**text, *boxpen_texture, *vecpen_texture;

テ キストのパラグラフを組版する。 text は与えられた行間隔とパ ラグラフ幅を使って版に組まれる単語の並びである。テキストブ ロ ッ ク全体は justify で指定される箱の上のアンカーポイント x, y で位置づけられる( ps_text 参照)。それからブ ロ ッ ク 全 体 は x_off, y_off だ け動かされる。ボックスの内部では、文字列は par_just (lcrj) により left, centered, right, 又は justified の いずれかに調整される。 draw_box には周りを囲む箱に関連する 4 ビットのフラグが含まれる。オンのとき、最初の(最低の)ビッ ト は 箱 の輪郭を描く。 2 番目のビットは箱の内部を塗りつぶす。 3 番目のビットは(テキストと箱の間のパディングを指定する x_gap, y_gap がゼロでない限り)箱の角を丸くする。 4 番目のビットは元 の x, y から移動した位置まで線を引く。 ps_text について記述さ れたエスケープ文字はここでも使え、更に 2 つのコマンドが使える 。 @;r/g/b; はフォントの色を変え( @;; で元に戻る) 、 @:size: はフォントの大きさを変える( @:: で元に戻る)。

著者

Paul Wessel, School of Ocean and Earth Science and Technology, 1680 East-West Road, Honolulu, Hawaii 96822, (808) 956-4778, Internet address: pwessel@hawaii.edu.

バグ

買手危険負担: 著者は pslib の正しいもしくは誤った使用により引き起こされ た災害、自殺未遂、及び潰瘍に関していかなる責任も負いません。もしバグ を 見 つけたら、作者に電子メールで知らせてください。問題を再現するために必 ず十分な詳細を提供するようにしてください。

制限

レーザライタのような一部の出力装置の限られたメモリのため 、 PostScript イ ン タ ー プ リ タの限界による制約が適用される。当分は、 ps_cliponps_polygon に渡される配列は約 1350 点以下でなければならない 。 ま た 、 ps_image に渡されるバッファ配列は利用可能なメモリにあわせることができな ければならない。使用しているハードコピー装置の仕様を確認すること。ラ ス タ 画像プロセッサ (RIPs) の中にはダイレクトカラーをサポートしておらず望 んだとおりの色が得られないものがある。これは RIP の限界であって、 pslib が作成した元々の PostScript コードのせいではない。

文献

Adobe Systems Inc., 1990, PostScript language reference manual, 2nd edition, Addison-Wesley, (ISBN 0-201-18127-4).