18 #include <QApplication>
22 #include "KDChartPainterSaver_p.h"
31 : percentage(_percentage)
39 <= std::numeric_limits<qreal>::epsilon()
54 static const int GridLineDistanceTreshold = 20;
56 QPainter &painter = *context->
painter();
57 PainterSaver s(&painter);
59 Q_ASSERT_X(plane,
"TernaryGrid::drawGrid",
60 "Bad function call: PaintContext::coodinatePlane() NOT a ternary plane.");
63 const int MaxDepth = 3;
66 if (xPixels > 10 * GridLineDistanceTreshold)
68 if (xPixels > 20 * GridLineDistanceTreshold)
72 for (
int i = granularity; i < 100; i += granularity) {
78 m_tickInfo.append(tick);
81 QVector<QLineF> lines[MaxDepth];
83 for (
const TickInfo &tick : qAsConst(m_tickInfo)) {
84 const qreal &percent = tick.percentage;
90 lines[tick.depth].append(QLineF(plane->translate(start),
91 plane->translate(end)));
98 lines[tick.depth].append(QLineF(plane->translate(start),
99 plane->translate(end)));
106 lines[tick.depth].append(QLineF(plane->translate(start),
107 plane->translate(end)));
114 painter.setBrush(QColor(
"lightgray"));
115 painter.drawLines(lines[2]);
117 painter.setBrush(QColor(
"gray"));
118 painter.drawLines(lines[1]);
120 painter.setBrush(QColor(
"darkslategray"));
121 painter.drawLines(lines[0]);
127 painter.setBrush(Qt::NoBrush);
132 painter.drawPolygon(points);
136 painter.setBrush(Qt::black);
138 QVector<QLineF> ticks;
140 QVector<TickInfo> percentages(m_tickInfo);
149 percentages.erase(std::unique(percentages.begin(), percentages.end()),
153 for (
const TickInfo &tick : percentages) {
154 const qreal &percent = tick.percentage;
158 QPointF start(percent, 0.0);
159 ticks.append(QLineF(plane->translate(start),
160 plane->translate(start - markerDistance)));
166 const QPointF end(start + markerDistance);
167 ticks.append(QLineF(plane->translate(start),
168 plane->translate(end)));
175 const QPointF end(start + markerDistance);
176 ticks.append(QLineF(plane->translate(start),
177 plane->translate(end)));
181 painter.drawLines(ticks);
192 qreal topMargin = 0.0;
202 return QPair<QSizeF, QSizeF>(QSizeF(leftMargin, topMargin),
203 QSizeF(leftMargin, bottomMargin));
const QPointF FullMarkerDistanceBA
const QPointF TriangleTop
const QPointF FullMarkerDistanceAC
const QPointF FullMarkerDistanceBC
const QPointF TriangleBottomLeft
const QPointF AxisVector_B_A
const QPointF TriangleBottomRight
const QPointF AxisVector_C_A
QPointF translate(const TernaryPoint &point)
Stores information about painting diagrams.
AbstractCoordinatePlane * coordinatePlane() const
QPainter * painter() const
static QPen scalePen(const QPen &pen)
Ternary coordinate plane.
void drawGrid(PaintContext *context) override
QPair< QSizeF, QSizeF > requiredMargins() const
DataDimensionsList calculateGrid(const DataDimensionsList &rawDataDimensions) const override
Calculates the grid start/end/step width values.
const QVector< TickInfo > & tickInfo() const
TernaryPoint defines a point within a ternary coordinate plane.
bool operator==(const TickInfo &, const TickInfo &)
QList< DataDimension > DataDimensionsList
TickInfo(qreal percentage=0, int depth=0)