GraphWeaver for Visio サンプルプログラム
サンプルプログラムご利用にあたって
    以下の使用条件を遵守して下さい。
  • サンプルプログラムおよび資料のネットワークへの公衆送信、および、雑誌・製品への無許可の添付・複製を禁止します。
  • 当社は、サンプルプログラムおよび資料の使用に付随また関連して発生する損害に関して、一切の責任を負わないものとします。
  • サンプルプログラムおよび資料に、誤字・脱字・位置ずれ等の表記、又、内容に誤りがございましても当社として責任は負わないものとします。
  • サンプルプログラムおよび資料は、予告せずに改良・変更することがあります。
  • サンプルプログラムおよび資料は、動作例・応用例を説明するためのものです。したがってこれらの情報を使用される場合には、使用者の責任においてプログラムを設計してください。これらの使用に付随また関連して発生する損害に関して、当社は一切の責任を負わないものとします。
戻る>> サンプルプログラム
1次元2系列の折れ線グラフのサンプルプログラム。 (sample005)
サンプルプログラムsample008
1次元2系列の折れ線を表示するサンプルプログラムです。
GraphWeaverの折れ線グラフは2次元データ(x,y)にて作成されるので、1次元グラフを作成する場合は連番をデータに挿入します。サンプルではx軸データに連番、y軸データに計算結果を挿入しています。
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;
using System.Runtime.InteropServices;

using Visio = Microsoft.Office.Interop.Visio;
using Sakura.GW.Lib;
using Sakura.GW.AbstractLayer;
using Sakura.GW.AbstractLayer.Visio;
using Sakura.GW.Visio.Draw;

namespace VisioAddinGW_App
{
    public partial class Form1 : Form
    {
        bool bExec = false;

        public Visio.Application visioApp = null;
        //GraphWeaver管理マネージャ
        GraphWeaverMng visioManager = null;
        //Visio用描画モジュール
        VisioAddInLib_draw visioDrawModule = null;
        //GraphWeaver設定情報
        GraphWeaverData mngInfo = new GraphWeaverData();
        List list1 = new List();
        List list2 = new List();
        long docIndex;
        Thread thDrawNewData = null;

        public Form1()
        {
            visioApp = (Visio.Application)new Microsoft.Office.Interop.Visio.InvisibleAppClass();
            mngInfo.SetDataSeriesNo(2);
            InitializeComponent();
        }


        //Random データのセット
        public void RandomDataSet()
        {
            int seed = Environment.TickCount;
            list1.Clear();
            list2.Clear();
            Random rnd = new Random(seed);
            //データ指定
            double totl = 0.0;
            int r;
            for (int x = 1; x < 11; x += 1)
            {
                r = rnd.Next(1, 11);
                totl += r;
                                //1次元データなので、xに連番をセット
                Sakura.GW.Lib.Point pos = new Sakura.GW.Lib.Point(x,r);
                list1.Add(pos);
                double y = totl / x;
                Sakura.GW.Lib.Point pos2 = new Sakura.GW.Lib.Point(x,y);
                list2.Add(pos2);
            }
            mngInfo.SetDataRowData(0, list1);
            mngInfo.SetDataRowData(1, list2);
        }

        /// 
        /// Visio終了時コールバック関数
        /// 
        /// アプリケーションハンドル
        private void visioApp_BeforeQuit(Microsoft.Office.Interop.Visio.Application app)
        {
            //Visioが終了された
            visioApp = null;
        }
        delegate void func();
        /// 
        /// コールバック関数
        /// 
        /// 処理結果フラグ
        public void CallbackFunc(ErrorID eErrorID)
        {
            func fText = delegate() { mess.Text = "描画コマンド " + eErrorID.ToString(); };
            func fButton = delegate() { button1.Text = "Start"; };

            string message = "";
            this.Invoke(fText);
            if (eErrorID == ErrorID.NoError)
            {
                //エラーなし
                // フォームを最小化
                this.WindowState = FormWindowState.Minimized;
                return;
            }
            else if (eErrorID == ErrorID.ProcAbort)
            {
                //処理中断
                message = "Abort";
                bExec = false;
            }
            else
            {
                //エラー発生
                message = "Error ";
                message += "\n( error code = " + eErrorID.ToString() + " )";
                bExec = false;
            }
            this.Invoke(fButton);

            //ダイアログ表示
            MessageBox.Show(message, "GraphWeaver",
                MessageBoxButtons.OK, (eErrorID == ErrorID.NoError) ? MessageBoxIcon.Information : MessageBoxIcon.Error);
        }

