Changeset 8324:e82154fcf4c5 in orange


Ignore:
Timestamp:
06/16/11 14:20:52 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
548107f8198977bcecb318d67b8bd042a1a777e8
Message:

Add support for continuous curves.

Location:
source/orangegraph
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • source/orangegraph/curve.cpp

    r8313 r8324  
    3333void Curve::updateNumberOfItems() 
    3434{ 
     35  if (m_continuous) 
     36  { 
     37    return; 
     38  } 
    3539  int n = m_data.size(); 
    3640  if (m_pointItems.size() > n) 
     
    4953void Curve::update() 
    5054{ 
     55   
     56  if (m_continuous) 
     57  { 
     58    // Partial updates only make sense for discrete curves, because they have more properties 
     59    updateAll(); 
     60    return; 
     61  } 
     62   
    5163  int n = m_data.size();   
    5264 
     
    89101void Curve::updateAll() 
    90102{ 
    91   if (m_needsUpdate & UpdateNumberOfItems) 
    92   { 
    93     updateNumberOfItems(); 
    94   } 
    95    
    96   int n = m_data.size(); 
    97   QBrush brush(m_color); 
    98   m_path = pathForSymbol(m_symbol, m_pointSize); 
    99   QPointF p; 
    100   for (int i = 0; i < n; ++i) 
    101   { 
    102     QGraphicsPathItem* item = m_pointItems[i]; 
    103     DataPoint& point = m_data[i]; 
    104     item->setPath(m_path); 
    105     p = QPointF(point.x, point.x); 
    106     item->setPos(p * m_graphTransform); 
    107     item->setBrush(brush); 
     103  if (m_needsUpdate & UpdateContinuous) 
     104  { 
     105    changeContinuous(); 
     106  } 
     107   
     108  if (m_continuous) 
     109  { 
     110    QPen pen; 
     111    pen.setColor(m_color); 
     112    pen.setWidth(m_pointSize); 
     113    m_lineItem->setPen(pen); 
     114  }  
     115  else  
     116  { 
     117    if (m_needsUpdate & UpdateNumberOfItems) 
     118    { 
     119      updateNumberOfItems(); 
     120    } 
     121     
     122    int n = m_data.size(); 
     123    QBrush brush(m_color); 
     124    m_path = pathForSymbol(m_symbol, m_pointSize); 
     125    QPointF p; 
     126    for (int i = 0; i < n; ++i) 
     127    { 
     128      QGraphicsPathItem* item = m_pointItems[i]; 
     129      DataPoint& point = m_data[i]; 
     130      item->setPath(m_path); 
     131      p = QPointF(point.x, point.x); 
     132      item->setPos(p * m_graphTransform); 
     133      item->setBrush(brush); 
     134    } 
    108135  } 
    109136  m_needsUpdate = 0; 
     
    296323} 
    297324 
     325void Curve::changeContinuous() 
     326{ 
     327  if (m_continuous) 
     328  { 
     329    qDeleteAll(m_pointItems); 
     330    m_pointItems.clear(); 
     331     
     332    if (!m_lineItem) 
     333    { 
     334      m_lineItem = new QGraphicsPathItem(this); 
     335    } 
     336    m_line = QPainterPath(); 
     337    m_line.moveTo(m_data[0].x, m_data[0].y); 
     338    int n = m_data.size(); 
     339    QPointF p; 
     340    for (int i = 1; i < n; ++i) 
     341    { 
     342      p = QPointF(m_data[i].x, m_data[i].y); 
     343      m_line.lineTo(m_graphTransform.map(p)); 
     344    } 
     345    m_lineItem->setPath(m_line); 
     346  } else { 
     347    m_line = QPainterPath(); 
     348    delete m_lineItem; 
     349    m_lineItem = 0; 
     350  } 
     351} 
     352 
     353 
    298354#include "curve.moc" 
  • source/orangegraph/curve.h

    r8323 r8324  
    166166  void updateNumberOfItems(); 
    167167  inline void checkForUpdate(); 
     168  void changeContinuous(); 
    168169   
    169170  QColor m_color; 
     
    178179  bool m_autoUpdate; 
    179180  QRectF m_graphArea; 
     181    QGraphicsPathItem* m_lineItem; 
     182    QPainterPath m_line; 
    180183}; 
    181184 
Note: See TracChangeset for help on using the changeset viewer.