Changeset 8457:8f4f2273827d in orange


Ignore:
Timestamp:
07/25/11 22:04:19 (3 years ago)
Author:
matejd <matejd@…>
Branch:
default
Convert:
515ac26fbef67575f2dc5217eb40a0cc90102082
Message:

owplot3d: fixed polygon selection bug

File:
1 edited

Legend:

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

    r8454 r8457  
    363363        self.scale_factor = 100. 
    364364        self.data_scale = numpy.array([1., 1., 1.]) 
    365         self.data_center = numpy.array([0, 0, 0]) 
     365        self.data_center = numpy.array([0., 0., 0.]) 
    366366 
    367367        # Beside n-gons, symbols should also include cubes, spheres and other stuff. TODO 
     
    384384 
    385385        self.zoom_stack = [] 
    386         self.translation = numpy.array([0, 0, 0]) 
     386        self.translation = numpy.array([0., 0., 0.]) 
    387387 
    388388    def __del__(self): 
     
    542542            if cmd == 'scatter': 
    543543                vao_id, outline_vao_id, (X, Y, Z), labels = params 
    544                 scale = numpy.maximum([0, 0, 0], self.scale + self.additional_scale) 
     544                scale = numpy.maximum([0., 0., 0.], self.scale + self.additional_scale) 
    545545 
    546546                self.symbol_shader.bind() 
     
    562562                    glDrawElements(GL_LINES, outline_vao_id.num_indices, GL_UNSIGNED_INT, c_void_p(0)) 
    563563                    glBindVertexArray(0) 
    564  
    565                 # Draw color-picking buffer. 
    566                 glBindVertexArray(vao_id) 
    567                 self.tooltip_fbo.bind() 
    568                 glClearColor(1, 1, 1, 1) 
    569                 glClear(GL_COLOR_BUFFER_BIT) 
    570                 glDisable(GL_BLEND) 
    571                 self.symbol_shader.setUniformValue(self.symbol_shader_tooltip_mode, True) 
    572                 glDrawArrays(GL_TRIANGLES, 0, vao_id.num_vertices) 
    573                 self.tooltip_fbo.release() 
    574                 glBindVertexArray(0) 
    575564 
    576565                self.symbol_shader.release() 
     
    588577                callback = params 
    589578                callback() 
     579 
     580        for (cmd, params) in self.commands: 
     581            if cmd == 'scatter': 
     582                vao_id, outline_vao_id, (X, Y, Z), labels = params 
     583                # Draw into color-picking buffer. 
     584                self.tooltip_fbo.bind() 
     585                self.symbol_shader.bind() 
     586                # Most uniforms retain their values. 
     587                self.symbol_shader.setUniformValue(self.symbol_shader_tooltip_mode, True) 
     588                glClearColor(1, 1, 1, 1) 
     589                glClear(GL_COLOR_BUFFER_BIT) 
     590                glDisable(GL_BLEND) 
     591                glBindVertexArray(vao_id) 
     592                glDrawArrays(GL_TRIANGLES, 0, vao_id.num_vertices) 
     593                glBindVertexArray(0) 
     594                self.symbol_shader.release() 
     595                self.tooltip_fbo.release() 
    590596 
    591597        glDisable(GL_BLEND) 
     
    10101016            self.translation = self.translation + translation_step 
    10111017            self.updateGL() 
    1012         start = time.time() 
    10131018        for i in range(num_steps): 
    10141019            if time.time() - start > 1.: 
     
    10401045        vertex *= self.data_scale 
    10411046        vertex += self.translation 
    1042         vertex *= numpy.maximum([0, 0, 0], self.scale + self.additional_scale) 
     1047        vertex *= numpy.maximum([0., 0., 0.], self.scale + self.additional_scale) 
    10431048        return vertex 
    10441049 
    10451050    def transform_plot_to_data(self, vertex): 
    1046         vertex /= numpy.maximum([0, 0, 0], self.scale + self.additional_scale) 
     1051        vertex /= numpy.maximum([0., 0., 0.], self.scale + self.additional_scale) 
    10471052        vertex -= self.translation 
    10481053        vertex /= self.data_scale 
     
    10901095                    x, y, z = self.transform_data_to_plot((x,y,z)) 
    10911096                    x_win, y_win = project(x, y, z) 
    1092                     for selection in self.selections: 
    1093                         if selection.contains(x_win, y_win): 
    1094                             indices.append(i) 
    1095                             break 
     1097                    if any(sel.contains(x_win, y_win) for sel in self.selections): 
     1098                        indices.append(i) 
    10961099 
    10971100        return indices 
     
    11061109 
    11071110        if buttons & Qt.LeftButton: 
    1108             if self.legend.contains(pos.x(), pos.y()): 
     1111            if self.show_legend and self.legend.contains(pos.x(), pos.y()): 
    11091112                self.state = PlotState.DRAGGING_LEGEND 
    11101113                self.new_selection = None 
     
    11271130                self.state = PlotState.SCALING 
    11281131                self.scaling_init_pos = self.mouse_pos 
    1129                 self.additional_scale = [0, 0, 0] 
     1132                self.additional_scale = [0., 0., 0.] 
    11301133            else: 
    11311134                self.pop_zoom() 
     
    11551158 
    11561159        if self.state == PlotState.IDLE: 
    1157             for selection in self.selections: 
    1158                 if selection.contains(pos.x(), pos.y()): 
    1159                     self.setCursor(Qt.OpenHandCursor) 
    1160                     break 
     1160            if any(sel.contains(pos.x(), pos.y()) for sel in self.selections) or\ 
     1161               self.legend.contains(pos.x(), pos.y()): 
     1162                self.setCursor(Qt.OpenHandCursor) 
    11611163            else: 
    11621164                self.setCursor(Qt.ArrowCursor) 
     
    12021204 
    12031205        if self.state == PlotState.SCALING: 
    1204             self.scale = numpy.maximum([0, 0, 0], self.scale + self.additional_scale) 
    1205             self.additional_scale = [0, 0, 0] 
     1206            self.scale = numpy.maximum([0., 0., 0.], self.scale + self.additional_scale) 
     1207            self.additional_scale = [0., 0., 0.] 
    12061208            self.state = PlotState.IDLE 
    12071209        elif self.state == PlotState.SELECTING: 
     
    12531255        self.legend.clear() 
    12541256        self.zoom_stack = [] 
     1257        self.translation = numpy.array([0., 0., 0.]) 
     1258        self.scale = numpy.array([1., 1., 1.]) 
     1259        self.additional_scale = numpy.array([0., 0., 0.]) 
    12551260        self.x_axis_title = self.y_axis_title = self.z_axis_title = '' 
    12561261        self.x_axis_map = self.y_axis_map = self.z_axis_map = None 
Note: See TracChangeset for help on using the changeset viewer.