        /// 
        /// Visio終了時コールバック関数
        /// 
        public void CallbackVisioClosedFunc()
        {
            //外部からVisioが終了させられたので、ハンドルをnullに設定
            visioApp = null;
            this.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (bExec)
            {
                if (thDrawNewData != null)
                {
                    try
                    {
                        thDrawNewData.Abort();
                    }
                    catch (ThreadAbortException)
                    {
                    }
                    thDrawNewData = null;
                }
                bExec = false;
                mess.Text = "";
                button1.Text = "Start";
                return;
            }

            button1.Enabled = false;
            if (visioApp == null)
            {
                visioApp = (Visio.Application)new Microsoft.Office.Interop.Visio.InvisibleAppClass();

                if (visioManager != null)
                {
                    visioManager.stop();
                    visioManager = null;
                    visioDrawModule = null;
                }
            }
            else
            {
                //Visioウィンドウ表示
                visioApp.Window.WindowState = (int)Visio.VisWindowStates.visWSRestored;
                visioApp.Visible = true;
                visioApp.Window.WindowState = (int)Visio.VisWindowStates.visWSActive;
            }
            if (visioDrawModule == null)
            {
                //描画モジュールにVisioのApplicationハンドルを渡してインスタンス作成
                visioDrawModule = new VisioAddInLib_draw(visioApp);
                //管理マネージャに描画モジュールのハンドルを渡してインスタンス作成
                visioManager = new GraphWeaverMng(visioDrawModule);
                //処理終了時のコールバック登録
                visioManager.ResponseFuncs += new GraphWeaverMng.callbackResponse(CallbackFunc);
                //Visio終了時のコールバック登録
                visioManager.VisioClosedFunc += new GraphWeaverMng.callbackVisioClosed(CallbackVisioClosedFunc);

                //管理マネージャ起動
                visioManager.start();
            }

            RandomDataSet();
 
            string pageName = "";
            //ページ作成
            if (visioManager.createDocument("", out docIndex))
            {
                pageName = "乱数折れ線グラフ";
                //初期ページを対象にする
                if (!visioManager.takeoverPage(docIndex, pageName))
                {
                    //失敗時、新規にページ作成
                    if (!visioManager.createPage(docIndex, ref pageName))
                    {
                        return;
                    }
                }
            }

            //ページ設定
            double he = 297;
            double wi = 210;
            mngInfo.SetPage(pageName, wi, he, 1.0, LengthUnit.mm);

            //グラフ設定
            double ghe = 237.0;
            double gwi = 168.0;
            mngInfo.SetGraphSize(GraphType.LineChart, gwi, ghe, 21.0, 30.0);

            //タイトル設定
            GraphWeaver_FontAttribute titleAttr = new GraphWeaver_FontAttribute();
            titleAttr.fontSizePoint = 25.0;
            titleAttr.fontColor.setIndex(ColorIndex.Blue);
            mngInfo.SetGraphTitle("1から10までの乱数の発生状況と平均値", titleAttr);
            
            //描画象限設定
            //mngInfo.SetGraphImageLimit(Quadrant.QuadrantAll);

            //軸設定
            GraphWeaver_AxisPack axisSet = new GraphWeaver_AxisPack();
            axisSet.axisSpec = AxisSpec.AxisX;                     //軸種別
            axisSet.bEnable = true;                                //軸表示フラグ
            axisSet.min = 0;                                       //最小値
            axisSet.max = 10;                                      //最大値
            axisSet.title = "回数";                                   //軸表示名称
            axisSet.titleAttr.fontSizePoint = 20.0;                //軸表示名称フォントサイズ
            axisSet.titleAttr.fontColor.setIndex(ColorIndex.Black);  //軸表示名称フォント色
            axisSet.tickness = 0.7;                                //軸太さ
            axisSet.axisColor.setIndex(ColorIndex.Black);          //軸色
            axisSet.additionalLine1.tics = 0;                                          //第1補助線きざみ値
            axisSet.additionalLine1.ticLength = 5;                                     //第1補助線長さ
            axisSet.additionalLine1.ticThickness = 1;                                //第1補助線太さ
            axisSet.additionalLine1.ticColor.setIndex(ColorIndex.Black);               //第1補助線色
            axisSet.additionalLine1.ticFontAttr.fontSizePoint = 15.0;                   //第1補助線数値フォントサイズ(pt)
            axisSet.additionalLine1.ticFontAttr.fontColor.setIndex(ColorIndex.Transparence);    //第1補助線数値フォント色
            axisSet.additionalLine2.mTics = 5;                                         //第2補助線分割数
            axisSet.additionalLine2.mTicLength = 3;                                  //第2補助線長さ
            axisSet.additionalLine2.mTicThickness = 1;                               //第2補助線太さ
            axisSet.additionalLine2.mTicColor.setIndex(ColorIndex.Black);          //第2補助線色
            axisSet.arrowStyle = AxisArrowStyle.NoHeads;
            //X軸設定
            mngInfo.SetGraphAxisPack(axisSet);
            
            axisSet.axisSpec = AxisSpec.AxisY;                     //軸種別
            axisSet.title = "出現数";                              //軸表示名称
            axisSet.additionalLine1.tics = 5;                                          //第1補助線きざみ値
            //axisSet.additionalLine1.ticLength = 0;                                     //第1補助線長さ
            axisSet.additionalLine1.ticFontAttr.fontColor.setIndex(ColorIndex.Black);    //第1補助線数値フォント色
            //Y軸設定
            mngInfo.SetGraphAxisPack(axisSet);

            //描画象限設定
            mngInfo.SetGraphImageLimit(Quadrant.Quadrant1);

            //点設定
            GraphWeaver_PointPack pointPack = new GraphWeaver_PointPack();
            //系列0設定
            pointPack.style = PointStyle.Circle;                        //点のスタイル
            pointPack.pointColor.setIndex(ColorIndex.Transparence);     //点の色
            pointPack.size = 2.0;                                       //点のサイズ
            pointPack.bConnect = true;                                  //接続線の有無
            pointPack.lineColor.setIndex(ColorIndex.Red);               //接続線の色
            pointPack.lineTickness = 0.5;                               //接続線の太さ
            mngInfo.SetGraphPoint(0, pointPack);                           //点の設定

            //系列1設定
            pointPack.style = PointStyle.Circle;                        //点のスタイル
            pointPack.lineColor.setIndex(ColorIndex.Blue);              //接続線の色
            mngInfo.SetGraphPoint(1, pointPack);                           //点の設定

            mngInfo.SetCommand(GraphWeaverData.CommandID.drawGraphAll);
            if (!visioManager.DoCommand(docIndex, mngInfo))
            {
                MessageBox.Show("Not Execute!");
            }
            else
            {
                mess.Text = "描画中";
                button1.Text = "Abort";
                bExec = true;
            }
            button1.Enabled = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            bExec = false;
            if (thDrawNewData != null)
            {
                try
                {
                    thDrawNewData.Abort();
                }
                catch (Exception)
                {
                }
            }
            this.Close();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (visioManager != null)
            {
                if (visioApp != null)
                {
                    //ドキュメントを閉じる
                    visioManager.closeDocument(docIndex);
                }
                //管理マネージャ停止
                visioManager.stop();
            }
            try
            {
                //Visioを閉じる
                if (visioApp != null)
                {
                    visioApp.Quit();
                    Marshal.ReleaseComObject(visioApp); //COMオブジェクト解放
                    visioApp = null;
                }
            }
            catch (Exception)
            {

            }
        }
    }
}
							
戻る>>
GraphWeaver for Visio に関するお問い合せは まで。

※Microsoft及びOffice,Visio,Excell,PowerPointは米国Microsoft Corporationの登録商標です。