列値の設定を行うためのユーザ定義式を作成する


はじめに

このトピックは、Origin C関数を記述して、値の設定ダイアログボックスの関数メニューに表示する方法について説明しています。

自分のOrigin C関数をOriginに追加する方法についての一般的な情報は、LabTalkからOC関数を呼び出すをご覧下さい。

値の設定ダイアログからアクセス可能なOrigin C関数は、次の要件を満たしている必要があります。

  • 関数の戻り型は、void型にすることはできません。
  • 関数は変数型に対して、参照型またはポインタを持つことはできません。

関数をコンパイルすると、値の設定ダイアログの関数メニュードロップダウンリストで利用できるようになります。

列データの数値と文字型のサポート

文字列

次は文字列関数のサンプルです。

string AddSomethingToStr(string str)
{
  str += " test";
  return str;
}

コンパイルすれば、次のように、この関数を値の設定ダイアログで利用できます。

Col(B) = AddSomethingToStr(Col(A))$; 

数値

次は、整数を返す関数のサンプルです。

int CopyNumeric(int nn)
{
	return nn;
}

関数は値の設定ダイアログから利用でき、次のようにある列から別の列に数値データをコピーすることができます。

Col(B) = CopyNumeric(Col(A));

LabTalkからOrigin C関数のアクセスを制御する

次の #pragma ディレクティブの1つを自分のOrigin Cソースコードに追加して、LabTalkからOrigin C関数にアクセス可能、不可、制限付きアクセス にすることができます。

  • #pragma labtalk(0) // LabTalkからOC関数の実行不可
  • #pragma labtalk(1) // デフォルト、LabTalkからOC関数の実行可
  • #pragma labtalk(2) // run -ocでOC関数を実行

デフォルトでは、LabTalkからOC関数を呼び出すことができるようにOriginは動作しますので、Origin C関数に #pragma labtalk(1) と記述する必要はありません。#pragma labtalk(...) は、別の #pragma labtalk(...)で変更されるまで、そのファイル内のすべての関数に対して影響します。ですので、いくつかのC関数を関数メニューには表示したくない場合、 #pragma labtalk(0) を関数の前に配置し、そして、F(x)メニューに配置する関数の前で再び #pragma labtalk(1) を配置します。この方法を使うことで、関数メニュー内の関数名を制御したり、管理することができます。

関数メニューの関数に対するカテゴリーを設定する

自分のOC関数を関数メニューの適切なカテゴリに表示させるためには、次のようにpragmaステートメントを追加します。

  • #pragma labtalk(1, Date and Time) // カテゴリー名をDate and Timeにセット

関数は、次のように値の設定ダイアログボックスの関数メニューに現れます。この例では、文字列を受けて、文字列を返す関数を表しています。

Date and Time : FunctionName(str)$

自分のOC関数にカテゴリーを指定しない場合、関数は ユーザのOriginCカテゴリーに表示されます。

関数メニューから組み込み関数を選択すると、基本的な関数情報(プロトタイプ、返されるものなど)を含む「スマートヒント」が表示されます。示されるように、/*$$$$$$*/の間にコメントを挿入することで、このようなヒントをOriginC関数(以下のチュートリアル)に追加できます。

Smart hints UD OC func.png


チュートリアル

次の手順は、ユーザ定義関数を値の設定ダイアログボックスの関数メニューに追加するチュートリアルです。Originのプログラムフォルダの \OriginC\System\ サブフォルダにあるinternal.cにサンプルコードがあります。

ステップ:

  1. [コードビルダを開く]:メインメニューから表示:コードビルダメニューを選択して、コードビルダを開きます。
  2. [ファイル名の入力]:コードビルダのメニューからファイル:新規を選びます。新規ファイルダイアログが開きます。新規ファイルダイアログのファイルタイプでC Fileを選びます。そして、ファイル名フィールドに"test"と入力します。(拡張子".c"は自動的に付加されます。)デフォルトの場所は <ユーザファイルフォルダ>\OriginC\ です。OKをクリックします。ダイアログが閉じ、編集ボックスに"test.c" ウィンドウが表示されます。
  3. [コードを入力]:このウィンドウにあるコードの一番下に、次のOrigin Cコードを入力します。
#pragma labtalk(1,Math)
double add2num(double a, double b)
{
	  return a + b;
}

Note: 関数定義の前の"pragma"行は、関数メニューの数学カテゴリーに関数を配置するものです。

  1. [ビルドの実行]:メニューからビルド:ビルドメニューを選び、コードをコンパイルします。エラーが発生していないことを確認します。コードが問題なくコンパイルされたら、コードビルダを閉じ、Originのウィンドウに戻ります。エラーが発生したら、修正して再度コンパイルしてください。
Note:コンパイルについての詳細は、コードビルダワークスペースをビルドする4つの方法および Origin C関数のロードとコンパイルをご覧下さい。
  1. [値の設定ダイアログを開く]:Originワークスペースに戻ります。新しいワークブックを作成します。メニューから列:新規列の追加を選択して、このワークブックのワークシートに3番目の列を追加します。最初の2列にどんな数値でも良いので数値を入力します。3番目の列のヘッダをクリックして選択し、ショートカットメニューから列:列値の設定を選択して、値の設定ダイアログを開きます。
  2. [関数メニューから新しい関数を入力する]:ダイアログの関数 メニューをクリックします。Mathカテゴリーに、add2num(d1, d2)という項目があるので、その関数をクリックして選択します。文字列"add2num(a,b)"が計算式入力ボックスに挿入されます。これを次のように編集します。
    add2num(col(1),col(2))
  3. [値の設定を実行]: OKをクリックすると、3列目の各行に1列目と2列目の合計が計算されます。

Note: この関数"add2num"には2つの(double型)スカラ引数があり、スカラ値を返しますが、2列(vector型)を引数として、値の設定ダイアログボックスでこの関数を使用するとき、 値の設定ダイアログボックスは各要素(iによって暗示的に示される)に自動的に計算式を適用するので、計算結果が目的の列に入力されます。