12 #include "KDChartTernaryLineDiagram_p.h"
23 #include "KDChartPainterSaver_p.h"
31 TernaryLineDiagram::Private::Private()
36 TernaryLineDiagram::TernaryLineDiagram(QWidget *parent,
58 void TernaryLineDiagram::init()
69 d->reverseMapper.clear();
71 d->paint(paintContext);
73 if (model() ==
nullptr)
76 QPainter *p = paintContext->
painter();
88 d->forgetAlreadyPaintedDataValues();
90 int columnCount = model()->columnCount(rootIndex());
93 int numrows = model()->rowCount(rootIndex());
94 for (
int row = 0; row < numrows; row++) {
96 QModelIndex base = model()->index(row, column);
97 if (!model()->data(base).isNull()) {
99 p->setBrush(
brush(base));
102 x = qMax(model()->data(model()->index(row, column, rootIndex())).toReal(),
104 y = qMax(model()->data(model()->index(row, column + 1, rootIndex())).toReal(),
106 z = qMax(model()->data(model()->index(row, column + 2, rootIndex())).toReal(),
109 qreal total = x + y + z;
110 if (fabs(total) > 3 * std::numeric_limits<qreal>::epsilon()) {
112 QPointF diagramLocation =
translate(tPunkt);
113 QPointF widgetLocation = plane->translate(diagramLocation);
116 p->drawLine(start, widgetLocation);
118 paintMarker(p, model()->index(row, column, rootIndex()), widgetLocation);
119 start = widgetLocation;
122 QString text = tr(
"(%1, %2, %3)")
123 .arg(x * 100, 0,
'f', 0)
124 .arg(y * 100, 0,
'f', 0)
125 .arg(z * 100, 0,
'f', 0);
126 d->paintDataValueText(p, attrs, widgetLocation,
true, text,
true);
129 qDebug() <<
"TernaryPointDiagram::paint: data point x/y/z:"
130 << x <<
"/" << y <<
"/" << z <<
"ignored, unusable.";
140 static QPair<QPointF, QPointF> Boundaries(
Declaring the class KDChart::DataValueAttributes.
const qreal TriangleHeight
const QPointF TriangleBottomLeft
const QPointF TriangleBottomRight
QPointF translate(const TernaryPoint &point)
virtual AttributesModel * attributesModel() const
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.
void setDefaultForRole(int role, const QVariant &value)
Diagram attributes dealing with data value labels.
void setMarkerAttributes(const MarkerAttributes &a)
void setVisible(bool visible)
A set of attributes controlling the appearance of data set markers.
void setVisible(bool visible)
void setMarkerStyle(uint style)
Stores information about painting diagrams.
AbstractCoordinatePlane * coordinatePlane() const
QPainter * painter() const
static QPen scalePen(const QPen &pen)
Ternary coordinate plane.
~TernaryLineDiagram() override
const QPair< QPointF, QPointF > calculateDataBoundaries() const override
void resize(const QSizeF &area) override
void paint(PaintContext *paintContext) override
TernaryPoint defines a point within a ternary coordinate plane.
@ DataValueLabelAttributesRole