bool QwtPlotZoomer::accept(QwtPolygon &pa) const { if ( pa.count() < 2 ) return false; QRect rect = QRect(pa[0], pa[int(pa.count()) - 1]); #if QT_VERSION < 0x040000 rect = rect.normalize(); #else rect = rect.normalized(); #endif const int minSize = 2; if (rect.width() < minSize && rect.height() < minSize ) return false; const int minZoomSize = 11; const QPoint center = rect.center(); rect.setSize(rect.size().expandedTo(QSize(minZoomSize, minZoomSize))); rect.moveCenter(center); pa.resize(2); pa[0] = rect.topLeft(); pa[1] = rect.bottomRight(); return true; }
void QwtPolygonClipper::clipEdge(Edge edge, const QwtPolygon &pa, QwtPolygon &cpa) const { if ( pa.count() == 0 ) { cpa.resize(0); return; } unsigned int count = 0; QPoint p1 = pa.point(0); if ( insideEdge(p1, edge) ) addPoint(cpa, count++, p1); const uint nPoints = pa.size(); for ( uint i = 1; i < nPoints; i++ ) { const QPoint p2 = pa.point(i); if ( insideEdge(p2, edge) ) { if ( insideEdge(p1, edge) ) addPoint(cpa, count++, p2); else { addPoint(cpa, count++, intersectEdge(p1, p2, edge)); addPoint(cpa, count++, p2); } } else { if ( insideEdge(p1, edge) ) addPoint(cpa, count++, intersectEdge(p1, p2, edge)); } p1 = p2; } cpa.resize(count); }
/*! Fill the area between the curve and the baseline with the curve brush \param painter Painter \param xMap x map \param yMap y map \param pa Polygon \sa setBrush(), setBaseline(), setCurveType() */ void QwtPlotCurve::fillCurve(QPainter *painter, const QwtScaleMap &xMap, const QwtScaleMap &yMap, QwtPolygon &pa) const { if ( d_data->brush.style() == Qt::NoBrush ) return; closePolyline(xMap, yMap, pa); if ( pa.count() <= 2 ) // a line can't be filled return; QBrush b = d_data->brush; if ( !b.color().isValid() ) b.setColor(d_data->pen.color()); painter->save(); painter->setPen(QPen(Qt::NoPen)); painter->setBrush(b); QwtPainter::drawPolygon(painter, pa); painter->restore(); }