LabTalkのオブジェクト

 

概要

LabTalkスクリプトプログラミングは、さまざまなオブジェクトプロパティメソッドへのアクセスを提供します。

オブジェクトプロパティにアクセスするための構文は次の通りです。

objName.property (数値プロパティ)

または

objName.property$ (テキストプロパティ)


メソッドを操作する構文は次のとおりです。

objName.method(arguments)


オブジェクトは一般的なプロパティまたはメソッドを共有する場合がありますが、通常、各オブジェクトには固有のプロパティとメソッドがあります。特定のオブジェクトの詳細については、オブジェクトのリストを参照してください。

多くのオブジェクトは、ワークブック、ワークシート、ワークシート列、グラフ内のデータプロットなど、Originプロジェクトの可視コンポーネントです。一部のOriginオブジェクトとそのOPJコンポーネントとの対応を以下に示します。

Pageオブジェクト ワークブック/グラフウィンドウ/行列ブック
Wksオブジェクト ワークシート/行列シート
Layerオブジェクト グラフレイヤ/ワーシート/行列シート
Wks.Col オブジェクト ワークシート列
Mat オブジェクト 行列オブジェクト
Datasetオブジェクト 非接続データセット(特定のダイアログ以外で表示されない)
Graphicオブジェクト ラベル/矢印/線/ユーザ作成のグラフィック要素

INI オブジェクトやシステムオブジェクトといった他のオブジェクトはインターフェイスに表示されません。

学習する項目

このチュートリアルでは、以下の項目について解説します。

  • オブジェクトからプロパティ値を取得
  • オブジェクトのプロパティ値を変更
  • メソッドを使用してオブジェクトを操作
  • グラフィックオブジェクトの作成と操作

ステップ

オブジェクトプロパティの読み取りと書き込み

プロパティ値を返す

  1. Originを開き、スクリプトウィンドウが開いていることを確認します。(ない場合ウィンドウ:スクリプトウィンドウを選択またはShift + Alt + 3を押して開きます)
  2. 標準ツールバーのButton New Workbook.pngボタンをクリックして新しいワークブックを作成し、タイトルバーを右クリックしてプロパティを選択し、ウィンドウプロパティ ウィンドウを開きます。
  3. ロングネームFor TestingショートネームTestに変更して、OKをクリックして設定を適用してダイアログを閉じます。
  4. Testワークブックウィンドウがアクティブなことを確認して、スクリプトウィンドウで以下のスクリプトを実行します。
  1. //スクリプトウィンドウのプロパティ値(ショートネーム)を読み込み
    page.name$ = ;
    //文字列変数にテキストプロパティ値(ロングネーム)を割り当て
    string str1$ = page.longname$ ;
    //double型の変数にプロパティ値(ページ幅)を割り当て
    double width = page.width;
    
  2. スクリプトウィンドウにワークブックショートネーム(Test)が出力されます。残りのプロパティは変数に読み込まれており、次のスクリプトを実行すると出力できます。
  3. str1$ = ;//スクリプトウィンドウに "For Testing"を返す
    width = ;//ページ幅の数値を返す
    

プロパティ値を設定

  1. ワークブックTestをアクティブにして、wksオブジェクトを使って文字列をプロパティに渡すことでワークシート名を変更します。
  2. wks.name$ = "Test1";//ワークシート名をTest1に変更
    

    Note: この場合、layerオブジェクトを使用してもワークシート名の変更が可能です。

  3. このワークシートの列数を5に設定します。
  4. wks.nCols = 5;
    
  5. wks.col objectを使ってワークシート列プロパティを変更します。
  6. // ページロングネームを使って列2のロングネームを設定
    wks.col2.lname$ = page.longname$;
    // 列の幅を広く
    wks.col2.width = 12;
    // 3列目をエラーバー列に設定
    wks.col3.type = 3;
    

範囲をオブジェクトとして定義してそのプロパティを使用

