nxgraph : Xlib, Elib, Flib のための便利な道具

本書が提供する nxgraph.h とその仲間のファイルで構成される nxgraphライブラリは、XWindowグラフィックプログラムの設計を簡単に します。さらに付属のライブラリ Elib.o と Flib.o と合わせることにより、 描画命令をそのままEPSやFIGの形式の画像ファイルに出力することが できます。

EPSとはEncapsulated Post Script の略で、UNIX系のTeXに取り込める 画像形式です。画像の各点の色を記録するのではなく、各図形の座標など を記録するので、ファイルサイズが小さく済み、拡大縮小しても画質が まったく落ちない長所があります。欠点は編集が難しいことです。
FIGとは Facility for Interactive Generation of figures の略で、 xfigというXWindow上のアプリケーションで編集ができる画像形式です。 EPSと同様に各図形の座標などを記録する形式です。EPSと異なり xfigで容易に編集が行える長所があり、EPSに変換することもできます。

つまり、計算結果をグラフィックで確認して、ただちに EPSまたはFIGのファイルに保存して、各種アプリケーションで 加工したのちプリンタで出力することができるようになります。
nxgraph ライブラリの特徴を以下にまとめます。

MS-Windows(3.1, 95, 98)での nxgraph.h の利用については、 現在のところ本書では全く想定していません。MS-Windows 向けの XserverやXlibがどこかに存在しているそうなので、それらと併せれば nxgraph.hを利用したプログラムをMS-Windows上で動作させる ことができるでしょう。近い将来には、nxgraph.hをXlibではなく OpenGLを代行呼び出しするように改造することで XWindow, MS-Windows の 両方で利用できるようにしたいと考えています。


nxgraph の download

nxgraphライブラリは以下のファイルで構成されています。全部 downloadして下さい。

nxgraph.h nxgraphライブラリの利用窓口
nxgraph.doc説明書
elib.cc EPS出力のためのライブラリ
elib.h elib.hの利用窓口
flib.cc FIG出力のためのライブラリ
flib.h flib.hの利用窓口
gccx Xlibとのコンパイルのscript
gccxe Elibとのコンパイルのscript
gccxf Flibとのコンパイルのscript


Xlibのありかの調査

nxgraphはXlibを利用してXWindowに絵を描くので、Xlibのヘッダーファイル やライブラリファイルがどこにあるのかを各自で調べて下さい。

まず、ヘッダーファイル Xlib.h を探して下さい。 大抵のXWindow Systemでは下記の3つのディレクトリのうちのどれかに ファイル Xlib.h があると思います。

候補1 /usr/X11R6/include/X11/
候補2 /usr/local/X11R6/include/X11/
候補3 /usr/openwin/include/X11/
このディレクトリには Xlib のheader fileが他にも たくさん格納されています。

次に Xlib のライブラリファイルを探します。上記の候補に対応して 下記のディレクトリのどれかにファイル libX11.a または libX11.so が あると思います。

候補1 /usr/X11R6/lib/
候補2 /usr/local/X11R6/lib/
候補3 /usr/openwin/lib/
こうして見つけた2つのディレクトリの名前を環境変数に保存します。 次のような記述をファイル .cshrc などに記述して、その変更を有効に してください。
setenv XINCDIR /usr/X11R6/include
setenv XLIBDIR /usr/X11R6/lib

nxgraph を利用したプログラムのコンパイル方法

nxgraphライブラリを利用するプログラムはプログラムの冒頭で #include "nxgraph.h" してヘッダーファイルと取り込んでおきます。

EPSやFIGのファイルを出力しないで単にXWindowに絵を描くだけの プログラムなら、コンパイルではXlibとリンクするだけです。 script gccx で以下のように簡単にコンパイルできます。

gccx sample.cc

EPSを出力するプログラムは script gccxe でコンパイルします。

gccxe sample.cc

FIGを出力するプログラムは script gccxf でコンパイルします。

gccxf sample.cc

nxgraph.h の関数の紹介

