アドイン
概要

Ngraph の[Add-in]-[Execute]メニューで登録されているアドインを 選ぶと Ngraph はそれを「Ngraphマクロスクリプト」として実行します。 アドインプログラムの登録は [Preference]-[Addin script]で行います。 以下のアドインプログラムは、Ngraph for X11 の配布状態で既に登録さ れています。

legend.nsc
凡例を自動生成する為のアドインスクリプトと実行ファイル。Tcl/Tkを使います ので wish がインストールされている必要があります。「Mix:」をチェックすると、 ファイル名、Xカラム、Yカラムが同じデータをまとめて一つの凡例として扱うよう になります。リストボックスからデータファイル名を選び、「Caption:」に凡例テ キストを入力してください。デフォルトではデータファイル名がCaptionに使われます。
fitrslt.nsc
フィッティングの結果の凡例を作成する為のアドイン。 「Expand」をチェックした場合、現在のフィット結果の数値をLegend-Text として生成しますので、フィット結果が変わっても Legend-Textは変更されません。 非チェックの場合にはLegend-Textのオブジェクト置換機能を使いますので、フィット結果が変われば、Legend-Textの内容も自動的に変化します。
append.nsc
すでに読み込んであるグラフをクリアせずにNGPファイルを読み 込む為のアドインスクリプト。
calc.nsc
任意関数の描画をする為のアドインスクリプトと実行ファイル。Tcl/Tkを使います ので wish がインストールされている必要があります。等間隔データを作成し、デ ータファイルとしてNgraph にセットし、数式変換機能を使って関数を描画します。
math.nsc
電卓です。数式を入力すると答えを表示します。Ngraphの数式変換機能の関数が使え ます。
text-in.nsc
データファイルの指定したカラムを legend-text としてプロットデータ点の隣に挿 入するアドインスクリプト。データを扱うスクリプトの例です。

アドインプログラムはユーザが作成する事もできます。マクロロスクリプト には Ngraph 内部の設定パラメター全てを参照、変更する機能が ありますので、アドインプログラムは Ngraph の状態変数にアクセスして,現 在の Ngraph の状態を取得したり,変更したりすることができます。マクロス クリプトだけでもかなりの事ができるのですが、ユーザインターフェースなど の点から、独立した個々のプログラムを起動した方が効率が良い場合がありま す。マクロスクリプトには外部プログラムを起動する機能がありますので、こ れも可能ですが、その場合には

が問題となります。その簡単な一つの方法の例として legend.nsc を取り上げ、 以下で説明します。


legend.nsc の動作

legend.nsc が起動する外部プログラムは legend.tcl (Tcl/Tkスクリプト)です。 まず legend.tcl が必要とする現在の Ngraph の状態を記述した中間ファイルを 作成します。


ここでは、system:0:temp_file でテンポラリファイル名を取得し、objectコマンド で file (データファイル)のインスタンスの数を、get コマンドで各種設定パラメ ターを取得し、テンポラリファイルに書き込んでいます。この中間ファイルのフォ ーマットは起動する外部プログラム(今の場合には legend.tcl)固有のフォーマッ トになります。このファイルの中身は現在の Ngraph のデータファイルの設定状況 をリストした


の様なものになります。次に


で legend.tcl の出力用に別のテンポラリファイル名を取得し、変数SCRIPT に格納しています。後にこのファイルが Ngraph マクロスクリプトとして実行 されます。従って、このファイルの中身はマクロスクリプトの文法に則ってい なければなりません。


ここで外部プログラム wish legend.tcl を起動しています(wish は Tcl/Tk のインタープリタで legend.tcl を解釈実行します)。legend.tcl は コマン ドラインの1番目に指定されたファイルから Ngraph の状態を取得し、2番目 に指定されたファイルに変更すべき状態をマクロスクリプトとして出力する ように設計されています。例えば "STRING" と言う legend-text を(0,0)に生 成するには、$SCRIPT のファイルの内容は


となります。このスクリプトを実行するのは


です。ここで、変数 SCRIPT に格納したファイルが存在しいている場合(if文) に、shell オプジェクトのインスタンスを生成(new)し、そのインスタンスに そのファイルを解釈実行(shell)させ、最後に不要になったインスタンスを削 除(del)しています。


最後に不必要になった中間ファイル($DATALIST)とスクリプトファイル($SCRIPT) を削除します。


アドインスクリプトの形式

外部プログラムを起動するアドインスクリプトは、


となります。

もちろん、Ngraphの現在の状態を取得する必要がなければ、

だけで十分です。


データを扱うアドインスクリプト

アドインスクリプトの中からデータを直接扱う事もできます。その例として text-in.nsc を説明します。次のようなデータファイルが有るとします。


第一カラムをx座標に、第二カラムをy座標にしたグラフを作成したとします。 Ngraphにはすでにtest.datが開いてあり、プロットタイプ "mark" でプロット されているとします。ここで text-in.nsc を実行し、 "Input legend-text column" に 3 を入力すると、データ点の隣に第三カラム のテキストをlegend-textとして挿入することができます。

このスクリプトでは、まず dialog オブジェクトを使って、legend-text のカラ ム数を入力させ、変数(COLUMN)に代入します。


次に file オブジェクトの file::opendatac を使ってデータファイルを開き、 file::getdata でデータが無くなるまでデータを取得し、最後に file::closedata でデータを閉じます。


while ループの中では、まず text オブジェクトを生成します。


また file::getdata を実行した時、データの数値は file::data_x, file::data_y に入り、0.01mm単位での用紙上での位置は file::coord_x, file::coord_y に入 り、行番号は file::line に入ります。これらを用いて生成したtextの座標値を設 定しています。


また file::column を用いてカラムのトークンを取り出しています。file::column の第一引数はファイルの行数で、file::line を使い、第二引数は取り出すカラム数 で変数 COLUMN の値を用いています。取り出したトークンを text::text に設定し ます。


ただし、file::column は呼び出される毎にファイルの先頭から走査して目的の文字 列を取得しますので、データファイルが大きい場合には動作が遅いです。

一般的にデータを扱うアドインスクリプトは、


となります。file::opendatac の代わりに file::opendata を用いた場合、 file::coord_x, file::coord_y の値は不定となりますが、その代わり軸の設定がなさ れていなくてもエラーにはなりません。