Looking for an example for THorizLine w oscilloscope curve

TeeChart VCL for Borland/CodeGear/Embarcadero RAD Studio, Delphi and C++ Builder.
Post Reply
Sciensoria
Newbie
Newbie
Posts: 20
Joined: Tue Jul 03, 2007 12:00 am
Contact:

Looking for an example for THorizLine w oscilloscope curve

Post by Sciensoria » Tue Nov 28, 2017 12:45 pm

Hello,

A FastLineSeries can run from the left to the righ and inversely in the manner of an oscilloscope. I use the
following commands for a curve which runs from the left to the right:

Code: Select all

 
with MyFastLineSeries do begin
    tmpTch:=XValues[1]-XValues[0];
    if (Count>100) then repeat Delete(count-1) until count<= 100;
    AddXY(XValues.First-tmpTch,ValueTobePlotted,'',clBlack)
end;
But I would like to make it running from the top to the bottom of the Chart in the manner of a data recorder. I tried to use the THorizLineSeries in the same manner:

Code: Select all

with MyHorizLineSeries do begin
    tmpTch:=YValues[1]-YValues[0];  // << Please note that I have exchanged the place of X and Y
    if (Count>100) then repeat Delete(count-1) until count<= 100;
    AddXY(ValueTobePlotted,YValues.First-tmpTch,'',clBlack) // << Please note that I have exchanged the place of X and Y
end;
However, this doesn't work.

What's wrong? Could you advise how I can get the right code for making the curve running from the top to the bottom of the graphic ?

Thank you in advance.
Pierre
Sciensoria

Yeray
Site Admin
Site Admin
Posts: 9612
Joined: Tue Dec 05, 2006 12:00 am
Location: Girona, Catalonia
Contact:

Re: Looking for an example for THorizLine w oscilloscope curve

Post by Yeray » Tue Nov 28, 2017 2:13 pm

Hello,

I guess this code is fired inside some to that sets ValueTobePlotted variable, but without knowing exactly how I'm afraid I can't reproduce the problem here.
This simple example seems to work fine for me here:

Code: Select all

uses Series;

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
  Chart1.View3D:=False;
  Chart1.Legend.Visible:=False;

  with Chart1.AddSeries(THorizLineSeries) do
  begin
    AddXY(100+random*50,0,'',clBlack);
    for i:=1 to 99 do
      AddXY(XValues[i-1]+random*10-5,i,'',clBlack);
  end;
end;
Attachments
Project2_2017-11-28_15-13-00.png
Project2_2017-11-28_15-13-00.png (21.96 KiB) Viewed 14039 times
Best Regards,
ImageYeray Alonso
Development & Support
Steema Software
Av. Montilivi 33, 17003 Girona, Catalonia (SP)
Image Image Image Image Image Image Please read our Bug Fixing Policy

Sciensoria
Newbie
Newbie
Posts: 20
Joined: Tue Jul 03, 2007 12:00 am
Contact:

Re: Looking for an example for THorizLine w oscilloscope curve

Post by Sciensoria » Tue Nov 28, 2017 10:01 pm

Dear Yeray,

Thank you very much for your prompt reply.

I attache my test project here. It contains 2 charts (1 and 2). On the 1st chart, I display a sinus using a TFastLineSeries at the start and click on the button underneath to make it running. This works fine. On the 2nd chart, I also display a sinus vertically with a THorizLineSeries at the start and try to make it running as with the 1st chart. The both methods are same.

Unfortunately, the sinus on the 2nd chart doesn't move at all. I wonder if there are any other settings to do before elsewhere.

The source code seems to be too big to be attached here, but I can send it to you by another means.

Thank you in advance for your support.

Code: Select all

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, VclTee.TeeGDIPlus, Vcl.StdCtrls,
  Vcl.Buttons, VCLTee.TeEngine, VCLTee.Series, Vcl.ExtCtrls, VCLTee.TeeProcs,
  VCLTee.Chart;

type
  TForm1 = class(TForm)
    Chart1: TChart;
    BitBtn1: TBitBtn;
    CheckBox1: TCheckBox;
    Label1: TLabel;
    BitBtn2: TBitBtn;
    CheckBox2: TCheckBox;
    Label2: TLabel;
    Chart2: TChart;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Series1: TFastLineSeries; Series2: THorizLineSeries;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var i,j,k: integer; tmp: double;
begin
  i:= 0;
  repeat
    with Series1 do begin
      tmp:= Xvalues[1]-Xvalues[0];
      AddXY(XValues.First-tmp,sin(2*pi/100*i),'',clBlack);
      if count>200 then delete(count-1);
    end;
    inc(i); Label1.Caption:= IntToStr(i);
    if i>2000 then i:= 0;
    Application.ProcessMessages;
  until checkbox1.Checked=false;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
