첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170

TestProject.zip
다운로드

▶ MainForm.cs

using System;
using System.Drawing;
using System.IO;
using System.Xml;
using System.Windows.Forms;

using Lassalle.Flow;

namespace TestProject
{
    /// <summary>
    /// 메인 폼
    /// </summary>
    public partial class MainForm : Form
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainForm()

        /// <summary>
        /// 생성자
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            CreateDiagram(this.addFlow);

            this.serializeButton.Click   += serializeButton_Click;
            this.deserializeButton.Click += deserializeButton_Click;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private
        //////////////////////////////////////////////////////////////////////////////// Event

        #region Serialize 버튼 클릭시 처리하기 - serializeButton_Click(sender, e)

        /// <summary>
        /// Serialize 버튼 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void serializeButton_Click(object sender, EventArgs e)
        {
            SaveFile(this.addFlow, "c:\\AddFlow.xml");
        }

        #endregion
        #region Deserialize 버튼 클릭시 처리하기 - deserializeButton_Click(sender, e)

        /// <summary>
        /// Deserialize 버튼 클릭시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void deserializeButton_Click(object sender, EventArgs e)
        {
            LoadFile(this.addFlow, "c:\\AddFlow.xml");
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////// Function

        #region 다이어그램 생성하기 - CreateDiagram(addFlow)

        /// <summary>
        /// 다이어그램 생성하기
        /// </summary>
        /// <param name="addFlow">AddFlow</param>
        private void CreateDiagram(AddFlow addFlow)
        {
            Node    defaultNode    = new Node(0, 0, 0, 0, null, addFlow);
            Link    defaultLink    = new Link(null, null, null, addFlow);
            Caption defaultCaption = new Caption(0, 0, 0, 0, null, null, addFlow);

            // 노드들을 위한 디폴트 속성 값들을 설정한다.
            defaultNode.FillColor   = Color.LightYellow;
            defaultNode.ShadowStyle = ShadowStyle.RightBottom;

            // 링크들을 위한 디폴트 속성 값들을 설정한다.
            defaultLink.DrawColor = Color.Blue;
            defaultLink.BackMode  = BackMode.Opaque;

            // 캡션들을 위한 디폴트 속성 값들을 설정한다.
            defaultCaption.TextColor = Color.Blue;
            defaultCaption.DrawColor = Color.Transparent;
            defaultCaption.Font      = new Font("Calibri", 14);

            // 그림자를 갖는 3개의 노랑색 노드들을 생성한다.
            // 두번째 노드는 사각형이고
            // 세번째 노드는 Document 도형 스타일을 갖는다.
            Node node1 = new Node(50 , 70 , 80 , 80, "첫번째 노드", defaultNode);
            Node node2 = new Node(280, 180, 100, 80, "두번째 노드", defaultNode);
            Node node3 = new Node(50 , 230, 80 , 80, "세번째 노드", defaultNode);

            node2.ShapeFamily = ShapeFamily.Rectangle;

            node3.ShapeFamily  = ShapeFamily.Rectangle;
            node3.GraphicsPath = PredefinedGeometry.GetNodePath(NodeShapeStyle.Document, ShapeOrientation.Degree0);

            // 3개의 링크들을 생성한다.
            // 각 링크는 파랑색이고 BackMode 속성은 Opaque로 설정한다.
            // 두번째 링크는 베지어 스타일을 갖고, 텍스트 색상은 빨강색이고, 목적지 화살표 각도는 30도 이다.
            // 세번째 링크는 HVH 스타일이다.
            Link link1 = new Link(node1, node2, "링크 1", defaultLink);
            Link link2 = new Link(node2, node2, "링크 2", defaultLink);
            Link link3 = new Link(node2, node3, "링크 3", defaultLink);

            link2.LineStyle = LineStyle.Bezier;
            link2.TextColor = Color.Red;
            link2.ArrowDst  = PredefinedGeometry.GetLinkArrowStylePath(LinkArrowStyle.Arrow, 10, 14);

            link3.LineStyle = LineStyle.Orthogonal;

            // 1개의 캡션을 생성한다.
            Caption caption = new Caption(200, 30, 220, 30, "XML 직렬화/역직렬화", null, defaultCaption);

            // 다이어그램에 노드들과 링크들 및 캡션을 추가한다.
            addFlow.AddNode(node1);
            addFlow.AddNode(node2);
            addFlow.AddNode(node3);

            addFlow.AddLink(link1);
            addFlow.AddLink(link2);
            addFlow.AddLink(link3);

            addFlow.AddCaption(caption); 

            // 첫번째 링크에 2개의 포인트들을 추가한다.
            link1.AddPoint(new PointF(90 , 200));
            link1.AddPoint(new PointF(220, 60 ));

            // 재귀적 링크를 늘린다.
            link2.SetPoint(new PointF(280, 70), 1);
            link2.SetPoint(new PointF(420, 70), 2); 
        }

        #endregion

        #region 파일 로드하기 - LoadFile(addFlow, filePath)

        /// <summary>
        /// 파일 로드하기
        /// </summary>
        /// <param name="addFlow">AddFlow</param>
        /// <param name="filePath">파일 경로</param>
        private void LoadFile(AddFlow addFlow, string filePath)
        {
            addFlow.Clear();

            FileStream fileStream = new FileStream(filePath, FileMode.Open);

            XmlTextReader xmlTextReader = new XmlTextReader(fileStream);

            AddFlowHelper.Deserialize(xmlTextReader, addFlow);

            fileStream.Close();
        }

        #endregion
        #region 파일 저장하기 - SaveFile(addFlow)

        /// <summary>
        /// 파일 저장하기
        /// </summary>
        /// <param name="addFlow">AddFlow</param>
        /// <param name="filePath">파일 경로</param>
        private void SaveFile(AddFlow addFlow, string filePath)
        {
            FileStream fileStream = new FileStream(filePath, FileMode.Create);

            XmlTextWriter xmlTextWriter = new XmlTextWriter(fileStream, null);

            AddFlowHelper.Searialize(xmlTextWriter, addFlow);

            fileStream.Close();

            addFlow.ResetChangedFlag();
        }

        #endregion
    }
}
728x90
반응형
그리드형(광고전용)
Posted by 사용자 icodebroker

댓글을 달아 주세요