グラフィックオブジェクトの作成とアクセス

目次

グラフィックオブジェクトの作成

テキストや四角形、線といったグラフィックオブジェクトを追加します。

次のサンプルでは、アクティブなグラフに四角形を追加する方法を紹介します。他のグラフオブジェクトタイプについては、oc_const.h ファイル内の GROT_* (例:GROT_TEXT, GROT_LINE, GROT_POLYGON) を確認してください。

GraphLayer gl = Project.ActiveLayer();
string strName = "MyRect";
GraphObject goRect = gl.CreateGraphObject(GROT_RECT, strName);

現在のグラフウィンドウにテキストラベルを追加します。

GraphLayer gl = Project.ActiveLayer();
GraphObject go = gl.CreateGraphObject(GROT_TEXT, "MyText");		
go.Text = "This is a test";

以下のサンプルでは、グラフに矢印を追加する方法を示します。矢印のオブジェクトタイプは、GROT_LINEで、線と同じです。線と矢印ともに、データポイントの数は2つ必要です。

GraphPage gp;
gp.Create();
GraphLayer gl = gp.Layers();

string strName = "MyArrow"; // グラフオブジェクトの名前
GraphObject go = gl.CreateGraphObject(GROT_LINE, strName);

go.Attach = 2; // 接続先はレイヤとスケール

Tree tr;		
tr.Root.Dimension.Units.nVal = 5; // 単位はスケールにセット

// スケール値で位置をセット
vector vx = {2, 6};
vector vy = {6, 2};
tr.Root.Data.X.dVals = vx;
tr.Root.Data.Y.dVals = vy;	

tr.Root.Arrow.Begin.Style.nVal = 0;
tr.Root.Arrow.End.Style.nVal = 1;

if( 0 == go.UpdateThemeIDs(tr.Root) )
{
	go.ApplyFormat(tr, true, true);
}

次のサンプルでは、グラフに曲線矢印を追加する方法を示します。曲線矢印は、データポイントの数は4つ必要です。

GraphPage gp;
gp.Create();
GraphLayer gl = gp.Layers();

string strName = "MyArrow"; // グラフオブジェクトの名前
GraphObject go = gl.CreateGraphObject(GROT_LINE4, strName);

go.Attach = 2; // 接続先はレイヤとスケール

Tree tr;		
tr.Root.Dimension.Units.nVal = 5; // 単位をスケールにセット

// スケール値で位置をセット
vector vx = {2, 4, 6, 5};
vector vy = {7, 6.9, 6.8, 2};
tr.Root.Data.X.dVals = vx;
tr.Root.Data.Y.dVals = vy;	

tr.Root.Arrow.Begin.Style.nVal = 0;
tr.Root.Arrow.End.Style.nVal = 1;

if( 0 == go.UpdateThemeIDs(tr.Root) )
{
	go.ApplyFormat(tr, true, true);
}

プロパティ設定

テキストフォントや、色、線の幅などのグラフィカルオブジェクトのプロパティを設定します。

// グラフオブジェクトの色とフォントを設定	
GraphLayer gl = Project.ActiveLayer();
GraphObject goText = gl.GraphObjects("Text");
goText.Text = "This is a test";
goText.Attach = 2; // レイヤスケールに接続	

Tree tr;
tr.Root.Color.nVal = SYSCOLOR_RED; // the color of text
tr.Root.Font.Bold.nVal = 1; 
tr.Root.Font.Italic.nVal = 1;
tr.Root.Font.Underline.nVal = 1;
tr.Root.Font.Size.nVal = 30; // font size of text

if( 0 == goText.UpdateThemeIDs(tr.Root) )
{
	bool bRet = goText.ApplyFormat(tr, true, true);
}

位置とサイズを設定

GraphLayer gl = Project.ActiveLayer();
GraphObject go = gl.GraphObjects("Rect");
go.Attach = 2; // レイヤスケールに接続	

