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

728x90
반응형
728x170

TestProject.zip
다운로드

▶ ChartHelper.cs

using System;
using System.Collections.Generic;
using System.Drawing;

using Arction.WinForms.Charting;
using Arction.WinForms.Charting.Axes;
using Arction.WinForms.Charting.Views.ViewXY;

namespace TestProject
{
    /// <summary>
    /// 차트 헬퍼
    /// </summary>
    public static class ChartHelper
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Public

        #region Field

        /// <summary>
        /// 단일 색상 리스트
        /// </summary>
        public static List<Color> SolidColorList = new List<Color>
        {
            Color.FromArgb(187, 28 , 0 ),
            Color.FromArgb(222, 54 , 11),
            Color.FromArgb(199, 86 , 10),
            Color.FromArgb(255, 160, 0 ),
            Color.FromArgb(255, 124, 0 )
        };

        /// <summary>
        /// 반투명 색상 리스트
        /// </summary>
        public static List<Color> TranslucentColorList = new List<Color>
        {
            Color.FromArgb(180, SolidColorList[0]),
            Color.FromArgb(180, SolidColorList[1]),
            Color.FromArgb(180, SolidColorList[2]),
            Color.FromArgb(180, SolidColorList[3]),
            Color.FromArgb(180, SolidColorList[4])
        };

        #endregion

        //////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// 복구 정보
        /// </summary>
        private static RestoreInfo _restoreInfo;

        /// <summary>
        /// 배경 색상
        /// </summary>
        private static Color _backgroundColor = Color.FromArgb(255, 30, 30, 30);

        /// <summary>
        /// 제목 색상
        /// </summary>
        private static Color _titleColor = Color.FromArgb(255, 249, 202, 3);

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Static
        //////////////////////////////////////////////////////////////////////////////// Public

        #region 리스트 데이터 지우기 - ClearListData<TItem>(sourceList)

        /// <summary>
        /// 리스트 데이터 지우기
        /// </summary>
        /// <typeparam name="TItem">항목 타입</typeparam>
        /// <param name="sourceList">소스 리스트</param>
        public static void ClearListData<TItem>(List<TItem> sourceList) where TItem : IDisposable
        {
            if(sourceList == null)
            {
                return;
            }

            while(sourceList.Count > 0)
            {
                int lastIndex = sourceList.Count - 1;

                TItem item = sourceList[lastIndex];

                sourceList.RemoveAt(lastIndex);

                if(item != null)
                {
                    (item as IDisposable).Dispose();
                }
            }
        }

        #endregion

        #region 다크/플랫 스타일 설정하기 - SetDarkFlatStyle(chart, minorTickOption)

        /// <summary>
        /// 다크/플랫 스타일 설정하기
        /// </summary>
        /// <param name="chart">차트</param>
        /// <param name="minorTickOption">작은 눈금 옵션</param>
        public static void SetDarkFlatStyle(LightningChartUltimate chart, MinorTickOption minorTickOption = MinorTickOption.None)
        {
            _restoreInfo = new RestoreInfo(chart);

            chart.Background.Color        = _backgroundColor;
            chart.Background.GradientFill = GradientFill.Solid;

            chart.ViewXY.GraphBackground.Color        = Color.FromArgb(255, 20, 20, 20);
            chart.ViewXY.GraphBackground.GradientFill = GradientFill.Solid;

            chart.Title.Color          = _titleColor;
            chart.Title.MouseHighlight = MouseOverHighlight.None;

            bool showXMinotTick = false;
            bool showYMinorTick = false;

            if(minorTickOption == MinorTickOption.Both)
            {
                showXMinotTick = showYMinorTick = true;
            }
            else if(minorTickOption == MinorTickOption.OnlyX)
            {
                showXMinotTick = true;
            }
            else if(minorTickOption == MinorTickOption.OnlyY)
            {
                showYMinorTick = true;
            }

            foreach(AxisY axisY in chart.ViewXY.YAxes)
            {
                axisY.Title.Color          = _titleColor;
                axisY.Title.MouseHighlight = MouseOverHighlight.None;

                axisY.MajorGrid.Color   = Color.FromArgb(35, 255, 255, 255);
                axisY.MajorGrid.Pattern = LinePattern.Solid;

                axisY.MinorDivTickStyle.Visible = showYMinorTick;
            }

            foreach(AxisX axisX in chart.ViewXY.XAxes)
            {
                axisX.Title.Color          = _titleColor;
                axisX.Title.MouseHighlight = MouseOverHighlight.None;

                axisX.MajorGrid.Color   = Color.FromArgb(35, 255, 255, 255);
                axisX.MajorGrid.Pattern = LinePattern.Solid;

                axisX.MinorDivTickStyle.Visible = showXMinotTick;
            }

            if(chart.ViewXY.LegendBoxes != null)
            {
                foreach(LegendBoxXY legendBox in chart.ViewXY.LegendBoxes)
                {
                    legendBox.Shadow.Visible = false;
                }
            }
        }

