Changeset 8308:d3be05082eac in orange


Ignore:
Timestamp:
06/11/11 15:58:49 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
93eed004f0823a9a0ed343e0c0bcc5762d7fd645
Message:

Zoom affects axes as well

Location:
orange/OrangeWidgets
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Graph/axis.py

    r8296 r8308  
    2727""" 
    2828 
    29 from PyQt4.QtGui import QGraphicsItemGroup, QGraphicsLineItem, QGraphicsTextItem, QPainterPath, QGraphicsPathItem, QGraphicsScene 
    30 from PyQt4.QtCore import QLineF, QPointF, qDebug 
     29from PyQt4.QtGui import QGraphicsItemGroup, QGraphicsLineItem, QGraphicsTextItem, QPainterPath, QGraphicsPathItem, QGraphicsScene, QTransform 
     30from PyQt4.QtCore import QLineF, QPointF, qDebug, QRectF 
    3131 
    3232from palette import * 
     
    3838ArrowStart = 2 
    3939 
     40yLeft = 0 
     41yRight = 1 
     42xBottom = 2 
     43xTop = 3 
     44UserAxis = 100 
     45 
    4046class Axis(QGraphicsItemGroup): 
    41     def __init__(self, title_above, arrows = ArrowEnd, parent=None): 
     47    def __init__(self, id, title_above, arrows = ArrowEnd, parent=None): 
    4248        QGraphicsItemGroup.__init__(self, parent) 
     49        self.id = id 
    4350        self.title = None 
    4451        self.line = None 
     
    6471        self.label_items = [] 
    6572        self.tick_items = [] 
     73        self.zoom_transform = QTransform() 
    6674 
    6775    def update(self): 
     
    111119        del self.tick_items[:] 
    112120        min, max, step = self.scale 
     121        qDebug(str(step)) 
    113122        if self.labels: 
     123            self.transform = QTransform().translate(-self.x(), -self.y()) * self.zoom_transform * QTransform().translate(self.x(), self.y()) 
     124            ratio = self.transform.map(self.line).length() / self.line.length() 
     125            qDebug('Axis zoom ratio = ' + str(ratio)) 
    114126            for i in range(len(self.labels)): 
     127                label_pos = self.map_to_graph( i * step) 
     128                test_rect = QRectF(self.line.p1(),  self.line.p2()).normalized() 
     129                test_rect.adjust(-1, -1, 1, 1) 
     130                if not test_rect.contains(label_pos): 
     131                    qDebug('Skipping label ' + self.labels[i]) 
     132                    continue 
     133                label_pos = self.map_to_graph((i-0.5) * step) 
    115134                item = QGraphicsTextItem(self) 
    116135                item.setHtml( '<center>' + self.labels[i] + '</center>') 
    117                 item.setTextWidth(self.line.length()/len(self.labels)) 
    118                 label_pos = self.map_to_graph( (i-0.5) * step) 
     136                item.setTextWidth(self.line.length() / len(self.labels) * ratio) 
    119137                v = self.line.normalVector().unitVector() 
    120138                if self.title_above: 
     
    184202    def map_to_graph(self, x): 
    185203        min, max, step = self.scale 
    186         return self.line.pointAt( (x-min)/(max-min) ) 
     204        line_point = self.line.pointAt( (x-min)/(max-min) ) 
     205        end_point = line_point * self.transform 
     206        return self.projection(end_point, self.line) 
     207         
     208    @staticmethod 
     209    def projection(point, line): 
     210        norm = line.normalVector() 
     211        norm.translate(point - norm.p1()) 
     212        p = QPointF() 
     213        type = line.intersect(norm, p) 
     214        return p 
  • orange/OrangeWidgets/OWGraphQt.py

    r8307 r8308  
    3636PANNING = 4 
    3737SELECT = 5 
    38  
    39 yLeft = 0 
    40 yRight = 1 
    41 xBottom = 2 
    42 xTop = 3 
    43 axisCnt = 4 
    4438 
    4539LeftLegend = 0 
     
    6761 
    6862from Graph import * 
     63from Graph.axis import * 
    6964from PyQt4.QtGui import QGraphicsView,  QGraphicsScene, QPainter, QTransform 
    7065from PyQt4.QtCore import QPointF, QPropertyAnimation 
     
    7368from OWBaseWidget import unisetattr 
    7469from OWGraphTools import *      # user defined curves, ... 
     70from Orange.misc import deprecated_members 
    7571 
    7672class OWGraph(QGraphicsView): 
     
    149145        return (ret.x(), ret.y()) 
    150146         
    151     def saveToFile(self, extraButtons = []): 
     147    def save_to_file(self, extraButtons = []): 
    152148        sizeDlg = OWChooseImageSizeDlg(self, extraButtons, parent=self) 
    153149        sizeDlg.exec_() 
    154  
    155     def saveToFileDirect(self, fileName, size = None): 
     150         
     151    def save_to_file_direct(self, fileName, size = None): 
    156152        sizeDlg = OWChooseImageSizeDlg(self) 
    157153        sizeDlg.saveImage(fileName, size) 
     
    270266         
    271267    def addAxis(self, axis_id, title_above = False): 
    272         self.axes[axis_id] = axis.Axis(title_above) 
     268        self.axes[axis_id] = axis.Axis(axis_id, title_above) 
    273269     
    274270    def removeAllSelections(self): 
     
    349345        min_y, max_y, t = self.axes[axes[1]].scale 
    350346        data_rect = QRectF(min_x, max_y, max_x-min_x, min_y-max_y) 
    351         self.map_transform = self.transform_from_rects(data_rect,  self.zoom_rect) 
     347        self.map_transform = self.transform_from_rects(data_rect,  self.graph_area) 
    352348         
    353349        for c in self.curves: 
     
    355351            c.setGraphTransform(self.map_transform * self.zoom_transform) 
    356352            c.update() 
     353         
     354        for a in self.axes.values(): 
     355            a.zoom_transform = self.zoom_transform 
     356            a.update() 
    357357        self.setSceneRect(self.canvas.itemsBoundingRect()) 
    358358         
     
    371371            elif id is yRight: 
    372372                line = QLineF(rect.bottomLeft(), rect.topLeft()) 
    373             line.translate(-rect.topLeft()) 
    374373            a = self.axes[id] 
    375374            a.set_size(rect.size()) 
    376375            a.set_line(line) 
    377             a.setPos(rect.topLeft()) 
    378376            self.canvas.addItem(a) 
    379377            a.update() 
     
    477475        self._zoom_point = value 
    478476        self.update_zoom() 
     477         
     478QWGraph = deprecated_members({"saveToFileDirect": "save_to_file_direct",   
     479                              "saveToFile" : "save_to_file"})(OWGraph) 
Note: See TracChangeset for help on using the changeset viewer.