
                     Addin programs for Ngraph version 6.03 

                                Copyright (C) 2015, Satoshi ISHIZAKA.

                                    e-mail: isizaka@msa.biglobe.ne.jp
                            URL: http://www2e.biglobe.ne.jp/~isizaka/

これは Ngraph for Windows 用のアドインプログラムです。


【使用方法】

ここに含まれているアドインプログラムは、Ngraph for Windows の配布状態
の NGRAPH.INI に既に登録されていますので、NGRAPH.EXE と同じディレクト
リに解凍するだけで、Ngraph の [グラフ]-[アドイン]メニューから使用する
ことができます。


【各アドインプログラムに関する補足説明】

legend.nsc
legend.exe
              凡例を作成する為のアドインスクリプトと実行ファイル。
              「Mix:」をチェックすると、ファイル名、Xカラム、Yカラムが
              同じデータをまとめて一つの凡例として扱うようになります。
              リストボックスからデータファイル名を選び、「Caption:」に
              凡例テキストを入力してください。「Caption:」が入力されて
              いない時にはデータファイル名が使われます。

fitrslt.nsc
fitrslt.exe
              フィッティングの結果の凡例を作成する為のアドインスクリプ
              トと実行ファイル。「Expand」をチェックした場合、現在のフ
              ィット結果の数値をLegend-Text として生成しますので、フィ
              ット結果が変わっても、Legend-Textは変更されません。非チェ
              ックの場合にはLegend-Textのオブジェクト置換機能を使います
              ので、フィット結果が変われば、Legend-Textの内容も自動的に
              変化します。
              
append.nsc
              すでに読み込んであるグラフをクリアせずにNGPファイルを読み
              込む為のアドインスクリプト

mprint.nsc
              複数の NGP ファイルを印刷する為のアドインです。外部ドライ
              バ GRA2PRNW.EXE がパスの通ったディレクトリになければなり
              ません。またファイル名にスペースの入った NGP ファイルは
              扱えません。

calc.nsc
calc.exe
              任意関数の描画をする為のアドインスクリプトと実行ファイル。
              実際には等間隔データを作成し、データファイルとしてNgraph
              にセットし、数式変換機能を使って関数を描画します。

clip2gra.nsc
clip2gra.exe
              クリップボード内の Windows Metafile Picture 形式を GRAフ
              ァイルに変換するアドインスクリプトと実行ファイル。GRAで
              サポートされていないビットマップ塗りつぶしなどは無視され
              ます。
              (version 1.00.01 から PatBlt にも対応。Designer のグラデ
               ェーション図形も GRA に変換可能)

math.nsc
              電卓です。数式を入力すると答えを表示します。Ngraphの数式
              変換機能の関数が使えます。

text-in.nsc
              データファイルの指定したカラムを legend-text としてプロッ
              トデータ点の隣に挿入するアドインスクリプト。データを扱う
              スクリプトの例です。

【アドインプログラムを作成する為の簡単な説明】

Ngraph for Windows の[グラフ]-[実行]メニューで登録されているアドインを
選ぶと Ngraph はそれを「Ngraphマクロスクリプト」として実行します。マク
ロスクリプトには Ngraph 内部の設定パラメター全てを参照、変更する機能が
ありますので、アドインプログラムは Ngraph の状態変数にアクセスして，現
在の Ngraph の状態を取得したり，変更したりすることができます。マクロス
クリプトだけでもかなりの事ができるのですが、ユーザインターフェースなど
の点から、独立した個々のプログラムを起動した方が効率が良い場合がありま
す。マクロスクリプトには外部プログラムを起動する機能がありますので、こ
れも可能ですが、その場合には
(1)どうのように外部プログラムに Ngraph の状態を知らせるか？
(2)外部プログラムから、どの様に Ngraph の状態を変更させるか？
が問題となります。その簡単な一つの方法の例として legend.nsc を取り上げ、
以下で説明します。


【legend.nsc の動作】

legend.nsc が起動する外部プログラムは legend.exe です。まず legend.exe
が必要とする現在の Ngraph の状態を記述した中間ファイルを作成します。

DATALIST=${system:0:temp_file}                                          
object file -instance > "$DATALIST"                                
get file:0-! -id -field file x y type >> "$DATALIST"

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

