Changeset 8612:56f934f93c41 in orange


Ignore:
Timestamp:
08/05/11 10:15:51 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
5f90e150dca3b83097fd5067c315791a53fe4f28
Message:

Enable display of items behind the plot, and use it for Probabilities images

Files:
11 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Prototypes/OWLinProjGraphQt.py

    r8431 r8612  
    77import orngVisFuncts 
    88import OWColorPalette 
    9 from plot.owtools import UnconnectedLinesCurve 
     9from plot.owtools import UnconnectedLinesCurve, ProbabilitiesItem 
    1010import numpy 
    1111 
     
    173173            if classData.any(): 
    174174                self.potentialsClassifier = orange.P2NN(domain, numpy.transpose(numpy.array([numpy.compress(validData, self.unscaled_x_positions), numpy.compress(validData, self.unscaled_y_positions), classData])), self.anchorData, offsets, normalizers, averages, self.normalizeExamples, law=1) 
     175                c = ProbabilitiesItem(self.potentialsClassifier, self.squareGranularity, self.trueScaleFactor/2, self.spaceBetweenCells, QRectF(-1, -1, 2, 2)) 
     176                c.attach(self) 
    175177            else: 
    176178                self.potentialsClassifier = None 
  • orange/OrangeWidgets/Prototypes/OWScatterPlotGraphQt.py

    r8596 r8612  
    156156            if probData.any(): 
    157157                self.potentialsClassifier = orange.P2NN(domain, probData, None, None, None, None) 
    158                 ProbabilitiesItem(self.potentialsClassifier, self.squareGranularity, self.spaceBetweenCells).attach(self)             
     158                ProbabilitiesItem(self.potentialsClassifier, self.squareGranularity, 1., self.spaceBetweenCells).attach(self)             
    159159            else: 
    160160                self.potentialsClassifier = None 
  • orange/OrangeWidgets/plot/owplot.py

    r8609 r8612  
    145145         
    146146        self.setRenderHints(QPainter.Antialiasing | QPainter.TextAntialiasing) 
    147         self.graph_item.setPen(QPen(Qt.NoPen)) 
    148147         
    149148        self._legend = OWLegend(self, self.scene()) 
     
    473472            If ``enableLegend`` is ``True``, a curve symbol is added to the legend.  
    474473        ''' 
    475         c = OWCurve(xData, yData, x_axis_key, y_axis_key, tooltip=name, parent=self.graph_item) 
     474        c = OWCurve(xData, yData, x_axis_key, y_axis_key, tooltip=name) 
    476475        c.set_zoom_transform(self._zoom_transform) 
    477476        c.name = name 
     
    669668        zt = self.zoom_transform 
    670669        self._zoom_transform = zt 
    671         for c in self.plot_items(): 
    672             if hasattr(c, 'set_zoom_transform'): 
    673                 c.set_zoom_transform(zt) 
    674                 c.update_properties() 
    675                  
    676         self.graph_item.setTransform(zt) 
     670        self.set_zoom_transform(zt) 
    677671         
    678672        self.update_axes(zoom_only=True) 
     
    713707                else: 
    714708                    item.graph_line = graph_line 
    715                 item.graph_line.translate(self.graph_item.pos()) 
    716709            if item.data_line and item.graph_line: 
    717710                item.show() 
     
    787780        self.static_click = True 
    788781        self._pressed_mouse_button = event.button() 
     782        self._pressed_mouse_pos = event.pos() 
    789783        if event.button() == Qt.LeftButton and self.state == PANNING: 
    790784            self._last_pan_pos = point 
     
    797791            event.accept() 
    798792            return 
    799         if event.buttons(): 
     793        if event.buttons() and (self._pressed_mouse_pos - event.pos()).manhattanLength() > qApp.startDragDistance(): 
    800794            self.static_click = False 
    801795         
     
    12241218    def zoom_to_rect(self, rect): 
    12251219        self.ensure_inside(rect, self.graph_area) 
     1220        qDebug('Zoom to rect, final state is' + repr(rect)) 
    12261221        self.animate(self, 'zoom_rect', rect) 
    12271222 
    12281223    def reset_zoom(self): 
     1224        qDebug('Resetting zoom') 
    12291225        self._zoom_rect = None 
    12301226        self.update_zoom() 
  • orange/OrangeWidgets/plot/owtools.py

    r8611 r8612  
    239239 
    240240class ProbabilitiesItem(orangeplot.PlotItem): 
    241     def __init__(self, classifier, granularity, spacing): 
     241    def __init__(self, classifier, granularity, scale, spacing, rect=None): 
    242242        orangeplot.PlotItem.__init__(self) 
    243243        self.classifier = classifier 
    244         self.rect = QRectF() 
     244        self.rect = rect 
    245245        self.granularity = granularity 
     246        self.scale = scale 
    246247        self.spacing = spacing 
    247248        self.pixmap_item = QGraphicsPixmapItem(self) 
     249        self.set_in_background(True) 
    248250        self.setZValue(ProbabilitiesZValue) 
    249251         
     
    253255            return 
    254256             
    255         x,y = self.axes() 
    256         self.rect = self.plot().data_rect_for_axes(x,y) 
     257        if not self.rect: 
     258            x,y = self.axes() 
     259            self.rect = self.plot().data_rect_for_axes(x,y) 
    257260        s = self.graph_transform().mapRect(self.rect).size().toSize() 
    258261        if not s.isValid(): 
     
    271274         
    272275        if self.classifier.classVar.varType == orange.VarTypes.Continuous: 
    273             imagebmp = orangeom.potentialsBitmap(self.classifier, rx, ry, ox, oy, self.granularity, 1)  # the last argument is self.trueScaleFactor (in LinProjGraph...) 
     276            imagebmp = orangeom.potentialsBitmap(self.classifier, rx, ry, ox, oy, self.granularity, self.scale) 
    274277            palette = [qRgb(255.*i/255., 255.*i/255., 255-(255.*i/255.)) for i in range(255)] + [qRgb(255, 255, 255)] 
    275278        else: 
    276             imagebmp, nShades = orangeom.potentialsBitmap(self.classifier, rx, ry, ox, oy, self.granularity, 1., self.spacing) # the last argument is self.trueScaleFactor (in LinProjGraph...) 
     279            imagebmp, nShades = orangeom.potentialsBitmap(self.classifier, rx, ry, ox, oy, self.granularity, self.scale, self.spacing) 
    277280            palette = [] 
    278281            sortedClasses = get_variable_values_sorted(self.classifier.domain.classVar) 
     
    292295     
    293296    def data_rect(self): 
    294         return self.rect 
     297        return self.rect if self.rect else QRectF() 
    295298         
    296299@deprecated_members({ 
     
    307310        self._y_enabled = True 
    308311        self._path_item = QGraphicsPathItem(self) 
     312        self.set_in_background(True) 
    309313        self.attach(plot) 
    310314         
  • source/orangeplot/curve.h

    r8582 r8612  
    159159   
    160160  QTransform zoom_transform(); 
    161   void set_zoom_transform(const QTransform& transform); 
     161  virtual void set_zoom_transform(const QTransform& transform); 
    162162   
    163163  double max_x_value() const; 
  • source/orangeplot/plot.cpp

    r8602 r8612  
    4646{ 
    4747    setScene(new QGraphicsScene(this)); 
    48     clipItem = new QGraphicsRectItem(); 
    49     clipItem->setPen(Qt::NoPen); 
    50     clipItem->setFlag(QGraphicsItem::ItemClipsChildrenToShape, true); 
    51     scene()->addItem(clipItem); 
    52     graph_item = new QGraphicsRectItem(clipItem); 
     48     
     49    back_clip_item = new QGraphicsRectItem(); 
     50    back_clip_item->setPen(Qt::NoPen); 
     51    back_clip_item->setFlag(QGraphicsItem::ItemClipsChildrenToShape, true); 
     52    back_clip_item->setZValue(-1000); 
     53    scene()->addItem(back_clip_item); 
     54     
     55    front_clip_item = new QGraphicsRectItem(); 
     56    front_clip_item->setPen(Qt::NoPen); 
     57    front_clip_item->setFlag(QGraphicsItem::ItemClipsChildrenToShape, true); 
     58    front_clip_item->setZValue(0); 
     59    scene()->addItem(front_clip_item); 
     60     
     61    graph_back_item = new QGraphicsRectItem(back_clip_item); 
     62    graph_back_item->setPen(Qt::NoPen); 
     63    graph_item = new QGraphicsRectItem(front_clip_item); 
     64    graph_item->setPen(Qt::NoPen); 
    5365} 
    5466 
     
    6981    } 
    7082    item->m_plot = this; 
    71     item->setParentItem(graph_item); 
     83    item->setParentItem(item->is_in_background() ? graph_back_item : graph_item); 
    7284    m_items << item; 
    7385    item->register_points(); 
     
    91103    } 
    92104    remove_all_points(item); 
     105} 
     106 
     107void Plot::set_item_in_background(PlotItem* item, bool bg) 
     108{ 
     109    item->setParentItem(bg ? graph_back_item : graph_item); 
    93110} 
    94111 
     
    158175void Plot::set_graph_rect(const QRectF rect)  
    159176{ 
    160     clipItem->setRect(rect); 
    161     graph_item->setRect(rect); 
     177    foreach (QGraphicsRectItem* item, QList<QGraphicsRectItem*>() << front_clip_item << back_clip_item << graph_item << graph_back_item) 
     178    { 
     179        item->setRect(rect); 
     180    } 
     181} 
     182 
     183void Plot::set_zoom_transform(const QTransform& zoom) 
     184{ 
     185    graph_item->setTransform(zoom); 
     186    graph_back_item->setTransform(zoom); 
     187    foreach (PlotItem* item, plot_items()) 
     188    { 
     189        item->set_zoom_transform(zoom); 
     190    } 
    162191} 
    163192 
  • source/orangeplot/plot.h

    r8603 r8612  
    3434    void add_item(PlotItem* item); 
    3535    void remove_item(PlotItem* item); 
    36      
     36    void set_item_in_background(PlotItem* item, bool bg); 
     37 
    3738    QRectF data_rect_for_axes(int x_axis, int y_axis); 
    3839    QPair< double, double > bounds_for_axis(int axis); 
     
    4142     
    4243    void set_graph_rect(const QRectF rect); 
    43      
    44     QGraphicsRectItem* graph_item; 
     44    void set_zoom_transform(const QTransform& zoom); 
    4545     
    4646    void set_dirty(); 
     
    8585    QList<PlotItem*> m_items; 
    8686    bool m_dirty; 
    87     QGraphicsRectItem* clipItem; 
     87     
     88    QGraphicsRectItem* back_clip_item; 
     89    QGraphicsRectItem* front_clip_item; 
     90    QGraphicsRectItem* graph_item; 
     91    QGraphicsRectItem* graph_back_item; 
     92     
    8893    QMap<PlotItem*, PointSet> m_point_set; 
    8994    QMap<PlotItem*, PointHash> m_point_hash; 
  • source/orangeplot/plot.sip

    r8571 r8612  
    4747    void add_item(PlotItem* item /Transfer/); 
    4848    void remove_item(PlotItem* item /TransferBack/); 
     49    QList<PlotItem*> plot_items(); 
     50     
     51    void set_item_in_background(PlotItem* item /Transfer/, bool bg); 
    4952     
    5053    QRectF data_rect_for_axes(int xAxis, int yAxis); 
    5154    QPair< double, double > bounds_for_axis(int axis); 
    5255     
    53     QList<PlotItem*> plot_items(); 
    5456    void set_graph_rect(const QRectF rect); 
     57    void set_zoom_transform(const QTransform& zoom); 
    5558 
    5659    void set_dirty(); 
    57      
    58     QGraphicsRectItem* graph_item; 
    59      
     60 
    6061    void select_points(const QRectF& rect, SelectionBehavior behavior = AddSelection); 
    6162    void select_points(const QPolygonF& area, SelectionBehavior behavior = AddSelection); 
  • source/orangeplot/plotitem.cpp

    r8609 r8612  
    1111    set_axes(xBottom, yLeft); 
    1212    set_auto_scale(true); 
     13    set_in_background(false); 
    1314} 
    1415 
     
    7778} 
    7879 
     80void PlotItem::set_zoom_transform(const QTransform& zoom) 
     81{ 
     82    m_zoom_transform = zoom; 
     83} 
     84 
     85QTransform PlotItem::zoom_transform() const 
     86{ 
     87    return m_zoom_transform; 
     88} 
     89 
    7990QRectF PlotItem::rect_from_data(const QList< double >& x_data, const QList< double >& y_data) 
    8091{ 
     
    103114} 
    104115 
     116void PlotItem::set_in_background(bool bg) 
     117{ 
     118    m_background = bg; 
     119    if (m_plot) 
     120    { 
     121        m_plot->set_item_in_background(this, bg); 
     122    } 
     123} 
     124 
     125bool PlotItem::is_in_background() const 
     126{ 
     127    return m_background; 
     128} 
     129 
    105130Plot* PlotItem::plot()  
    106131{ 
  • source/orangeplot/plotitem.h

    r8501 r8612  
    2222    virtual QTransform graph_transform() const; 
    2323     
     24    virtual void set_zoom_transform(const QTransform& zoom); 
     25    virtual QTransform zoom_transform() const; 
     26     
    2427    void attach(Plot* graph); 
    2528    void detach(); 
     
    3134    bool is_auto_scale() const; 
    3235    void set_auto_scale(bool auto_scale); 
     36     
     37    bool is_in_background() const; 
     38    void set_in_background(bool bg); 
    3339     
    3440    QPair<int, int> axes() const; 
     
    5258    bool m_autoScale; 
    5359    QTransform m_graphTransform; 
     60    QTransform m_zoom_transform; 
     61     
     62    bool m_background; 
    5463     
    5564    friend class Plot; 
  • source/orangeplot/plotitem.sip

    r8583 r8612  
    1717    virtual void set_graph_transform(const QTransform& transform); 
    1818    virtual QTransform graph_transform() const; 
     19 
     20    virtual void set_zoom_transform(const QTransform& zoom); 
     21    virtual QTransform zoom_transform() const; 
    1922     
    2023    void attach(Plot* graph /TransferThis/); 
     
    3235    void set_auto_scale(bool auto_scale); 
    3336     
     37    bool is_in_background() const; 
     38    void set_in_background(bool bg); 
     39     
    3440    QPair<int, int> axes() const; 
    3541    void set_axes(int x_axis, int y_axis); 
Note: See TracChangeset for help on using the changeset viewer.