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_);
            }
        };
    }
Exemple #2
0
        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);

                }
            }
        }