レイヤの管理


目次

区分プロットを作成する

6区分プロットを作成する

次のサンプルは、2列3行で配置した6つのレイヤを持つ新しいグラフを作成します。 この関数は、どのウィンドウがアクティブかに関係なく実行できます。

GraphPage gp;
gp.Create("Origin");

while(gp.Layers.Count() < 6)
{
	gp.AddLayer();
}

graph_arrange_layers(gp, 3, 2);

6区分グラフを作成しプロット

次のサンプルは、新しいワークブックにいくつかデータをインポートし、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);

2つのレイヤを入れ替える

次のサンプルは、レイヤ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);