12 #include "KDChartTernaryPointDiagram_p.h"
27 TernaryPointDiagram::Private::Private()
32 TernaryPointDiagram::TernaryPointDiagram(QWidget *parent,
44 void TernaryPointDiagram::init()
46 d->reverseMapper.setDiagram(
this);
56 d->reverseMapper.clear();
58 d->paint(paintContext);
61 if (model() ==
nullptr)
64 QPainter *p = paintContext->
painter();
76 d->forgetAlreadyPaintedDataValues();
78 int columnCount = model()->columnCount(rootIndex());
80 int numrows = model()->rowCount(rootIndex());
81 for (
int row = 0; row < numrows; row++) {
82 QModelIndex base = model()->index(row, column, rootIndex());
84 if (!model()->data(base).isNull()) {
86 p->setBrush(
brush(base));
89 x = qMax(model()->data(model()->index(row, column + 0, rootIndex())).toReal(),
91 y = qMax(model()->data(model()->index(row, column + 1, rootIndex())).toReal(),
93 z = qMax(model()->data(model()->index(row, column + 2, rootIndex())).toReal(),
97 qreal total = x + y + z;
98 if (fabs(total) > 3 * std::numeric_limits<qreal>::epsilon()) {
100 QPointF diagramLocation =
translate(tPunkt);
101 QPointF widgetLocation = plane->translate(diagramLocation);
103 paintMarker(p, model()->index(row, column, rootIndex()), widgetLocation);
104 QString text = tr(
"(%1, %2, %3)")
105 .arg(x * 100, 0,
'f', 0)
106 .arg(y * 100, 0,
'f', 0)
107 .arg(z * 100, 0,
'f', 0);
108 d->paintDataValueText(p, attrs, widgetLocation,
true, text,
true);
111 qDebug() <<
"TernaryPointDiagram::paint: data point x/y/z:"
112 << x <<
"/" << y <<
"/" << z <<
"ignored, unusable.";
122 static QPair<QPointF, QPointF> Boundaries(
const qreal TriangleHeight
const QPointF TriangleBottomLeft
const QPointF TriangleBottomRight
QPointF translate(const TernaryPoint &point)
virtual void paintMarker(QPainter *painter, const MarkerAttributes &markerAttributes, const QBrush &brush, const QPen &, const QPointF &point, const QSizeF &size)
DataValueAttributes dataValueAttributes() const
int datasetDimension() const
void setDatasetDimensionInternal(int dimension)
Base class for diagrams based on a ternary coordinate plane.
Diagram attributes dealing with data value labels.
Stores information about painting diagrams.
AbstractCoordinatePlane * coordinatePlane() const
QPainter * painter() const
static QPen scalePen(const QPen &pen)
Ternary coordinate plane.
const QPair< QPointF, QPointF > calculateDataBoundaries() const override
void resize(const QSizeF &area) override
~TernaryPointDiagram() override
void paint(PaintContext *paintContext) override
TernaryPoint defines a point within a ternary coordinate plane.