protected override void SetupChart()
        {
            this.flexChart1.Header.Content    = "Relationship between Production and Cost";
            this.flexChart1.Header.Style.Font = StyleInfo.ChartHeaderFont;

            this.flexChart1.DataSource = DataService.GetUnitCostData();
            this.flexChart1.ChartType  = ChartType.LineSymbols;
            this.flexChart1.BindingX   = "Units";
            var closePrice = new Series
            {
                Binding = "Cost",
                Name    = "Cost",
            };

            _trendLine = new C1.Win.Chart.TrendLine()
            {
                Name    = "Trend Line",
                Binding = "Cost",
                Order   = 4,
                FitType = FitType.Linear,
            };
            this.flexChart1.Series.Add(closePrice);
            this.flexChart1.Series.Add(_trendLine);
            this.flexChart1.AxisX.Title           = "Quantity";
            this.flexChart1.AxisX.TitleStyle.Font = StyleInfo.AxisTitleFont;
            this.flexChart1.AxisY.Title           = "Per Unit Cost";
            this.flexChart1.AxisY.TitleStyle.Font = StyleInfo.AxisTitleFont;
            this.flexChart1.Rendered   += FlexChart1_Rendered;
            this.flexChart1.MouseUp    += (s, e) => { _clickedItem = null; };
            this.flexChart1.MouseLeave += (s, e) => { _clickedItem = null; };
            this.flexChart1.MouseDown  += FlexChart1_MouseDown;
            this.flexChart1.MouseMove  += FlexChart1_MouseMove;
        }
        private void FlexChart1_MouseDown(object sender, MouseEventArgs e)
        {
            var ht = flexChart1.HitTest(new Point(e.X, e.Y));

            if (ht.Distance < 3 && ht.X != null && ht.Y != null)
            {
                _clickedItem = (UnitsCost)ht.Item;
            }
        }
예제 #3
0
        private List <PointF> GetArrowCalloutPoints(Polygon callout, UnitsCost dataCord)
        {
            var textSize = _renderEngine.MeasureString(callout.Content);
            var yMax     = this.flexChart1.AxisY.ActualMax;
            var xMax     = this.flexChart1.AxisX.ActualMax;
            var yMin     = this.flexChart1.AxisY.ActualMin;
            var xMin     = this.flexChart1.AxisX.ActualMin;
            var points   = new List <PointF>();
            var halfX    = (float)textSize.Width / 2;
            var halfY    = (float)textSize.Height / 2;

            if ((yMax - dataCord.Cost) > (dataCord.Cost - yMin))
            {
                //Above the point
                if ((xMax - dataCord.Units) > (dataCord.Units - xMin))
                {
                    //Above and Right to the Point
                    points.Add(new PointF(0, 0));
                    points.Add(new PointF(5, -5));
                    points.Add(new PointF(7, -5 + 2));
                    points.Add(new PointF(7 + halfX - 8, -7 - 10));
                    points.Add(new PointF(7, -7 - 10));
                    points.Add(new PointF(7, -7 - 10 - halfY * 2));
                    points.Add(new PointF(7 + halfX * 2, -7 - 10 - halfY * 2));
                    points.Add(new PointF(7 + halfX * 2, -7 - 10));
                    points.Add(new PointF(7 + halfX + 4, -7 - 10));
                    points.Add(new PointF(8, -5 + 3));
                    points.Add(new PointF(10, 0));
                    callout.ContentCenter = new PointF(7 + halfX, -17 - halfY);
                }
                else
                {
                    //Above and Left to the point
                    points.Add(new PointF(0, 0));
                    points.Add(new PointF(-5, -5));
                    points.Add(new PointF(-7, -5 + 2));
                    points.Add(new PointF(-7 - halfX + 8, -7 - 10));
                    points.Add(new PointF(-7, -7 - 10));
                    points.Add(new PointF(-7, -7 - 10 - halfY * 2));
                    points.Add(new PointF(-7 - halfX * 2, -7 - 10 - halfY * 2));
                    points.Add(new PointF(-7 - halfX * 2, -7 - 10));
                    points.Add(new PointF(-7 - halfX - 4, -7 - 10));
                    points.Add(new PointF(-8, -5 + 3));
                    points.Add(new PointF(-10, 0));
                    callout.ContentCenter = new PointF(-7 - halfX, -17 - halfY);
                }
            }
            else
            {
                //Below the point
                if ((xMax - dataCord.Units) > (dataCord.Units - xMin))
                {
                    //Below and Right to the Point
                    points.Add(new PointF(0, 0));
                    points.Add(new PointF(5, +5));
                    points.Add(new PointF(7, +5 - 2));
                    points.Add(new PointF(7 + halfX - 8, +7 + 10));
                    points.Add(new PointF(7, +7 + 10));
                    points.Add(new PointF(7, +7 + 10 + halfY * 2));
                    points.Add(new PointF(7 + halfX * 2, +7 + 10 + halfY * 2));
                    points.Add(new PointF(7 + halfX * 2, +7 + 10));
                    points.Add(new PointF(7 + halfX + 4, +7 + 10));
                    points.Add(new PointF(8, +5 - 3));
                    points.Add(new PointF(10, 0));
                    callout.ContentCenter = new PointF(7 + halfX, +17 + halfY);
                }
                else
                {
                    //Below and Left to the point
                    points.Add(new PointF(0, 0));
                    points.Add(new PointF(-5, +5));
                    points.Add(new PointF(-7, +5 - 2));
                    points.Add(new PointF(-7 - halfX + 8, +7 + 10));
                    points.Add(new PointF(-7, +7 + 10));
                    points.Add(new PointF(-7, +7 + 10 + halfY * 2));
                    points.Add(new PointF(-7 - halfX * 2, +7 + 10 + halfY * 2));
                    points.Add(new PointF(-7 - halfX * 2, +7 + 10));
                    points.Add(new PointF(-7 - halfX - 4, +7 + 10));
                    points.Add(new PointF(-8, +5 - 3));
                    points.Add(new PointF(-10, 0));
                    callout.ContentCenter = new PointF(-7 - halfX, +17 + halfY);
                }
            }
            return(points);
        }