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; } }
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); }