Page 1 of 1

FillRegion tool with sampled points

Posted: Mon Apr 16, 2012 10:24 am
by 13051032
I have a T-chart with FillRegion tool. How can make sure that the fill region uses only the data points that are fed to the series, and NOT the ones interpolated between the actual data points.

Thanks and best regards,

Re: FillRegion tool with sampled points

Posted: Tue Apr 17, 2012 11:18 am
by 10050769
Hello asupriya,

I am not sure understand well as you want achieve, but I think would be very helpful for you, use SeriesBandTool instead of SeriesRegionTool as do in next code:

Code: Select all

 public Form1()
        {
            InitializeComponent();
            InitializeChart();
        }
        private Steema.TeeChart.Styles.Line line1,line2;
        private Steema.TeeChart.Functions.Smoothing smoothing1;
        private Steema.TeeChart.Tools.SeriesBandTool BandTool;
        private void InitializeChart()
        {
            tChart1.Aspect.View3D = false;

            line1 = new Line(tChart1.Chart);
            line2 = new Line(tChart1.Chart);
            smoothing1 = new Smoothing();
            line1.Add(new int[] { 4, 9, 5, 7, 2, 12, 15 });
            line1.Color = Color.YellowGreen;
            line2.DataSource = line1;
            line2.Function = smoothing1;
            line2.Color = Color.BlueViolet;
            //Smoothing
            smoothing1.Factor = 4;
            smoothing1.Period = 1;
            smoothing1.Interpolate = true;
            //ColorBand
           BandTool  = new SeriesBandTool(tChart1.Chart);
           BandTool.Series = line2;
           BandTool.Series2 = line1;
           BandTool.Brush.Color = Color.Green;
           BandTool.Brush.Transparency = 50;           
        }
Can you tell us if previous code works as you expect?

Thanks,

Re: FillRegion tool with sampled points

Posted: Wed Apr 18, 2012 10:12 am
by 13051032
Series band tool is not the solution we are looking for. SeriesBand fills the whole chart area. What we need is the ability to fill-in the region covered by the fastline series such that the lines are drawn only with the help of actual data points added to fastline series.

For example, if the actual data added to fastline series has 12 points (x,y values) per cycle and if the system has a frequency of 60 cycles/sec, then there will be 720 points per second-worth of data. If we plot this data on a graph panel, we like to see only 12 lines (of FillRegion) between peak-peak of a waveform. Currently, we see that the number of lines drawn (of FillRegion) vary based on the width of graph panel. If we resize the graph panel to a width of 600 pixels, we see only two or three lines between the peaks, if the width is set to 1200 or so, the number of lines drawn changes arbitrarily.

My question is: how can i make sure that the number of lines drawn of FillRegion tool always correspond to the actual datapoints loaded with the series.

Re: FillRegion tool with sampled points

Posted: Thu Apr 19, 2012 8:38 am
by 10050769
Hello asupriya,

Thanks for information, but would be very helpful for us if you could arrange a simple example for us where we can reproduce your problem, because we can try to find a good solution for you.

Thanks,

Re: FillRegion tool with sampled points

Posted: Sat Apr 21, 2012 6:45 am
by 13051032
Attached is the VS2008 project with its own input data. This input data is collected at 720 samples/second (with 12 samples per cycle and a frequency of 60 cycles/sec).

The attached screenshot below shows that there are too many vertical lines drawn for 12 actual points in a cycle.
1.png
1.png (46.65 KiB) Viewed 11048 times
My question is, how can I make sure that the vertical lines in a cycle truly correspond to the data fed to the series?

Thanks for your help.

Re: FillRegion tool with sampled points

Posted: Mon Apr 23, 2012 10:05 am
by narcis
Hi asupriya,

Thanks for the info.

The vertical lines shown in your image are those corresponding to the SeriesRegionTool brush pattern you chose:

Code: Select all

            srgn.Brush.Style = System.Drawing.Drawing2D.HatchStyle.Vertical
SeriesRegionTool.Brush inherits from System.Drawing.Brush and its Style property is a System.Drawing.Drawing2D.HatchStyle enum value.

Having that in mind, System.Drawing.Brush and System.Drawing.Drawing2D.HatchStyle knows nothing from SeriesRegiontool and TeeChart series. The only option I can think of to achieve what you request is using an Area series with visible area lines, for example:

