Changeset 8398:a18fac78c2a4 in orange


Ignore:
Timestamp:
07/19/11 20:43:02 (3 years ago)
Author:
matejd <matejd@…>
Branch:
default
Convert:
f8c7bcb065c6bc15f9dd9c18f13e00dd77ec3f40
Message:

owplot3d: improved labels

Location:
orange/OrangeWidgets
Files:
2 edited

Legend:

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

    r8395 r8398  
    262262        self.plot.scatter(X, Y, Z, colors, sizes, shapes, labels) 
    263263        self.plot.set_x_axis_title(self.axis_candidate_attrs[self.x_attr].name) 
    264         self.plot.set_x_axis_title(self.axis_candidate_attrs[self.y_attr].name) 
    265         self.plot.set_x_axis_title(self.axis_candidate_attrs[self.z_attr].name) 
     264        self.plot.set_y_axis_title(self.axis_candidate_attrs[self.y_attr].name) 
     265        self.plot.set_z_axis_title(self.axis_candidate_attrs[self.z_attr].name) 
    266266 
    267267    def get_axis_data(self, x_ind, y_ind, z_ind): 
     
    274274 
    275275if __name__ == "__main__": 
    276   app = QApplication(sys.argv) 
    277   w = OWScatterPlot3D() 
    278   data = orange.ExampleTable("../../doc/datasets/iris") 
    279   w.setData(data) 
    280   w.handleNewSignals() 
    281   w.show() 
    282   app.exec_() 
     276    app = QApplication(sys.argv) 
     277    w = OWScatterPlot3D() 
     278    data = orange.ExampleTable("../../doc/datasets/iris") 
     279    w.setData(data) 
     280    w.handleNewSignals() 
     281    w.show() 
     282    app.exec_() 
  • orange/OrangeWidgets/owplot3d.py

    r8397 r8398  
    9797glBindBuffer = gl.glBindBuffer 
    9898glBufferData = gl.glBufferData 
    99 glGenFramebuffers = gl.glGenFramebuffers 
    100 glBindFramebuffer = gl.glBindFramebuffer 
    101 glFramebufferTexture2D = gl.glFramebufferTexture2D 
    102 glCheckFramebufferStatus = gl.glCheckFramebufferStatus 
    103 glGenTextures = gl.glGenTextures 
    104 GL_FRAMEBUFFER_COMPLETE = 0x8CD5 
    105 GL_FRAMEBUFFER = 0x8D40 
    106 GL_COLOR_ATTACHMENT0 = 0x8CE0 
    107  
    10899 
    109100def normalize(vec): 
     
    309300        glEnable(GL_DEPTH_TEST) 
    310301        glEnable(GL_LINE_SMOOTH) 
     302        glDisable(GL_CULL_FACE) 
    311303 
    312304        self.symbol_shader = glCreateProgram() 
     
    415407            print('Shaders compiled and linked!') 
    416408 
    417         # Create Framebuffer object, which will be render target for axes values and titles. 
    418         self.auxiliary_fbo = QtOpenGL.QGLFramebufferObject(1024, 1024) 
    419         if self.auxiliary_fbo.isValid(): 
    420             print('Auxiliary fbo created!') 
    421         else: 
    422             print('Failed to create auxiliary fbo!') 
    423  
    424409    def resizeGL(self, width, height): 
    425410        glViewport(0, 0, width, height) 
    426411 
    427412    def paintGL(self): 
    428  
    429         glClearColor(1,1,1,1) 
     413        glClearColor(1, 1, 1, 1) 
    430414        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 
    431415        glMatrixMode(GL_PROJECTION) 
     
    452436 
    453437        glDisable(GL_DEPTH_TEST) 
    454         glDisable(GL_CULL_FACE) 
    455438        glEnable(GL_BLEND) 
    456439        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 
     
    463446                glUniform1f(self.symbol_shader_symbol_scale, self.symbol_scale) 
    464447                glUniform1f(self.symbol_shader_transparency, self.transparency) 
    465                 scale = numpy.maximum([0,0,0], self.scale + self.add_scale) 
     448                scale = numpy.maximum([0, 0, 0], self.scale + self.add_scale) 
    466449                glUniform3f(self.symbol_shader_scale,        *scale) 
    467450                glUniform3f(self.symbol_shader_translation,  *(-self.center)) 
     
    492475            self.legend.draw() 
    493476 
    494         #self.draw_labels_and_titles_to_fbo() 
    495477        self.draw_helpers() 
    496478 
    497479    def draw_helpers(self): 
     480        glMatrixMode(GL_PROJECTION) 
     481        glLoadIdentity() 
     482        glOrtho(0, self.width(), self.height(), 0, -1, 1) 
     483        glMatrixMode(GL_MODELVIEW) 
     484        glLoadIdentity() 
     485 
    498486        if self.state == PlotState.SCALING: 
    499             if not self.show_legend: 
    500                 glMatrixMode(GL_PROJECTION) 
    501                 glLoadIdentity() 
    502                 glOrtho(0, self.width(), self.height(), 0, -1, 1) 
    503                 glMatrixMode(GL_MODELVIEW) 
    504                 glLoadIdentity() 
    505487            x, y = self.mouse_pos.x(), self.mouse_pos.y() 
    506488            glColor4f(0, 0, 0, 1) 
     
    531513            draw_line(s[2], s[1], s[0], s[1]) 
    532514 
    533         #glEnable(GL_TEXTURE_2D) 
    534         #glBindTexture(GL_TEXTURE_2D, self.auxiliary_fbo.texture()) 
    535         #glColor4f(1, 1, 1, 1) 
    536         #glBegin(GL_QUADS) 
    537         #glTexCoord2f(0, 0); glVertex2f(10, 10) 
    538         #glTexCoord2f(1, 0); glVertex2f(200, 10) 
    539         #glTexCoord2f(1, 1); glVertex2f(200, 200) 
    540         #glTexCoord2f(0, 1); glVertex2f(10, 200) 
    541         #glEnd() 
    542         #glBindTexture(GL_TEXTURE_2D, 0) 
    543  
    544515    def set_x_axis_title(self, title): 
    545516        self.x_axis_title = title 
     
    592563            glLineWidth(1) 
    593564            start, end = axis 
    594             offset = normal*0.3 
     565            offset = normal*0.8 
    595566            samples = numpy.linspace(0.0, 1.0, num=sub) 
     567            samples = samples[:-1] if coord_index != 1 else samples[1:] 
    596568            for sample in samples: 
    597569                position = start + (end-start)*sample 
     
    608580                                '%.1f' % value) 
    609581 
    610         glDisable(GL_DEPTH_TEST) 
    611         glLineWidth(1) 
    612         glEnable(GL_BLEND) 
    613         glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 
    614  
    615         # Draw axis labels. 
    616         glColor4f(0,0,0,1) 
    617         for axis, title in zip([self.x_axis, self.y_axis, self.z_axis], 
    618                                [self.x_axis_title, self.y_axis_title, self.z_axis_title]): 
     582        def draw_axis_title(axis, title, normal): 
    619583            middle = (axis[0] + axis[1]) / 2. 
    620             self.renderText(middle[0], middle[1]-0.2, middle[2]-0.2, title, 
     584            middle += normal * 1. if axis[0][1] != axis[1][1] else normal * 2. 
     585            self.renderText(middle[0], middle[1], middle[2], 
     586                            title, 
    621587                            font=self.axis_title_font) 
    622588 
     
    656622            glEnd() 
    657623 
     624        glDisable(GL_DEPTH_TEST) 
     625        glLineWidth(1) 
     626        glEnable(GL_BLEND) 
     627        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 
     628 
    658629        planes = [self.axis_plane_xy, self.axis_plane_yz, 
    659630                  self.axis_plane_xy_back, self.axis_plane_yz_right] 
     
    670641        if visible_planes[0]: 
    671642            draw_axis(self.x_axis) 
    672             draw_values(self.x_axis, 0, numpy.array([0,0,-1])) 
     643            draw_values(self.x_axis, 0, numpy.array([0, 0, -1])) 
     644            draw_axis_title(self.x_axis, self.x_axis_title, numpy.array([0, 0, -1])) 
    673645        elif visible_planes[2]: 
    674646            draw_axis(self.x_axis + self.unit_z) 
    675             draw_values(self.x_axis + self.unit_z, 0, numpy.array([0,0,1])) 
     647            draw_values(self.x_axis + self.unit_z, 0, numpy.array([0, 0, 1])) 
     648            draw_axis_title(self.x_axis + self.unit_z, 
     649                            self.x_axis_title, numpy.array([0, 0, 1])) 
    676650 
    677651        if visible_planes[1]: 
    678652            draw_axis(self.z_axis) 
    679             draw_values(self.z_axis, 2, numpy.array([-1,0,0])) 
     653            draw_values(self.z_axis, 2, numpy.array([-1, 0, 0])) 
     654            draw_axis_title(self.z_axis, self.z_axis_title, numpy.array([-1, 0, 0])) 
    680655        elif visible_planes[3]: 
    681656            draw_axis(self.z_axis + self.unit_x) 
    682             draw_values(self.z_axis + self.unit_x, 2, numpy.array([1,0,0])) 
     657            draw_values(self.z_axis + self.unit_x, 2, numpy.array([1, 0, 0])) 
     658            draw_axis_title(self.z_axis + self.unit_x, self.z_axis_title, numpy.array([1, 0, 0])) 
    683659 
    684660        try: 
     
    697673                   numpy.array([0,0,-1])] 
    698674        axis = y_axis_translated[rightmost_visible] 
     675        normal = normals[rightmost_visible] 
    699676        draw_axis(axis) 
    700         normal = normals[rightmost_visible] 
    701         draw_values(y_axis_translated[rightmost_visible], 1, normal) 
     677        draw_values(axis, 1, normal) 
     678        draw_axis_title(axis, self.y_axis_title, normal) 
    702679 
    703680        # Remember which axis to scale when dragging mouse horizontally. 
    704681        self.scale_x_axis = False if rightmost_visible % 2 == 0 else True 
    705  
    706     def draw_labels_and_titles_to_fbo(self): 
    707         self.auxiliary_fbo.bind() 
    708         #glPushAttrib(GL_VIEWPORT_BIT) 
    709         #glViewport(0, 0, 512, 512) 
    710         glClearColor(1, 1, 1, 1) 
    711         glClear(GL_COLOR_BUFFER_BIT) 
    712         glMatrixMode(GL_PROJECTION) 
    713         glLoadIdentity() 
    714         glOrtho(0, 1024, 1024, 0, -1, 1) 
    715         glMatrixMode(GL_MODELVIEW) 
    716         glLoadIdentity() 
    717         glColor3f(0,0,0) 
    718         self.renderText(10,200, 'Are you talking to me?!') 
    719  
    720         glColor4f(1, 0, 0, 1) 
    721         glBegin(GL_TRIANGLES) 
    722         glVertex2f(10,10) 
    723         glVertex2f(100, 10) 
    724         glVertex2f(80, 200) 
    725         glEnd() 
    726  
    727         #glPopAttrib() 
    728         self.auxiliary_fbo.release() 
    729682 
    730683    def build_axes(self): 
     
    791744        self.normal_size = 0.2 
    792745 
    793         self.scale_x = self.view_cube_edge / self.range_x 
    794         self.scale_y = self.view_cube_edge / self.range_y 
    795         self.scale_z = self.view_cube_edge / self.range_z 
     746        self.scale[0] = self.view_cube_edge / self.range_x 
     747        self.scale[1] = self.view_cube_edge / self.range_y 
     748        self.scale[2] = self.view_cube_edge / self.range_z 
    796749 
    797750        # Generate vertices for shapes and also indices for outlines. 
     
    1006959        self.selections = [] 
    1007960        self.legend.clear() 
     961        self.x_axis_title = self.y_axis_title = self.z_axis_title = '' 
     962        self.updateGL() 
    1008963 
    1009964 
     
    1025980    colors = [palette[int(ex.getclass())] for ex in data] 
    1026981    colors = [[c.red()/255., c.green()/255., c.blue()/255., 0.8] for c in colors] 
    1027  
    1028982    w.scatter(x, y, z, colors=colors) 
    1029983    app.exec_() 
Note: See TracChangeset for help on using the changeset viewer.