0
demo1.dat
1
2
mark

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

SCRIPT=${system:0:temp_file}                                          

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

legend "$DATALIST" "$SCRIPT"

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

new text
text::x=0
text::y=0
text::text="STRING"

となります。このスクリプトを実行するのは
               
if [ -f "$SCRIPT" ];                                                  
then                                                                  
    new shell                                                     
    shell::shell "$SCRIPT"                                        
    del shell                                                     
fi                                                                    

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

system:0:unlink_temp_file "$DATALIST"                                             
system:0:unlink_temp_file "$SCRIPT"                                 

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


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

以上をまとめると、外部プログラムを起動するアドインスクリプトは、
----------------------------------------------------------------------
... 外部プログラムに必要な中間ファイルを生成する ...
SCRIPT=${system:0:temp_file}                                          
外部プログラム名  中間ファイル名  "$SCRIPT"
if [ -f "$SCRIPT" ];                                                  
then                                                                  
    new shell                                                     
    shell::shell "$SCRIPT"                                        
    del shell                                                     
fi                                                                    
system:0:unlink_temp_file "$SCRIPT"
----------------------------------------------------------------------
となります。

もちろん、Ngraphの現在の状態を取得する必要がなければ、
----------------------------------------------------------------------
SCRIPT=${system:0:temp_file}                                          
外部プログラム名  "$SCRIPT"
if [ -f "$SCRIPT" ];                                                  
then                                                                  
    new shell                                                     
    shell::shell "$SCRIPT"                                        
    del shell                                                     
fi                                                                    
system:0:unlink_temp_file                                             
----------------------------------------------------------------------
だけで十分です。


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

アドインスクリプトの中からデータを直接扱う事もできます。その例として 
text-in.nsc を説明します。次のようなデータファイルが有るとします。
=====test.dat=========
0 0 sampleA 
1 1 sampleB
2 2 sampleC
======================
第一カラムをx座標に、第二カラムをy座標にしたグラフを作成したとします。
Ngraphにはすでにtest.datが開いてあり、プロットタイプ "mark" でプロット
されているとします。ここで text-in.nsc を実行し、
"Input legend-text column" に 3 を入力すると、データ点の隣に第三カラム
のテキストをlegend-textとして挿入することができます。

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

new dialog
COLUMN=${dialog::input:'Input legend-text column'}
del dialog

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

  file:0:opendatac
  while file:0:getdata
  do
    ... テキストの設定 ...
  done
  file:0:closedata

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

    new text

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

    text::x=${file:0:coord_x} 
    text::y=${file:0:coord_y}

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

    text::text=`get file:0 -field column:"${file:0:line} ${COLUMN}"`

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

一般的にデータを扱うアドインスクリプトは、
----------------------------------------------------------------------
file::opendatac
while file::getdata
do
  ... 目的の操作
  file::data_x file::data_y file::coord_x file::coord_y file::line が使える
done
file::closedata
----------------------------------------------------------------------
となります。file::opendatac の代わりに file::opendata を用いた場合、
file::coord_x, file::coord_y の値は不定となりますが、その代わり軸の設定がなさ
れていなくてもエラーにはなりません。


【使用規定・配布等】

・Ngraph for Windows のライセンスは GNU GENERAL PUBLIC LICENSE
  Version 2 に従います。
 

Ngraph for Windows. Copyright (C) 2015, Satoshi ISHIZAKA. 

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.


Ngraph for Windows. Copyright (C) 2015, 石坂智

このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフトウェ
ア財団によって発行された GNU一般公衆利用許諾契約書(バージョン2か、希望
によってはそれ以降のバージョンのうちどれか)の定める条件の下で再頒布ま
たは改変することができます。

このプログラムは有用であることを願って頒布されますが、*全くの無保証* 
です。商業可能性の保証や特定の目的への適合性は、言外に示されたものも含
め全く存在しません。詳しくはGNU一般公衆利用許諾契約書をご覧ください。

あなたはこのプログラムと共に、GNU一般公衆利用許諾契約書の複製物を一部
受け取ったはずです。もし受け取っていなければ、フリーソフトウェア財団ま
で請求してください(宛先は the Free Software Foundation, Inc., 59
Temple Place, Suite 330, Boston, MA 02111-1307 USA)。