var i,j,k: integer; tmp: double;
begin
  i:= 0;
  repeat
    with Series2 do begin
      tmp:= Yvalues[1]-Yvalues[0];
      AddXY(sin(2*pi/100*i),YValues.First-tmp,'',clBlack);
      if count>200 then delete(count-1);
    end;
    inc(i); Label2.Caption:= IntToStr(i);
    if i>200 then i:= 0;
    Application.ProcessMessages;
  until checkbox2.Checked=false;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i: integer;
begin
  Series1:= TFastLineSeries.Create(nil);
  //Series1.FillSampleValues(20);
  for i:= 0 to 200 do Series1.AddXY(i,sin(2*pi/100*i),'',clRed);
  Chart1.AddSeries(Series1);
  Series2:= THorizLineSeries.Create(nil);
  //Series2.FillSampleValues(20);
  for i:= 0 to 200 do Series2.AddXY(sin(2*pi/100*i),i,'',clRed);
  Chart2.AddSeries(Series2);
end;

end.

Yeray
Site Admin
Site Admin
Posts: 9612
Joined: Tue Dec 05, 2006 12:00 am
Location: Girona, Catalonia
Contact:

Re: Looking for an example for THorizLine w oscilloscope curve

Post by Yeray » Wed Nov 29, 2017 12:07 pm

Hello,

Try sorting the YValues after adding values to the THorizLineSeries. Ie:

Code: Select all

procedure TForm1.BitBtn2Click(Sender: TObject);
var i,j,k: integer; tmp: double;
begin
  i:= 0;
  repeat
    with Series2 do begin
      tmp:= Yvalues[1]-Yvalues[0];
      AddXY(sin(2*pi/100*i),YValues.First-tmp,'',clBlack);
      YValues.Sort;
      if count>200 then delete(count-1);
    end;
    inc(i); Label2.Caption:= IntToStr(i);
    if i>200 then i:= 0;
    Application.ProcessMessages;
  until checkbox2.Checked=false;
end;
Best Regards,
ImageYeray Alonso
Development & Support
Steema Software
Av. Montilivi 33, 17003 Girona, Catalonia (SP)
Image Image Image Image Image Image Please read our Bug Fixing Policy

Sciensoria
Newbie
Newbie
Posts: 20
Joined: Tue Jul 03, 2007 12:00 am
Contact:

Re: Looking for an example for THorizLine w oscilloscope curve

Post by Sciensoria » Thu Dec 07, 2017 1:50 pm

Thank you Yeray. I can confirm that this works.
However, I don't know why we have to do a sorting for the Yvalues for the THorizLineSeries while it is not necessary to do the same for a classic TFastLineSeries. In addition, I wonder if this slows down the plot rate.

Patrick
Sciensoria

Yeray
Site Admin
Site Admin
Posts: 9612
Joined: Tue Dec 05, 2006 12:00 am
Location: Girona, Catalonia
Contact:

Re: Looking for an example for THorizLine w oscilloscope curve

Post by Yeray » Mon Dec 11, 2017 9:19 am

Hello Patrick,
Sciensoria wrote:I don't know why we have to do a sorting for the Yvalues for the THorizLineSeries while it is not necessary to do the same for a classic TFastLineSeries
This happens because the AddXY method, for the THorizLineSeries is adding the value at the end of the X and Y arrays, so removing the last point is removing the point just entered.
I've added it to the public tracker #1958.
Sciensoria wrote:In addition, I wonder if this slows down the plot rate.
I've added a TRepaintMonitor tool to check it and I don't see a decrease on the FPS after adding that Sort call.
Best Regards,
ImageYeray Alonso
Development & Support
Steema Software
Av. Montilivi 33, 17003 Girona, Catalonia (SP)
Image Image Image Image Image Image Please read our Bug Fixing Policy

Sciensoria
Newbie
Newbie
Posts: 20
Joined: Tue Jul 03, 2007 12:00 am
Contact:

Re: Looking for an example for THorizLine w oscilloscope curve

Post by Sciensoria » Mon Dec 11, 2017 9:27 am

Thank you Yeray. You have explained all my questions.

Patrick

Yeray
Site Admin
Site Admin
Posts: 9612
Joined: Tue Dec 05, 2006 12:00 am
Location: Girona, Catalonia
Contact:

Re: Looking for an example for THorizLine w oscilloscope curve

Post by Yeray » Mon Dec 11, 2017 9:41 am

Hello Patrick,
Yeray wrote: I've added it to the public tracker #1958.
I've just fixed it.
Best Regards,
ImageYeray Alonso
Development & Support
Steema Software
Av. Montilivi 33, 17003 Girona, Catalonia (SP)
Image Image Image Image Image Image Please read our Bug Fixing Policy

Post Reply