public void Create(bool displayDottedRedLine_ = true) { EstablishDefaultTooltip((x) => { string ret = null; try { if (((string)x["Type"]) == "Vertical") { // vertical line ret = string.Format("{0}",x["x-value"]); } else { // series ret = string.Format("{0} / t.{1} / {2}", x["SERIES_LABEL"], x["ITEM_LABEL"], Convert.ToDouble(x["DATA_VALUE"]).ToString("##0.0##")); } } catch { } return ret; }); if (displayDottedRedLine_) Chart.FillSceneGraph += (a, b) => { try { var Xs = new List<int>(); var Ys = new List<int>(); var Xs2 = new List<int>(); var Ys2 = new List<int>(); var verticalList = new List<Tuple<string, Point>>(); var topy = 0; var bottomy = 0; foreach (Primitive p in b.SceneGraph) { if (p.GetType() == typeof(Polyline) && p.Row == 0 && p.Column == 0) { foreach (DataPoint dp in ((Polyline)p).points) { if (dp.DataPoint != null) { var xvalue = dp.DataPoint.Label; var yvalue = dp.Value; if (VerticalLinesXValuesLabels != null && VerticalLinesXValuesLabels.ContainsKey(xvalue)) { verticalList.Add(new Tuple<string, Point>(VerticalLinesXValuesLabels[xvalue], dp.point)); } } } } var gridLine = p as Line; if (gridLine == null) continue; if (VerticalLineShift != 0 && gridLine.p1.Y == gridLine.p2.Y) { Xs2.Add(gridLine.MidPoint.X); Ys2.Add(gridLine.MidPoint.Y); } else { Xs.Add(gridLine.MidPoint.X); Ys.Add(gridLine.MidPoint.Y); } // find a vertical grid max and min coordinates if (gridLine.p1.X == gridLine.p2.X) { topy = gridLine.p2.Y; bottomy = gridLine.p1.Y; } } if (verticalList != null) { int i = 1; foreach (var dp in verticalList) { Infragistics.UltraChart.Shared.Styles.LineStyle ls = new Infragistics.UltraChart.Shared.Styles.LineStyle(); //ls.StartStyle = Infragistics.UltraChart.Shared.Styles.LineCapStyle.DiamondAnchor; //ls.EndStyle = Infragistics.UltraChart.Shared.Styles.LineCapStyle.DiamondAnchor; ls.DrawStyle = Infragistics.UltraChart.Shared.Styles.LineDrawStyle.Dot; LineWithTooltip ln = new LineWithTooltip(new Point(dp.Item2.X, bottomy), new Point(dp.Item2.X, topy), ls); //ln.PE.Fill = ColorAttribute.GetColor(i); ln.PE.Stroke = ColorAttribute.GetColor(i); ln.PE.StrokeWidth = 3; ln.Caps = PCaps.HitTest | PCaps.Skin | PCaps.Tooltip; ln.Chart = b.ChartCore.ChartType; ln.Layer = b.ChartCore.GetChartLayer(); // add custom tooltip value to display var myHashTable1 = new Hashtable(); myHashTable1.Add("x-value", dp.Item1); myHashTable1.Add("Type", "Vertical"); ln.Tags = myHashTable1; b.SceneGraph.Add(ln); i++; } } if (Xs.Count < 5 || Ys.Count < 5) return; QuickSort.Sort(Xs); QuickSort.Sort(Ys); int xIndex2 = 0; int yIndex2 = 0; if (Xs2.Any() && Ys2.Any()) { QuickSort.Sort(Xs2); QuickSort.Sort(Ys2); xIndex2 = ((Xs2.Count - 1)/2) + 1; yIndex2 = ((Ys2.Count - 1)/2) + 1; } var xIndex = ((Xs.Count - 1)/2) + 1; var yIndex = ((Ys.Count - 1)/2) + 1; foreach (Primitive p in b.SceneGraph) { var gridline = p as Line; if (gridline == null) continue; if (VerticalLineShift != 0) { if (Math.Abs(gridline.MidPoint.X - Xs[VerticalLineShift]) < 2 && gridline.MidPoint.Y == Ys[yIndex]) { // this is the vertical line if (gridline.p1.Y == gridline.p2.Y) { continue; } gridline.PE.Stroke = Color.Red; gridline.PE.StrokeWidth = 3; } if (gridline.MidPoint.X == Xs2[xIndex2] && gridline.MidPoint.Y == Ys[yIndex2]) { // this is the horizonetal line if (!m_chartCentredYAxis && gridline.p1.Y == gridline.p2.Y) { continue; } if (gridline.p1.Y != gridline.p2.Y) continue; gridline.PE.Stroke = Color.LightSlateGray; gridline.PE.StrokeWidth = 2; } } if (VerticalLineShift == 0 && Math.Abs(gridline.MidPoint.X - Xs[xIndex]) < 2 && gridline.MidPoint.Y == Ys[yIndex]) { // if we're not centering the graph on the y-axes (when displaying level rather than difference to event), then // don't draw the horizontal if (!m_chartCentredYAxis && gridline.p1.Y == gridline.p2.Y) { continue; } gridline.PE.Stroke = Color.Red; gridline.PE.StrokeWidth = 3; } //if (gridline.MidPoint.X == Xs[0] && gridline.MidPoint.Y == Ys[yIndex]) // gridline.PE.Stroke = Color.Purple; //if (gridline.MidPoint.X == Xs[xIndex] && gridline.MidPoint.Y == Ys[Ys.Count - 1]) // gridline.PE.Fill = Color.Yellow; } } catch (Exception ex_) { Logger.Error("Error calling Create() on SeasonalityChartSingle", typeof (SeasonalityChartSingle), ex_); } }; }
private void ultraChart1_FillSceneGraph(object sender, Infragistics.UltraChart.Shared.Events.FillSceneGraphEventArgs e) { if (MyList != null) MyList.Clear(); foreach (Primitive pr in e.SceneGraph) { if (pr.GetType() == typeof(Polyline) && pr.Row == 0 && pr.Column == 0) { foreach (DataPoint dp in ((Polyline)pr).points) { MyLineObject mlo = new MyLineObject(); mlo.Line1 = dp.point; MyList.Add(mlo); } } if (pr.GetType() == typeof(Polyline) && pr.Row == 1 && pr.Column == 1) { int i = 0; foreach (DataPoint dp in ((Polyline)pr).points) { MyList[i].Line2 = dp.point; i++; } } // change gridline to red //var gridline = pr as Line; //if (gridline == null) continue; //gridline.PE.Stroke = Color.Red; //gridline.PE.StrokeWidth = 3; } if (MyList != null) { foreach (MyLineObject dp in MyList) { Infragistics.UltraChart.Shared.Styles.LineStyle ls = new Infragistics.UltraChart.Shared.Styles.LineStyle(); //ls.StartStyle = Infragistics.UltraChart.Shared.Styles.LineCapStyle.DiamondAnchor; //ls.EndStyle = Infragistics.UltraChart.Shared.Styles.LineCapStyle.DiamondAnchor; ls.DrawStyle = Infragistics.UltraChart.Shared.Styles.LineDrawStyle.Dot; LineWithTooltip ln = new LineWithTooltip(dp.Line1, dp.Line2, ls); ln.PE.StrokeWidth = 2; ln.PE.Fill = Color.Yellow; ln.PE.Stroke = Color.Yellow; ln.Caps = PCaps.HitTest | PCaps.Skin | PCaps.Tooltip; ln.Chart = e.ChartCore.ChartType; ln.Layer = e.ChartCore.GetChartLayer(); e.SceneGraph.Add(ln); } } }