Originのプロット操作・オブジェクト作成ツールバのどのボタンも、スクリプトから初期化でき、3つはマクロとリンクして、プログラミングすることができます。
ツールをプログラミングするには、pointproc マクロを定義して、適切なコードを実行します。pointproc マクロは、ユーザがダブルクリックまたはシングルクリックしてEnterキーを押すときに実行します。
このスクリプトは、スクリーンリーダツールを使って、グラフにラベルを配置します。
dotool 2; // スクリーンリーダツールを開始 dotool -d; // シングルクリックをダブルクリックのように動作させる // ここで'''pointproc''' マクロを定義 def pointproc { label -a x y -n MyLabel Hello; dotool 0; // ツールをポインタにリセット done = 1; // 変数を終わりまで無限ループを許可するようにセット } // ツールを使うときスクリプトは停止しない // そのため、これ以上の実行を止める必要がある // この無限ループはユーザが点を選択するのを待つ for( done = 0 ; done == 0; ) sec -p .1; // A .1 秒の遅延によりループに何かを与える type Continuing script ...; // マクロが実行されると無限ループは解放される
データリーダツールは、スクリーンリーダに似ていますが、カーソルは実際のデータポイントで固定されます。 定義されると、ユーザがEsc キーを押すか、ポインタツールをクリックして、データリーダを停止する場合にquittoolbox マクロが実行されます。
この例は、グラフウィンドウがアクティブであることが前提で、そのグラフ上の3つのポイントを選択することを待ちます。
@global = 1; dataset dsx, dsy; // XとY値を保持する2つのデータセットを作成 dotool 3; // ツールを開始 // 各点の選択に対して実行するマクロを定義 def pointproc { dsx[count] = x; // X座標を取得 dsy[count] = y; // Y座標を取得 count++; // 増分をカウント if(count == 4) dotool 0; // 3つの点を持つかどうかを見ることをチェック else type -a Select next point; } // ユーザがEscキーを押すかポインタツールをクリックすると // 実行するマクロを定義: def quittoolbox { // Error : Not enough points if(count < 4) ty -b You did not specify three datapoints; else { draw -l {dsx[1],dsy[1],dsx[2],dsy[2]}; draw -l {dsx[2],dsy[2],dsx[3],dsy[3]}; draw -l {dsx[3],dsy[3],dsx[1],dsy[1]}; double ds12 = dsx[1]*dsy[2] - dsy[1]*dsx[2]; double ds13 = dsy[1]*dsx[3] - dsx[1]*dsy[3]; double ds23 = dsy[3]*dsx[2] - dsy[2]*dsx[3]; area = abs(.5*(ds12 + ds13 + ds23)); type -b Area is $(area); } } count = 1; // 初期の点 type DoubleClick your first point (or SingleClick and press Enter);
次のサンプルは、Escキー押されるか、ユーザがポインタツールをクリックまで任意のポイントを選択するものです。
@global = 1; dataset dsx, dsy; // XとY値を保持する2つのデータセットを作成 dotool 3; // ツールの開始 // 各ポイントの選択を実行するマクロを定義 def pointproc { count++; // 増分のカウント dsx[count] = x; // X座標を取得 dsy[count] = y; // Y座標を取得 } // ユーザがEscキー押すか、ポインタツールをクリックすると // 実行するマクロを定義 def quittoolbox { count=; for(int ii=1; ii<=count; ii++) { type $(ii), $(dsx[ii]), $(dsy[ii]); } } count = 0; // 初期の点 type "Click to select point, then press Enter"; type "Press Esc or click on Pointer tool to stop";
Enterキーを押してポイントを選択することは、ダブルクリックしてポイントを選択するより確実です。 |
また、グラフからデータ値を収集する getpts コマンドを使うこともできます。
データセレクタツールは、データセットの範囲をセットするのに使うことができます。 範囲は開始行番号(インデックス)と終了行番号で定義されます。 データセットの複数範囲を定義でき、Originの分析ルーチンは、これらの範囲を入力に使い、これらの範囲外のデータは除外されます。
以下は、グラフの範囲を選択させるスクリプトです。
// ツールの開始 dotool 4; // ユーザが行ったとき実行するマクロを定義 def pointproc { done = 1; dotool 0; } // ループで待ち押すことで完了 // (1) Enterキーまたは (2) ダブルクリック for( done = 0 ; done == 0 ; ) { sec -p .1; } // ユーザがツールを終了させると、追加のスクリプトが実行 ty continuing ..;
領域データセレクタ または 領域マスクツール を使うとき、ユーザがEscキーを押すことをきっかけとして、quittoolboxマクロを実行できます。
// グラフをアクティブにして、領域データ選択ツールを開始 dotool 17; // ユーザが行ったとき実行するマクロを定義 def quittoolbox { done = 1; } // ループで待ち押すことで完了 ... // (1) Escキーまたは (2) ポインタツールをクリック for( done = 0 ; done == 0 ; ) { sec -p .1; } // ユーザがツールを終了させると、追加のスクリプトが実行 ty continuing ..;
Xファンクションを使って、これらの範囲を見つけ、使用することができます。
// データセット内の範囲を取得 dataset dsB, dsE; mks ob:=dsB oe:=dsE; // For each range for(idx = 1 ; idx <= dsB.GetSize() ; idx++ ) { // その範囲に対して曲線以下の積分を取得 integ %C -b dsB[idx] -e dsE[idx]; type Area of %C from $(dsB[idx]) to $(dsE[idx]) is $(integ.area); }
プロット操作・オブジェクト作成ツールバーのリスト太字はプログラミングで役立ちます。
ツールの番号 | 説明 |
---|---|
0 |
ポインタ - ポインタはマウスのデフォルトの状態で、マウスはセレクタとして動作します。 |
1 |
拡大 - グラフ上で矩形を選択し、その矩形の範囲の軸で再スケールします。(グラフのみ) |
2 |
スクリーンリーダ - ページ上のポイントの位置を読み込みます。 |
3 |
データリーダ - ページ上のデータポイントの位置を読み込みます。(グラフのみ) |
4 |
データセレクタ - データ範囲を示すデータマーカをセットします。(グラフのみ) |
5 |
マウスで作図 - グラフ上にデータポイントを描画します。(グラフのみ) |
6 |
テキスト - テキスト注釈をページに追加します。 |
7 |
矢印 - 矢印をページに追加します。 |
8 |
曲線矢印 - 曲線矢印をページに追加します。 |
9 |
直線 - 直線をページに追加します。 |
10 |
四角形 - 四角形をページに追加します。 |
11 |
円 - 円図形をページに追加します。 |
12 |
多角形 - 多角形の図形をページに追加します。 |
13 |
折れ線 - 折れ線をページに追加します。 |
14 |
自由閉曲線 - 閉曲線をページに追加します。 |
15 |
自由曲線 - 自由曲線をページに追加します。 |
16 |
縮小 - グラフ上のクリックした場所を中心に縮小します。(グラフのみ) |
17 |
領域データセレクタ - データ範囲を選択します。(グラフのみ) |
18 |
領域マスクツール - データ範囲のポイントをマスクします。(グラフのみ) |