Page 1 of 1

Annotation tool drawing order

Posted: Thu Jul 03, 2014 9:57 am
by 15666633
Hi, i'm using Cursor tool and annotation tool and color line tool in my programm. I use AfterDrawEvent to annotation and some extra objects on the chart. Here's the the functions that acts on AfterDraw

Code: Select all

private void OnAfterDraw(object sender, Steema.TeeChart.Drawing.Graphics3D g)
    {
      foreach (TickMark tckMark in m_TickMarksList )
      {
        if (tckMark.Value > TimeAxis.Minimum && tckMark.Value < TimeAxis.Maximum)
        {
          g.Font.Color = Color.Black;
          tckMark.GeniuneTickMark.Active = true;
          DrawtickMarkLabel(g, tckMark.GeniuneTickMark);
          PointTickMarkIntersections(g, tckMark.GeniuneTickMark);
        }
        else
          tckMark.GeniuneTickMark.Active = false;
      }

      if (m_LevelHelper != null)
      {
        DrawLevelLabel(g, m_LevelHelper);
      }

      if( m_TChart.Tools.IndexOf( m_CursorTool ) != -1 )
      {
        DrawCursorToolMarks( g );
        MakeAnnotationForCursorTool();
      }

      if (m_ChartZoomed)
      {
        Helper.RecaclulateAxisIncrement(5, TimeAxis);
      }
    }
Here tckMark.GeniuneTickMark is color line tool, DrawtickMarkLabel(g, tckMark.GeniuneTickMark), PointTickMarkIntersections(g, tckMark.GeniuneTickMark), DrawCursorToolMarks( g ) - draws text and circles on the chart, and MakeAnnotationForCursorTool() is used to fill annotation with text. So in my opinion the order of drawing is such, that anootation tool must be drawn the last one, and be the "top most" one the image, but i can see, that circles and text are drawn later than annotation tool. so i get the picture attached. What should i do to make annotation tool to be drawn the last one?
annotation problem pic.JPG
annotation problem pic.JPG (199.64 KiB) Viewed 5522 times

Re: Annotation tool drawing order

Posted: Fri Jul 04, 2014 8:19 am
by Christopher
Petr,

My suggestion is that you do your custom drawing in an event that occurs before the AfterDraw event. There are several options, e.g.

Code: Select all

    private void InitializeChart()
    {
      Bar bar = new Bar(tChart1.Chart);
      bar.FillSampleValues();

      Annotation anno = new Annotation(tChart1.Chart);
      anno.Shape.CustomPosition = true;
      anno.Shape.Left = 200;
      anno.Shape.Top = 100;
      anno.Text = "Annotation" + Utils.NewLine + "New" + Utils.NewLine + "Text";

      tChart1.AfterDraw += tChart1_AfterDraw;

      tChart1.BeforeDrawSeries += tChart1_BeforeDrawSeries;

      bar.AfterDrawValues += bar_AfterDrawValues;
    }

    void bar_AfterDrawValues(object sender, Graphics3D g)
    {
      g.Font.Color = Color.White;
      g.TextOut(205, 105, "AfterDrawValues");
    }

    void tChart1_BeforeDrawSeries(object sender, Graphics3D g)
    {
      g.Font.Color = Color.Red;
      g.TextOut(205, 115, "BeforeDrawSeries");
    }

    void tChart1_AfterDraw(object sender, Graphics3D g)
    {
      g.Font.Color = Color.Pink;
      g.TextOut(205, 125, "AfterDraw");
    }