概要で述べたように、OriginオブジェクトはOriginプロジェクトファイル (OPJ) のグラフィカルインターフェイスと主要コンポーネントで表示されます。

一般に、何も指定されていない場合はアクティブなコンポーネントがデフォルトで使用されます。非アクティブなコンポーネントを操作する場合は、名前/インデックスを指定するか、範囲を定義してこのコンポーネントにマッピングします。

  1. ヘルプ:ラーニングセンターを選択して開くウィンドウで3Ys Y-YYを検索して表示されたサムネイルをダブルクリックしてデータを開きます。3Ys Y-YYグラフウィンドウをアクティブにして、レイヤの3番が選択された状態にします。
  2. 以下のスクリプトを実行してアクティブレイヤ(レイヤ3)の寸法の単位をページに対する%からインチに変更します。
  3. layer.unit = 2;
    
  4. グラフウィンドウ名(ここではグラフウィンドウがアクティブなためオプション)とレイヤ番号を指することで、レイヤ2も同様に寸法単位を変更します。
  5. %(page.name$)!layer2.unit = 2;
    

    Note: 単位設定を確認するには、フォーマット:作図の詳細(レイヤ属性)をクリックして作図の詳細 - レイヤ属性ダイアログを開き、レイヤの大きさタブを開きます。レイヤ2と3で単位の設定がインチに変更されているはずです。

  6. 範囲変数lay2を定義してレイヤ2にマップします。
  7. range lay2 = [%(page.name$)]layer2!;
    
  8. 範囲変数lay2はレイヤ2の全プロパティを保持し、以下のスクリプトを実行することで幅を5インチに変更し、背景を明るい灰色で塗りつぶします。
  9. lay2.width = 5;
    lay2.color = color(LT Gray);
    //塗り色を定義するのに色インデックスも使用可能です
    //例えば以下のスクリプトで上述のものと同じように動作します
    //lay2.color = 19;
    
  10. ページオブジェクトのプロパティを使ってレイヤ1をアクティブにします。
  11. page.active = 1;
    
  12. アクティブレイヤ(レイヤ1)を他の範囲変数lay1にマップします。
  13. range lay1 = !;
    
  14. layer.axisサブオブジェクトを使ってレイヤ1のY軸タイプを線形に変更します。
  15. lay1.y.type = 1;
    

メソッドを使用してオブジェクトを操作

  1. 空のOriginプロジェクトファイルでButton New Workbook.pngボタンをクリックして新規ワークブックを作成します。
  2. Import Single ASCII.pngボタンをクリックして<Origin EXE folder>\Samples\Graphing\ にあるCategorical_Data_1.datをインポートします。
  3. Note: 以下のスクリプトを実行することでもファイルのインポートが可能です。

    //新規ワークブックを作成
    newbook;
    //ファイルをインポート
    string fn$=system.path.program$ + "Samples\Graphing\Categorical_Data_1.dat";
    impASC fname:=fn$; 
    //system.path.program$は非表示オブジェクトのプロパティ
    
  4. B2という名前のワークシートの最後に1列追加します。
    page.xlcolname = 0; // スプレッドシートセル表記をオフに
    wks.addcol(B2);
    

    ワークブックのスプレッドシートセル表記については、FAQ-849 を参照してください。

  5. Bの前にA1列を挿入します。
    //列Bを現在の列として選択
    wks.col = 2;
    //現在の列の前に列A2を挿入
    wks.insert(A2);
    
  6. wks.labels( )メソッドで列ラベル行の表示を制御します。
  7. //スパークラインとコメントを削除してロングネームと単位行だけにする
    wks.labels(-CS);
    //または以下のスクリプトを実行しても同じ結果を取得できます
    //wks.labels(LU);
    
  8. 必要に応じてロングネームと単位を設定します。
  9. //A2列およびB2列(4番目の列)のロングネームを設定
    col(A2)[L]$ = "Abb.Direction";
    col(4)[L]$ = "Description";
    //列Bの単位を設定
    col(B)[U]$ = "km/h";
    
  10. 列幅を調整して全テキストが1行で表示されるようにします。
  11. wks.col2.width = 10;
    wks.col4.width = 17;
    
  12. 文字列配列のメソッドを使用して説明の文字列を入れます。
  13. //文字列配列を定義
    StringArray aa, bb;
    //文字列配列aaに文字列を追加
    aa.Add("Strong gale");
    //文字列配列aaをbbにコピー
    bb.Copy(aa);
    //bbをaaに追加
    aa.Append(bb);
    //区切り文字として , を使用して他の4つの文字列をデータセットとして追加
    aa.Append("Strong breeze,Fresh breeze,Moderate gale,Moderate breeze", ",");
    
  14. 文字れうaaの内容を列Dにコピーします。
  15. aa.CopyTo(col(4));
    
  16. メソッドを使って、最初の列の文字列を操作し、省略形を2番目の列に配置します。forループを使用してスクリプトを簡略化します。
  17. for(int ii=1; ii<=wks.maxRows; ii++)
    {
       string str1$ = col(1)[$(ii)]$;
       //左からみて最初の文字を取得
       string str2$ = str1.Left(1)$;
       //str2を大文字に
       str2.MakeUpper();
       col(2)[$(ii)]$ = str2$;
    }
    

    Note: Xファンクションcsetvaluesを使用するか列値の設定ダイアログを使って組み込みの文字列関数を呼び出すことで同じ操作が可能です。

