Changeset 8533:58320b3299de in orange


Ignore:
Timestamp:
07/29/11 21:02:57 (3 years ago)
Author:
matejd <matejd@…>
Branch:
default
Convert:
55dd1d4f302ef4b241e2b59c21f720f480456456
Message:

Fixed a bug with zooming, refactored some stuff

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/plot/owplot3d.py

    r8532 r8533  
    435435        self.additional_scale = [0, 0, 0] 
    436436        self.scale_x_axis = True 
    437         self.scale_factor = 100. 
     437        self.scale_factor = 0.05 
    438438        self.data_scale = numpy.array([1., 1., 1.]) 
    439439        self.data_center = numpy.array([0., 0., 0.]) 
     440        self.zoomed_size = [self.view_cube_edge, 
     441                            self.view_cube_edge, 
     442                            self.view_cube_edge] 
    440443 
    441444        self.state = PlotState.IDLE 
     
    10951098        range_x, range_y, range_z = max-min 
    10961099        self.data_center = (min + max) / 2  
    1097         self.zoom_stack.append((min, max)) 
    10981100 
    10991101        scale_x = self.view_cube_edge / range_x 
     
    11631165 
    11641166    def set_new_zoom(self, x_min, x_max, y_min, y_max, z_min, z_max): 
     1167        self.selections = [] 
     1168        self.zoom_stack.append((self.scale, self.translation)) 
     1169 
    11651170        max = numpy.array([x_max, y_max, z_max]) 
    11661171        min = numpy.array([x_min, y_min, z_min]) 
    1167         self.selections = [] 
    1168         self.zoom_stack.append((min, max)) 
    11691172        min, max = map(numpy.copy, [min, max]) 
    11701173        min -= self.data_center 
     
    11731176        max *= self.data_scale 
    11741177        center = (max + min) / 2. 
    1175         num_steps = 10 
    11761178        new_translation = -numpy.array(center) 
    11771179        # Avoid division by zero by adding a small value (this happens when zooming in 
    11781180        # on elements with the same value of an attribute). 
    1179         size = numpy.array(map(lambda i: i+0.001 if i == 0 else i, max-min)) 
    1180         new_scale = self.view_cube_edge / size 
     1181        self.size = numpy.array(map(lambda i: i+0.001 if i == 0 else i, max-min)) 
     1182        new_scale = self.view_cube_edge / self.size 
     1183        self._animate_new_scale_translation(new_scale, new_translation) 
     1184 
     1185    def _animate_new_scale_translation(self, new_scale, new_translation, num_steps=10): 
    11811186        translation_step = (new_translation - self.translation) / float(num_steps) 
    11821187        scale_step = (new_scale - self.scale) / float(num_steps) 
     
    11981203 
    11991204    def pop_zoom(self): 
    1200         if len(self.zoom_stack) < 2: 
    1201             return 
    1202  
    1203         self.zoom_stack.pop() 
    1204         min, max = self.zoom_stack.pop() 
    1205         self.set_new_zoom(min[0], max[0], min[1], max[1], min[2], max[2]) 
     1205        if len(self.zoom_stack) < 1: 
     1206            new_translation = numpy.array([0., 0., 0.]) 
     1207            new_scale = numpy.array([1., 1., 1.]) 
     1208        else: 
     1209            new_scale, new_translation = self.zoom_stack.pop() 
     1210        self._animate_new_scale_translation(new_scale, new_translation) 
    12061211 
    12071212    def save_to_file(self): 
     
    12581263                    indices.add(color) 
    12591264 
    1260             print(indices) 
    12611265            return indices 
    12621266        else: 
     
    12981302                            indices.append(i) 
    12991303 
    1300             print(indices) 
    13011304            return indices 
    13021305 
     
    13921395            dx = pos.x() - self.scaling_init_pos.x() 
    13931396            dy = pos.y() - self.scaling_init_pos.y() 
    1394             self.additional_scale = [dx / self.scale_factor, dy / self.scale_factor, 0]\ 
    1395                 if self.scale_x_axis else [0, dy / self.scale_factor, dx / self.scale_factor] 
     1397            dx /= float(self.size[0 if self.scale_x_axis else 2]) 
     1398            dy /= float(self.size[1]) 
     1399            dx /= self.scale_factor * self.width() 
     1400            dy /= self.scale_factor * self.height() 
     1401            self.additional_scale = [dx, dy, 0] if self.scale_x_axis else [0, dy, dx] 
    13961402        elif self.state == PlotState.PANNING: 
    13971403            self.dragged_selection.move(dx, dy) 
     
    14221428                    self.updateGL() 
    14231429                    self.selection_changed_callback() if self.selection_changed_callback else None 
    1424         elif self.state == PlotState.ROTATING: 
    1425             self.state = PlotState.IDLE 
    14261430        elif self.state == PlotState.PANNING: 
    14271431            self.selection_changed_callback() if self.selection_changed_callback else None 
Note: See TracChangeset for help on using the changeset viewer.