diff --git a/components/tachart/tatypes.pas b/components/tachart/tatypes.pas index ab6af73390..63e7fe89aa 100644 --- a/components/tachart/tatypes.pas +++ b/components/tachart/tatypes.pas @@ -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;