Changeset 8597:c1b366e5ee14 in orange


Ignore:
Timestamp:
08/04/11 11:00:25 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
0d63f8c06b06e8d07ceb69b409d85db047b32b92
Message:

Simplify and speed up UnconnectedLinesCurve

Location:
source/orangeplot
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • source/orangeplot/curve.cpp

    r8588 r8597  
    143143  } 
    144144  m_data.clear(); 
     145  m_data.reserve(n); 
    145146  for (int i = 0; i < n; ++i) 
    146147  { 
  • source/orangeplot/unconnectedlinescurve.cpp

    r8584 r8597  
    33#include <QtCore/QDebug> 
    44 
    5 const Curve::UpdateFlags UlcUpdateFlags = Curve::UpdateNumberOfItems | Curve::UpdatePosition | Curve::UpdatePen; 
    6  
    75UnconnectedLinesCurve::UnconnectedLinesCurve(const QList< double >& x_data, const QList< double >& y_data, QGraphicsItem* parent, QGraphicsScene* scene): Curve(x_data, y_data, parent, scene) 
    86{ 
    9  
     7    m_path_item = new QGraphicsPathItem(this); 
    108} 
    119 
     
    1715void UnconnectedLinesCurve::update_properties() 
    1816{ 
    19     if (needs_update() & UlcUpdateFlags) 
     17    if (needs_update() & UpdatePosition) 
     18    { 
     19        const Data d = data(); 
     20        const int n = d.size(); 
     21        QPainterPath path; 
     22        for (int i = 0; i < n; ++i) 
     23        { 
     24            path.moveTo(d[i].x, d[i].y); 
     25            ++i; 
     26            path.lineTo(d[i].x, d[i].y); 
     27        } 
     28        m_path_item->setPath(graph_transform().map(path)); 
     29    } 
     30    if (needs_update() & UpdatePen) 
    2031    {    
    21         const Data d = data(); 
    22         const int n = d.size()/2; 
    23         const int m = m_items.size(); 
    24         if (m > n) 
    25         { 
    26             for (int i = n; i < m; ++i) 
    27             { 
    28                 delete m_items.takeLast(); 
    29             } 
    30         } 
    31         else if (m < n) 
    32         { 
    33             for (int i = m; i < n; ++i) 
    34             { 
    35                 m_items << new QGraphicsLineItem(this); 
    36             } 
    37         } 
    38         Q_ASSERT(m_items.size() == n); 
    39          
    40         QLineF line; 
    4132        QPen p = pen(); 
    4233        p.setCosmetic(true); 
    43         for (int i = 0; i < n; ++i) 
    44         { 
    45             line.setLine( d[2*i].x, d[2*i].y, d[2*i+1].x, d[2*i+1].y ); 
    46             m_items[i]->setLine(graph_transform().map(line)); 
    47             m_items[i]->setPen(p); 
    48         } 
    49         set_updated(UlcUpdateFlags); 
     34        m_path_item->setPen(p); 
    5035    } 
     36    set_updated(Curve::UpdateAll); 
    5137} 
  • source/orangeplot/unconnectedlinescurve.h

    r8444 r8597  
    33 
    44#include "curve.h" 
    5 #include <QtGui/QPen> 
    65 
    76class UnconnectedLinesCurve : public Curve 
     
    1514     
    1615private: 
    17     QList<QGraphicsLineItem*> m_items; 
     16     QGraphicsPathItem* m_path_item; 
    1817}; 
    1918 
Note: See TracChangeset for help on using the changeset viewer.