Changeset 8967:6878066a5e5e in orange


Ignore:
Timestamp:
09/14/11 17:34:40 (3 years ago)
Author:
matejd <matejd@…>
Branch:
default
Convert:
366a9f94869822639c521564beae3a63578758bf
Message:

Minor change in opengl renderer (set_transform); marked some variables private

Location:
orange/OrangeWidgets
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Visualize Qt/OWLinProj3DPlot.py

    r8960 r8967  
    4848 
    4949        self.makeCurrent() 
    50         self.before_draw_callback = lambda: self.before_draw() 
     50        self.before_draw_callback = self.before_draw 
    5151 
    5252        ## Value lines shader 
     
    6767 
    6868    def before_draw(self): 
    69         modelview = QMatrix4x4() 
    70         modelview.lookAt( 
     69        view = QMatrix4x4() 
     70        view.lookAt( 
    7171            QVector3D(self.camera[0]*self.camera_distance, 
    7272                      self.camera[1]*self.camera_distance, 
     
    7474            QVector3D(0, 0, 0), 
    7575            QVector3D(0, 1, 0)) 
    76         self.modelview = modelview 
     76        self.view = view 
    7777 
    7878        glEnable(GL_DEPTH_TEST) 
     
    8383        glMatrixMode(GL_MODELVIEW) 
    8484        glLoadIdentity() 
    85         glMultMatrixd(numpy.array(self.modelview.data(), dtype=float)) 
    86  
    87         self.renderer.set_transform(self.projection, self.modelview) 
     85        glMultMatrixd(numpy.array(self.view.data(), dtype=float)) 
     86        glMultMatrixd(numpy.array(self.model.data(), dtype=float)) 
     87 
     88        self.renderer.set_transform(self.model, self.view, self.projection) 
    8889 
    8990        if self.showAnchors: 
     
    123124            self._value_lines_shader.bind() 
    124125            self._value_lines_shader.setUniformValue('projection', self.projection) 
    125             self._value_lines_shader.setUniformValue('modelview', self.modelview) 
     126            self._value_lines_shader.setUniformValue('modelview', self.view * self.model) 
    126127            self._value_lines_shader.setUniformValue('value_line_length', float(self.valueLineLength)) 
    127128            self._value_lines_shader.setUniformValue('plot_scale', self.plot_scale[0], self.plot_scale[1], self.plot_scale[2]) 
  • orange/OrangeWidgets/Visualize Qt/OWScatterPlot3D.py

    r8933 r8967  
    7878        self.show_chassis = True 
    7979        self.show_axes = True 
    80         self.build_axes() 
    81  
    82         self.x_axis_labels = None 
    83         self.y_axis_labels = None 
    84         self.z_axis_labels = None 
    85  
    86         self.x_axis_title = '' 
    87         self.y_axis_title = '' 
    88         self.z_axis_title = '' 
    89  
     80        self._build_axes() 
     81 
     82        self._x_axis_labels = None 
     83        self._y_axis_labels = None 
     84        self._z_axis_labels = None 
     85 
     86        self._x_axis_title = '' 
     87        self._y_axis_title = '' 
     88        self._z_axis_title = '' 
     89 
     90        # These are public 
    9091        self.show_x_axis_title = self.show_y_axis_title = self.show_z_axis_title = True 
    9192 
    9293        self.animate_plot = False 
    93  
    94     def set_axis_labels(self, axis_id, labels): 
    95         '''labels should be a list of strings''' 
    96         if Axis.is_valid(axis_id): 
    97             setattr(self, Axis.to_str(axis_id).lower() + '_axis_labels', labels) 
    98  
    99     def set_axis_title(self, axis_id, title): 
    100         if Axis.is_valid(axis_id): 
    101             setattr(self, Axis.to_str(axis_id).lower() + '_axis_title', title) 
    102  
    103     def set_show_axis_title(self, axis_id, show): 
    104         if Axis.is_valid(axis_id): 
    105             setattr(self, 'show_' + Axis.to_str(axis_id).lower() + '_axis_title', show) 
    10694 
    10795    def set_data(self, data, subset_data=None, **args): 
     
    177165            data_translation[2] = 1. 
    178166 
    179         self.x_axis_labels = None 
    180         self.y_axis_labels = None 
    181         self.z_axis_labels = None 
     167        self._x_axis_labels = None 
     168        self._y_axis_labels = None 
     169        self._z_axis_labels = None 
    182170 
    183171        self.clear() 
     
    237225 
    238226        ## Axes 
    239         self.set_axis_title(Axis.X, x_attr) 
    240         self.set_axis_title(Axis.Y, y_attr) 
    241         self.set_axis_title(Axis.Z, z_attr) 
     227        self._x_axis_title = x_attr 
     228        self._y_axis_title = y_attr 
     229        self._z_axis_title = z_attr 
    242230 
    243231        if x_discrete: 
    244             self.set_axis_labels(Axis.X, get_variable_values_sorted(self.data_domain[x_attr])) 
     232            self._x_axis_labels = get_variable_values_sorted(self.data_domain[x_attr]) 
    245233        if y_discrete: 
    246             self.set_axis_labels(Axis.Y, get_variable_values_sorted(self.data_domain[y_attr])) 
     234            self._y_axis_labels = get_variable_values_sorted(self.data_domain[y_attr]) 
    247235        if z_discrete: 
    248             self.set_axis_labels(Axis.Z, get_variable_values_sorted(self.data_domain[z_attr])) 
     236            self._z_axis_labels = get_variable_values_sorted(self.data_domain[z_attr]) 
    249237 
    250238        self.update() 
     
    252240    def before_draw(self): 
    253241        if self.show_grid: 
    254             self.draw_grid() 
     242            self._draw_grid() 
    255243        if self.show_chassis: 
    256             self.draw_chassis() 
     244            self._draw_chassis() 
    257245        if self.show_axes: 
    258             self.draw_axes() 
    259  
    260     def draw_chassis(self): 
     246            self._draw_axes() 
     247 
     248    def _draw_chassis(self): 
    261249        glMatrixMode(GL_PROJECTION) 
    262250        glLoadIdentity() 
     
    264252        glMatrixMode(GL_MODELVIEW) 
    265253        glLoadIdentity() 
    266         glMultMatrixd(numpy.array(self.modelview.data(), dtype=float)) 
     254        glMultMatrixd(numpy.array(self.view.data(), dtype=float)) 
     255        glMultMatrixd(numpy.array(self.model.data(), dtype=float)) 
    267256 
    268257        # TODO: line stipple with shaders? 
     
    291280        glDisable(GL_BLEND) 
    292281 
    293     def draw_grid(self): 
    294         self.renderer.set_transform(self.projection, self.modelview) 
     282    def _draw_grid(self): 
     283        self.renderer.set_transform(self.model, self.view, self.projection) 
    295284 
    296285        cam_in_space = numpy.array([ 
     
    300289        ]) 
    301290 
    302         def _draw_grid(axis0, axis1, normal0, normal1, i, j): 
     291        def _draw_grid_plane(axis0, axis1, normal0, normal1, i, j): 
    303292            for axis, normal, coord_index in zip([axis0, axis1], [normal0, normal1], [i, j]): 
    304293                start, end = axis.copy() 
     
    336325        xz_visible = not plane_visible(self.axis_plane_xz, cam_in_space) 
    337326        if xz_visible: 
    338             _draw_grid(self.x_axis, self.z_axis, numpy.array([0,0,-1]), numpy.array([-1,0,0]), 0, 2) 
     327            _draw_grid_plane(self.x_axis, self.z_axis, numpy.array([0,0,-1]), numpy.array([-1,0,0]), 0, 2) 
    339328        for visible, (axis0, axis1), (normal0, normal1), (i, j) in\ 
    340329             zip(visible_planes, axes, normals, coords): 
    341330            if not visible: 
    342                 _draw_grid(axis0, axis1, normal0, normal1, i, j) 
     331                _draw_grid_plane(axis0, axis1, normal0, normal1, i, j) 
    343332 
    344333        glEnable(GL_DEPTH_TEST) 
    345334        glDisable(GL_BLEND) 
    346335 
    347     def build_axes(self): 
     336    def _build_axes(self): 
    348337        edge_half = 1. / 2. 
    349338        x_axis = [[-edge_half, -edge_half, -edge_half], [edge_half, -edge_half, -edge_half]] 
     
    377366        self.axis_plane_xz_top = [E, F, B, A] 
    378367 
    379     def draw_axes(self): 
     368    def _draw_axes(self): 
    380369        glMatrixMode(GL_PROJECTION) 
    381370        glLoadIdentity() 
     
    383372        glMatrixMode(GL_MODELVIEW) 
    384373        glLoadIdentity() 
    385         glMultMatrixd(numpy.array(self.modelview.data(), dtype=float)) 
    386  
    387         self.renderer.set_transform(self.projection, self.modelview) 
    388  
    389         def draw_axis(line): 
    390             self.qglColor(self._theme.axis_color) 
    391             glLineWidth(2) # TODO: how to draw thick lines? 
    392             glBegin(GL_LINES) 
    393             glVertex3f(*line[0]) 
    394             glVertex3f(*line[1]) 
    395             glEnd() 
    396  
    397         def draw_discrete_axis_values(axis, coord_index, normal, axis_labels): 
     374        glMultMatrixd(numpy.array(self.view.data(), dtype=float)) 
     375        glMultMatrixd(numpy.array(self.model.data(), dtype=float)) 
     376 
     377        self.renderer.set_transform(self.model, self.view, self.projection) 
     378 
     379        def _draw_axis(line): 
     380            glLineWidth(2) 
     381            self.renderer.draw_line(QVector3D(*line[0]), 
     382                                    QVector3D(*line[1]), 
     383                                    color=self._theme.axis_color) 
     384            glLineWidth(1) 
     385 
     386        def _draw_discrete_axis_values(axis, coord_index, normal, axis_labels): 
    398387            start, end = axis.copy() 
    399388            start_value = self.map_to_data(start.copy())[coord_index] 
     
    414403                                    label, font=self._theme.labels_font) 
    415404 
    416         def draw_values(axis, coord_index, normal, axis_labels): 
     405        def _draw_values(axis, coord_index, normal, axis_labels): 
    417406            glLineWidth(1) 
    418407            if axis_labels != None: 
    419                 draw_discrete_axis_values(axis, coord_index, normal, axis_labels) 
     408                _draw_discrete_axis_values(axis, coord_index, normal, axis_labels) 
    420409                return 
    421410            start, end = axis.copy() 
     
    438427                                text, font=self._theme.axis_font) 
    439428 
    440         def draw_axis_title(axis, title, normal): 
     429        def _draw_axis_title(axis, title, normal): 
    441430            middle = (axis[0] + axis[1]) / 2. 
    442431            middle += normal * 0.1 if axis[0][1] != axis[1][1] else normal * 0.2 
     
    456445        ]) 
    457446 
     447        # TODO: the code below is horrible and should be simplified 
    458448        planes = [self.axis_plane_xy, self.axis_plane_yz, 
    459449                  self.axis_plane_xy_back, self.axis_plane_yz_right] 
     
    466456 
    467457        if visible_planes[0 if xz_visible else 2]: 
    468             draw_axis(self.x_axis) 
    469             draw_values(self.x_axis, 0, numpy.array([0, 0, -1]), self.x_axis_labels) 
     458            _draw_axis(self.x_axis) 
     459            _draw_values(self.x_axis, 0, numpy.array([0, 0, -1]), self._x_axis_labels) 
    470460            if self.show_x_axis_title: 
    471                 draw_axis_title(self.x_axis, self.x_axis_title, numpy.array([0, 0, -1])) 
     461                _draw_axis_title(self.x_axis, self._x_axis_title, numpy.array([0, 0, -1])) 
    472462        elif visible_planes[2 if xz_visible else 0]: 
    473             draw_axis(self.x_axis + self.unit_z) 
    474             draw_values(self.x_axis + self.unit_z, 0, numpy.array([0, 0, 1]), self.x_axis_labels) 
     463            _draw_axis(self.x_axis + self.unit_z) 
     464            _draw_values(self.x_axis + self.unit_z, 0, numpy.array([0, 0, 1]), self._x_axis_labels) 
    475465            if self.show_x_axis_title: 
    476                 draw_axis_title(self.x_axis + self.unit_z, 
    477                                 self.x_axis_title, numpy.array([0, 0, 1])) 
     466                _draw_axis_title(self.x_axis + self.unit_z, 
     467                                self._x_axis_title, numpy.array([0, 0, 1])) 
    478468 
    479469        if visible_planes[1 if xz_visible else 3]: 
    480             draw_axis(self.z_axis) 
    481             draw_values(self.z_axis, 2, numpy.array([-1, 0, 0]), self.z_axis_labels) 
     470            _draw_axis(self.z_axis) 
     471            _draw_values(self.z_axis, 2, numpy.array([-1, 0, 0]), self._z_axis_labels) 
    482472            if self.show_z_axis_title: 
    483                 draw_axis_title(self.z_axis, self.z_axis_title, numpy.array([-1, 0, 0])) 
     473                _draw_axis_title(self.z_axis, self._z_axis_title, numpy.array([-1, 0, 0])) 
    484474        elif visible_planes[3 if xz_visible else 1]: 
    485             draw_axis(self.z_axis + self.unit_x) 
    486             draw_values(self.z_axis + self.unit_x, 2, numpy.array([1, 0, 0]), self.z_axis_labels) 
     475            _draw_axis(self.z_axis + self.unit_x) 
     476            _draw_values(self.z_axis + self.unit_x, 2, numpy.array([1, 0, 0]), self._z_axis_labels) 
    487477            if self.show_z_axis_title: 
    488                 draw_axis_title(self.z_axis + self.unit_x, self.z_axis_title, numpy.array([1, 0, 0])) 
     478                _draw_axis_title(self.z_axis + self.unit_x, self._z_axis_title, numpy.array([1, 0, 0])) 
    489479 
    490480        try: 
     
    504494        axis = y_axis_translated[rightmost_visible] 
    505495        normal = normals[rightmost_visible] 
    506         draw_axis(axis) 
    507         draw_values(axis, 1, normal, self.y_axis_labels) 
     496        _draw_axis(axis) 
     497        _draw_values(axis, 1, normal, self._y_axis_labels) 
    508498        if self.show_y_axis_title: 
    509             draw_axis_title(axis, self.y_axis_title, normal) 
     499            _draw_axis_title(axis, self._y_axis_title, normal) 
    510500 
    511501class OWScatterPlot3D(OWWidget): 
  • orange/OrangeWidgets/Visualize Qt/OWSphereviz3D.py

    r8928 r8967  
    143143 
    144144    def before_draw(self): 
    145         modelview = QMatrix4x4() 
     145        view = QMatrix4x4() 
    146146        if self.camera_type == 2: 
    147             modelview.lookAt( 
     147            view.lookAt( 
    148148                QVector3D(self._random_anchor[0], self._random_anchor[1], self._random_anchor[2]), 
    149149                QVector3D(self.camera[0], 
     
    156156            self.projection = projection 
    157157        elif self.camera_type == 1: 
    158             modelview.lookAt( 
     158            view.lookAt( 
    159159                QVector3D(0, 0, 0), 
    160160                QVector3D(self.camera[0]*self.camera_distance, 
     
    167167            self.projection = projection 
    168168        else: 
    169             modelview.lookAt( 
     169            view.lookAt( 
    170170                QVector3D(self.camera[0]*self.camera_distance, 
    171171                          self.camera[1]*self.camera_distance, 
     
    173173                QVector3D(0, 0, 0), 
    174174                QVector3D(0, 1, 0)) 
    175         self.modelview = modelview 
     175        self.view = view 
    176176 
    177177        self._draw_sphere() 
     
    185185        glMatrixMode(GL_MODELVIEW) 
    186186        glLoadIdentity() 
    187         glMultMatrixd(numpy.array(self.modelview.data(), dtype=float)) 
     187        glMultMatrixd(numpy.array(self.view.data(), dtype=float)) 
     188        glMultMatrixd(numpy.array(self.model.data(), dtype=float)) 
    188189 
    189190        if self.showAnchors: 
     
    200201                rotation.setColumn(2, QVector4D(direction, 0)) 
    201202 
    202                 modelview = QMatrix4x4(self.modelview) 
    203                 modelview.translate(x, y, z) 
    204                 modelview = modelview * rotation 
    205                 modelview.rotate(-90, 1, 0, 0) 
    206                 modelview.translate(0, -0.05, 0) 
    207                 modelview.scale(0.02, 0.02, 0.02) 
     203                model = QMatrix4x4() 
     204                model.translate(x, y, z) 
     205                model = model * rotation 
     206                model.rotate(-90, 1, 0, 0) 
     207                model.translate(0, -0.05, 0) 
     208                model.scale(0.02, 0.02, 0.02) 
    208209 
    209210                self._cone_shader.bind() 
    210211                self._cone_shader.setUniformValue('projection', self.projection) 
    211                 self._cone_shader.setUniformValue('modelview', modelview) 
     212                self._cone_shader.setUniformValue('modelview', self.view * model) 
    212213                self._cone_buffer.draw() 
    213214                self._cone_shader.release() 
     
    222223            self._grid_shader.bind() 
    223224            self._grid_shader.setUniformValue('projection', self.projection) 
    224             self._grid_shader.setUniformValue('modelview', self.modelview) 
     225            self._grid_shader.setUniformValue('modelview', self.view * self.model) 
    225226            self._grid_shader.setUniformValue('color', self._theme.axis_color) 
    226227            self._grid_buffer.draw(GL_LINES) 
     
    236237        self._sphere_shader.bind() 
    237238        self._sphere_shader.setUniformValue('projection', self.projection) 
    238         self._sphere_shader.setUniformValue('modelview', self.modelview) 
     239        self._sphere_shader.setUniformValue('modelview', self.view * self.model) 
    239240        self._sphere_shader.setUniformValue('cam_position', QVector3D(*self.camera)*self.camera_distance) 
    240241        self._sphere_shader.setUniformValue('use_transparency', self.camera_type == 0) 
  • orange/OrangeWidgets/plot/owopenglrenderer.py

    r8966 r8967  
    220220    def set_transform(self, model, view=None, projection=None, viewport=None): 
    221221        ''' 
    222         Sets current projection, model, view and viewport transforms. Only model parameter is required 
    223         since it's the one most likely to change. Passing None as a parameter value keeps the internal value 
     222        Sets current projection, model, view and viewport transforms. ``model`` parameter 
     223        is most often changed. Passing None as a parameter value keeps the internal value 
    224224        unmodified. 
    225225 
  • orange/OrangeWidgets/plot/owplot3d.py

    r8965 r8967  
    324324 
    325325        if self._use_opengl_3: 
    326             self.feedback_generated = False 
     326            self._feedback_generated = False 
    327327 
    328328            self.generating_program = QtOpenGL.QGLShaderProgram() 
     
    476476 
    477477    def get_mvp(self): 
     478        ''' 
     479        Return current model, view and projection transforms. 
     480        ''' 
    478481        projection = QMatrix4x4() 
    479482        width, height = self.width(), self.height() 
     
    481484        projection.perspective(self.camera_fov, aspect, self.perspective_near, self.perspective_far) 
    482485 
    483         modelview = QMatrix4x4() 
    484         modelview.lookAt( 
     486        view = QMatrix4x4() 
     487        view.lookAt( 
    485488            QVector3D(self.camera[0]*self.camera_distance, 
    486489                      self.camera[1]*self.camera_distance, 
     
    489492            QVector3D(0, 1, 0)) 
    490493 
    491         return modelview, projection 
     494        model = QMatrix4x4() 
     495        return model, view, projection 
    492496 
    493497    def paintEvent(self, event): 
     
    497501        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 
    498502 
    499         modelview, projection = self.get_mvp() 
    500         self.modelview = modelview 
     503        model, view, projection = self.get_mvp() 
     504        self.model = model 
     505        self.view = view 
    501506        self.projection = projection 
    502507 
     
    507512 
    508513        self.symbol_program.bind() 
    509         self.symbol_program.setUniformValue('modelview', self.modelview) 
     514        self.symbol_program.setUniformValue('modelview', self.view * self.model) 
    510515        self.symbol_program.setUniformValue('projection', self.projection) 
    511516        self.symbol_program.setUniformValue(self.symbol_program_use_2d_symbols, self.use_2d_symbols) 
     
    519524        self.symbol_program.setUniformValue(self.symbol_program_force_color,    0., 0., 0., 0.) 
    520525 
    521         if self._use_opengl_3 and self.feedback_generated: 
     526        if self._use_opengl_3 and self._feedback_generated: 
    522527            glEnable(GL_DEPTH_TEST) 
    523528            glEnable(GL_BLEND) 
     
    555560            self.symbol_program.setUniformValue(self.symbol_program_encode_color, True) 
    556561 
    557             if self._use_opengl_3 and self.feedback_generated: 
     562            if self._use_opengl_3 and self._feedback_generated: 
    558563                glBindVertexArray(self.feedback_vao) 
    559564                glDrawArrays(GL_TRIANGLES, 0, self.num_primitives_generated*3) 
     
    589594        glMatrixMode(GL_MODELVIEW) 
    590595        glLoadIdentity() 
    591         glMultMatrixd(array(self.modelview.data(), dtype=float)) 
     596        glMultMatrixd(array(self.view.data(), dtype=float)) 
     597        glMultMatrixd(array(self.model.data(), dtype=float)) 
    592598 
    593599        self.qglColor(self._theme.labels_color) 
     
    611617        projection = QMatrix4x4() 
    612618        projection.ortho(0, self.width(), self.height(), 0, -1, 1) 
    613         modelview = QMatrix4x4() 
    614  
    615         self.renderer.set_transform(projection, modelview) 
     619        model = view = QMatrix4x4() 
     620 
     621        self.renderer.set_transform(model, view, projection) 
    616622 
    617623        if self._state == PlotState.SCALING: 
     
    655661                                         QVector3D(self._selection.right(), self._selection.bottom(), 0), 
    656662                                         QVector3D(self._selection.left(), self._selection.bottom(), 0), 
    657                                          internal_color, 
    658                                          internal_color, 
    659                                          internal_color, 
    660                                          internal_color) 
     663                                         color=internal_color) 
    661664 
    662665            border_color = QColor(51, 153, 255, 192) 
     
    760763            self.num_primitives_generated = glGetQueryObjectuiv(qid, GL_QUERY_RESULT) 
    761764            glBindVertexArray(0) 
    762             self.feedback_generated = True 
     765            self._feedback_generated = True 
    763766            print('Num generated primitives: ' + str(self.num_primitives_generated)) 
    764767 
     
    894897        viewport = [0, 0, self.width(), self.height()] 
    895898        area = [min(area.left(), area.right()), min(area.top(), area.bottom()), abs(area.width()), abs(area.height())] 
    896         min_max = orangeqt.Plot3D.get_min_max_selected(self, area, self.projection * self.modelview, 
     899        min_max = orangeqt.Plot3D.get_min_max_selected(self, area, self.projection * self.view * self.model, 
    897900                                                       viewport, 
    898901                                                       QVector3D(*self.plot_scale), QVector3D(*self.plot_translation)) 
     
    10351038                viewport = [0, 0, self.width(), self.height()] 
    10361039                area = [min(area.left(), area.right()), min(area.top(), area.bottom()), abs(area.width()), abs(area.height())] 
    1037                 orangeqt.Plot3D.select_points(self, area, self.projection * self.modelview, 
     1040                orangeqt.Plot3D.select_points(self, area, self.projection * self.view * self.model, 
    10381041                                              viewport, 
    10391042                                              QVector3D(*self.plot_scale), QVector3D(*self.plot_translation), 
     
    10921095        self.data_translation = array([0., 0., 0.]) 
    10931096        self._tooltip_fbo_dirty = True 
    1094         self.feedback_generated = False 
     1097        self._feedback_generated = False 
    10951098 
    10961099    def clear_plot_transformations(self): 
Note: See TracChangeset for help on using the changeset viewer.