From c873041d93db2083eeb0cf875e4aae3ce1af6ec2 Mon Sep 17 00:00:00 2001 From: jkriege2 Date: Sun, 5 May 2019 19:58:52 +0200 Subject: [PATCH] update: allow to style median-line of boxplots independently --- examples/simpletest_boxplot/README.md | 8 +- .../jkqtplotter_simpletest_boxplot.cpp | 9 +- lib/jkqtplotter/jkqtpgraphsboxplot.cpp | 169 +++++++++++++++--- lib/jkqtplotter/jkqtpgraphsboxplot.h | 84 ++++++++- .../jkqtplotter_simpletest_boxplot.png | Bin 34283 -> 35306 bytes .../jkqtplotter_simpletest_boxplot_small.png | Bin 10533 -> 12415 bytes 6 files changed, 236 insertions(+), 34 deletions(-) diff --git a/examples/simpletest_boxplot/README.md b/examples/simpletest_boxplot/README.md index 218217c826..ba3abee868 100644 --- a/examples/simpletest_boxplot/README.md +++ b/examples/simpletest_boxplot/README.md @@ -49,8 +49,14 @@ You can further style the plot by e.g. setting: graph->setFillColor(graphh->getColor().lighter()); // 4.2 make whiskers dashed graph->setWhiskerLineStyle(Qt::DashLine); + graph->setWhiskerLineColor(graph->getLineColor().darker()); // 4.3 change mean symbol - graph->setSymbolType(JKQTPstar); + graph->setSymbolType(JKQTPFilledStar); + graph->setSymbolFillColor(QColor("silver")); + // 4.4 change median line color + graph->setMedianLineColor(QColor("darkgreen")); + // 4.5 change box width to 75% of distance + graph->setBoxWidth(0.75); ``` The result looks like this: diff --git a/examples/simpletest_boxplot/jkqtplotter_simpletest_boxplot.cpp b/examples/simpletest_boxplot/jkqtplotter_simpletest_boxplot.cpp index 4131d46bcd..7097c20e84 100644 --- a/examples/simpletest_boxplot/jkqtplotter_simpletest_boxplot.cpp +++ b/examples/simpletest_boxplot/jkqtplotter_simpletest_boxplot.cpp @@ -84,9 +84,14 @@ int main(int argc, char* argv[]) graphh->setFillColor(graphh->getLineColor().lighter()); // 6.2 make whiskers dashed graphh->setWhiskerLineStyle(Qt::DashLine); + graphh->setWhiskerLineColor(graphh->getLineColor().darker()); // 6.3 change mean symbol - graphh->setSymbolType(JKQTPstar); - + graphh->setSymbolType(JKQTPFilledStar); + graphh->setSymbolFillColor(QColor("silver")); + // 6.4 change median line color + graphh->setMedianLineColor(QColor("darkgreen")); + // 6.5 change box width to 75% of distance + graphh->setBoxWidth(0.75); // 7. add the graphs to the plot, so it is actually displayed plot.addGraph(graph); diff --git a/lib/jkqtplotter/jkqtpgraphsboxplot.cpp b/lib/jkqtplotter/jkqtpgraphsboxplot.cpp index 8908300959..36214c3729 100644 --- a/lib/jkqtplotter/jkqtpgraphsboxplot.cpp +++ b/lib/jkqtplotter/jkqtpgraphsboxplot.cpp @@ -39,6 +39,8 @@ JKQTPGraphBoxplotStyleMixin::JKQTPGraphBoxplotStyleMixin() m_whiskerLinePen=QPen(getLineColor(), getLineWidth()); whiskerLineWidth=getLineWidth(); + m_medianLinePen=QPen(getLineColor(), getLineWidth()); + medianLineWidth=getLineWidth(); } @@ -53,9 +55,13 @@ void JKQTPGraphBoxplotStyleMixin::initBoxplotStyle(JKQTBasePlotter *parent, int m_whiskerLinePen.setColor(parent->getPlotStyle(parentPlotStyle).color()); m_whiskerLinePen.setStyle(parent->getPlotStyle(parentPlotStyle).style()); whiskerLineWidth=parent->getPlotStyle(parentPlotStyle).widthF(); + m_medianLinePen.setColor(parent->getPlotStyle(parentPlotStyle).color()); + m_medianLinePen.setStyle(parent->getPlotStyle(parentPlotStyle).style()); + medianLineWidth=parent->getPlotStyle(parentPlotStyle).widthF(); } setWhiskerLineColor(getLineColor()); + setMedianLineColor(getLineColor()); } void JKQTPGraphBoxplotStyleMixin::setBoxplotColor(QColor c, JKQTBasePlotter *parent) @@ -67,6 +73,17 @@ void JKQTPGraphBoxplotStyleMixin::setBoxplotColor(QColor c, JKQTBasePlotter *par setSymbolColor(c); setSymbolFillColor(JKQTPGetDerivedColor(parent->getCurrentPlotterStyle().graphFillColorDerivationMode, c)); setWhiskerLineColor(getLineColor()); + setMedianLineColor(getLineColor()); +} + +void JKQTPGraphBoxplotStyleMixin::setBoxWidth(double __value) +{ + this->boxWidth = __value; +} + +double JKQTPGraphBoxplotStyleMixin::getBoxWidth() const +{ + return this->boxWidth; } void JKQTPGraphBoxplotStyleMixin::setWhiskerLineStyle(Qt::PenStyle __value) @@ -79,15 +96,6 @@ Qt::PenStyle JKQTPGraphBoxplotStyleMixin::getWhiskerLineStyle() const return this->m_whiskerLinePen.style(); } -void JKQTPGraphBoxplotStyleMixin::setBoxWidth(double __value) -{ - this->boxWidth = __value; -} - -double JKQTPGraphBoxplotStyleMixin::getBoxWidth() const -{ - return this->boxWidth; -} void JKQTPGraphBoxplotStyleMixin::setWhiskerLineWidth(double __value) { @@ -172,6 +180,97 @@ QPen JKQTPGraphBoxplotStyleMixin::getWhiskerPen(JKQTPEnhancedPainter &painter, J +void JKQTPGraphBoxplotStyleMixin::setMedianLineStyle(Qt::PenStyle __value) +{ + this->m_medianLinePen.setStyle(__value); +} + +Qt::PenStyle JKQTPGraphBoxplotStyleMixin::getMedianLineStyle() const +{ + return this->m_medianLinePen.style(); +} + + +void JKQTPGraphBoxplotStyleMixin::setMedianLineWidth(double __value) +{ + medianLineWidth=__value; +} + +double JKQTPGraphBoxplotStyleMixin::getMedianLineWidth() const +{ + return medianLineWidth; +} + +void JKQTPGraphBoxplotStyleMixin::setMedianLineColor(QColor __value) +{ + m_medianLinePen.setColor(__value); +} + +QColor JKQTPGraphBoxplotStyleMixin::getMedianLineColor() const +{ + return m_medianLinePen.color(); +} + +void JKQTPGraphBoxplotStyleMixin::setMedianLineDashOffset(qreal offset) +{ + m_medianLinePen.setDashOffset(offset); +} + +qreal JKQTPGraphBoxplotStyleMixin::getMedianLineDashOffset() const +{ + return m_medianLinePen.dashOffset(); +} + +void JKQTPGraphBoxplotStyleMixin::setMedianLineDashPattern(const QVector &pattern) +{ + m_medianLinePen.setDashPattern(pattern); + m_medianLinePen.setStyle(Qt::CustomDashLine); +} + +QVector JKQTPGraphBoxplotStyleMixin::getMedianLineDashPattern() const +{ + return m_medianLinePen.dashPattern(); +} + +void JKQTPGraphBoxplotStyleMixin::setMedianLineJoinStyle(Qt::PenJoinStyle style) +{ + m_medianLinePen.setJoinStyle(style); +} + +Qt::PenJoinStyle JKQTPGraphBoxplotStyleMixin::getMedianLineJoinStyle() const +{ + return m_medianLinePen.joinStyle(); +} + +void JKQTPGraphBoxplotStyleMixin::setMedianLineCapStyle(Qt::PenCapStyle style) +{ + m_medianLinePen.setCapStyle(style); +} + +Qt::PenCapStyle JKQTPGraphBoxplotStyleMixin::getMedianLineCapStyle() const +{ + return m_medianLinePen.capStyle(); +} + +void JKQTPGraphBoxplotStyleMixin::setMedianLineBrush(const QBrush &style) +{ + m_medianLinePen.setBrush(style); +} + +QBrush JKQTPGraphBoxplotStyleMixin::getMedianLineBrush() const +{ + return m_medianLinePen.brush(); +} + +QPen JKQTPGraphBoxplotStyleMixin::getMedianPen(JKQTPEnhancedPainter &painter, JKQTBasePlotter *parent) const +{ + QPen pw=m_medianLinePen; + pw.setWidthF(qMax(JKQTPlotterDrawinTools::ABS_MIN_LINEWIDTH,parent->pt2px(painter, parent->getLineWidthMultiplier()*medianLineWidth))); + pw.setJoinStyle(Qt::MiterJoin); + return pw; +} + + @@ -220,6 +319,7 @@ void JKQTPBoxplotVerticalGraph::draw(JKQTPEnhancedPainter& painter) { QPen p=getLinePenForRects(painter, parent); QPen pw=getWhiskerPen(painter, parent); + QPen pm=getMedianPen(painter, parent); QPen np(Qt::NoPen); QBrush b=getFillBrush(painter, parent); @@ -267,7 +367,7 @@ void JKQTPBoxplotVerticalGraph::draw(JKQTPEnhancedPainter& painter) { const double medianv=datastore->get(medianColumn,static_cast(i)); const double meanv=datastore->get(meanColumn,static_cast(i)); - QVector lines_p, lines_pw; + QVector lines_p, lines_pw, lines_m; //std::cout<<"(xv, yv) = ( "<=0 && JKQTPIsOKFloat(xv) ) { @@ -324,16 +424,16 @@ void JKQTPBoxplotVerticalGraph::draw(JKQTPEnhancedPainter& painter) { } if (minColumn>=0) { - lines_p.append(QLineF(xmi4, min, xma4, min)); + lines_pw.append(QLineF(xmi4, min, xma4, min)); lines_pw.append(QLineF(x, min, x, minstop)); } if (maxColumn>=0) { - lines_p.append(QLineF(xmi4, max, xma4, max)); + lines_pw.append(QLineF(xmi4, max, xma4, max)); lines_pw.append(QLineF(x, max, x, maxstop)); } if (percentile25Column>=0 && percentile75Column>=0) painter.drawRect(QRectF(xmi, p75, fabs(xma-xmi), fabs(p75-p25))); - if (medianColumn>=0) lines_p.append(QLineF(xmi+p.widthF()/2.0, median, xma-p.widthF()/2.0, median)); + if (medianColumn>=0) lines_m.append(QLineF(xmi+p.widthF()/2.0, median, xma-p.widthF()/2.0, median)); if (meanColumn>=0 && JKQTPIsOKFloat(meanv)) { plotStyledSymbol(parent, painter,x,mean); } @@ -343,7 +443,9 @@ void JKQTPBoxplotVerticalGraph::draw(JKQTPEnhancedPainter& painter) { if (lines_p.size()>0) painter.drawLines(lines_p); painter.setPen(pw); if (lines_pw.size()>0) painter.drawLines(lines_pw); - + painter.setPen(pm); + if (lines_m.size()>0) painter.drawLines(lines_m); + // add hit-test graph points if (meanColumn>=0 && JKQTPIsOKFloat(meanv)) { @@ -608,11 +710,13 @@ void JKQTPBoxplotVerticalGraph::drawKeyMarker(JKQTPEnhancedPainter& painter, QRe painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); QPen p=getLinePenForRects(painter, parent); QPen pw=getWhiskerPen(painter, parent); + QPen pm=getMedianPen(painter, parent); QPen np(Qt::NoPen); QBrush b=getFillBrush(painter, parent); p.setWidthF(qMin(1.0, p.widthF())); pw.setWidthF(qMin(1.0, pw.widthF())); + pm.setWidthF(qMin(1.0, pm.widthF())); double x=rect.left()+rect.width()/2.0; double xma=x+rect.width()/2.5; @@ -631,10 +735,11 @@ void JKQTPBoxplotVerticalGraph::drawKeyMarker(JKQTPEnhancedPainter& painter, QRe painter.drawRect(QRectF(xmi, p75, fabs(xma-xmi), fabs(p75-p25))); } + painter.setPen(pm); painter.drawLine(QLineF(xmi, median, xma, median)); + painter.setPen(pw); painter.drawLine(QLineF(x-w/4.0, max, x+w/4.0, max)); painter.drawLine(QLineF(x-w/4.0, min, x+w/4.0, min)); - painter.setPen(pw); painter.drawLine(QLineF(x, max, x, p75)); painter.drawLine(QLineF(x, min, x, p25)); @@ -656,10 +761,12 @@ void JKQTPBoxplotHorizontalGraph::drawKeyMarker(JKQTPEnhancedPainter& painter, Q painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); QPen p=getLinePenForRects(painter, parent); QPen pw=getWhiskerPen(painter, parent); + QPen pm=getMedianPen(painter, parent); QPen np(Qt::NoPen); QBrush b=getFillBrush(painter, parent); p.setWidthF(qMin(1.0, p.widthF())); pw.setWidthF(qMin(1.0, pw.widthF())); + pm.setWidthF(qMin(1.0, pm.widthF())); double y=rect.top()+rect.height()/2.0; @@ -679,10 +786,11 @@ void JKQTPBoxplotHorizontalGraph::drawKeyMarker(JKQTPEnhancedPainter& painter, Q painter.drawRect(QRectF(p75, ymi, fabs(p75-p25), fabs(yma-ymi))); } + painter.setPen(pm); painter.drawLine(QLineF(median, ymi, median, yma)); + painter.setPen(pw); painter.drawLine(QLineF(max, y-w/4.0, max, y+w/4.0)); painter.drawLine(QLineF(min, y-w/4.0, min, y+w/4.0)); - painter.setPen(pw); painter.drawLine(QLineF(max, y, p75, y)); painter.drawLine(QLineF(min, y, p25, y)); @@ -802,6 +910,7 @@ void JKQTPBoxplotHorizontalGraph::draw(JKQTPEnhancedPainter& painter) { QPen p=getLinePenForRects(painter, parent); QPen pw=getWhiskerPen(painter, parent); + QPen pm=getMedianPen(painter, parent); QPen np(Qt::NoPen); QBrush b=getFillBrush(painter, parent); @@ -847,7 +956,7 @@ void JKQTPBoxplotHorizontalGraph::draw(JKQTPEnhancedPainter& painter) { const double medianv=datastore->get(medianColumn,static_cast(i)); const double meanv=datastore->get(meanColumn,static_cast(i)); - QVector lines_p, lines_pw; + QVector lines_p, lines_pw, lines_m; //std::cout<<"(xv, yv) = ( "<=0 && JKQTPIsOKFloat(yv) ) { @@ -907,15 +1016,15 @@ void JKQTPBoxplotHorizontalGraph::draw(JKQTPEnhancedPainter& painter) { ymi4=transformY(yv-getBoxWidth()/4.0); } if (minColumn>=0) { - lines_p.append(QLineF(min, ymi4, min, yma4)); + lines_pw.append(QLineF(min, ymi4, min, yma4)); lines_pw.append(QLineF(min, y, minstop, y)); } if (maxColumn>=0) { - lines_p.append(QLineF(max, ymi4, max, yma4)); + lines_pw.append(QLineF(max, ymi4, max, yma4)); lines_pw.append(QLineF(max, y, maxstop, y)); } if (percentile25Column>=0 && percentile75Column>=0) painter.drawRect(QRectF(p25, qMin(yma,ymi), fabs(p75-p25), fabs(yma-ymi))); - if (medianColumn>=0) lines_p.append(QLineF(median, ymi-p.widthF()/2.0, median, yma+p.widthF()/2.0)); + if (medianColumn>=0) lines_m.append(QLineF(median, ymi-p.widthF()/2.0, median, yma+p.widthF()/2.0)); if (meanColumn>=0 && JKQTPIsOKFloat(meanv)) { plotStyledSymbol(parent, painter, mean, y); @@ -926,6 +1035,8 @@ void JKQTPBoxplotHorizontalGraph::draw(JKQTPEnhancedPainter& painter) { if (lines_p.size()>0) painter.drawLines(lines_p); painter.setPen(pw); if (lines_pw.size()>0) painter.drawLines(lines_pw); + painter.setPen(pm); + if (lines_m.size()>0) painter.drawLines(lines_m); // add hit-test graph points @@ -1028,6 +1139,7 @@ void JKQTPBoxplotVerticalElement::draw(JKQTPEnhancedPainter& painter) { QPen p=getLinePenForRects(painter, parent); QPen pw=getWhiskerPen(painter, parent); + QPen pm=getMedianPen(painter, parent); QPen np(Qt::NoPen); QBrush b=getFillBrush(painter, parent); @@ -1089,6 +1201,7 @@ void JKQTPBoxplotVerticalElement::draw(JKQTPEnhancedPainter& painter) { } if (drawMedian && JKQTPIsOKFloat(medianv)) { + painter.setPen(pm); painter.drawLine(QLineF(xmi, median, xma, median)); if (JKQTPIsOKFloat(medianv)) { QStringList sl=labelValues, sll=labelNames; @@ -1098,9 +1211,9 @@ void JKQTPBoxplotVerticalElement::draw(JKQTPEnhancedPainter& painter) { } } if (drawMinMax) { + painter.setPen(pw); if (JKQTPIsOKFloat(maxv)) painter.drawLine(QLineF(x-w/4.0, max, x+w/4.0, max)); if (JKQTPIsOKFloat(minv)) painter.drawLine(QLineF(x-w/4.0, min, x+w/4.0, min)); - painter.setPen(pw); if (JKQTPIsOKFloat(maxv)) painter.drawLine(QLineF(x, max, x, p75)); if (JKQTPIsOKFloat(minv)) painter.drawLine(QLineF(x, min, x, p25)); if (JKQTPIsOKFloat(minv)) { @@ -1308,10 +1421,12 @@ void JKQTPBoxplotVerticalElement::drawKeyMarker(JKQTPEnhancedPainter& painter, Q painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); QPen p=getLinePenForRects(painter, parent); QPen pw=getWhiskerPen(painter, parent); + QPen pm=getMedianPen(painter, parent); QPen np(Qt::NoPen); QBrush b=getFillBrush(painter, parent); p.setWidthF(qMin(1.0, p.widthF())); pw.setWidthF(qMin(1.0, pw.widthF())); + pm.setWidthF(qMin(1.0, pm.widthF())); double x=rect.left()+rect.width()/2.0; @@ -1331,10 +1446,11 @@ void JKQTPBoxplotVerticalElement::drawKeyMarker(JKQTPEnhancedPainter& painter, Q painter.drawRect(QRectF(xmi, p75, fabs(xma-xmi), fabs(p75-p25))); } + painter.setPen(pm); painter.drawLine(QLineF(xmi, median, xma, median)); + painter.setPen(pw); painter.drawLine(QLineF(x-w/4.0, max, x+w/4.0, max)); painter.drawLine(QLineF(x-w/4.0, min, x+w/4.0, min)); - painter.setPen(pw); painter.drawLine(QLineF(x, max, x, p75)); painter.drawLine(QLineF(x, min, x, p25)); @@ -1351,10 +1467,12 @@ void JKQTPBoxplotHorizontalElement::drawKeyMarker(JKQTPEnhancedPainter& painter, painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); QPen p=getLinePenForRects(painter, parent); QPen pw=getWhiskerPen(painter, parent); + QPen pm=getMedianPen(painter, parent); QPen np(Qt::NoPen); QBrush b=getFillBrush(painter, parent); p.setWidthF(qMin(1.0, p.widthF())); pw.setWidthF(qMin(1.0, pw.widthF())); + pm.setWidthF(qMin(1.0, pm.widthF())); double y=rect.top()+rect.height()/2.0; double yma=y+rect.height()/2.5; @@ -1373,10 +1491,11 @@ void JKQTPBoxplotHorizontalElement::drawKeyMarker(JKQTPEnhancedPainter& painter, painter.drawRect(QRectF(p75, ymi, fabs(p75-p25), fabs(yma-ymi))); } + painter.setPen(pm); painter.drawLine(QLineF(median, ymi, median, yma)); + painter.setPen(pw); painter.drawLine(QLineF(max, y-w/4.0, max, y+w/4.0)); painter.drawLine(QLineF(min, y-w/4.0, min, y+w/4.0)); - painter.setPen(pw); painter.drawLine(QLineF(max, y, p75, y)); painter.drawLine(QLineF(min, y, p25, y)); @@ -1459,6 +1578,7 @@ void JKQTPBoxplotHorizontalElement::draw(JKQTPEnhancedPainter& painter) { QPen p=getLinePenForRects(painter, parent); QPen pw=getWhiskerPen(painter, parent); + QPen pm=getMedianPen(painter, parent); QPen np(Qt::NoPen); QBrush b=getFillBrush(painter, parent); const double yv=pos; @@ -1517,6 +1637,7 @@ void JKQTPBoxplotHorizontalElement::draw(JKQTPEnhancedPainter& painter) { } if (drawMedian && JKQTPIsOKFloat(medianv)) { + painter.setPen(pm); painter.drawLine(QLineF(median, ymi, median, yma)); if (JKQTPIsOKFloat(medianv)) { QStringList sl=labelValues, sll=labelNames; @@ -1525,9 +1646,9 @@ void JKQTPBoxplotHorizontalElement::draw(JKQTPEnhancedPainter& painter) { addHitTestData(medianv, yv, "\\ensuremath{\\begin{bmatrix}"+sll.join("\\\\")+"\\end{bmatrix}\\;=\\;\\begin{bmatrix}"+sl.join("\\\\")+"\\end{bmatrix}}"); } } if (drawMinMax) { + painter.setPen(pw); if (JKQTPIsOKFloat(maxv)) painter.drawLine(QLineF(max, y-w/4.0, max, y+w/4.0)); if (JKQTPIsOKFloat(minv)) painter.drawLine(QLineF(min, y-w/4.0, min, y+w/4.0)); - painter.setPen(pw); if (JKQTPIsOKFloat(maxv)) painter.drawLine(QLineF(max, y, p75, y)); if (JKQTPIsOKFloat(minv)) painter.drawLine(QLineF(min, y, p25, y)); if (JKQTPIsOKFloat(minv)) { diff --git a/lib/jkqtplotter/jkqtpgraphsboxplot.h b/lib/jkqtplotter/jkqtpgraphsboxplot.h index 121bde2f81..ee6e12e00e 100644 --- a/lib/jkqtplotter/jkqtpgraphsboxplot.h +++ b/lib/jkqtplotter/jkqtpgraphsboxplot.h @@ -47,13 +47,6 @@ class JKQTP_LIB_EXPORT JKQTPGraphBoxplotStyleMixin: public JKQTPGraphLineStyleMi void initBoxplotStyle(JKQTBasePlotter* parent, int &parentPlotStyle); - - - /*! \brief set the line style of whisker lines */ - void setWhiskerLineStyle(Qt::PenStyle __value); - /*! \brief get the line style of whisker lines */ - Qt::PenStyle getWhiskerLineStyle() const; - /*! \copydoc boxWidth \see see boxWidth for details */ void setBoxWidth(double __value); @@ -61,6 +54,13 @@ class JKQTP_LIB_EXPORT JKQTPGraphBoxplotStyleMixin: public JKQTPGraphLineStyleMi \see see boxWidth for details */ double getBoxWidth() const; + + + /*! \brief set the line style of whisker lines */ + void setWhiskerLineStyle(Qt::PenStyle __value); + /*! \brief get the line style of whisker lines */ + Qt::PenStyle getWhiskerLineStyle() const; + /*! \brief set the width [pt] of whisker lines */ void setWhiskerLineWidth(double __value); /*! \brief get the width [pt] of whisker lines */ @@ -116,6 +116,72 @@ class JKQTP_LIB_EXPORT JKQTPGraphBoxplotStyleMixin: public JKQTPGraphLineStyleMi /** \brief build a pen to be used for drawing whiskers */ QPen getWhiskerPen(JKQTPEnhancedPainter &painter, JKQTBasePlotter *parent) const; + + + + + + + /*! \brief set the line style of median lines */ + void setMedianLineStyle(Qt::PenStyle __value); + /*! \brief get the line style of median lines */ + Qt::PenStyle getMedianLineStyle() const; + + /*! \brief set the width [pt] of median lines */ + void setMedianLineWidth(double __value); + /*! \brief get the width [pt] of median lines */ + double getMedianLineWidth() const; + + /*! \brief set the color of median lines */ + void setMedianLineColor(QColor __value); + /*! \brief get the color of median lines */ + QColor getMedianLineColor() const; + + + /** \brief sets the dash offset for a custom dash style of median lines + * \see https://doc.qt.io/qt-5/qpen.html#setDashOffset + */ + void setMedianLineDashOffset(qreal offset); + /** \brief returns the dash offset for a custom dash style of median lines + * \see https://doc.qt.io/qt-5/qpen.html#setDashOffset + */ + qreal getMedianLineDashOffset() const; + /** \brief sets the dash pattern for a custom dash style of median lines + * \see https://doc.qt.io/qt-5/qpen.html#setDashPattern + */ + void setMedianLineDashPattern(const QVector &pattern); + /** \brief gets the dash pattern for a custom dash style of median lines + * \see https://doc.qt.io/qt-5/qpen.html#setDashPattern + */ + QVector getMedianLineDashPattern() const; + /** \brief sets the join style of median lines + * \see https://doc.qt.io/qt-5/qpen.html#setJoinStyle + */ + void setMedianLineJoinStyle(Qt::PenJoinStyle style); + /** \brief returns the join style of median lines + * \see https://doc.qt.io/qt-5/qpen.html#setJoinStyle + */ + Qt::PenJoinStyle getMedianLineJoinStyle() const; + /** \brief sets the cap style of median lines + * \see https://doc.qt.io/qt-5/qpen.html#setCapStyle + */ + void setMedianLineCapStyle(Qt::PenCapStyle style); + /** \brief gets the cap style of median lines + * \see https://doc.qt.io/qt-5/qpen.html#setCapStyle + */ + Qt::PenCapStyle getMedianLineCapStyle() const; + /** \brief sets the brush used to fill the line area of median lines + * \see https://doc.qt.io/qt-5/qpen.html#setBrush + */ + void setMedianLineBrush(const QBrush& style); + /** \brief gets the brush used to fill the line area of median lines + * \see https://doc.qt.io/qt-5/qpen.html#setBrush + */ + QBrush getMedianLineBrush() const; + + /** \brief build a pen to be used for drawing medians */ + QPen getMedianPen(JKQTPEnhancedPainter &painter, JKQTBasePlotter *parent) const; + protected: /*! \brief set the color of the graph (colors all elements, based on the given color \a c )*/ void setBoxplotColor(QColor c, JKQTBasePlotter *parent); @@ -124,6 +190,10 @@ class JKQTP_LIB_EXPORT JKQTPGraphBoxplotStyleMixin: public JKQTPGraphLineStyleMi QPen m_whiskerLinePen; /** \brief line width (in pt) of the whisker lines */ double whiskerLineWidth; + /** \brief line style of the median lines */ + QPen m_medianLinePen; + /** \brief line width (in pt) of the median lines */ + double medianLineWidth; /** \brief width of box in percent of distance between the current two posColumn values * if we only plot one box&whiskers then this is the width in pt */ double boxWidth; diff --git a/screenshots/jkqtplotter_simpletest_boxplot.png b/screenshots/jkqtplotter_simpletest_boxplot.png index 9621f01af68880282c77d86e4264fd198c55eda5..55f844c8f4a130e90d8b54e2382df87997f5d955 100644 GIT binary patch literal 35306 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 QgFxIBk-C*7to8W+011#Q>i_@% literal 34283 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%0DW3hk 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 X{4&NG+nxijEZDt$&$k6%ABp-WCg$O9 diff --git a/screenshots/jkqtplotter_simpletest_boxplot_small.png b/screenshots/jkqtplotter_simpletest_boxplot_small.png index a95b5a49b51e091bc9cefb7ed20f5ee90a5a5f5f..11e72a4e40e24fceb3f3770d4f580f762ada49f9 100644 GIT binary patch literal 12415 zcmV-_Fo4gAP)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000Uv zX+uL$Nkc;*P;zf(X>4Tx07%E3mUmQC*A|D*y?1({%`nm#dXp|Nfb=dP9RyJrW(F9_ z0K*JTY>22pL=h1IMUbF?0i&TvtcYSED5zi$NDxqBFp8+CWJcCXe0h2A<>mLsz2Dkr z?{oLrd!Mx~03=TzE-wX^0w9?u;0Jm*(^rK@(6Rjh26%u0rT{Qm>8ZX!?!iDLFE@L0LWj&=4?(nOT_siPRbOditRHZrp6?S8Agej zFG^6va$=5K|`EW#NwP&*~x4%_lS6VhL9s-#7D#h8C*`Lh;NHnGf9}t z74chfY%+(L4giWIwhK6{coCb3n8XhbbP@4#0C1$ZFF5847I3lz;zPNlq-OKEaq$AW zE=!MYYHiJ+dvY?9I0Av8Ka-Wn(gPeepdb@piwLhwjRWWeSr7baCBSDM=|p zK0Q5^$>Pur|2)M1IPkCYSQ^NQ`z*p zYmq4Rp8z$=2uR(a0_5jDfT9oq5_wSE_22vEgAWDbn-``!u{igi1^xT3aEbVl&W-yV z=Mor9X9@Wki)-R*3DAH5Bmou30~MeFbb%o-16IHmI084Y0{DSo5DwM?7KjJQfDbZ3 zF4znTKoQsl_JT@K1L{E|XaOfc2RIEbfXm=IxC!on2Vew@gXdrdyaDqN1YsdEM1kZX zRY(gmfXpBUWDmJPK2RVO4n;$85DyYUxzHA<2r7jtp<1XB`W89`U4X7a1JFHa6qn9`(3jA6(BtSg7z~Dn z(ZN_@JTc*z1k5^2G3EfK6>}alfEmNgVzF3xtO3>z>xX4x1=s@Ye(W*qIqV>I9QzhW z#Hr%UaPGJW91oX=E5|kA&f*4f6S#T26kZE&gZIO;@!9wid_BGke*-^`pC?EYbO?5Y zU_t_6GogaeLbybDNO(mg64i;;!~i0fxQSRnJWjkq93{RZ$&mC(E~H43khGI@gmj*C zkMxR6CTo)&$q{4$c_+D%e3AT^{8oY@VI<)t!Is!4Q6EtGo7CCWGzL)D>rQ4^>|)NiQ$)EQYB*=4e!vRSfKvS(yRXb4T4 z=0!`QmC#PmhG_4XC@*nZ!dbFoNz0PKC3A9$a*lEwxk9;CxjS<2<>~Tn@`>`hkG4N#KjNU~z;vi{c;cwx$aZXSoN&@}N^m;n^upQ1neW`@Jm+HLvfkyqE8^^jVTFG14;RpP@{Py@g^4IZC^Zz~o6W||E74S6BG%z=? zH;57x71R{;CfGT+B=|vyZiq0XJ5(|>GPE&tF3dHoG;Cy*@v8N!u7@jxbHh6$uo0mV z4H2`e-B#~iJsxQhSr9q2MrTddnyYIS)+Vhz6D1kNj5-;Ojt+}%ivGa#W7aWeW4vOj zV`f+`tbMHKY)5t(dx~SnDdkMW+QpW}PR7~A?TMR;cZe^KpXR!7E4eQdJQHdX<`Vr9 zk0dT6g(bBnMJ7e%MIVY;#n-+v{i@=tg`KfG`%5fK4(`J2;_VvR?Xdf3 zsdQ;h>DV6MJ?&-mvcj_0d!zPVEnik%vyZS(xNoGwr=oMe=Kfv#KUBt7-l=k~YOPkP z-cdbwfPG-_pyR=o8s(azn)ipehwj#T)V9}Y*Oec}9L_lWv_7=H_iM)2jSUJ7MGYU1 z@Q#ce4LsV@Xw}%*q|{W>3^xm#r;bG)yZMdlH=QkpEw!z*)}rI!xbXP1Z==5*I^lhy z`y}IJ%XeDeRku;v3frOf?DmPgz@Xmo#D^7KH*><&kZ}k0<(`u)y&d8oAIZHU3 ze|F(q&bit1spqFJ#9bKcj_Q7Jan;4!Jpn!am%J}sx$J)VVy{#0xhr;8PG7aTdg>bE zTE}(E>+O9OeQiHj{Lt2K+24M{>PF{H>ziEz%LmR5It*U8<$CM#ZLizc@2tEtFcdO$ zcQ|r*xkvZnNio#z9&IX9*nWZ zp8u5o(}(f=r{t&Q6RH!9lV+2rr`)G*K3n~4{CVp0`RRh6rGKt|q5I;yUmSnwn^`q8 z{*wQ4;n(6<@~@7(UiP|s)_?Z#o8&k1bA@l^-yVI(c-Q+r?ES=i<_GMDijR69yFPh; zdbp6hu<#rAg!B711SuW>000SaNLh0L01m?d01m?e$8V@)0000XbVXQnLvm$dbZKvH zAXI5>WdJfTF*!OgH99agATc>QH8(mlFgMVq&j0`=jY&j7RCr$PeF<r7SlcG`JIEf1y!JqI#j#QlH1bklZt#^M{ z-LPrS;|hm@p>Q}a->g!pI1#iI1>yOHO9+C1Ly*Lazf34AOjBY39AXz1FDey4K8?ny z?ClOTiQgZX^Z7WAr-?9aG}_1_XnTSH5lG^2C`2hhrb?~K*XMD+e(!^Zja#n`532I~ z8;Z+pvx3z+o^L7&`MrS<$f>@$G?=niZ1v_7vV6e7W( zKR@5d@nPRwu*_08J~3@J8%Y?|5j>t*m0Ihc^OaZC>hm;WC308<@G{?T4-!>Tc~!t4Fq!n+{)30tZ{FTF+7l-3 zhQexxpIp6mU6*fgIqcA`AX=x@io*vzWlooGT2oU!G}tGEd97CCw9lyX@`WI-su6-g zwMMPh=qt)Cg98IL#HaRqf)E& zIt};E`$sl!yR%47wH^a2NY4p}0~lLswU`Zg(984}$1vVP!63#c&ByG>^Wsqq#h^~7 zqh&-uNF>fGltWyI45f`wn45A1B??RO1zyURz^nL~iSeF+;e5SbZ!*tLjg8x9by^M7 zDSE-3_uO;!@};_l#*WLEf})-kLLo~@$;9N;0}nk?WYk5*We&@SV3@NyLkq;A$rlAo zWrXCxVDb5;C#QI5Og*MZ!`gKXwKdfk_$HIV>2#Y53(N&(I;>S{=**_|4d4>JYLTb} z0b`dA-zE7=1A1vpPTYW5AjOimN+48UOitX8>P1B?jKZZO8M7UJnKFb0>-Bm@Mn;;O zo1rb4rAv?E7sd*_4$%}wKFS9I0jS@I7Da?kw1Pl|&I6~<%*@Qq%~e%ZVFHkH698A7 z*XIcVUubxE*l08s6cofT0c4D^n782WcpP8p;dA(Z0UE zhK2_DVi1V?#V_tCQAr#{_23p@6egq)cX;mHxnswUAU3R`*!~R@U$->g?V{-zx?GdtrHWU-@BI^9VHfvpi;qHK|Zd5R)BOi)Vy9V z22){SAv-ZLMkAdFMl9}d*REZx00Rz9OibY1y1F_Dk#ge!C2=~2f|O1G6zl2fDJm)| zE-scAi0Yw|=%Y!m+t$|B)YJq6P0ES~6oWwgvLz8IHy%)^y`y7mON*3F0Ej~M(11W9 zf!D5GJ9GNh%H;TfB;B~2I_|b7z(VSGC%>=Z{&euH8nNR zqDcj!tsyX#>q6;)KPjC6D2A?#4v|zKdLkXCp^%hL0LVdeL8gpA+yV-)`7j}cfZ1%; zYBU&s1S71x964|Yp%S5~zzW(6gB>#&Xt?8!JHQ7N4rYZlYu41()*>G@U~SR@9l z|4IoZz(#|VPy%d{lM-2D{NhEY)jEFpvXssOXnC;1;t3TgI>K*%`&-OaPe1*%Z){9k zULK(&U0|xfz`y67d!+O{pnlOtAYMvmjoH~*jE1BtH+4814wK20@r}p8*4H<7^(wl5 zL2a#+l_>@X2V2jdfA|kSJ2ahGkupF>cwn4#b&Z}oha^Y$KwHKnB*}!F|fwQ#xVI|FtM^Z$fNhrp}wO> z`$Z#PK_sCNwwu1Zyk^He)py;EB<$wTfBy4NKKbO=zV1FaR|y5W#AfPa>CpTM`x*H$BYFOkkVNLz6YueNa?Hr1;dPC zDV-fK1!_#DHTT|&=}F4U6qux;02>50(O^ zL(HXcEkPS*N#^tQ_4UE*gpCAJkqI3O&JagoyWI|HOkfNWhZr;3k?b@~C z5dz(KCRJPH7ExOS}imi4Os*3Z)8bCZp-)Z;lpt4 z>+9=T4ro7i?ARB+@CBC49xG*aW^$6e_8Jic>Z{Gn(B~5nudO9dJ>`IFZ!~7OI@8@v zUV4dO3`8bBh;3^l+qOwb0P_@Fi|3!GmrDmjLql-wAA01El5F`Z=Gd-q6c>|ke1rVi zpOMEOCngj5(?6y0&wiF3%I5Y*M#zmDv|IT7Qb4?=Wg*FOu3jZpt8_}rh^9t?LA~k$ z`@XP{25@OM(@0Sf_P|xMhAl-HV0+0Q>{4)qX0#xtk!|FR6=&hQMl?6pF+4D zIgfC)AP$9?CxgLYKzuI(kaCxS*A*ua=Po`yD}kw>nEoXgHLPy2PK8Q*xumPB3y062 zKfh_yrq6xubF`fJp#P~;r}pmMtJL$m=p}F}Y}KumqmSW+x~q`p0#K_h?{_U;%7CzuQA zmT)M9P938&BktsFf)#te(bS}`<#SkJ$WgfJk)tpQu#ID^S>$B1`W4xumkC*K-`~a* z4h)cA|C;RIPk!?o8d&7~`GuU{{6_QUo7{l|B(wK^;HC8UlPg!~?nI)1ql1GP_=VAs zqma6_*-2l~IC_-)=YNue2MI_*c<()O;sniSNipOfIl}$hztJ72%%IoPRc!f?(POmH z)W}gdF)`tAIHbg<4^Uz?HKd_oA=KBCwQK2bbY@A3R6bq6nk_4%0_*A$1{{U_^zB}! z(`mI@+3=O4u&Agg<}($aHoz_qg_4A9{EAfMFLv8fM1FpLad9!Ln;eDk98>pCbGVsc zs{t&28=Et6vD|b2GRR*&6o$iN7cTT3J{(-u_rf83`B;QxpHFf5N>Dg5LQb9}r%x{g zBu7W3qY5Du2n-xQZoP8F0cT*D0L!zdhqm%E!R4aQM7iBkQXwco;p{AoR~r83f5-