nxgraph.h が提供する関数の一部を極簡単に紹介します。 詳しくは説明ファイル nxgraph.doc を読んで下さい。(英語と日本語)。
  • void NXOpenWindow( char* wname, u_int w, u_int h )
    Windowを開く関数。w,hが横、縦のサイズ、wnameがWindowのタイトル。
  • void NXOpenFile( char* fname, u_int w, u_int h )
    EPSまたはFIG形式で図形を保存するためのファイルを開く関数。 w,hが横、縦のサイズ単位はmm、fnameがファイルの名前。
  • void NXClearWindow( void )
    Windowに描かれた絵を消す関数。
  • void NXCloseWindow( void )
    Windowを閉じる関数。
  • void NXCloseFile( void ) 図形を保存するためのファイルを閉じる関数。
  • void NXFlush( void )
    描画要求を強制送信させる関数。
  • u_char NXGetColor( u_long red, u_long green, u_long blue )
    指定RGB輝度の色を用意して、そのピクセル値を入手する関数。
  • u_char NXGetColor( char* cname )
    色名の色を用意して、そのピクセル値を入手する関数。
  • void NXSetColor( u_char pixel )
    ピクセル値で描画色を指定する関数。
  • void NXSetFont( int font_no )
    フォントを番号で指定する関数。
  • void NXSetFont( char* fontname )
    フォントを名前で指定する関数。
  • void NXDrawPoint( int x, int y )
    点を描く関数。
  • void NXDrawLine( int x1, int y1, int x2, int y2 )
    線分を描く関数。
  • void NXDrawMoveto( int x, int y )
    連続線分の起点を設定する関数。座標指定を省略できる。
  • void NXDrawLineto( int x, int y )
    連続線分の次の頂点までの線分を描く関数
  • void NXDrawLinerel( int dx, int dy )
    連続線分の次の頂点の座標が前の点からの相対座標で指定されることで 線分を描く関数。
  • void NXDrawRectangle( int x, int y, u_int w, u_int h )
    長方形の枠を描く関数。
  • void NXFillRectangle( int x, int y, u_int w, u_int h )
    中身を塗りつぶした長方形を描く関数。
  • void NXDrawCircle( int xc, int yc, u_int r )
    円を描く関数。
  • void NXFillCircle( int xc, int yc, u_int r )
    中身を塗りつぶした円を描く関数。
  • void NXDrawEllipse( int xc, int yc, u_int a, u_int b )
    楕円を描く関数。
  • void NXFillEllipse( int xc, int yc, u_int a, u_int b )
    中身を塗りつぶした楕円を描く関数。
  • void NXDrawPolygon( XPoint p[], int np )
    多角形を描く関数。
  • void NXFillPolygon( XPoint p[], int np )
    中身を塗りつぶした多角形を描く関数。
  • void NXDrawString( int x, int y, char* str )
    文字列をグラフィックとして描く関数。
  • void NXDrawImageString( int x, int y, char* str )
    文字列のサイズの長方形領域を消してから文字列を描く関数。
  • void NXDrawPrintf( int x, int y, const char* format, ... )
    printf関数と同じ要領で文字列をグラフィックとして描く関数。
  • void NXPutImage( char* buf, int w, int h, int xo, int yo )
    バッファ内のpixelデータを指定長方形領域に転送して描く関数。
  • int NXCheckEvent( int wait, XEvent& ev )
    マウスとキーボードに関するイベントを入手する関数。引数 wait に define定数 NX_WAIT を指定するとイベントが届くまで作業が停止する。 NX_NOWAITを指定するとイベントが届いていなければすぐ戻る。
  • void NXSaveWindow( char* fname )
    画面をファイルにビットマップデータとして種々の形式で保存する関数。
  • void NXLoadXPM( XPM& xpm, char* array[] )
    XPM画像ファイルをpixmapにロードする関数。
  • void NXPutXPM( XPM& xpm, int x, int y )
    ロードしたXPM画像を指定位置に表示する関数。

  • 総合目次
    Copyright(C) by Naoki Watanabe. Oct 21st, 1995.
    渡辺尚貴 naoki@cms.phys.s.u-tokyo.ac.jp