TAChart: Extract TChartDataItem.MultiplyY and SetY methods

git-svn-id: trunk@32330 -
This commit is contained in:
ask 2011-09-14 11:17:42 +00:00
parent 8aa42c7c6c
commit ef2a5f2019
2 changed files with 25 additions and 21 deletions

View File

@ -90,7 +90,8 @@ type
Text: String;
YList: TDoubleDynArray;
function GetY(AIndex: Integer): Double;
procedure ClearY;
procedure SetY(AValue: Double);
procedure MultiplyY(ACoeff: Double);
end;
PChartDataItem = ^TChartDataItem;
@ -339,15 +340,6 @@ end;
{ TChartDataItem }
procedure TChartDataItem.ClearY;
var
i: Integer;
begin
Y := 0;
for i := 0 to High(YList) do
YList[i] := 0;
end;
function TChartDataItem.GetY(AIndex: Integer): Double;
begin
AIndex := EnsureRange(AIndex, 0, Length(YList));
@ -357,6 +349,24 @@ begin
Result := YList[AIndex - 1];
end;
procedure TChartDataItem.MultiplyY(ACoeff: Double);
var
i: Integer;
begin
Y *= ACoeff;
for i := 0 to High(YList) do
YList[i] *= ACoeff;
end;
procedure TChartDataItem.SetY(AValue: Double);
var
i: Integer;
begin
Y := AValue;
for i := 0 to High(YList) do
YList[i] := AValue;
end;
{ TChartSourceBuffer }
procedure TChartSourceBuffer.AddFirst(const AItem: TChartDataItem);

View File

@ -894,9 +894,7 @@ begin
FHistory.GetSum(FItem);
camAverage: begin
FHistory.GetSum(FItem);
FItem.Y /= Min(ar, AIndex + 1);
for i := 0 to High(FItem.YList) do
FItem.YList[i] /= Min(ar, AIndex + 1);
FItem.MultiplyY(1 / Min(ar, AIndex + 1));
end;
camDerivative:
CalcDerivative(AIndex);
@ -920,7 +918,7 @@ var
i, j, ar: Integer;
dx: Double;
begin
FItem.ClearY;
FItem.SetY(0.0);
if AIndex = 0 then begin
FItem.X := SafeNan;
exit;
@ -938,21 +936,17 @@ begin
for i := 0 to High(FItem.YList) do
FItem.YList[i] += prevItem^.YList[i] * COEFFS[ar, j];
end;
FItem.Y /= dx;
for i := 0 to High(FItem.YList) do
FItem.YList[i] /= dx;
FItem.MultiplyY(1 / dx);
end;
procedure TCalculatedChartSource.CalcPercentage;
var
s: Double;
i: Integer;
begin
if not Percentage then exit;
s := (FItem.Y + Sum(FItem.YList)) * PERCENT;
FItem.Y /= s;
for i := 0 to High(FItem.YList) do
FItem.YList[i] /= s;
if s = 0 then exit;
FItem.MultiplyY(1 / s);
end;
procedure TCalculatedChartSource.Changed(ASender: TObject);