GetNダイアログのグラフプレビューを作成GetN Graph Preview Dialog
このセクションはXファンクションのGetNダイアログのグラフプレビューを作成する方法を示します。これはプレビューグラフの起動、GUIの変更をプレビューグラフで更新、グラフ上で四角形が移動された時にどのよううにGUIを更新するか、等を含みます。
空のGetN グラフプレビューダイアログを作成する
- ツール:Xファンクション・ビルダを選択するしてビルダを開きます。
- Xファンクション名としてPrevBoxを入力します。
- 変数リスト上で右クリックして変数の追加を選択して2つ目の変数を追加します。
- 変数の名前、ラベル、他の値を次の画像と同じになるように入力します。
- ツリービューボタンをクリックします。使用のコンテクスト→メニューにある自動GetNダイアログのドロップダウンリストでプレビュー付きGetNGraphBoxを選択します。
- 保存ボタンをクリックして、このXファンクションをX-Functions-> Miscellaneousにサブフォルダに保存します。
- Xファンクションビルダを閉じ、コマンドウィンドウでprevbox -d を実行します。グラフプレビュー付きのGetNダイアログが開きます。
X-Function, Coding in Code BuilderコードビルダでXファンクションをコーディングする
プレビューグラフの初期化
- 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 グラフプレビューダイアログにプレビューボタンを表示するを確認してください。
|