グラフから点を取得

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

領域マスクツール - データ範囲のポイントをマスクします。(グラフのみ)