Changeset 8417:c9802ba98ca2 in orange


Ignore:
Timestamp:
07/22/11 18:19:45 (3 years ago)
Author:
matejd <matejd@…>
Branch:
default
Convert:
008e2de66da4c5ac5e07062cdfb4bfe36a1c3c9a
Message:

owscatterplot3d: shader nvidia issues

Location:
orange/OrangeWidgets
Files:
2 edited

Legend:

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

    r8416 r8417  
    2121                    'plot.show_z_axis_title', 'plot.show_legend', 'plot.face_symbols', 'plot.filled_symbols', 
    2222                    'plot.transparency', 'plot.show_grid', 'plot.pitch', 'plot.yaw', 'plot.use_ortho', 
    23                     'auto_send_selection', 'auto_send_selection_update'] 
     23                    'auto_send_selection', 'auto_send_selection_update', 
     24                    'jitter_size', 'jitter_continuous'] 
    2425    contextHandlers = {"": DomainContextHandler("", ["xAttr", "yAttr", "zAttr"])} 
    2526    jitter_sizes = [0.0, 0.1, 0.5, 1, 2, 3, 4, 5, 7, 10, 15, 20, 30, 40, 50] 
     
    136137        self.auto_send_selection = True 
    137138        self.auto_send_selection_update = False 
    138         self.plot.selection_change_callback = self.send_selections 
     139        self.plot.selection_changed_callback = self.selection_changed_callback 
    139140        box = OWGUI.widgetBox(self.settings_tab, 'Auto Send Selected Data When...') 
    140141        OWGUI.checkBox(box, self, 'auto_send_selection', 'Adding/Removing selection areas', 
     
    210211                except: pass 
    211212        return text[:-4] 
     213 
     214    def selection_changed_callback(self): 
     215        if self.plot.selection_type == SelectionType.ZOOM: 
     216            indices = self.plot.get_selection_indices() 
     217            print(len(indices)) 
     218            if len(indices) == 0: 
     219                return 
     220            selected = [1 if i in indices else 0 for i in range(len(self.data))] 
     221            #selected = self.data.selectref(selected) 
     222            X, Y, Z = self.data_array[:, self.x_attr],\ 
     223                      self.data_array[:, self.y_attr],\ 
     224                      self.data_array[:, self.z_attr] 
     225            print(type(X)) 
     226            print(X.selectref(selected)) 
     227            min_x, max_x = numpy.min(X), numpy.max(X) 
     228            min_y, max_y = numpy.min(Y), numpy.max(Y) 
     229            min_z, max_z = numpy.min(Z), numpy.max(Z) 
     230            self.plot.set_new_zoom(min_x, max_x, min_y, max_y, min_z, max_z) 
    212231 
    213232    def change_selection_type(self): 
  • orange/OrangeWidgets/owplot3d.py

    r8415 r8417  
    125125        self.plot = plot 
    126126        self.symbol_scale = 6 
    127         self.font = QFont() 
     127        self.font = QFont('Helvetica', 9) 
    128128        self.metrics = QFontMetrics(self.font) 
    129129 
     
    189189            glColor4f(*color) 
    190190            draw_ngon(symbol_to_n[symbol], x+t+10, item_pos_y-4, size*self.symbol_scale) 
    191             self.plot.renderText(x+t+30, item_pos_y, text) 
     191            self.plot.renderText(x+t+30, item_pos_y, text, font=self.font) 
    192192            item_pos_y += self.metrics.height() 
    193193 
     
    348348        self.build_axes() 
    349349        self.selections = [] 
    350         self.selection_change_callback = None 
    351         self.selection_type = SelectionType.RECTANGLE 
     350        self.selection_changed_callback = None 
     351        self.selection_type = SelectionType.ZOOM 
    352352        self.new_selection = None 
    353353 
     
    374374        self.symbol_shader = QtOpenGL.QGLShaderProgram() 
    375375        vertex_shader_source = ''' 
     376            #extension GL_EXT_gpu_shader4 : enable 
     377 
    376378            attribute vec4 position; 
    377379            attribute vec3 offset; 
     
    425427                // to output it to the screen, it has to be broken down into RGBA. 
    426428                uint index = uint(position.w); 
    427                 var_color = vec4(((index & 0xFF)) / 255., 
    428                                  ((index & 0xFF00) >> 8) / 255., 
    429                                  ((index & 0xFF0000) >> 16) / 255., 
    430                                  ((index & 0xFF000000) >> 24) / 255.); 
     429                var_color = vec4(float((index & 0xFF)) / 255., 
     430                                 float((index & 0xFF00) >> 8) / 255., 
     431                                 float((index & 0xFF0000) >> 16) / 255., 
     432                                 float((index & 0xFF000000) >> 24) / 255.); 
    431433              } 
    432434              else { 
    433435                pos = abs(pos); 
    434436                float manhattan_distance = max(max(pos.x, pos.y), pos.z)+5.; 
    435                 float a = min(pow(min(1, view_edge / manhattan_distance), 5), transparency); 
     437                float a = min(pow(min(1., view_edge / manhattan_distance), 5.), transparency); 
    436438                var_color = vec4(color.rgb, a); 
    437439              } 
     
    945947 
    946948    def set_new_zoom(self, x_min, x_max, y_min, y_max, z_min, z_max): 
    947         pass 
     949        print((x_min, x_max)) 
     950        self.initial_center = [(x_max + x_min) / 2., 
     951                               (y_max + y_min) / 2., 
     952                               (z_max + z_min) / 2.] 
     953        self.initial_center = numpy.array(self.initial_center) 
     954        self.selections = [] 
     955        self.updateGL() 
    948956 
    949957    def save_to_file(self): 
     
    956964            img = img.scaled(size) 
    957965        return img.save(file_name) 
     966 
     967    def transform_data_to_plot(self, vertex): 
     968        vertex -= self.initial_center 
     969        vertex *= self.initial_scale 
     970        vertex *= numpy.maximum([0, 0, 0], self.scale + self.additional_scale) 
     971        return vertex 
    958972 
    959973    def get_selection_indices(self): 
     
    9971011                _, _, (X, Y, Z), _ = params 
    9981012                for i, (x, y, z) in enumerate(zip(X, Y, Z)): 
     1013                    x, y, z = self.transform_data_to_plot((x,y,z)) 
    9991014                    x_win, y_win = project(x, y, z) 
    10001015                    for selection in self.selections: 
     
    11121127                if last: 
    11131128                    self.selections.append(self.new_selection) 
    1114                     self.selection_change_callback() if self.selection_change_callback else None 
     1129                    self.selection_changed_callback() if self.selection_changed_callback else None 
    11151130                    self.state = PlotState.IDLE 
    11161131                    self.new_selection = None 
     
    11181133                if self.new_selection.valid(): 
    11191134                    self.selections.append(self.new_selection) 
    1120                     self.selection_change_callback() if self.selection_change_callback else None 
     1135                    self.selection_changed_callback() if self.selection_changed_callback else None 
    11211136        elif self.state == PlotState.ROTATING: 
    11221137            self.state = PlotState.IDLE 
    11231138        elif self.state == PlotState.PANNING: 
    1124             self.selection_change_callback() if self.selection_change_callback else None 
     1139            self.selection_changed_callback() if self.selection_changed_callback else None 
    11251140 
    11261141        if not (self.state == PlotState.SELECTING and self.selection_type == SelectionType.POLYGON): 
Note: See TracChangeset for help on using the changeset viewer.