mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-27 03:13:42 +02:00
TAChart: Add new series pointer styles spHexagon and spFullStar
git-svn-id: trunk@54041 -
This commit is contained in:
parent
16c9d3da82
commit
08fbbea1d8
@ -93,7 +93,8 @@ type
|
||||
TSeriesPointerStyle = (
|
||||
psNone, psRectangle, psCircle, psCross, psDiagCross, psStar,
|
||||
psLowBracket, psHighBracket, psLeftBracket, psRightBracket, psDiamond,
|
||||
psTriangle, psLeftTriangle, psRightTriangle, psVertBar, psHorBar, psPoint);
|
||||
psTriangle, psLeftTriangle, psRightTriangle, psVertBar, psHorBar, psPoint,
|
||||
psDownTriangle, psHexagon, psFullStar);
|
||||
|
||||
{ TSeriesPointer }
|
||||
|
||||
@ -426,14 +427,42 @@ procedure TSeriesPointer.DrawSize(ADrawer: IChartDrawer;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure DrawPolygon(AStyle: TSeriesPointerStyle);
|
||||
const
|
||||
INNER = 0.5;
|
||||
var
|
||||
p: array of TPoint;
|
||||
pt: TDoublePoint;
|
||||
phi, sinphi, cosphi, dPhi: Double;
|
||||
i: Integer;
|
||||
begin
|
||||
case AStyle of
|
||||
psHexagon : begin dPhi := pi / 3; SetLength(p, 7); end;
|
||||
psFullStar : begin dPhi := pi / 6; SetLength(p, 13); end;
|
||||
end;
|
||||
phi := 0;
|
||||
for i := 0 to High(p) do begin
|
||||
SinCos(phi, sinphi, cosphi);
|
||||
pt := DoublePoint(ASize.X * cosPhi, ASize.Y * sinPhi);
|
||||
if odd(i) and (AStyle = psFullStar) then
|
||||
pt := pt * INNER;
|
||||
p[i] := ACenter + RoundPoint(RotatePoint(pt, AAngle));
|
||||
phi += dPhi;
|
||||
end;
|
||||
ADrawer.Polygon(p, 0, Length(p));
|
||||
end;
|
||||
|
||||
|
||||
const
|
||||
DRAW_STRINGS: array [TSeriesPointerStyle] of String = (
|
||||
// psNone, psRectangle, psCircle, psCross, psDiagCross, psStar,
|
||||
// psLowBracket, psHighBracket, psLeftBracket, psRightBracket, psDiamond,
|
||||
// psTriangle, psLeftTriangle, psRightTriangle, psVertBar, psHorBar, psPoint
|
||||
// pwDownTriangle, psHexagon, psFullStar
|
||||
'', '17931', '', '28 46', '19 73', '28 46 19 73',
|
||||
'41236', '47896', '87412', '89632', '84268',
|
||||
'1831', '8428', '8628', '82', '46', '');
|
||||
'1831', '8428', '8628', '82', '46', '',
|
||||
'7927', '', '');
|
||||
begin
|
||||
ADrawer.Brush := Brush;
|
||||
if (ocBrush in OverrideColor) and (AColor <> clTAColor) then
|
||||
@ -443,12 +472,14 @@ begin
|
||||
ADrawer.SetPenParams(Pen.Style, AColor);
|
||||
|
||||
case Style of
|
||||
psNone : ;
|
||||
psPoint : ADrawer.PutPixel(ACenter.X, ACenter.Y, Pen.Color);
|
||||
psCircle: ADrawer.Ellipse(
|
||||
ACenter.X - ASize.X, ACenter.Y - ASize.Y,
|
||||
ACenter.X + ASize.X + 1, ACenter.Y + ASize.Y + 1)
|
||||
else DrawByString(DRAW_STRINGS[Style] + ' ');
|
||||
psNone : ;
|
||||
psPoint : ADrawer.PutPixel(ACenter.X, ACenter.Y, Pen.Color);
|
||||
psCircle : ADrawer.Ellipse(
|
||||
ACenter.X - ASize.X, ACenter.Y - ASize.Y,
|
||||
ACenter.X + ASize.X + 1, ACenter.Y + ASize.Y + 1);
|
||||
psHexagon : DrawPolygon(psHexagon);
|
||||
psFullStar: DrawPolygon(psFullStar);
|
||||
else DrawByString(DRAW_STRINGS[Style] + ' ');
|
||||
end;
|
||||
end;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user