Changeset 3499:4b0c9b40c5a7 in orange


Ignore:
Timestamp:
04/05/07 22:50:47 (7 years ago)
Author:
miha <miha.stajdohar@…>
Branch:
default
Convert:
18dcf0169c8cbdf8d4a9ccb81d3bf0e531e25b83
Message:

Optimized drawing lines on canvas.

File:
1 edited

Legend:

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

    r3472 r3499  
    1414from Numeric import * 
    1515from orngScaleScatterPlotData import * 
     16from OWGraphTools import UnconnectedLinesCurve 
    1617 
    1718class OWGraphDrawerCanvas(OWGraph): 
     
    3132        self.selectedVertex = None 
    3233        self.vertexDegree = []     # seznam vozlisc oblike (vozlisce, stevilo povezav), sortiran po stevilu povezav 
    33          
     34        self.edgesKey = -1 
    3435        self.vertexSize = 6 
    3536        self.nVertices = 0 
    36          
     37        self.xData = [] 
     38        self.yData = [] 
    3739        self.enableXaxis(0) 
    3840        self.enableYLaxis(0) 
     
    169171        if self.selectedCurve == None: 
    170172            return 
    171     
    172         curve = self.curve(self.vertices[self.selectedVertex])  #self.selectedCurve je key 
    173          
    174         newX = self.invTransform(curve.xAxis(), pos.x()) 
    175         newY = self.invTransform(curve.yAxis(), pos.y()) 
     173        #curve = self.curve(self.vertices[self.selectedVertex])  #self.selectedCurve je key 
     174        #newX = self.invTransform(curve.xAxis(), pos.x()) 
     175        #newY = self.invTransform(curve.yAxis(), pos.y()) 
     176 
     177        newX = self.invTransform(2, pos.x()) 
     178        newY = self.invTransform(0, pos.y()) 
     179 
    176180 
    177181        self.visualizer.xCoors[self.selectedVertex] = newX 
     
    182186        for e in range(self.nEdges): 
    183187            (key,i,j) = self.edges[e] 
    184              
     188 
    185189            if i == self.selectedVertex: 
    186                 currEdgeObj = self.curve(key) 
    187                 self.setCurveData(key, [newX, currEdgeObj.x(1)], [newY, currEdgeObj.y(1)])                     
     190                self.xData[key*2] = newX 
     191                self.yData[key*2] = newY 
     192                #currEdgeObj = self.curve(key) 
     193                #self.setCurveData(key, [newX, currEdgeObj.x(1)], [newY, currEdgeObj.y(1)])                     
    188194            elif j == self.selectedVertex: 
    189                 currEdgeObj = self.curve(key) 
    190                 self.setCurveData(key, [currEdgeObj.x(0), newX], [currEdgeObj.y(0), newY]) 
     195                self.xData[key*2 + 1] = newX 
     196                self.yData[key*2 + 1] = newY 
     197                #currEdgeObj = self.curve(key) 
     198                #self.setCurveData(key, [currEdgeObj.x(0), newX], [currEdgeObj.y(0), newY]) 
     199       
     200        self.setCurveData(self.edgesKey, self.xData, self.yData) 
    191201     
    192202    def onMouseMoved(self, event): 
     
    285295                 
    286296    def selectVertex(self, pos): 
    287         key, dist, xVal, yVal, index = self.closestCurve(pos.x(), pos.y()) 
    288  
    289         if key >= 0 and dist < 15: 
    290             if key in self.indexPairs.keys():   #to se zgodi samo, ce vozlisce ni povezano 
    291                 self.addSelection(self.indexPairs[key]) 
    292                 return 
    293  
    294             curve = self.curve(key)  #to je povezava, ker so bile te z insertCurve() dodane prej, 
    295                                      #da se ne vidijo skozi vozlisca 
    296              
    297             for e in range(self.nEdges): 
    298                 (keyTmp,i,j) = self.edges[e] 
    299                 if keyTmp == key: 
    300                     ndx1 = i 
    301                     ndx2 = j 
    302  
    303             vOb1 = self.curve(self.vertices[ndx1]) 
    304             vOb2 = self.curve(self.vertices[ndx2]) 
    305              
    306             px = self.invTransform(curve.xAxis(), pos.x()) 
    307             py = self.invTransform(curve.yAxis(), pos.y()) 
    308  
    309             if self.dist([px, py], [vOb1.x(0), vOb1.y(0)]) <= self.dist([px, py], [vOb2.x(0), vOb2.y(0)]): 
    310                 self.addSelection(ndx1) 
    311             else: 
    312                 self.addSelection(ndx2) 
     297        #key, dist, xVal, yVal, index = self.closestCurve(pos.x(), pos.y()) 
     298        #curve = self.curve(key) 
     299        min = 1000000 
     300        ndx = -1 
     301        #print "x: " + str(pos.x()) + " y: " + str(pos.y())  
     302        #px = self.invTransform(curve.xAxis(), pos.x()) 
     303        #py = self.invTransform(curve.yAxis(), pos.y())    
     304        px = self.invTransform(2, pos.x()) 
     305        py = self.invTransform(0, pos.y())    
     306        #print "xAxis: " + str(curve.xAxis()) + " yAxis: " + str(curve.yAxis()) 
     307        #print "px: " + str(px) + " py: " + str(py) 
     308        for v in range(self.nVertices): 
     309            x1 = self.visualizer.xCoors[v] 
     310            y1 = self.visualizer.yCoors[v] 
     311            #print "x: " + str(x1) + " y: " + str(y1) 
     312            dist = self.dist([px, py], [x1, y1]) 
     313             
     314            if dist < min: 
     315                min = dist 
     316                ndx = v 
     317                 
     318                if min < 10: 
     319                    break 
     320         
     321        if min < 10 and ndx != -1: 
     322            self.addSelection(ndx) 
    313323        else: 
    314324            self.removeSelection() 
     325 
     326#        key, dist, xVal, yVal, index = self.closestCurve(pos.x(), pos.y()) 
     327# 
     328#        if key >= 0 and dist < 15: 
     329#            if key in self.indexPairs.keys():   #to se zgodi samo, ce vozlisce ni povezano 
     330#                self.addSelection(self.indexPairs[key]) 
     331#                return 
     332# 
     333#            curve = self.curve(key)  #to je povezava, ker so bile te z insertCurve() dodane prej, 
     334#                                     #da se ne vidijo skozi vozlisca 
     335#             
     336#            for e in range(self.nEdges): 
     337#                (keyTmp,i,j) = self.edges[e] 
     338#                if keyTmp == key: 
     339#                    ndx1 = i 
     340#                    ndx2 = j 
     341# 
     342#            vOb1 = self.curve(self.vertices[ndx1]) 
     343#            vOb2 = self.curve(self.vertices[ndx2]) 
     344#             
     345#            px = self.invTransform(curve.xAxis(), pos.x()) 
     346#            py = self.invTransform(curve.yAxis(), pos.y()) 
     347# 
     348#            if self.dist([px, py], [vOb1.x(0), vOb1.y(0)]) <= self.dist([px, py], [vOb2.x(0), vOb2.y(0)]): 
     349#                self.addSelection(ndx1) 
     350#            else: 
     351#                self.addSelection(ndx2) 
     352#        else: 
     353#            self.removeSelection() 
    315354             
    316355    def dist(self, s1, s2): 
     
    322361        self.tips.removeAll() 
    323362         
     363        self.xData = [] 
     364        self.yData = [] 
     365        edgesCount = 0 
     366         
    324367        # draw edges 
    325368        for e in range(self.nEdges): 
     
    334377            edgeColor = Qt.blue#self.discPalette[classValueIndices[self.rawdata[i].getclass().value]] 
    335378 
    336             key = self.addCurve(str(e), fillColor, edgeColor, 0, style = QwtCurve.Lines, xData = [x1, x2], yData = [y1, y2]) 
    337             self.edges[e] = (key,i,j) 
     379            #key = self.addCurve(str(e), fillColor, edgeColor, 0, style = QwtCurve.Lines, xData = [x1, x2], yData = [y1, y2]) 
     380            #self.edges[e] = (key,i,j) 
     381            self.xData.append(x1) 
     382            self.xData.append(x2) 
     383            self.yData.append(y1) 
     384            self.yData.append(y2) 
     385                         
     386            self.edges[e] = (edgesCount,i,j) 
     387            edgesCount += 1 
     388         
     389        edgesCurveObject = UnconnectedLinesCurve(self, QPen(QColor(224,224,224)), self.xData, self.yData) 
     390        self.edgesKey = self.insertCurve(edgesCurveObject) 
    338391         
    339392        # draw vertices 
Note: See TracChangeset for help on using the changeset viewer.