Changeset 8532:2521eaf4ae83 in orange


Ignore:
Timestamp:
07/29/11 18:56:58 (3 years ago)
Author:
matejd <matejd@…>
Branch:
default
Convert:
570462b3072a843dc9a11f798644a375ec908e10
Message:

Option to draw data as point cloud; option to hide data outside view box

Location:
orange/OrangeWidgets
Files:
2 edited

Legend:

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

    r8530 r8532  
    136136        OWGUI.checkBox(box, self, 'plot.show_axes',           'Show axes',      callback=self.on_checkbox_update) 
    137137        OWGUI.checkBox(box, self, 'plot.show_chassis',        'Show chassis',   callback=self.on_checkbox_update) 
     138        OWGUI.checkBox(box, self, 'plot.draw_point_cloud',    'Point cloud',    callback=self.on_checkbox_update) 
     139        OWGUI.checkBox(box, self, 'plot.hide_outside',        'Hide outside',   callback=self.on_checkbox_update) 
    138140        OWGUI.rubber(box) 
    139141 
  • orange/OrangeWidgets/plot/owplot3d.py

    r8531 r8532  
    406406            sin(self.pitch)*sin(self.yaw)] 
    407407 
    408         self.ortho_scale = 80. 
     408        self.ortho_scale = 100. 
    409409        self.ortho_near = -1 
    410410        self.ortho_far = 2000 
     
    465465        self.use_fbos = True 
    466466 
     467        self.draw_point_cloud = False 
     468        self.hide_outside = False 
     469 
    467470    def __del__(self): 
    468471        # TODO: check if anything needs deleting 
     
    488491            attribute vec3 normal; 
    489492 
    490             const int MODE_NORMAL = 0; 
    491             const int MODE_TOOLTIP = 1; 
    492             const int MODE_SELECTION = 2; 
    493  
    494493            uniform bool use_2d_symbols; 
    495             uniform int mode; 
     494            uniform bool shrink_symbols; 
     495            uniform bool encode_color; 
     496            uniform bool hide_outside; 
    496497            uniform float symbol_scale; 
    497498            uniform float transparency; 
     
    535536              vec4 off_pos = vec4(pos, 1.); 
    536537 
    537               if (mode != MODE_SELECTION) { 
     538              if (shrink_symbols) { 
     539                  // Shrink symbols into points by ignoring offsets. 
     540                  gl_PointSize = 2.; 
     541              } 
     542              else { 
    538543                  off_pos = vec4(pos+offset_rotated, 1.); 
    539544              } 
    540               else { 
    541                   // Shrunk symbols into points by ignoring offsets when 
    542                   // mode == MODE_SELECTION. 
    543                   gl_PointSize = 2.; 
    544               } 
    545545 
    546546              gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * off_pos; 
    547547 
    548               if (mode != MODE_NORMAL) { 
     548              if (encode_color) { 
    549549                // We've packed example index into .w component of this vertex, 
    550550                // to output it to the screen, it has to be broken down into RGBA. 
     
    564564                                    light_direction)); 
    565565                var_color = vec4(color.rgb+diffuse*0.7, a); // Physically wrong, but looks better. 
     566                if (manhattan_distance > view_edge && hide_outside) 
     567                    var_color.a = 0.; 
    566568              } 
    567569            } 
     
    594596        self.symbol_shader_scale          = self.symbol_shader.uniformLocation('scale') 
    595597        self.symbol_shader_translation    = self.symbol_shader.uniformLocation('translation') 
    596         self.symbol_shader_mode           = self.symbol_shader.uniformLocation('mode') 
     598        self.symbol_shader_shrink_symbols = self.symbol_shader.uniformLocation('shrink_symbols') 
     599        self.symbol_shader_encode_color   = self.symbol_shader.uniformLocation('encode_color') 
     600        self.symbol_shader_hide_outside   = self.symbol_shader.uniformLocation('hide_outside') 
    597601 
    598602        # Create two FBOs (framebuffer objects): 
     
    658662 
    659663                self.symbol_shader.bind() 
    660                 self.symbol_shader.setUniformValue(self.symbol_shader_mode,           0) 
    661664                self.symbol_shader.setUniformValue(self.symbol_shader_use_2d_symbols, self.use_2d_symbols) 
     665                self.symbol_shader.setUniformValue(self.symbol_shader_shrink_symbols, self.draw_point_cloud) 
     666                self.symbol_shader.setUniformValue(self.symbol_shader_encode_color,   False) 
     667                self.symbol_shader.setUniformValue(self.symbol_shader_hide_outside,   self.hide_outside) 
    662668                self.symbol_shader.setUniformValue(self.symbol_shader_view_edge,      float(self.view_cube_edge)) 
    663669                self.symbol_shader.setUniformValue(self.symbol_shader_symbol_scale,   float(self.symbol_scale)) 
     
    666672                self.symbol_shader.setUniformValue(self.symbol_shader_translation,    *self.translation) 
    667673 
    668                 glEnable(GL_DEPTH_TEST) 
    669                 glEnable(GL_BLEND) 
    670                 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 
    671674                glBindVertexArray(vao_id) 
    672                 glDrawArrays(GL_TRIANGLES, 0, vao_id.num_vertices) 
     675                if self.draw_point_cloud: 
     676                    glDisable(GL_DEPTH_TEST) 
     677                    glDisable(GL_BLEND) 
     678                    glDrawArrays(GL_POINTS, 0, vao_id.num_vertices) 
     679                else: 
     680                    glEnable(GL_DEPTH_TEST) 
     681                    glEnable(GL_BLEND) 
     682                    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 
     683                    glDrawArrays(GL_TRIANGLES, 0, vao_id.num_vertices) 
    673684                glBindVertexArray(0) 
    674685 
     
    711722 
    712723                if self.tooltip_fbo_dirty: 
    713                     print('tooltip fbo was dirty') 
    714724                    # Draw data the same as to the screen, but with 
    715725                    # disabled blending and enabled depth testing. 
     
    720730                    self.symbol_shader.bind() 
    721731                    # Most uniforms retain their values. 
    722                     self.symbol_shader.setUniformValue(self.symbol_shader_mode, 1) 
     732                    self.symbol_shader.setUniformValue(self.symbol_shader_encode_color, True) 
     733                    self.symbol_shader.setUniformValue(self.symbol_shader_shrink_symbols, False) 
    723734                    glBindVertexArray(vao_id) 
    724735                    glDrawArrays(GL_TRIANGLES, 0, vao_id.num_vertices) 
     
    729740 
    730741                if self.selection_fbo_dirty: 
    731                     print('selection fbo was dirty') 
    732742                    # Draw data as points instead, this means that examples farther away 
    733743                    # will still have a good chance at being visible (not covered). 
    734744                    self.selection_fbo.bind() 
    735745                    self.symbol_shader.bind() 
    736                     self.symbol_shader.setUniformValue(self.symbol_shader_mode, 2) 
     746                    self.symbol_shader.setUniformValue(self.symbol_shader_encode_color, True) 
     747                    self.symbol_shader.setUniformValue(self.symbol_shader_shrink_symbols, True) 
    737748                    glDisable(GL_DEPTH_TEST) 
    738749                    glDisable(GL_BLEND) 
     
    12211232 
    12221233    def get_selection_indices(self): 
    1223         print('get_selection_indices') 
    12241234        if len(self.selections) == 0: 
    12251235            return [] 
Note: See TracChangeset for help on using the changeset viewer.