グラフィックオブジェクトの作成と操作

  1. 新規グラフウィンドウを作成して線オブジェクトを描画します。
  2. //グラフウィンドウを作成
    win -t plot; 
    //'line1'に接続されたmyLineという名前のGObjectを宣言
    GObject myLine = line1;
    //オブジェクトを作成(list -o で 'line1'を表示) 
    draw -n myLine -l {1,2,6,4};
    
  3. myLineまたはline1のいずれかを使用してオブジェクトプロパティの制御できます。
  4. //線の色を赤に変更
    myLine.color = color(red);
    //矢印の終了の形状を変更
    line1.arrowEndShape = 2;
    //水平、垂直方向の移動を有効化
    line1.hMove = 1;
    line1.vMove = 1;
    
  5. "myText"という名前のテキストラベルをグラフに追加し、"Distance"というテキストを表示します。ラベルは指定した位置に配置されます。
  6. label -p 20 50 -n myText Distance;
    
  7. テキストラベルのプロパティを変更します。
  8. //テキストラベルの枠を影に設定
    myText.background = 2;
    
  9. テキストオブジェクトにスクリプトを追加し、再描画後に実行するように設定します。このスクリプトは、line1オブジェクトの計算された線の長さに応じてラベル内のテキストを更新し、lineオブジェクトとのオフセットを維持します。
  10. //置換表記を使用しないようにあらかじめ文字列を定義
    string str1$ = "$" + "(sqrt((line1.y2-line1.y)^2+(line1.x2-line1.x)^2), .2)";
    //スクリプトは全イベント後に実行
    myText.script = 5;
    //オブジェクトにスクリプトテキストを追加
    myText.script$="myText.text$ = "Line Length = %(str1$)"; doc -uw;";
    
  11. 線オブジェクト上で右クリックしてプロパティを選択し、プログラミングタブでのあとでスクリプトを実行サイズ変更に変更して、スクリプト編集ボックスに以下のスクリプトを入力します。これで線オブジェクトのサイズ変更の度にテキストラベルが再描画されます。
  12. myText.draw(global);
    

    Note: 同様に、プロパティダイアログを使用せずに、以下のスクリプトを実行することもできます。

    line1.script = 3;
    line1.script$ = "myText.draw(global);";
    
  13. myLine オブジェクトとmyTextオブジェクトを接続します。
  14. line1.Connect(myText, 0, 1, 2, 6);
    
  15. グラフ内の線オブジェクトを移動すると、テキスト移動し、サイズ変更すると、線の長さに応じてテキストが更新されます。