GetNダイアログのグラフプレビューを作成

このセクションはXファンクションのGetNダイアログのグラフプレビューを作成する方法を示します。これはプレビューグラフの起動、GUIの変更をプレビューグラフで更新、グラフ上で四角形が移動された時にどのよううにGUIを更新するか、等を含みます。

Ocguide xf graphpreview dialog.png

空のGetN グラフプレビューダイアログを作成する

  • ツール:Xファンクション・ビルダを選択するしてビルダを開きます。
  • Xファンクション名としてPrevBoxを入力します。
  • 変数リスト上で右クリックして変数の追加を選択して2つ目の変数を追加します。
  • 変数の名前、ラベル、他の値を次の画像と同じになるように入力します。
    Ocguide xf graphpreview variables.png
  • ツリービューボタンOcguide xf treeview button.pngをクリックします。使用のコンテクスト→メニューにある自動GetNダイアログのドロップダウンリストでプレビュー付きGetNGraphBoxを選択します。
  • 保存ボタンをクリックして、このXファンクションをX-Functions-> Miscellaneousにサブフォルダに保存します。
  • Xファンクションビルダを閉じ、コマンドウィンドウでprevbox -d を実行します。グラフプレビュー付きのGetNダイアログが開きます。

コードビルダでXファンクションをコーディングする

    コーディングを開始する際は、XファンクションビルダダイアログでXファンクションをロードし、そこにあるコードビルダボタンをクリックするのが最も簡単です。関連するXFCファイルがロードされ、上部の コンパイルダイアログに戻るボタンが利用できます。また、コードビルダウィンドウで直接Xファンクションをロードすることもできます。
  • Originで、表示:コードビルダメニューを選択するか、コードビルダボタンをクリックしてコードビルダを開きます。
  • コードビルダで、ファイル:開くメニューを選択し、対応するXファンクションサブフォルダ、例えばUser Files -> X-Functions -> Miscellaneous を参照し、PrevBox.OXFを選択します。
  • ワークスペースに追加にチェックを付けます。OKボタンをクリックします。
  • PrevBox.XFCがOrigin CワークスペースのUserフォルダに追加されアクティブタブで表示されます。
  • //put additional include files hereと書いてある行の後に、追加のヘッダファイルを追記します。例えば、
    //put additional include files here
    #include <..\Originlab\grobj_utils.h>

プレビューグラフの初期化

  • GetNGraphPreview_OnInitGraphはプレビューグラフを起動する時に使用します。以下のコードをコピーして、この関数本体の空の領域に貼り付けます。
  • // cast pgTemp from PageBase class object to GraphPage object
    GraphPage gp(pgTemp); 
    
    // load this template to the graph in order to contain zoom 
    // in/out button on the graph.If this is not required, 
    // remove this line.
    page_load(gp, "CurvePreview"); 
    
    // get active graph layer in the graph page
    GraphLayer gl = gp.Layers(); 
    
    // add a rectangle, set x position reference to xfrom and xto 
    // variables
    GraphObject go;
    add_rect(gl, go, trGetN.xfrom.dVal, 0, trGetN.xto.dVal, -1, 
        SYSCOLOR_BLUE, 2, LN_VERTICAL, true, false);
  • コンパイルボタンをクリックします。
  • コードビルダの右下にあるコマンド_結果ウィンドウを使用します。
  • prevbox -dと入力し、Enterキーを押してXファンクションのダイアログを開きます。グラフ内に青い四角形が表示されます。移動しても、X開始 と X終了の値はまだ更新されません。

GUI変更時にプレビューグラフを更新

  • プレビューグラフの更新を促すには、GetNGraphPreview_OnChange関数のdwUpdateGraph 変数にUPDATE_GRAPH_CHANGED 部分を追加する必要があります。例えば、
    // include the bit to call GetNGraphPreview_OnUpdateGraph 
    // to update graph
    if( !(dwUpdateGraph & UPDATE_GRAPH_CHANGED) )
    	dwUpdateGraph |= UPDATE_GRAPH_CHANGED;
  • 以下のコードをGetNGraphPreview_OnUpdateGraph 関数に追加してグラフが更新されるようにします。コンパイルボタンをクリックし、コマンドウィンドウで「PrevBox -d」を実行します。
    // cast pgTemp from PageBase class object to GraphPage 
    // object
    GraphPage gp(pgTemp); 
    
    GraphLayer gl = gp.Layers(); // get active graph layer 
    GraphObject go = gl.GraphObjects("Rect"); 		
    
    double x0 = trGetN.xfrom.dVal;
    double x1 = trGetN.xto.dVal;
    
    // update x position of rectangle on GUI
    vector vv(4);
    vv[0] = x0; vv[1] = x1; vv[2] = x1; vv[3] = x0;
    
    Tree tr;
    tr.Root.Data.X.dVals = vv;	
    go.UpdateThemeIDs(tr.Root);		
    go.ApplyFormat(tr, true, true);
    
    // refresh graph window
    gp.Refresh(TRUE);

グラフオブジェクトイベントでGUIを更新

プレビューグラフ上で四角形を移動/サイズ変更した時にGUIを更新するには、以下のように設定します。

  • GetNGraphPreview_OnInitGraph関数のadd_rect 関数の後に、次のコマンドを追加します。
    // set event script to notify preview dialog when rectangle 
    // is moved or resized.For other event types see the GRCT_*
    // in oc_const.h file.
    set_LT_script(go, "run -oc notify_dlg_on_move_obj;", 
                  GRCT_SIZEMOVE);
  • GetNGraphPreview_OnChangeに以下のコードを追加して、GUI上の新しい位置に更新します。コンパイルボタンをクリックし、コマンドウィンドウで「PrevBox -d」を実行します。
    if( bChangedByGraph )
    {
    	// get rectangle x from/to and update GUI
    	GraphPage gp(pgTemp);
    	GraphLayer gl = gp.Layers();
    	GraphObject goRect = gl.GraphObjects("Rect");
    	
    	Tree tr;
    	tr = goRect.GetFormat(FPB_DATA, FOB_ALL, TRUE, TRUE);
    	
    	vector vv;
    	vv = tr.Root.Data.X.dVals;
    	
    	trGetN.xfrom.dVal = vv[0];
    	trGetN.xto.dVal = vv[1];
    	
    	// to include UPDATE_GRID_* bits to update GUI
    	if( !(dwUpdateGrid & UPDATE_GRID_SIMPLE) )
    		dwUpdateGrid |= UPDATE_GRID_SIMPLE; 
    }

プレビューボタンを追加

プレビューボタンを追加したり自動プレビューチェックボックスを追加するにはXファンクション: Xファンクションのカスタマイズ: ダイアログにカスタムボタンを追加する: GetN グラフプレビューダイアログにプレビューボタンを表示するを確認してください。