sRPvz^POlo_M0=OJ6dSmP%R50<=|BkoD`Sua=D!Dg%p!G&j?StQ18o zPhs)XXdaKpZnwu+q|xqVe4zg#q=O^^7lVFw%Pf8JC=t>U7zc2omRk8r4NCM3h2(=5 zfZc5Du01IHcfYHa9DWc5$f(F z17!OBeu&aVeMLA9P}A;i<3}IS`}BHgKwlOFUt{CkgAYbu2m&L!_Q^MiR4Uz@Z|0pk zMV)Jz+VXs;tK&d2U}ZPU;NJZ zoT0op6uMk4{9+)swY6>DycsNtM<|8Ik00L$C7A%+p+od8AAXo6lOolpxdQoG{K!b$-Vq?QVOa3?|zr; z*dgVl1`IGz_~;)$He&O~DpHVKD5Ac;9^(VRq!hKYn{QH8838ovi4)`x{$Np`z|}D|q-kbHe+h8~Q}~bnNZ%KUUdU&69^K+-6b!_l z{Di(hlrDv@y+*r8eSMO-u&s@L-5~wBFg_sa#TTV`7D(e`mbVfh47w;fpsf*NGP41s zv5_qkvb;nz=H?U@C}IUum_uriqmbHEIjmGf*pZ`fe0)5;U3&;smUSjjKCB{$E(HC} z8cwHkY*=OmZEeMD-F;fu{iwmS;6v7Pq_kWji79$CT|MX8#3nLhHl9fBEGM zor;@7;XH5~4zIURi7!7Y#>CVGix1G!&RxDL@rQ zTYo=ww3qwYg&Y<`AqoNL9B6g~B`mHu0C^a2=*2k}7bAXivpokXkqXebYBl}-O-&7r zEQfN#jD@KYqkPq}NLzLO$w37XhbLUg@AunmHpG+cRNyF^jS$epU>yMwmZR)M1yQhX z!Jmxvkrp5a(jYTBpw2NlD5KC_c&4WZjvx0a@qm1ioeGso1%s!pt?lB)i_Oi=d-v{T z3jwf5Pn|mT#1l`@vw2?k&2Q>PM(9R?4E+93LxbzbKjz}K0y+vL#r@11mH)#Z>d=iW z7O4eM2Q)g`6c!yCnn4gkeSNMU{*V*5FH(Qkp2|OZRQJ|fi!5reg@L|ijg+L~>Asu$ z@BWT%Qf5u$*x9q*P$*BOs=n{OETtVdaNxp)*6)7rZ{zIR10W36Is0E(a4H(-A7qMk zD*pPf>Ap{N6T|?G4yOX`{;&TkWr($$8)~SHZ=p=*>4Q04f!2oFywG95=c!Rv~ zf|P_0V7HqJ3iwEY?0``?bm2nX-FNHe|JP&27#J9UQ}M_jeJ;LJfqrK&7}l*@2QJz8 ziw_)Pno~Yx12`lx0Rm%kvTWbz)0b8_%la=yzQt0xb7%Ja0nyaNuOe8)_>dB}3UE$( zd+D>YkwzN8gd_?Vh}RIpFn5X@!slg(eeqv~S#y<|Is17cbI) z2+P4C6o`I)>GsC><;y|8f8xp&DXkFXD5TRb8%%NWgCEd$)n9svZWJIO^7Pa6^SaSF zue?IO|9z?aZI8mbI*;96F#kWWvOzR82`Pl)o|u?`cPOQo08%S-!I z!(3BSzh{pzgXbBSz~ypTCz8Eu50cBv%L@t$q;x8XOo2JX106V#b*1cJHk&KTD_Co1 zF&E~rGLWNi)niprh-q~h{HoQC)j%OU6IixC`x$+=;n*=6fhBzMq;&MQ$7-O^Vj=h6 zPd@V*^2INb?|g?wkX*lBI(pk94u$LuVD<}0xwjB-R6rODjg9oTsVS3Jjgo?`F0BSc zQxi)e?B21lF}Q=n!^3lPb6&4k5Fy&b^p{2AfE~lpL&=n(L zx0~IOR7?pdB@J@G3!?^<#o6*bckZ0QU;u@YckPi0&Zkm**Z$#$7k1TUkz~s^ePpub z%k!$KDdRiuNRM3DZ1mfAg5a;L^gi~O)8WYQ3;7A)a5&O)wc`O?96WgNLTl^)`tJ9f z!Fcc5kBp3%OeQE&P`GK+rgiJqiATuv^z^Y~$7J5MCx;GEMfA`^QZgApA$r5@^H0$M zMJNO?z*@!soEGPwqNBQXb#+BWMI|LA7$VUFj;a;;#TQuoX&U`W1f~yV1&Vj9m_P+Z zffs-YjH4nLbAXgiimopDR>QmRQi~q}5hT02rK344GnCNsn9MMLl$6j{w4p^2K~g#O zn1ei&ps=Qf?AjF@s;i}=IV>|2v$b-#Rai|F2EAUN_>6fD(U7As7!2O}M-k^C1Omh7 z&W&HWGMn+Yf<8q6FJOnoM&{jcyOD8VW;x|3qh}XJW#o^tbm{J64k- zHI$Y@{p&3jDJusN@hRlQU3;GA@hfGas0b;c1Y+dN163;Dx^>O2U7EzJuW1QP1*{RI zMApD9C?$kojZ3%%-L*! zjuP4ORZ1WnUbR{c3Y8M*a=8o!1MBRH!0mRUPe_SOf%<@;-rkNMq z<<6cx+tSif%f1;VQh4;}QT7~$B4E3ck^caeJ^X&ZfVi(KZzHJtjj5a82Q;lae`cG49}$+M z!3s-yz5q@?iWyiEmI`1H08#>d&Nb(?Dg2ss_PD7OcD&g!(=#*YoD2GbK8J74F&FfT z5#+FlON`ikewRPs4bX_&AMngae1VWDL`PDBz?*rlkfU*U|7H^K2V5Q((TGVgGmsaM zE}G~PEHdj4%+d&wbM847!O{LB{eve4rJGqXP<`pE-zcl7%GZQr#shOL%F4=$=Ko(H ztSPu7n>KA?$qdl1`_H&_Y z#AU27aw_Rk{-8e;4C!?#TkY2g`92|A35okC0Y_e+eSM>5<96+KN*Guh4-0-lRi+|n zG~|HzK0;nW_ms{^3a8s?GMcz~bw71=3iMarS;>;=LczJPr>E!a#~(lT#J(hRA%>l@ zHoB?W6yXoR5X5kl5~%b zxTzMYJWwr|rcxqByh_MnLXJs6{jr)q%}dGS3;B`oi}!!wJ?kZBNt|#_6m?J%%mCXe zJym}zu!1OrQF`%b7wP+n45>s6VX9hd=0hzZ6(qm~5D=ls$RRNZCBmZeF`092HUk`e}`khVehkdzSHR* zaZg>Fx_aQM$LfJ`f9>Ek-?VS|-0ATzir?!sV)KJ%@CnTApd*e(&zr~xvhV)HNQle9ZmGto3y|N1B@4efe1*sVt&Ln zQwq@nc{N|YwOplDAp*lsim2rxyoaZ5#%NR+r=3rmr$vN}EIx!VL%1<6HZu~&3GZKY z>Ge;p*A*%-Xc!c1Jw^=^7&{7K=X7^>>-BoO-QLmBv0=l8`|i6>JVHm|i4!OG?c0am z#B#C(oEwb7tTyD{5qX;LhoNwY%M%}NNKnDCys>hBIUi170SJWO$_t-a@EqaV8x2OD zOUGh>Bb~T;TrQW%q`;>kTSa{3t6!gVhZj)@R>#N3;rW-AmQGAew6(Qu+_-Vio;{51 z2!)Dlp+P3wjlR`Vgf?fp z_UIFdPFVyLflB{grg2@^|gi#GF^03ysRmG!(xecQ`3{mUraPyt=ir$u z2iy%Di6%nUXA(jUAy1V@=5)a<2u6W4#^y@_Czj09oB*6!?yz&nd3FC)DIp6+4Wr{$ zIu&pjF8=(YZNL_A2L_H0^c?94`9ggk_Vpd>3k5>mzv~`2F#t35#=#qdrv}5p@U?fZ z4Szh0oU3nN9XUTD_=V2>o#PkB;ZP!CZMOz(LCu6lQ=p;i;JCXq!>lmd;qSOtb1xml zF-Orl(`1kzwCQX`jv~5F6tB!+*Wj3GY^-Cf`%t&v=^r{X)bmkKa5mU~tiSJQAL`lv zVgKOCL3(%ZcMqH#5CTHie|HU?9>PssfA4zt;ci&MHTS|rO@fu;R7~|uIY*oon=0UV z;jUoH(}+I=Wun%rLvu8u(Q9z$=x&Gvd;zo+jd%lSFO7~yFgM^V8sRzhyK2=b6~C5` zzm<^;R>Ar!&##_0Jx}>q3W0bAJWzFpS_56!TMC{8E(e7FBZN!BpG6O_GA6)G*+uB-2|&M@td2Xtvx1x=J$(2u6lr~Z zJEnPp$7z3!56a{8yXZ88|)cwMcI>dWs_3@cA`<{F%$y}(c3$YT={;PHw0;o%l5wL|2 zbXqZRTewJ^=2wYMXHWf(m_I@3MF;t_V_oC^4l z)z#H2XxBa&0)YTsI!yd>(}hu8{zga zeYz>GQ!zz`L&G+etC?b^K<8$Rm}yM6_*@J9-x+7b3^{2X<-^}m2bv3b#1Eu zM8DtRw_dRhoEm_0Vr{cp8ZEGiz=dsQCi$*C+BZV=rvtUWSG#uC+N!&%iq;ja*}0}_ zM^#ZhjZ|!}C~hpSyQi*DSIAm37RWRc)2yk$K?#aqCTpmPx}>P2bYm&1RI;I@tfdSQ zOOpj=Dk7+1&>M7*!yu;A2=mn3N{jU7WAjs+(Hv+CLz$s;LupY%k+IxJBkPKc6-Kn3 z0prUjS~M*9=Of4rk^)OXp{0 zBc>`-;o3q(P{ZcOn~NGHr5M5OMPU*^0auDoxy^^rWGFgGTw;jMi4HUHDRvdQ3S;x5 zLae~(z~(sFm6^i2LIb+lV%*BrnH6V|E`h@(zEh!4M~7eNbU6!5%fIED!vZkfD7p5a zv@{X%DTMEW2~#aX$`UgZ`ZO6qae;usH5BV8C9+23sqpNKR1!hetA&YC*uE7J75{cpS`M`~okVQvFhZK_qq@g=XiFg1n znDtrTif_)a60NPRxFoX<&~5E@dwYBP{rBGw8-x{$3zQrk9W5;_g#?+Nj!R&ygPSc| zw#W+vMn*=elYM3w)SG*-)~iq(uIf0Q9@0>Je8QA0OB2^=7kKULcO5HDwlYB7l-W zhe )?-ismP`a(7t>SZ^Aj>av!H!s1hTgE2L-D$BzIK^0#H8ymxn~u0R5LWfedf~ z`7$_)egtXIdl>5|FC9n#Tw01H24rG13=9mQ=2BJypk&f3LJ0aR6wjqgm!MSSWzxn< zc2N|-&7zZ?J$p9Ns)@iDk`nR2s1Yxlj>m&L$7xJ@_CP(LMG;|qv&<|3ov)NA0D})| z8NEl5yGF&JAyP55(uJHNjR6Xvc@%7Mun1{rBL&+XO|6_TQ5t=6T$vi80XZI{U$Ody z!rX!)h18^h=?kicmK@3~fIQYAV)8Q%0A$5vW)o;@D_27_AmcAOGn>G`z5D)==B;<8 x@aSR=D-rPBxc_+Rr?qPvBb4T_x)2sZ{~xDI@BWdOSiS%N002ovPDHLkV1k0~k52#q literal 10533 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