返回首页

简介
这是一个附加的Microsoft Web图表控制。这是一个新的系列类型,绘制Bezier曲线,根据你传递的点。使用代码
我最近需要在一个web应用程序的贝塞尔图。微软的网络图控制(这实际上是登打士图表控件)是一个功能强大的控制,所以我说我需要的功能。贝塞尔曲线本身的计算,我用从Tolga Birdal CodeProject上的文章中的代码,你可以找到他的工作。我自己的代码封装在一个类,称为CalcBezierCurve。然后,我创建了一个新的类BezierSeries从System.Web.UI.DataVisualization.Charting.Series继承。所以,你可以使用它在任何Web图表的控制图表。

/// <span class="code-SummaryComment"><summary>

</span>///<span class="code-comment"> You can use this Series like any other series in the MS web charting control

</span>/// <span class="code-SummaryComment"></summary>

</span>public class BezierSeries : Series

{

    #region fields



    private int _pointsOnCurve = 1000;

    private List<DataPoint> _bezierPoints = new List<DataPoint>();



    #endregion



    #region properties



    /// <span class="code-SummaryComment"><summary>

</span>    ///<span class="code-comment"> Defines how many points the resulting curve will have;

</span>    ///<span class="code-comment"> min = 2, must eb an even number

</span>    /// <span class="code-SummaryComment"></summary>

</span>    public int PointsOnCurve

    {

        get { return _pointsOnCurve; }

        set

        {

            //<span class="code-comment">min value is 2

</span>            if (value < 2)

            {

                value = 2;

            }



            //<span class="code-comment">it must be an even number

</span>            if (value % 2 == 1)

            {

                value++;

            }



            _pointsOnCurve = value;

        }

    }



    /// <span class="code-SummaryComment"><summary>

</span>    ///<span class="code-comment"> Points that should be used to calculate the bezier graph

</span>    /// <span class="code-SummaryComment"></summary>

</span>    public List<DataPoint> BezierPoints

    {

        get

        {

            return _bezierPoints;

        }

        set

        {

            if (value != null)

            {

                _bezierPoints = value;



                List<double> ptList = new List<double>();



                //<span class="code-comment">convert bezier points to flat list

</span>                foreach (DataPoint point in value)

                {

                    ptList.Add(point.XValue);

                    ptList.Add(point.YValues[0]);

                }



                //<span class="code-comment">bezier curve calculation            

</span>                CalcBezierCurve bc = new CalcBezierCurve();

                double[] ptind = new double[ptList.Count];

                double[] p = new double[PointsOnCurve];

                ptList.CopyTo(ptind, 0);

                bc.Bezier2D(ptind, (PointsOnCurve) / 2, p);



                //<span class="code-comment">bezier curve points

</span>                this.ChartType = SeriesChartType.Line;



                for (int i = 0; i < p.Count(); i = i + 2)

                {

                    this.Points.AddXY(p[i], p[i + 1]);

                }

            }

        }

    }



    #endregion

}

的用法很简单(我假设你有一个与它称为Chart1的一个图表控件的Web窗体): {C}
是这样的结果:
{S0}历史2011-03-17 V 1.0:初始版本。

回答

评论会员:all_in_flames 时间:2012/01/27
非常清晰,简洁的代码添加贝塞尔系列到任何Web图表
评论会员:莱纳Halanek 时间:2012/01/27
感谢
____________________________________________________________________{ BR}永远不要低估大集团愚蠢的人的力量
评论会员:dherrmann 时间:2012/01/27
喜莱纳,

这很有趣,用英语写的,因为我生活在奥地利的太...但是我们可以尝试... 我翻译到VB的解决方案,并在WinForms中使用它。它运行时,我用它首次图表,计算第二次假点
我的图是预定义的颜色,背景等。因此,我不
Chart1.ChartAreas.Clear()

'bezier points chart

Dim bezierPointsArea As New ChartArea("BezierPointsArea")

Chart1.ChartAreas.Add(bezierPointsArea)
图表设计应幸免于难。
图表绑定到DataTable中,我不时过滤器和图表应改变与新的价值观。但它只是函数的第一次,我说。
我试图bezierPoints.Clear(),但没有效果。

你有一个想法,吗? (我可以通过邮件发送给您的VB版本,当你有兴趣...){ BR}
至于
迪特里希
评论会员:莱纳Halanek 时间:2012/01/27
您好,

看起来像在我的代码中的错误。我从来没有想过的可能性,数据会有所改变{S1}。所以我想设置BezierPoints第二次,然后您的图表是错误的?问题是,我不删除,如果你设置了新的BezierPoints的SeriesPoints。在接下来的日子里,我会尽bugifx。在此期间只需添加BezierPoints二传手线this.Points.Clear(),在开始之前如果(值!= NULL)。一个小的话,如果你设置新BezierPoints,你必须设置一个新的列表,而不仅仅是加分,以现有的列表,否则在二传手的代码将不火。

HTH,莱纳
____________________________________________________________________{ BR}永远不要低估愚蠢的人在大集团的力量。
上周三,3月23日,2011年6:27 AM
修改
评论会员:dherrmann 时间:2012/01/27
您好,

这一点的代码行(this.Points.Clear())吧!
TIPP为感谢!
从萨尔茨堡的问候... ...
迪特里希
评论会员:莱纳Halanek 时间:2012/01/27
很高兴我能帮助。请不要忘了评论文章S2}

莱纳
____________________________________________________________________{ BR}永远不要低估大集团愚蠢的人的力量
评论会员:dherrmann 时间:2012/01/27
喜莱纳,
这很有趣,用英语写的,因为我生活在奥地利的太...但是我们可以尝试... 我翻译到VB的解决方案,并在WinForms中使用它。它运行时,我用它首次图表,计算第二次假点
我的图是预定义的颜色,背景等。因此,我不
Chart1.ChartAreas.Clear()

'bezier points chart

Dim bezierPointsArea As New ChartArea("BezierPointsArea")

Chart1.ChartAreas.Add(bezierPointsArea)
图表设计应幸免于难。
图表绑定到DataTable中,我不时过滤器和图表应改变与新的价值观。但它只是函数的第一次,我说。
我试图bezierPoints.Clear(),但没有效果。

你有一个想法,吗? (我可以把你的VB版本通过邮件...){ BR}
至于
迪特里希
评论会员:莱纳Halanek 时间:2012/01/27
双岗。我来回答下一个
____________________________________________________________________{ BR}不要低估了愚蠢的人在大集团的力量
评论会员:。 时间:2012/01/27