作成したウィンドウに名前を割り当てると、その名前は、そのディスプレイボックスを所有するウィンドウへの参照になります。その後で、添え字を使って、そのウィンドウ内のディスプレイボックスにメッセージを送ることができます。
たとえば、次のスクリプトは、インタラクティブな正弦波を作成します。このスクリプトは、ウィンドウ内のフレームボックスにメッセージを送ることで、正弦波を自動的に変化させています。(スクリプトの途中でtfに割り当てています。)
amplitude = 1;
freq = 1;
phase = 0;
win = New Window( "揺れ動く波",
Graph Box(
Frame Size( 500, 300 ),
X Scale( -5, 5 ),
Y Scale( -5, 5 ),
Y Function( amplitude * Sine( x / freq + phase ), x );
Handle(
/* 四角いハンドルのフェーズおよび振幅位置の
現在値。
スクリプトは振幅(amplitude)の後のカンマの後始まる */
phase,
amplitude,
/* XとYはハンドルの位置に設定されたが、
最初の2つの引数で指定された値が更新されない限り
ハンドルは動かない */
phase = x;
amplitude = y;
);
// Handleは同様に動作するが、yが0.5という点が異なる
Handle( freq, .5, freq = x );
Text( // グラフにテキストを表示する
{3, 4},
"振幅: ",
Round( amplitude, 4 ), // 現在値を表示する
{3, 3.5},
"周波数: ",
Round( freq, 4 ), // 現在値を表示する
{3, 3},
"位相: ",
Round( phase, 4 ) // 現在値を表示する
);
)
);
tf = win[Frame Box( 1 )]; // Frame Box(グラフ)を取得
For( amplitude = -4, amplitude < 4, amplitude += .1,// 振幅のアニメーション
tf << Reshow // グラフを強制的に更新
);
amplitude = 1; // ループに使用して複雑な動きをさせる
freq = 1;
phase = 0;
For( i = 0, i < 1000, i++,
amplitude += (Random Uniform() - .5);
amplitude = If(
amplitude > 4, 4,
amplitude < -4, -4,
amplitude
);
freq += (Random Uniform() - .5) / 20;
phase += (Random Uniform() - .5) / 10;
tf << Reshow;
Wait( .05 );
);