TAChart: Optimzed extent calculation when chart source is sorted. Issue #35389, patch by Marcin Wiazowski.

git-svn-id: trunk@60991 -
This commit is contained in:
wp 2019-04-16 07:36:48 +00:00
parent fbef644b79
commit d9bccc11be

View File

@ -809,30 +809,41 @@ var
begin begin
if FBasicExtentIsValid then if FBasicExtentIsValid then
exit(FBasicExtent); exit(FBasicExtent);
FBasicExtent := EmptyExtent; FBasicExtent := EmptyExtent;
if XCount > 0 then begin if Count > 0 then begin
if HasXErrorBars then if XCount > 0 then begin
for i := 0 to Count - 1 do begin if HasXErrorBars then
GetXErrorBarLimits(i, vhi, vlo); for i := 0 to Count - 1 do begin
UpdateMinMax(vhi, FBasicExtent.a.X, FBasicExtent.b.X); GetXErrorBarLimits(i, vhi, vlo);
UpdateMinMax(vlo, FBasicExtent.a.X, FBasicExtent.b.X); UpdateMinMax(vhi, FBasicExtent.a.X, FBasicExtent.b.X);
end UpdateMinMax(vlo, FBasicExtent.a.X, FBasicExtent.b.X);
else end
for i:=0 to Count - 1 do else
UpdateMinMax(Item[i]^.X, FBasicExtent.a.X, FBasicExtent.b.X); if (FSortBy = sbX) and (FSortIndex = 0) then begin
end; UpdateMinMax(Item[0]^.X, FBasicExtent.a.X, FBasicExtent.b.X);
UpdateMinMax(Item[Count-1]^.X, FBasicExtent.a.X, FBasicExtent.b.X);
end else
for i:=0 to Count - 1 do
UpdateMinMax(Item[i]^.X, FBasicExtent.a.X, FBasicExtent.b.X);
end;
if YCount > 0 then begin if YCount > 0 then begin
if HasYErrorBars then if HasYErrorBars then
for i := 0 to Count - 1 do begin for i := 0 to Count - 1 do begin
GetYErrorBarLimits(i, vhi, vlo); GetYErrorBarLimits(i, vhi, vlo);
UpdateMinMax(vhi, FBasicExtent.a.Y, FBasicExtent.b.Y); UpdateMinMax(vhi, FBasicExtent.a.Y, FBasicExtent.b.Y);
UpdateMinMax(vlo, FBasicExtent.a.Y, FBasicExtent.b.Y); UpdateMinMax(vlo, FBasicExtent.a.Y, FBasicExtent.b.Y);
end end
else else
for i:=0 to Count - 1 do if (FSortBy = sbY) and (FSortIndex = 0) then begin
UpdateMinMax(Item[i]^.Y, FBasicExtent.a.Y, FBasicExtent.b.Y); UpdateMinMax(Item[0]^.Y, FBasicExtent.a.Y, FBasicExtent.b.Y);
UpdateMinMax(Item[Count-1]^.Y, FBasicExtent.a.Y, FBasicExtent.b.Y);
end else
for i:=0 to Count - 1 do
UpdateMinMax(Item[i]^.Y, FBasicExtent.a.Y, FBasicExtent.b.Y);
end;
end; end;
FBasicExtentIsValid := true; FBasicExtentIsValid := true;