// テキストオブジェクトをレイヤの左上に移動
Tree tr;
tr.Root.Dimension.Units.nVal = UNITS_SCALE;
tr.Root.Dimension.Left.dVal = gl.X.From; // 左
tr.Root.Dimension.Top.dVal = gl.Y.To/2; // 上
tr.Root.Dimension.Width.dVal = (gl.X.To - gl.X.From)/2; // 幅
tr.Root.Dimension.Height.dVal = (gl.Y.To - gl.Y.From)/2; // 高さ

if( 0 == go.UpdateThemeIDs(tr.Root) )
{
	bool bRet = go.ApplyFormat(tr, true, true);
}

接続先プロパティを更新

接続先には、ページ、レイヤ枠、レイヤスケールの3つの選択肢があります。

// グラフオブジェクトに異なるオブジェクトを接続
// 0 はレイヤ。レイヤを移動するとグラフオブジェクトも一緒に移動
// 1 はページ。レイヤを移動してもグラフオブジェクトに影響はない
// 2 はレイヤスケール。スケールを変更するとグラフオブジェクトの位置が
// 対応して移動
go.Attach = 2;

無効なプロパティの取得と設定

// 移動可能、選択可能といった無効なプロパティを確認
Tree tr;
tr = go.GetFormat(FPB_OTHER, FOB_ALL, true, true);
DWORD 	dwStats = tr.Root.States.nVal;

// 垂直と水平移動を確認
// プロパティの詳細は、oc_const.hファイルの GOC_* を確認
if( (dwStats & GOC_NO_VMOVE) && (dwStats & GOC_NO_HMOVE) )
{
	out_str("This graph object cannot be move");
}

Programming Control

// 1. 線を追加
GraphLayer gl = Project.ActiveLayer();
GraphObject go = gl.CreateGraphObject(GROT_LINE);
go.Attach = 2; // 接続先をレイヤスケールにセット
go.X = 5; // 初期位置X = 5にセット

// 2.線図のプロパティをセット
Tree tr;
tr.Root.Direction.nVal = 2; // 1 は水平、2 は垂直
tr.Root.Span.nVal = 1; // レイヤまで間隔 
tr.Root.Color.nVal = SYSCOLOR_RED; // 線の色

if( 0 == go.UpdateThemeIDs(tr.Root) )	
{
	go.ApplyFormat(tr, true, true);
}

// 3.イベントモードとLTスクリプトをセット
// 線移動すると線の位置のX値を印字
Tree trEvent;
trEvent.Root.Event.nVal = GRCT_MOVE;// 詳細は、oc_const.hの GRCT_* 
trEvent.Root.Script.strVal = "type -a $(this.X)";

if( 0 == go.UpdateThemeIDs(trEvent.Root) )	
{
	go.ApplyFormat(trEvent, true, true);
}

凡例の更新

凡例は、グラフウィンドウ内にある"Legend"という名前のグラフィックオブジェクトです。データプロットを追加/削除後、legend_update 関数を使用して、現在データプロットに基づいた凡例に更新することが可能です。

 
// 凡例の更新の簡単な使用方法
// Origin C ヘルプでは、この関数を検索して引数や
// 使用例について確認可能
legend_update(gl); // gl は、GraphLayer オブジェクト

グラフに表オブジェクトを追加

// 1. 表テンプレートとともにワークシートを作成
Worksheet wks;
wks.Create("Table", CREATE_HIDDEN); 
WorksheetPage wksPage = wks.GetPage();

// 2.表のサイズを取得し、テキストを埋める
wks.SetSize(3, 2);
wks.SetCell(0, 0, "1");
wks.SetCell(0, 1, "Layer 1");

wks.SetCell(1, 0, "2");
wks.SetCell(1, 1, "Layer 2");

wks.SetCell(2, 0, "3");
wks.SetCell(2, 1, "Layer 3");

//3.グラフへのリンクとして表を追加
GraphLayer gl = Project.ActiveLayer();	
GraphObject grTable = gl.CreateLinkTable(wksPage.GetName(), wks);