# initオブジェクトには数値データファイルのデフォルト拡張子が格納
# されています。この拡張子は、ラベル'dataext'の値で参照されます。
# まずラベル'dataext'が存在するか確認します。'dataext'は通常初期化
# スクリプトinitparamsでTopaz起動時に設定されますので、通常は存在
# するはずです。デフォルトの拡張子を取得後、変数$extにコピーします。
if ($graph->init->search(dataext) ==
-1)
{
$ext = '';
}
else
{
$ext = $graph->init->get(dataext);
}
# CUI関数'selectfile'を起動し、ユーザに数値データファイルを選択させ
# ます。'selectfile'関数の第1引数は0ですので、単一ファイル選択モード
# になります。また第2引数には$extが指定され、この引数を正規表現とし
# ファイルリストのフィルタリングを行います。ユーザが単一のファイルを
# 選択し、リターンキーを押してselectfile関数を終了すればselectfile関数は
# 1を返します。またこの場合選択されたファイル名は@_RETに格納されます。
# キャンセルによりselectfile関数が終了すると0が返され、最終行ににジャンプ
# しスクリプトは終了します。
if (selectfile(0, $ext))
{
#
@_RETに値を返す関数は多く存在するので、@_RET中の必要な値は他の変数
# に早めに格納した方がよいでしょう。
$file = $_RET[0];
# データプロットを行うための、detaオブジェクトの新たなインスタンスを
# 生成します。(関数の返り値-1)は新たに生成されたインスタンスのインスタ
# ンスidです。この値を変数$dnoに格納します。
$dno = $graph->frame[$_CUR]->new('data') - 1;
# 新しく作成したインスタンスの初期化を行います。
# 初期化スクリプト'initdata'の第1引数はframeオブジェクトの配列
# idであり、第2引数はdataオブジェクトの配列idです。
if (execfile('initdata',
$graph->currentframe, $dno) == 0)
{
print ("Error!: cannot initialize data.\n");
}
# 新たなdataオブジェクトインスタンスを選択状態にし、ファイル名の設定を
# 行います。CUI関数'loaddatamenu()'は選択状態にあるdataオブジェクト
# インスタンスの、ファイル読み込み条件設定を行うためのユーザインター
# フェイスです。
$graph->frame[$_CUR]->data[$dno]->selected
= 1;
$graph->frame[$_CUR]->data[$dno]->filename
= $file;
loaddatamenu();
# ここまでに行われたdataオブジェクトインスタンスの設定内容に従い、
# 数値データを実際にロードします。
print 'reading
data ..... ';
$graph->frame[$_CUR]->data[$dno]->loaddata();
print "done\n";
# 読み込まれた数値データに合わせ、座標軸のオートスケーリングを
# 行います。第1引数はスケーリングを行う軸のインスタンスidです。
# $_ALLと指定すると、全ての軸がオートスケーリングされます。
# 第2引数はスケーリングマージン(余白)です。ここでは10%としています。
$graph->frame[$_CUR]->autoscale($_ALL, 10);
# 数値データファイル名を表示するために、partsオブジェクトインス
# タンスを新たに生成します。Partsオブジェクトインスタンスを作成
# する際は、Partsの種類も同時に指定する必要があります。ここでは
# その種類として、textを与えています。新たに作られたインスタンス
# の配列番号を変数$pnoに格納します。
$pno = $graph->frame[$_CUR]->new('parts', 'text') - 1;
# インスタンスの初期化を行います。
if (execfile('initparts',
$graph->currentframe, $pno) == 0)
{
print ("Error!: cannot initialize parts.\n");
}
# ファイル名中には"_"や"%"等の、Topazのpartsオブジェクトのテキスト中で
# 特殊な意味をもつ文字が含まれる場合があります。toplainfilename関数で
# これらの文字が正しく表示されるよう変換を行った後、partsオブジェクト
# のインスタンスに代入を行います。
$graph->frame[$_CUR]->parts[pno]->text = toplainfilename($file);
# テキストを表示する位置を計算し、インスタンスに位置情報を代入します。
$framecenter
= ($graph->frame[$_CUR]->x2 - $graph->frame[$_CUR]->x1) / 2;
@bbox = @graph->frame[$_CUR]->parts[$pno]->bbox();
$textwidth
= $bbox[2] - $bbox[0];
$textheight
= $bbox[3] - $bbox[1];
$graph->frame[$_CUR]->parts[pno]->x1
= $framecenter - $textwidth / 2;
$graph->frame[$_CUR]->parts[pno]->y1
= -2 * $textheight;
$graph->paintall(V0);
}