        #endregion
        #region 다크 플랫 스타일 취소하기 - CancelDarkFlatStyle(chart)

        /// <summary>
        /// 다크 플랫 스타일 취소하기
        /// </summary>
        /// <param name="chart">차트</param>
        public static void CancelDarkFlatStyle(LightningChartUltimate chart)
        {
            if(_restoreInfo != null)
            {
                if(chart != null)
                {
                    chart.BeginUpdate();

                    chart.Background.Color        = _restoreInfo.ChartColor;
                    chart.Background.GradientFill = _restoreInfo.ChartGradientFill;

                    chart.ViewXY.GraphBackground.Color        = _restoreInfo.ViewColor;
                    chart.ViewXY.GraphBackground.GradientFill = _restoreInfo.viewGradientFill;

                    foreach(var yAxis in chart.ViewXY.YAxes)
                    {
                        yAxis.MajorGrid.Color   = _restoreInfo.GridColor;
                        yAxis.MajorGrid.Pattern = _restoreInfo.GridLinePattern;

                        yAxis.MinorDivTickStyle.Visible = true;
                    }

                    foreach(var xAxis in chart.ViewXY.XAxes)
                    {
                        xAxis.MajorGrid.Color   = _restoreInfo.GridColor;
                        xAxis.MajorGrid.Pattern = _restoreInfo.GridLinePattern;

                        xAxis.MinorDivTickStyle.Visible = true;
                    }

                    chart.EndUpdate();
                }
            }
        }

        #endregion
    }
}

 

▶ MainForm.cs

using System.Drawing;
using System.Windows.Forms;

