Page 1 of 1

Hiding series in Chart Editor

Posted: Thu Aug 30, 2012 1:16 am
by 10547025
To better control symbol placement for dense data sets, I create a LineSeries, a FastLineSeries and a PointSeries for each set of data. The LineSeries is used only for the legend, while the other two series show the line and the points respectively. I have a lot of custom code to format the resulting graph, but also make ChartEditor available so advanced users can "tweak" the graph to their own preference.
When I open ChartEditor, all 3 series are displayed. I have attempted to hide the FastLine and Point series with the following code:
procedure TformMain.acChartEditorExecute(Sender: TObject);
begin
PBQuickGraphMain.HideFastPointSeriesInEditor;
ChartEditor.Execute;
end;

procedure TPBQuickGraph.HideFastPointSeriesInEditor;
var
i: integer;

begin
for i:=0 to Dependent1Collection.SeriesList.Count-1 do
begin
TUnitFastLineSeries(Dependent1Collection.SeriesList.Objects).ShowInEditor := false;
TUnitPointSeries(Dependent1Collection.SeriesList.Objects).ShowInEditor := false;
end;
for i:=0 to Dependent2Collection.SeriesList.Count-1 do
begin
TUnitFastLineSeries(Dependent2Collection.SeriesList.Objects).ShowInEditor := false;
TUnitPointSeries(Dependent2Collection.SeriesList.Objects).ShowInEditor := false;
end;
end;

The code is unit-aware (e.g. with conversions between m and feet, etc). Dependent1Collection and Dependent2Collection are related to two dependent axes, each plotting data of a separate unit type.

This code has no effect on ChartEditor as seen in attachment. Any ideas what ShowInEditor fails would be appreciated.

Re: Hiding series in Chart Editor

Posted: Thu Aug 30, 2012 1:22 am
by 10547025
Further to my previous submission, I see that the HideInEditor code does not hide the FastLine and Point series but does hide the LineSeries. Without the code, all 3 series are shown in the editor.

Re: Hiding series in Chart Editor

Posted: Thu Aug 30, 2012 9:53 am
by yeray
Hi,

I've made a simple example trying to reproduce your situation (all in a single unit) and it seems it works fine for me here, if I understood correctly what you are trying to achieve.

Code: Select all

uses Series, TeeEdit;

procedure TForm1.FormCreate(Sender: TObject);

  procedure CopySettings(FromSeries, ToSeries: TChartSeries);
  begin
    ToSeries.Title:=FromSeries.Title;
    ToSeries.Color:=FromSeries.Color;
    ToSeries.ShowInEditor:=false;
  end;

var i, count: Integer;
begin
  Chart1.View3D:=false;

  for i:=0 to 4 do
  begin
    with Chart1.AddSeries(TLineSeries) as TLineSeries do
    begin
      FillSampleValues;
      Pointer.Visible:=true;
      ShowInLegend:=false;
    end;
  end;
  Chart1[0].Title:='Temperatura del pozo';
  Chart1[1].Title:='Well Pressure';
  Chart1[2].Title:='WHP';
  Chart1[3].Title:='Cased Depth';
  Chart1[4].Title:='Major Feed';

  count:=Chart1.SeriesCount;
  for i:=0 to count-1 do
  begin
    CopySettings(Chart1[i], Chart1.AddSeries(TFastLineSeries));
    CopySettings(Chart1[i], Chart1.AddSeries(TPointSeries));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with TChartEditor.Create(Self) do
  begin
    Chart:=Chart1;
    Execute;
  end;
end;
test.png
test.png (28.89 KiB) Viewed 7036 times
The series with data, TLineSeries, are drawn in the chart and shown in the editor but hidden in the legend
The series without data, TFastLineSeries and TPointSeries copied (just the title and the color) from the TLineSeries, are hidden in the editor but shown in the legend.
Isn't it what you are trying to do?

Re: Hiding series in Chart Editor

Posted: Thu Aug 30, 2012 11:47 pm
by 10547025
Hi Yeray

Thanks for your reply. Note that all 3 series have the same data and settings (line color, symbol, line type, etc) as appropriate. The LineSeries is used only to show the legend - its DataSource is set to nil just before the chart is drawn so no data is plotted. The legends of the FastLineSeries and the PointSeries are hidden but the data is plottted. Doing it this way means that I can control the point frequency (for example draw every 10th symbol in the series) while a FastLineSeries is plotted correctly for non-solid lines and dense data, at least for line width = 0 or 1.

However I have found the source of the problem. I had created the set of 3 series as objects in the same Series List (TStringList), as follows:
Dependent1Collection.SeriesList.AddObject(sTitle,TUnitLineSeries.Create(Owner));
Dependent1Collection.SeriesList.AddObject(sTitle,TUnitFastLineSeries.Create(Owner));
Dependent1Collection.SeriesList.AddObject(sTitle,TUnitPointSeries.Create(Owner));

Using 3 separate series lists as follows solved the problem:
Dependent1Collection.SeriesList.AddObject(sTitle,TUnitLineSeries.Create(Owner));
Dependent1Collection.SeriesListF.AddObject(sTitle,TUnitFastLineSeries.Create(Owner));
Dependent1Collection.SeriesListP.AddObject(sTitle,TUnitPointSeries.Create(Owner));

Thanks and regards

Errol

Re: Hiding series in Chart Editor

Posted: Fri Aug 31, 2012 12:11 pm
by yeray
Hi Errol,

I'm glad to hear you found how to make it work :)