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

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

Ocguide xf graphpreview dialog.png

内容

  1. 1 空のGetN グラフプレビューダイアログを作成する
  2. 2 コードビルダでXファンクションをコーディングする
  3. 3 プレビューグラフを実行
  4. 4 GUI の変更をプレビューグラフに反映
  5. 5 グラフオブジェクトのイベントでGUIを更新
  6. 6 プレビューボタンを追加

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

  • Xファンクションビルダを開くためにF10キーを押してください。
  • Xファンクション編集ボックスに「PrevBox」と入力して、Xファンクションの名前にします。
  • 変数リスト上で右クリックして「変数の追加」を選択して2つ目の変数を追加します。変数の名前、ラベル、他の値を次の画像と同じになるように入力します。
    Ocguide xf graphpreview variables.png
  • XファンクションビルダのツリービューボタンOcguide xf treeview button.pngをクリックしてツリービューに移動します。「使用のコンテクスト→メニュー」にある「自動GetNダイアログ」のドロップダウンリストで「プレビュー付きGetNGraphBox」を選択してから保存ボタンをクリックしてXファンクションを保存します。
  • Xファンクションビルダを閉じて、コマンドウィンドウで「PrevBox -d」を実行します。GetNグラフプレビューダイアログが開きます。

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

  • Originのコードビルダを開き、メニューからファイル→開く、と選択して先程保存したXファンクションを見つけて開きます。開くダイアログで「ワークスペースに追加」にチェックがついている事を確認してからOKをクリックします。PrevBox.XFCがOriginCワークスペースビューのユーザフォルダに追加され、編集ビューに関数のボディを表示します。
  • //put additional include files here行の後に、ヘッダファイルを追加します。例えば、
    //put additional include files here
    #include <..\Originlab\grobj_utils.h>
            
    

プレビューグラフを実行

GetNGraphPreview_OnInitGraphはプレビューグラフを起動する時に使用します。以下のコードをコピーして、この関数に貼り付けます。それからコンパイルボタンを押してください。プレビューダイアログボックスが開くとプレビューグラフに長方形が表示されます。コンパイルをクリックし、コマンドウィンドウで「PrevBox -d」を実行します。

//  pgTemp をPageBase クラスオブジェクトからGraphPage オブジェクトへ投げる
GraphPage gp(pgTemp); 
 
// このテンプレートをロードしてグラフにズームイン/アウト 
// ボタンを追加。必要が無い場合、この行を取り除く
page_load(gp, "CurvePreview"); 
 
// グラフページでアクティブレイヤを入手
GraphLayer gl = gp.Layers(); 
 
// 四角形を追加。X位置をxfromとxto変数で参照 
GraphObject go;
add_rect(gl, go, trGetN.xfrom.dVal, 0, trGetN.xto.dVal, -1, 
    SYSCOLOR_BLUE, 2, LN_VERTICAL, true, false);

GUI の変更をプレビューグラフに反映

  • プレビューグラフの更新を促すには、GetNGraphPreview_OnChange 関数のdwUpdateGraph 変数にUPDATE_GRAPH_CHANGED 部分を追加する必要があります。例えば、
    // GetNGraphPreview_OnUpdateGraph を呼び出してグラフを
    // 更新する部分も簡単に含む
    if( !(dwUpdateGraph & UPDATE_GRAPH_CHANGED) )
            dwUpdateGraph |= UPDATE_GRAPH_CHANGED;
            
    
  • 以下のコードをGetNGraphPreview_OnUpdateGraph 関数に追加してグラフが更新されるようにします。コンパイルボタンをクリックし、コマンドウィンドウで「PrevBox -d」を実行します。
    // pgTemp をPageBase クラスオブジェクトからGraphPage  
    // オブジェクトへ投げる
    GraphPage gp(pgTemp); 
     
    GraphLayer gl = gp.Layers(); // アクティブなグラフレイヤを入手 
    GraphObject go = gl.GraphObjects("Rect");            
     
    double x0 = trGetN.xfrom.dVal;
    double x1 = trGetN.xto.dVal;
     
    // GUI上でXの位置を更新して四角形にする
    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);
     
    // グラフウィンドウをリフレッシュ
    gp.Refresh(TRUE);
            
    

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

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

  • GetNGraphPreview_OnInitGraph関数のadd_rect 関数の後に、次のコマンドを追加します。
    // 四角形が移動またはサイズ変更した時に
    //プレビューダイアログに通知するイベントスクリプトをセット 
    // 他のイベントタイプはoc_const.hファイルのGRCT_*を確認
    set_LT_script(go, "run -oc notify_dlg_on_move_obj;", 
                  GRCT_SIZEMOVE);
            
    
  • GetNGraphPreview_OnChangeに以下のコードを追加して、GUI上の新しい位置に更新します。コンパイルボタンをクリックし、コマンドウィンドウで「PrevBox -d」を実行します。
    if( bChangedByGraph )
    {
            // 四角形の X from/to を入手して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];
     
            // UPDATE_GRID_* 部分を追加して GUIを更新
            if( !(dwUpdateGrid & UPDATE_GRID_SIMPLE) )
                    dwUpdateGrid |= UPDATE_GRID_SIMPLE; 
    }
    

プレビューボタンを追加

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