書式:
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 は transparent ですが、オプション background で、明示的に背景色を設定することもできます。
rounded は、線の端や接合部を丸くします。 デフォルトの butt は、尖った端と角張った接合部を使用します。
オプション rottext で、文字列の任意角での回転を有効にできますが、それ には Tcl/Tk 8.6 以降が必要です。デフォルトは norottext です。
オプション size は、目盛りの刻みとフォントサイズを、指定された canvas サイズに対して最適化なものにしようとします。デフォルトでは、出力サイズ は 800 x 600 ピクセルとしています。
enhanced は、拡張文字列処理を選択します (デフォルト) が、これは今のと ころ Tcl でのみ利用可能です。
オプション pixels (デフォルト) は、フェールセーフなピクセル毎の画像処 理ルーチンを選択します。以下参照: image pixels (44.2)。 オプション externalimages は、画像を外部 PNG 画像として保存し、それを あとで tkcanvas コードが読み込んで伸縮します。このオプションは、Tcl で のみ有効で、しかも Tk の画像処理ルーチンが任意の伸縮を提供していないた めに、ある状況では遅くなります。この場合、スクリプトで、提供される rescale.tcl を取り込まなければいけません。
対話型モードは、Python/Tk, Rexx/Tk ではまだ実装されていません。Ryby/Tk の対話型モードは、まだ user_gnuplot_coordinates をサポートしていません。
竹野茂治@新潟工科大学