次のサンプルは、2列3行で配置した6つのレイヤを持つ新しいグラフを作成します。 この関数は、どのウィンドウがアクティブかに関係なく実行できます。
GraphPage gp; gp.Create("Origin"); while(gp.Layers.Count() < 6) { gp.AddLayer(); } graph_arrange_layers(gp, 3, 2);
次のサンプルは、新しいワークブックにいくつかデータをインポートし、6つのレイヤを持つ新しいグラフウィンドウを作成し、2列3行で配置し、各レイヤ(区分)をループして、インポートしたデータをプロットします。
// ワークシートにデータファイルをインポート ASCIMP ai; Worksheet wks; string strDataFile = GetOpenBox(FDLOG_ASCII, GetAppPath(true)); if(AscImpReadFileStruct(strDataFile,&ai) == 0) { wks.Create("Origin"); wks.ImportASCII(strDataFile, ai); } // ワークシートからグラフの各レイヤにXYデータを追加 GraphPage gp("Graph1"); // グラフは上記で作成した3x2区分レイヤを持つ int index = 0; foreach(GraphLayer gl in gp.Layers) { DataRange dr; dr.Add(wks, 0, "X"); dr.Add(wks, index+1, "Y"); if( gl.AddPlot(dr, IDM_PLOT_LINE) >= 0 ) gl.Rescale(); index++; }
次のサンプルは、独立した右Y軸スケールを追加します。 右Y軸のみを表示する新しいレイヤを追加します。 これは寸法がリンクされ、レイヤが追加された時に、X軸が現在のアクティブレイヤにリンクされます。 新しく追加したレイヤがアクティブレイヤになります。
次のコードをコンパイルする前に、現在のワークスペースにgraph_utils.cを追加する必要があります。これには、Labtalkコマンド"Run.LoadOC(Originlab\graph_utils.c)"を使います。
#include <..\Originlab\graph_utils.h>// page_add_layer関数に必要 GraphLayer gl = Project.ActiveLayer(); GraphPage gp = gl.GetPage(); bool bBottom = false, bLeft = false, bTop = false, bRight = true; int nLinkTo = gl.GetIndex(); // アクティブレイヤにレイヤリンクを新しく追加 bool bActivateNewLayer = true; int nLayerIndex = page_add_layer(gp, bBottom, bLeft, bTop, bRight, ADD_LAYER_INIT_SIZE_POS_SAME_AS_PREVIOUS, bActivateNewLayer, nLinkTo);
GraphPage gp("Graph1"); if( gp ) { GraphLayer glActive = gp.Layers(-1); // -1 はアクティブレイヤを取得 foreach(GraphLayer gl in gp.Layers) { if( gl.GetIndex() != glActive.GetIndex() ) gl.Show(false); } }
次のサンプルは、アクティブグラフに既存レイヤを2行3列で配置します。 アクティブグラフに6つのレイヤが無くても、新しいレイヤは追加されません。 存在しているレイヤのみが配置されます。
GraphLayer gl = Project.ActiveLayer(); GraphPage gp = gl.GetPage(); int nRows = 3, nCols = 2; graph_arrange_layers(gp, nRows, nCols);
次のサンプルは、アクティブグラフウィンドウのすべてのレイヤを左に整列し、ページの左側から15%の位置にセットします。
GraphLayer gl = Project.ActiveLayer(); GraphPage gp = gl.GetPage(); int nRows = gp.Layers.Count(); int nCols = 1; stLayersGridFormat stFormat; stFormat.nXGap = 0; // レイヤのX方向の余白 stFormat.nYGap = 5; // レイヤのY方向の余白 stFormat.nLeftMg = 15; // 左余白 stFormat.nRightMg = 10; stFormat.nTopMg = 10; stFormat.nBottomMg = 10; page_arrange_layers(gp, nRows, nCols, &stFormat);
次のサンプルは、現在のレイヤのサイズを変更し、幅と高さを元のサイズの半分にします。
次のコードをコンパイルする前に、現在のワークスペースにgraph_utils.cを追加する必要があります。これには、Labtalkコマンド"Run.LoadOC(Originlab\graph_utils.c)"を使います。
#include <..\Originlab\graph_utils.h> // layer_set_size 関数に必要 GraphLayer gl = Project.ActiveLayer(); // グラフレイヤの元のサイズを取得 double dWidth, dHeight; layer_get_size(gl, dWidth, dHeight); // レイヤサイズ変更 dWidth /= 2; dHeight /= 2; layer_set_size(gl, dWidth, dHeight);
次のサンプルは、レイヤ1と2のページの位置をインデックス番号を使って入れ替えます。
次のコードをコンパイルする前に、現在のワークスペースにgraph_utils.cを追加する必要があります。これには、Labtalkコマンド"Run.LoadOC(Originlab\graph_utils.c)"を使います。
#include <..\Originlab\graph_utils.h> // layer_swap_position関数に必要 GraphPage gp("Graph1"); GraphLayer gl1 = gp.Layers(0); GraphLayer gl2 = gp.Layers(1); layer_swap_position(gl1, gl2);
次のサンプルは、Layer1およびLayer2という名前のレイヤの位置を名前を入れ替えます。
GraphPage gp("Graph1"); GraphLayer gl1 = gp.Layers("Layer1"); GraphLayer gl2 = gp.Layers("Layer2"); layer_swap_position(gl1, gl2);
次のサンプルは、アクティブグラフレイヤのレイヤ1とレイヤ2を下辺に合わせて整列します。
次のコードをコンパイルする前に、現在のワークスペースにgraph_utils.cを追加する必要があります。これには、Labtalkコマンド"Run.LoadOC(Originlab\graph_utils.c)"を使います。
#include <..\Originlab\graph_utils.h> // layer_aligns関数に必要 // アクティブグラフページを取得 GraphLayer gl = Project.ActiveLayer(); GraphPage gp = gl.GetPage(); GraphLayer gl1 = gp.Layers(0); GraphLayer gl2 = gp.Layers(1); // レイヤ2をレイヤ1に下辺で合わせる layer_aligns(gl1, gl2, POS_BOTTOM);
次のサンプルは、アクティブグラフのすべてのレイヤのX軸をレイヤ1のX軸にリンクします。 単位は、リンクしたレイヤの%にセットされます。
次のコードをコンパイルする前に、現在のワークスペースにgraph_utils.cを追加する必要があります。これには、Labtalkコマンド"Run.LoadOC(Originlab\graph_utils.c)"を使います。
#include <..\Originlab\graph_utils.h> // layer_set_link関数に必要 GraphLayer gl = Project.ActiveLayer(); GraphPage gp = gl.GetPage(); GraphLayer gl1 = gp.Layers(0); // Layer 1 foreach(GraphLayer glOne in gp.Layers) { int nUnit = M_LINK; // レイヤの単位をリンクしたレイヤの%にセット if( glOne != gl1 ) layer_set_link(glOne, gl1.GetIndex(), LINK_STRAIGHT, LINK_NONE, &nUnit); }
int nUnit = M_PIXEL; GraphLayer gl = Project.ActiveLayer(); // 現在の位置を取得 double dPos[TOTAL_POS]; gl.GetPosition(dPos); // 位置を指定した単位に変換 gl.UnitsConvert(nUnit, dPos); // 位置を単位でセット gl.SetPosition(dPos, nUnit);