Code: Select all

    Private Sub DisplayBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DisplayBtn.Click
        Try
            'Dim sBandTool As New Steema.TeeChart.Tools.SeriesBandTool
            'sBandTool.Series = FastLine1
            'GraphChart.Tools.Add(sBandTool)
            GraphChart.Aspect.View3D = False
            GraphChart.Header.Text = "Graph"
            GraphChart.Zoom.Direction = Steema.TeeChart.ZoomDirections.Horizontal
            ' FastLine1.Clear()
      'FastLine1.DrawAllPoints = False
      ''FastLine1.DrawAllPointsStyle = Steema.TeeChart.Styles.DrawAllPointsStyle.MinMax
      'FastLine1.TreatNulls = Steema.TeeChart.Styles.TreatNullsStyle.DoNotPaint
      'FastLine1.LinePen.Width = 1
      'FastLine1.LinePen.Style = Drawing2D.DashStyle.Solid
      GraphChart.Series.RemoveAllSeries()

      Dim Area1 As New Steema.TeeChart.Styles.Area
      GraphChart.Series.Add(Area1)
      Area1.TreatNulls = Steema.TeeChart.Styles.TreatNullsStyle.DoNotPaint
      Area1.Color = Color.Transparent
      Area1.UseOrigin = True
      Area1.Origin = 0

            Dim txtReader As New System.IO.StreamReader("..\..\input.txt")
            Dim tmpStr As String()
            While Not txtReader.EndOfStream
                tmpStr = Split(txtReader.ReadLine, ",")
        Area1.Add(CDbl(tmpStr(0)), CDbl(tmpStr(1)))
            End While
            txtReader.Close()

            'add a series region tool
            Dim srgn As New Steema.TeeChart.Tools.SeriesRegionTool
      srgn.Series = Area1 'FastLine1
            srgn.Active = True
            srgn.UseOrigin = True
            srgn.Brush.Style = System.Drawing.Drawing2D.HatchStyle.Vertical
            'set brush transparency
            srgn.Brush.Transparency = 100
            'disabling pen
            srgn.Pen.Visible = False
            'set Foreground color
            srgn.Brush.ForegroundColor = FastLine1.Color

      'GraphChart.Tools.Add(srgn)
            
        Catch ex As Exception

        End Try
    End Sub
Obviously, Area series lacks the DrawAllPoints functionality. In which case you should use the DownSampling function as in the All Features\Welcome !\Functions\Extended\Reducing number of points\DownSampling Additions example at the features demo, which is available at TeeChart's program group.

Re: FillRegion tool with sampled points

Posted: Mon Apr 23, 2012 11:31 am
by 13051032
Narcis,

Area series is not a feasible solution for us. FastLine series itself is not fast enough for our data volumes and area series is out question.

One related question I have is that the issues posted herelong ago shows that the vertical lines are dependent on the series data. How is it so if the brush is not aware of the data source?

Thanks

Re: FillRegion tool with sampled points

Posted: Mon Apr 23, 2012 11:51 am
by narcis
Hi asupriya,
Area series is not a feasible solution for us. FastLine series itself is not fast enough for our data volumes and area series is out question.
In that case the only solution I can think is that you create your custom series inheriting from FastLine series and overriding relevant drawing methods, eg.: DrawValue method. Please bear in mind that drawing more elements into a FastLine series you'll slow it down. To improve your project's performance I strongly recommend you to read the Real-time Charting article here. If that's not enough for your needs you may also consider using TeeChart.Direct2D.dll. Last but not least, you'll find custom series examples here:

http://www.teechart.net/support/viewtopic.php?t=4309
http://www.teechart.net/support/viewtop ... f=4&t=6590
One related question I have is that the issues posted here long ago shows that the vertical lines are dependent on the series data. How is it so if the brush is not aware of the data source?
This is an issue (TF02014468) with FastLine series when DrawAllPoints is set to false and SeriesRegionTool but there's no mention that tool's brush is linked to series data. As you can see in the screen-shots in the thread you pointed at, SeriesRegionTool draws more brush pattern lines there than points are in the series, the same issue discussed in this thread.

Re: FillRegion tool with sampled points

Posted: Mon Apr 23, 2012 12:39 pm
by Marc
Hello,

You could run this code in the Chart's OnAfterDraw event, worth checking how it fairs in performance terms. You do not need the SeriesRegion Tool in the chart to obtain the vertical lines:

Code: Select all

        private void tChart1_AfterDraw(object sender, Steema.TeeChart.Drawing.Graphics3D g)
        {
            if (tChart1[0].Count > 0)
                for (int i = tChart1[0].FirstDisplayedIndex(); i <= tChart1[0].LastDisplayedIndex(); i++)
                {
                    g.Line(tChart1[0].CalcXPosValue(tChart1[0].XValues[i]), tChart1[0].CalcYPosValue(tChart1[0].YValues[i]),
                        tChart1[0].CalcXPosValue(tChart1[0].XValues[i]), tChart1.Axes.Left.CalcYPosValue(0));
                }
        }
Regards,
Marc Meumann