TAChart: Add new series pointer styles spHexagon and spFullStar

git-svn-id: trunk@54041 -
This commit is contained in:
wp 2017-01-31 10:22:22 +00:00
parent 16c9d3da82
commit 08fbbea1d8

View File

@ -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;