using Arction.WinForms.Charting;
using Arction.WinForms.Charting.Axes;
using Arction.WinForms.Charting.SeriesXY;
using Arction.WinForms.Charting.Views.ViewXY;

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

        #region Field

        /// <summary>
        /// 차트
        /// </summary>
        private LightningChartUltimate chart = null;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainForm()

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

            InitializeChart();
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region 다각형 추가하기 - AddPolygon(chart, title, color, pointArray, allowIntersection)

        /// <summary>
        /// 다각형 추가하기
        /// </summary>
        /// <param name="chart">차트</param>
        /// <param name="title">제목</param>
        /// <param name="color">색상</param>
        /// <param name="pointArray">포인트 배열</param>
        /// <param name="allowIntersection">교차 허용 여부</param>
        private void AddPolygon(LightningChartUltimate chart, string title, Color color, PointDouble2D[] pointArray, bool allowIntersection)
        {
            PolygonSeries series = new PolygonSeries(chart.ViewXY, chart.ViewXY.XAxes[0], chart.ViewXY.YAxes[0]);

            series.Fill.Color           = Color.FromArgb(200, color);
            series.Fill.GradientFill    = GradientFill.Solid;
            series.Title.Visible        = true;
            series.Title.Color          = Color.FromArgb(255, 30, 30, 30);
            series.Title.Text           = title;
            series.Title.Shadow.Style   = TextShadowStyle.DropShadow;
            series.Points               = pointArray;
            series.IntersectionsAllowed = allowIntersection;

            chart.ViewXY.PolygonSeries.Add(series);
        }

        #endregion
        #region 차트 초기화하기 - InitializeChart()

        /// <summary>
        /// 차트 초기화하기
        /// </summary>
        private void InitializeChart()
        {
            this.chart = new LightningChartUltimate();
            
            this.chart.BeginUpdate();
            
            this.chart.Name   = "chart";
            this.chart.Parent = this;
            this.chart.Dock   = DockStyle.Fill;

            this.chart.Title.Font = Font;
            this.chart.Title.Text = "다각형 차트";

            this.chart.RenderOptions.AntiAliasLevel = 4;

            ViewXY viewXY = this.chart.ViewXY;

            AxisX axisX = viewXY.XAxes[0];

            axisX.Title.Font         = Font;
            axisX.Title.Text         = "X축";
            axisX.ValueType          = AxisValueType.Number;
            axisX.ScrollMode         = XAxisScrollMode.None;

            AxisY axisY = viewXY.YAxes[0];

            axisY.Title.Font = Font;
            axisY.Title.Text = "Y축";

            ChartHelper.SetDarkFlatStyle(this.chart);

            Color color1 = Color.FromArgb(255, 192, 0);
            Color color2 = Color.FromArgb(255, 94 , 0);

            AddPolygon
            (
                this.chart,
                "다각형 A",
                ChartTools.CalcGradient(color1, color2, 0),
                new PointDouble2D[]
                {
                    new PointDouble2D(0, 0 ),
                    new PointDouble2D(0, 10),
                    new PointDouble2D(8, 10),
                    new PointDouble2D(8, 8 ),
                    new PointDouble2D(4, 8 ),
                    new PointDouble2D(3, 7 ),
                    new PointDouble2D(3, 0 ),
                },
                false
            );

            AddPolygon
            (
                this.chart,
                "다각형 B",
                ChartTools.CalcGradient(color1, color2, 25),
                new PointDouble2D[]
                {
                    new PointDouble2D(4, 8),
                    new PointDouble2D(8, 8),
                    new PointDouble2D(8, 6),
                    new PointDouble2D(3, 6),
                    new PointDouble2D(3, 7),
                },
                false
            );

            AddPolygon
            (
                this.chart,
                "다각형 C",
                ChartTools.CalcGradient(color1, color2, 50),
                new PointDouble2D[]
                {
                    new PointDouble2D(3, 6),
                    new PointDouble2D(8, 6),
                    new PointDouble2D(8, 2),
                    new PointDouble2D(5, 2),
                    new PointDouble2D(6, 4),
                    new PointDouble2D(3, 4),
                },
                false
            );

            AddPolygon
            (
                this.chart,
                "다각형 D",
                ChartTools.CalcGradient(color1, color2, 75),
                new PointDouble2D[]
                {
                    new PointDouble2D(3, 4),
                    new PointDouble2D(6, 4),
                    new PointDouble2D(5, 2),
                    new PointDouble2D(8, 2),
                    new PointDouble2D(8, 0),
                    new PointDouble2D(3, 0),
                },
                false
            );

            AddPolygon
            (
                this.chart,
                "다각형 E",
                ChartTools.CalcGradient(color1, color2, 100),
                new PointDouble2D[]
                {
                    new PointDouble2D(6  , 12  ),
                    new PointDouble2D(5  ,  9.5),
                    new PointDouble2D(6.5,  5  ),
                    new PointDouble2D(7.5, 11.5),
                    new PointDouble2D(8.5,  9  ),
                    new PointDouble2D(7.5,  5  ),
                },
                true
            );

            viewXY.ZoomToFit();

            LegendBoxXY legendBoxXY = viewXY.LegendBoxes[0];

            legendBoxXY.Position = LegendBoxPositionXY.SegmentBottomRight;

            this.chart.EndUpdate();
        }

        #endregion
    }
}
728x90
반응형
그리드형
Posted by 사용자 icodebroker

댓글을 달아 주세요