Changeset 8402:b3c7185610d1 in orange


Ignore:
Timestamp:
07/20/11 18:51:07 (3 years ago)
Author:
matejd <matejd@…>
Branch:
default
Convert:
46992b64809debd0d9de4b2fe889812e5b7c6213
Message:

owplot3d: added selection panning

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/owplot3d.py

    r8401 r8402  
    223223            item_pos_y += self.metrics.height() 
    224224 
    225     def point_inside(self, x, y): 
     225    def contains(self, x, y): 
    226226        return self.position[0] <= x <= self.position[0]+self.size[0] and\ 
    227227               self.position[1] <= y <= self.position[1]+self.size[1] 
     
    236236        self.current_vertex = first_vertex 
    237237 
    238     def point_inside(self, x, y): 
     238    def contains(self, x, y): 
    239239        x1, x2 = sorted([self.first_vertex[0], self.current_vertex[0]]) 
    240240        y1, y2 = sorted([self.first_vertex[1], self.current_vertex[1]]) 
     
    243243            return True 
    244244        return False 
     245 
     246    def move(self, dx, dy): 
     247        self.first_vertex[0] += dx 
     248        self.first_vertex[1] += dy 
     249        self.current_vertex[0] += dx 
     250        self.current_vertex[1] += dy 
    245251 
    246252    def draw(self): 
     
    255261    def valid(self): 
    256262        return self.first_vertex != self.current_vertex 
    257         # TODO 
     263        # TODO: drop if too small 
    258264 
    259265class PolygonSelection(object): 
     
    262268        self.current_vertex = first_vertex 
    263269        self.first_vertex = first_vertex 
     270        self.polygon = None 
    264271 
    265272    def add_current_vertex(self): 
     
    268275        if distance < 10**2: 
    269276            self.vertices.append(self.first_vertex) 
     277            self.polygon = QPolygon([QPoint(x, y) for (x, y) in self.vertices]) 
    270278            return True 
    271279        else: 
     
    273281            return False 
    274282 
    275     def point_inside(self, x, y): 
    276         return False # TODO 
     283    def contains(self, x, y): 
     284        if self.polygon == None: 
     285            return False 
     286        return self.polygon.containsPoint(QPoint(x, y), Qt.OddEvenFill) 
     287 
     288    def move(self, dx, dy): 
     289        self.vertices = [[x+dx, y+dy] for x,y in self.vertices] 
     290        self.current_vertex[0] += dx 
     291        self.current_vertex[1] += dy 
     292        self.polygon = QPolygon([QPoint(x, y) for (x, y) in self.vertices]) 
    277293 
    278294    def draw(self): 
     
    960976                    x_win, y_win = project(x, y, z) 
    961977                    for selection in self.selections: 
    962                         if selection.point_inside(x_win, y_win): 
     978                        if selection.contains(x_win, y_win): 
    963979                            indices.append(i) 
    964980                            break 
     
    975991 
    976992        if buttons & Qt.LeftButton: 
    977             if self.legend.point_inside(pos.x(), pos.y()): 
     993            if self.legend.contains(pos.x(), pos.y()): 
    978994                self.state = PlotState.DRAGGING_LEGEND 
    979995                self.new_selection = None 
    980996            else: 
     997                if self.state == PlotState.SELECTING: 
     998                    return 
     999                for selection in self.selections: 
     1000                    if selection.contains(pos.x(), pos.y()): 
     1001                        self.state = PlotState.PANNING 
     1002                        self.dragged_selection = selection 
     1003                        return 
    9811004                self.state = PlotState.SELECTING 
    9821005                if self.selection_type == SelectionType.RECTANGLE or\ 
     
    10001023        if self.state == PlotState.IDLE: 
    10011024            for selection in self.selections: 
    1002                 if selection.point_inside(pos.x(), pos.y()): 
     1025                if selection.contains(pos.x(), pos.y()): 
    10031026                    self.setCursor(Qt.OpenHandCursor) 
    10041027                    break 
     
    10111034        dy = pos.y() - self.mouse_pos.y() 
    10121035 
    1013         if self.state == PlotState.SELECTING: 
     1036        if self.state == PlotState.SELECTING and self.new_selection != None: 
    10141037            self.new_selection.current_vertex = [pos.x(), pos.y()] 
    10151038        elif self.state == PlotState.DRAGGING_LEGEND: 
     
    10341057            self.additional_scale = [dx / self.scale_factor, dy / self.scale_factor, 0]\ 
    10351058                if self.scale_x_axis else [0, dy / self.scale_factor, dx / self.scale_factor] 
     1059        elif self.state == PlotState.PANNING: 
     1060            self.dragged_selection.move(dx, dy) 
    10361061 
    10371062        self.mouse_pos = pos 
     
    10611086        elif self.state == PlotState.ROTATING: 
    10621087            self.state = PlotState.IDLE 
     1088        elif self.state == PlotState.PANNING: 
     1089            self.selection_change_callback() if self.selection_change_callback else None 
    10631090 
    10641091        if not (self.state == PlotState.SELECTING and self.selection_type == SelectionType.POLYGON): 
Note: See TracChangeset for help on using the changeset viewer.