レイヤの管理
区分プロットを作成する
6区分プロットを作成するGraph Page, Layer Arrangement
次のサンプルは、2列3行で配置した6つのレイヤを持つ新しいグラフを作成します。 この関数は、どのウィンドウがアクティブかに関係なく実行できます。
GraphPage gp;
gp.Create("Origin");
while(gp.Layers.Count() < 6)
{
gp.AddLayer();
}
graph_arrange_layers(gp, 3, 2);
6区分グラフを作成しプロットGraph Page, Plotting Separated Data in Multiple Layers
次のサンプルは、新しいワークブックにいくつかデータをインポートし、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++;
}
グラフウィンドウにレイヤを追加するGraph Page, Add Layer
次のサンプルは、独立した右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);
}
}
レイヤを配置するGraph Page, Layer Arrangement
次のサンプルは、アクティブグラフに既存レイヤを2行3列で配置します。 アクティブグラフに6つのレイヤが無くても、新しいレイヤは追加されません。 存在しているレイヤのみが配置されます。
GraphLayer gl = Project.ActiveLayer();
GraphPage gp = gl.GetPage();
int nRows = 3, nCols = 2;
graph_arrange_layers(gp, nRows, nCols);
レイヤを移動するGraph Page, Move Layer
次のサンプルは、アクティブグラフウィンドウのすべてのレイヤを左に整列し、ページの左側から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 Page, Resize Layer
次のサンプルは、現在のレイヤのサイズを変更し、幅と高さを元のサイズの半分にします。
次のコードをコンパイルする前に、現在のワークスペースに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);
2つのレイヤを入れ替えるGraph Page, Swap Layers
次のサンプルは、レイヤ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);
レイヤを整列するLayer, Alignment
次のサンプルは、アクティブグラフレイヤのレイヤ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);
レイヤをリンクするGraph Page, Linking Layers
次のサンプルは、アクティブグラフのすべてのレイヤの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);
}
レイヤ単位をセットするGraph Layer, Dimension
int nUnit = M_PIXEL;
GraphLayer gl = Project.ActiveLayer();
// 現在の位置を取得
double dPos[TOTAL_POS];
gl.GetPosition(dPos);
// 位置を指定した単位に変換
gl.UnitsConvert(nUnit, dPos);
// 位置を単位でセット
gl.SetPosition(dPos, nUnit);
|