テキストや四角形、線といったグラフィックオブジェクトを追加します。
次のサンプルでは、アクティブなグラフに四角形を追加する方法を紹介します。他のグラフオブジェクトタイプについては、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"); }
// 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);