mirror of
https://github.com/jkriege2/JKQtPlotter.git
synced 2024-12-24 17:41:39 +08:00
bugfixed optimized line-drawing
This commit is contained in:
parent
c3afee2c1f
commit
064f01d0b0
@ -446,7 +446,7 @@ QList<QPolygonF > JKQTPClipPolyLines(const QList<QPolygonF > &polylines_in, cons
|
||||
} else if (l==lclipped) {
|
||||
if (out.last().size()==0) {
|
||||
out.last()<<lclipped.p1();
|
||||
} if (out.last().last()!=lclipped.p1()) {
|
||||
} else if (out.last().last()!=lclipped.p1()) {
|
||||
out<<QPolygonF();
|
||||
out.last()<<lclipped.p1();
|
||||
}
|
||||
@ -454,7 +454,7 @@ QList<QPolygonF > JKQTPClipPolyLines(const QList<QPolygonF > &polylines_in, cons
|
||||
} else if (l.p1()==lclipped.p1() && l.p2()!=lclipped.p2()) {
|
||||
if (out.last().size()==0) {
|
||||
out.last()<<lclipped.p1();
|
||||
} if (out.last().last()!=lclipped.p1()) {
|
||||
} else if (out.last().last()!=lclipped.p1()) {
|
||||
out<<QPolygonF();
|
||||
out.last()<<lclipped.p1();
|
||||
}
|
||||
@ -463,7 +463,7 @@ QList<QPolygonF > JKQTPClipPolyLines(const QList<QPolygonF > &polylines_in, cons
|
||||
} else if (l.p1()!=lclipped.p1() && l.p2()==lclipped.p2()) {
|
||||
if (out.last().size()==0) {
|
||||
out.last()<<lclipped.p1();
|
||||
} if (out.last().last()!=lclipped.p1()) {
|
||||
} else if (out.last().last()!=lclipped.p1()) {
|
||||
out<<QPolygonF();
|
||||
out.last()<<lclipped.p1();
|
||||
}
|
||||
@ -481,3 +481,12 @@ QList<QPolygonF > JKQTPClipPolyLines(const QList<QPolygonF > &polylines_in, cons
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
QList<QPolygonF> JKQTPSimplifyPolyLines(const QList<QPolygonF> &lines_in, double maxDeltaXY)
|
||||
{
|
||||
QList<QPolygonF> l;
|
||||
for (const QPolygonF& p: lines_in) {
|
||||
l<<JKQTPSimplifyPolyLines(p, maxDeltaXY);
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
@ -400,6 +400,15 @@ JKQTCOMMON_LIB_EXPORT QList<QPolygonF> JKQTPClipPolyLines(const QList<QPolygonF>
|
||||
*/
|
||||
JKQTCOMMON_LIB_EXPORT QList<QPolygonF> JKQTPClipPolyLine(const QPolygonF & polyline_in, const QRectF& clipRect);
|
||||
|
||||
/*! \brief tries to reduce the complexity of the given list of poly-lines \a lines_in, but keeping the appearance as if all lines were drawn
|
||||
\ingroup jkqtptools_drawing
|
||||
|
||||
\param lines_in list of poly-lines to be simplified
|
||||
\param maxDeltaXY a group has to be either less wide or less high than this, typically equals the linewidth of the poly-line
|
||||
\return a simplified version of lines_in
|
||||
*/
|
||||
JKQTCOMMON_LIB_EXPORT QList<QPolygonF> JKQTPSimplifyPolyLines(const QList<QPolygonF>& lines_in, double maxDeltaXY=1.0);
|
||||
|
||||
/*! \brief tries to reduce the complexity of the given poly-line \a lines_in, but keeping the appearance as if all lines were drawn
|
||||
\ingroup jkqtptools_drawing
|
||||
|
||||
|
@ -124,11 +124,12 @@ void JKQTPXYLineGraph::draw(JKQTPEnhancedPainter& painter) {
|
||||
if (drawLine) {
|
||||
//qDebug()<<"JKQTPXYLineGraph::draw(): vec_linesP.size()=="<<vec_linesP.size();
|
||||
|
||||
const QList<QPolygonF> linesToDraw=JKQTPClipPolyLines(vec_linesP, cliprect);
|
||||
QList<QPolygonF> linesToDraw;
|
||||
if (getUseNonvisibleLineCompression()) linesToDraw=JKQTPClipPolyLines(JKQTPSimplifyPolyLines(vec_linesP, p.widthF()*getNonvisibleLineCompressionAgressiveness()), cliprect);
|
||||
else linesToDraw=JKQTPClipPolyLines(vec_linesP, cliprect);
|
||||
//qDebug()<<"JKQTPXYLineGraph::draw(): linesToDraw.size()=="<<linesToDraw.size()<<", clip: x="<<xmin<<".."<<xmax<<", y="<<ymin<<".."<<ymax;
|
||||
for (const auto &linesPFromV : linesToDraw) {
|
||||
for (const auto &linesP : linesToDraw) {
|
||||
//qDebug()<<"JKQTPXYLineGraph::draw(): linesPFromV.size()=="<<linesPFromV.size()<<" useNonvisibleLineCompression="<<getUseNonvisibleLineCompression();
|
||||
const QPolygonF linesP=getUseNonvisibleLineCompression()?QPolygonF(JKQTPSimplifyPolyLines(linesPFromV, p.widthF()*getNonvisibleLineCompressionAgressiveness())):QPolygonF(linesPFromV);
|
||||
//qDebug()<<"JKQTPXYLineGraph::draw(): --> linesP.size()=="<<linesP.size();
|
||||
if (linesP.size()>0) {
|
||||
if (isHighlighted()) {
|
||||
|
Loading…
Reference in New Issue
Block a user