From b60b8b7d9d8bc7c726d2fe7989ea7164fa8ba3db 2012-03-01 12:11:22 From: Marek Rosa Date: 2012-03-01 12:11:22 Subject: [PATCH] Spline somewhat working --- diff --git a/example/splinechart/splinewidget.cpp b/example/splinechart/splinewidget.cpp index 7700a01..83c06c4 100644 --- a/example/splinechart/splinewidget.cpp +++ b/example/splinechart/splinewidget.cpp @@ -11,13 +11,27 @@ SplineWidget::SplineWidget(QWidget *parent) { //create QSplineSeries QSplineSeries* series = new QSplineSeries(this); - series->add(QPointF(150, 100)); - series->add(QPointF(200, 180)); - series->add(QPointF(240, 130)); - series->add(QPointF(270, 120)); - series->add(QPointF(310, 120)); - series->add(QPointF(420, 160)); - series->add(QPointF(535, 250)); +// series->add(QPointF(150, 100)); +// series->add(QPointF(200, 130)); +// series->add(QPointF(250, 120)); +// series->add(QPointF(300, 140)); +// series->add(QPointF(350, 100)); +// series->add(QPointF(400, 120)); +// series->add(QPointF(450, 150)); +//// series->add(QPointF(600, 150)); +// series->add(QPointF(500, 145)); +// series->add(QPointF(550, 170)); +// series->add(QPointF(600, 190)); +// series->add(QPointF(650, 210)); +// series->add(QPointF(700, 190)); +// series->add(QPointF(750, 180)); +// series->add(QPointF(800, 170)); + + qsrand(time(NULL)); + for (int i = 0; i < 100; i++) + { + series->add(QPointF(i*7, qrand()%600)); + } series->calculateControlPoints(); diff --git a/src/splinechart/splinepresenter.cpp b/src/splinechart/splinepresenter.cpp index b20ba3c..a50bb4f 100644 --- a/src/splinechart/splinepresenter.cpp +++ b/src/splinechart/splinepresenter.cpp @@ -6,21 +6,10 @@ QTCOMMERCIALCHART_BEGIN_NAMESPACE SplinePresenter::SplinePresenter(QSplineSeries* series, QGraphicsObject *parent) : LineChartItem(0, series, parent)//,m_boundingRect() { -// if (parent) -// m_boundingRect = parent->boundingRect(); -// else -// m_boundingRect = QRectF(10,50, 250, 250); + // } -//void SplinePresenter::handleGeometryChanged(const QRectF&) -//{ -// update(); -//} -//void SplinePresenter::handleDomainChanged(const Domain& domain) -//{ -// // -//} QPointF SplinePresenter::calculateGeometryControlPoint(int index) const { @@ -34,72 +23,51 @@ QPointF SplinePresenter::calculateGeometryControlPoint(int index) const void SplinePresenter::applyGeometry(QVector& points) { - if(points.size()==0) return; - -// QList items = m_items.childItems(); - - QPainterPath splinePath; - const QPointF& point = points.at(0); - splinePath.moveTo(point); -// QGraphicsItem* item = items.at(0); -// item->setPos(point.x()-1,point.y()-1); -// if(!m_clipRect.contains(point)) item->setVisible(false); - - QSplineSeries* splineSeries = qobject_cast(m_series); - for (int i = 0; i < splineSeries->count() - 1; i++) - { - const QPointF& point = points.at(i + 1); -// painter->setPen(Qt::red); -// splinePath.cubicTo(qobject_cast(m_series)->controlPoint(2 * i), qobject_cast(m_series)->controlPoint(2 * i + 1), QPointF(m_series->x(i + 1), m_series->y(i + 1))); - splinePath.cubicTo(calculateGeometryControlPoint(2 * i), calculateGeometryControlPoint(2 * i + 1), point); -// painter->drawEllipse(m_series->at(i), 4, 4); - -// painter->setPen(Qt::blue); -// painter->drawLine(m_series->at(i), m_series->controlPoint(2 * i)); -// painter->drawLine(m_series->at(i + 1), m_series->controlPoint(2 * i + 1)); -// painter->drawEllipse(m_series->controlPoint(2 * i), 4, 4); -// painter->drawEllipse(m_series->controlPoint(2 * i + 1), 4, 4); - } - -// for(int i=1 ; i< points.size();i++) { -// QGraphicsItem* item = items.at(i); -// const QPointF& point = points.at(i); -// item->setPos(point.x()-1,point.y()-1); -// if(!m_clipRect.contains(point)) item->setVisible(false); -// path.lineTo(point); -// } - - prepareGeometryChange(); - m_path = splinePath; - m_rect = splinePath.boundingRect(); + if(points.size()==0) return; + + QPainterPath splinePath; + const QPointF& point = points.at(0); + splinePath.moveTo(point); + + QSplineSeries* splineSeries = qobject_cast(m_series); + for (int i = 0; i < splineSeries->count() - 1; i++) + { + const QPointF& point = points.at(i + 1); + splinePath.cubicTo(calculateGeometryControlPoint(2 * i), calculateGeometryControlPoint(2 * i + 1), point); + } + + + + prepareGeometryChange(); + m_path = splinePath; + m_rect = splinePath.boundingRect(); } -//void SplinePresenter::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) -//{ -// Q_UNUSED(widget); -// Q_UNUSED(option); -// painter->save(); - -// painter->setPen(Qt::SolidLine); - -// QPainterPath splinePath; -// splinePath.moveTo(m_series->at(0)); -// for (int i = 0; i < m_series->count() - 1; i++) -// { -// painter->setPen(Qt::red); -// splinePath.cubicTo(m_series->controlPoint(2 * i), m_series->controlPoint(2 * i + 1), m_series->at(i + 1)); -// painter->drawEllipse(m_series->at(i), 4, 4); - -// painter->setPen(Qt::blue); -// painter->drawLine(m_series->at(i), m_series->controlPoint(2 * i)); -// painter->drawLine(m_series->at(i + 1), m_series->controlPoint(2 * i + 1)); -// painter->drawEllipse(m_series->controlPoint(2 * i), 4, 4); -// painter->drawEllipse(m_series->controlPoint(2 * i + 1), 4, 4); -// } -// painter->setPen(Qt::red); -// painter->drawPath(splinePath); -// painter->restore(); -//} +void SplinePresenter::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + Q_UNUSED(widget); + Q_UNUSED(option); + painter->save(); + painter->setPen(m_pen); + painter->setClipRect(m_clipRect); + painter->drawPath(m_path); + + QSplineSeries* splineSeries = qobject_cast(m_series); + for (int i = 0; i < splineSeries->count() - 1; i++) + { + painter->setPen(Qt::red); + painter->drawEllipse(m_points[i], 4, 4); + + painter->setPen(Qt::blue); + // painter->drawLine(m_series->at(i), m_series->controlPoint(2 * i)); + // painter->drawLine(m_series->at(i + 1), m_series->controlPoint(2 * i + 1)); + painter->drawEllipse(calculateGeometryControlPoint(2 * i), 4, 4); + painter->drawEllipse(calculateGeometryControlPoint(2 * i + 1), 4, 4); + } + painter->setPen(Qt::red); + painter->drawEllipse(m_points[m_points.count() - 1], 4, 4); + painter->restore(); +} #include "moc_splinepresenter_p.cpp" diff --git a/src/splinechart/splinepresenter_p.h b/src/splinechart/splinepresenter_p.h index 77799ae..84860df 100644 --- a/src/splinechart/splinepresenter_p.h +++ b/src/splinechart/splinepresenter_p.h @@ -20,18 +20,11 @@ public: QPointF calculateGeometryControlPoint(int index) const; -// QRectF boundingRect() const { return m_boundingRect; } -// void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); signals: public slots: -// void handleDomainChanged(const Domain& domain); -// void handleGeometryChanged(const QRectF& rect); - - private: -// QSplineSeries* m_series; -// QRectF m_boundingRect; };