書式:
set terminal tkcanvas {tcl | perl | perltkx | python | ruby | rexx} {standalone | input} {interactive} {rounded | butt} {nobackground | background <rgb color>} {{no}rottext} {size <width>,<height>} {{no}enhanced} {externalimages | pixels}
結果を表示するには、以下の Tcl/Tk コマンド列を実行します:
package require Tk # 以下の 2 行は、外部画像を使用する場合にのみ必要 package require img::png source resize.tcl source plot.tcl canvas .c -width 800 -height 600 pack .c gnuplot .c
Perl/Tk の場合は、以下のようにします:
use Tk; my $top = MainWindow->new; my $c = $top->Canvas(-width => 800, -height => 600)->pack; my $gnuplot = do "plot.pl"; $gnuplot->($c); MainLoop;
Perl/Tkx の場合は、以下のようにします:
use Tkx; my $top = Tkx::widget->new("."); my $c = $top->new_tk__canvas(-width => 800, -height => 600); $c->g_pack; my $gnuplot = do "plot.pl"; $gnuplot->($c); Tkx::MainLoop();
Python/Tkinter の場合は、以下のようにします:
from tkinter import * from tkinter import font root = Tk() c = Canvas(root, width=800, height=600) c.pack() exec(open('plot.py').read()) gnuplot(c) root.mainloop()
Ruby/Tk の場合は、以下のようにします:
require 'tk' root = TkRoot.new { title 'Ruby/Tk' } c = TkCanvas.new(root, 'width'=>800, 'height'=>600) { pack { } } load('plot.rb') gnuplot(c) Tk.mainloop
Rexx/Tk の場合は、以下のようにします:
/**/ call RxFuncAdd 'TkLoadFuncs', 'rexxtk', 'TkLoadFuncs' call TkLoadFuncs cv = TkCanvas('.c', '-width', 800, '-height', 600) call TkPack cv call 'plot.rex' cv do forever cmd = TkWait() if cmd = 'AWinClose' then leave interpret 'call' cmd end
gnuplot が生成するコード (上の例では、"plot.<ext>" として書き出され ているものです) は、以下のような手続き関数を含んでいます:
gnuplot(canvas)
引数として canvas の名前を取ります。 これを呼び出すと、その canvas をクリアし、canvas のサイズを探し、そ の中にグラフを描き、それに合うように伸縮します。
gnuplot_plotarea()
canvas スクリーン座標での描画領域の境界 (xleft, xright, ytop, ybot) を含むリストを返します。 2 次元グラフ描画 (`plot`) に対してのみ動作します。
gnuplot_axisranges()
グラフ座標での 2 つの軸の範囲 (x1min, x1max, y1min, y1max, x2min, x2max, y2min, y2max) を返します。 2 次元グラフ描画 (`plot`) に対してのみ動作します。
オプション standalone を使えば、自己完結した最小スクリプトを生成でき ます。デフォルトは input で、これは取り込まれるべきスクリプトを作りま す (すなわち、load されるか call されるか、または選択した言語用のなんら かの適切な方法で)。
オプション interactive を指定すると、一つの線分上でマウスクリックした ときにその中点の座標が標準出力に出力されるようになります。 この動作は、user_gnuplot_coordinates という手続き関数を定義することで、 別なものに置き換えることも可能です。その手続き関数には以下の引数が渡さ れます:
win id x1s y1s x2s y2s x1e y1e x2e y2e x1m y1m x2m y2m,
これらは、canvas の名前、線分の id、2 つの座標系でのその線分の開始点の 座標、終了点の座標、中点の座標です。中点の座標は、対数軸に対してのみ与 えられます
デフォルトでは、canvas は transparent ですが、オプション background で、明示的に背景色を設定することもできます。
rounded は、線の端や接合部を丸くします。 デフォルトの butt は、尖った端と角張った接合部を使用します。
オプション rottext で、文字列の任意角での回転を有効にできますが、それ には Tcl/Tk 8.6 以降が必要です。デフォルトは norottext です。
オプション size は、目盛りの刻みとフォントサイズを、指定された canvas サイズに対して最適化なものにしようとします。デフォルトでは、出力サイズ は 800 x 600 ピクセルとしています。
enhanced は、拡張文字列処理を選択します (デフォルト) が、これは今のと ころ Tcl でのみ利用可能です。
オプション pixels (デフォルト) は、フェールセーフなピクセル毎の画像処 理ルーチンを選択します。以下参照: image pixels (52.2)。 オプション externalimages は、画像を外部 PNG 画像として保存し、それを あとで tkcanvas コードが読み込んで伸縮します。このオプションは、Tcl で のみ有効で、しかも Tk の画像処理ルーチンが任意の伸縮を提供していないた めに、ある状況では遅くなります。この場合、スクリプトで、提供される rescale.tcl を取り込まなければいけません。
対話型モードは、Python/Tk, Rexx/Tk ではまだ実装されていません。Ryby/Tk の対話型モードは、まだ user_gnuplot_coordinates をサポートしていません。
竹野茂治@新潟工科大学