Changeset 8747:73e1380c5460 in orange


Ignore:
Timestamp:
08/23/11 19:22:21 (3 years ago)
Author:
matejd <matejd@…>
Branch:
default
Convert:
faed31aab9c243bac86b25bfe1e13c47227e3eb5
Message:

Started working on OWLinProj3D

Location:
orange/OrangeWidgets/Visualize Qt
Files:
2 added
1 edited

Legend:

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

    r8743 r8747  
    55''' 
    66 
    7 import os 
    8  
    97from plot.owplot3d import * 
    108from plot.primitives import parse_obj 
    11 from plot.owplotgui import OWPlotGUI 
    129from OWLinProjQt import * 
    13  
    14 from Orange.preprocess.scaling import ScaleLinProjData3D 
     10from OWLinProj3DPlot import OWLinProj3DPlot 
    1511 
    1612import orange 
     
    1814Continuous = orange.VarTypes.Continuous 
    1915 
    20 class OWSphereviz3DPlot(OWPlot3D, ScaleLinProjData3D): 
     16class OWSphereviz3DPlot(OWLinProj3DPlot): 
    2117    def __init__(self, widget, parent=None, name='None'): 
    22         OWPlot3D.__init__(self, parent) 
    23         ScaleLinProjData3D.__init__(self) 
    24  
    25         self.camera_fov = 50. 
    26         self.show_axes = self.show_chassis = self.show_grid = False 
    27  
    28         self.point_width = 6 
    29         self.animate_plot = False 
    30         self.animate_points = False 
    31         self.antialias_plot = False 
    32         self.antialias_points = False 
    33         self.antialias_lines = False 
    34         self.auto_adjust_performance = False 
    35         self.show_filled_symbols = True 
    36         self.use_antialiasing = True 
    37         self.sendSelectionOnUpdate = False 
    38         self.setCanvasBackground = self.setCanvasColor 
    39  
    40         self._point_width_to_symbol_scale = 1.5 
     18        OWLinProj3DPlot.__init__(self, widget, parent, name) 
     19 
    4120        self.camera_in_center = False 
    4221 
    43         self.gui = OWPlotGUI(self) 
    44  
    4522    def setData(self, data, subsetData=None, **args): 
    46         ScaleLinProjData3D.setData(self, data, subsetData, **args) 
    47         self.initializeGL() # Apparently this is not called already 
    48         self.makeCurrent() 
     23        OWLinProj3DPlot.setData(self, data, subsetData, **args) 
    4924 
    5025        if hasattr(self, 'sphere_vao_id'): 
     
    227202            print('Failed to link cone shader!') 
    228203 
    229     def updateData(self, labels=None, setAnchors=0, **args): 
    230         self.clear() 
    231  
    232         if not self.have_data or len(labels) < 3: 
    233             self.anchor_data = [] 
    234             self.updateGL() 
    235             return 
    236  
    237         if setAnchors: 
    238             self.setAnchors(args.get('XAnchors'), args.get('YAnchors'), args.get('ZAnchors'), labels) 
    239  
    240         indices = [self.attribute_name_index[anchor[3]] for anchor in self.anchor_data] 
    241         valid_data = self.getValidList(indices) 
    242         trans_proj_data = self.create_projection_as_numeric_array(indices, validData=valid_data, 
    243             scaleFactor=1.0, normalize=self.normalizeExamples, jitterSize=-1, 
    244             useAnchorData=1, removeMissingData=0) 
    245         if trans_proj_data == None: 
    246             return 
    247  
    248         proj_data = trans_proj_data.T 
    249         proj_data[0:3] += 0.5 # Geometry shader offsets positions by -0.5; leave class unmodified 
    250         if self.data_has_discrete_class: 
    251             proj_data[3] = self.no_jittering_scaled_data[self.attribute_name_index[self.data_domain.classVar.name]] 
    252         self.set_plot_data(proj_data, None) 
    253         self.symbol_scale = self.point_width*self._point_width_to_symbol_scale 
    254         self.hide_outside = False 
    255         self.fade_outside = False 
    256  
    257         color_index = symbol_index = size_index = label_index = -1 
    258         color_discrete = False 
    259         x_discrete = self.data_domain[self.anchor_data[0][3]].varType == Discrete 
    260         y_discrete = self.data_domain[self.anchor_data[1][3]].varType == Discrete 
    261         z_discrete = self.data_domain[self.anchor_data[2][3]].varType == Discrete 
    262  
    263         if self.data_has_discrete_class: 
    264             self.discPalette.setNumberOfColors(len(self.dataDomain.classVar.values)) 
    265  
    266         use_different_symbols = self.useDifferentSymbols and self.data_has_discrete_class and\ 
    267             len(self.data_domain.classVar.values) < len(Symbol) 
    268  
    269         if use_different_symbols: 
    270             symbol_index = 3 
    271             num_symbols_used = len(self.data_domain.classVar.values) 
     204        self.before_draw_callback = lambda: self.before_draw() 
     205 
     206    def before_draw(self): 
     207        # Override modelview (scatterplot points camera somewhat below the center, which doesn't 
     208        # look good with sphere) 
     209        modelview = QMatrix4x4() 
     210        if self.camera_in_center: 
     211            modelview.lookAt( 
     212                QVector3D(0, 0, 0), 
     213                QVector3D(self.camera[0]*self.camera_distance, 
     214                          self.camera[1]*self.camera_distance, 
     215                          self.camera[2]*self.camera_distance), 
     216                QVector3D(0, 1, 0)) 
     217            projection = QMatrix4x4() 
     218            projection.perspective(90., float(self.width()) / self.height(), 
     219                                   self.perspective_near, self.perspective_far) 
     220            self.projection = projection 
    272221        else: 
    273             num_symbols_used = -1 
    274  
    275         if self.useDifferentColors and self.data_has_discrete_class: 
    276             color_discrete = True 
    277             color_index = 3 
    278  
    279         colors = [] 
    280         if color_discrete: 
    281             for i in range(len(self.data_domain.classVar.values)): 
    282                 c = self.discPalette[i] 
    283                 colors.append([c.red()/255., c.green()/255., c.blue()/255.]) 
    284  
    285         self.set_shown_attributes_indices(0, 1, 2, color_index, symbol_index, size_index, label_index, 
    286                                           colors, num_symbols_used, 
    287                                           x_discrete, y_discrete, z_discrete, 
    288                                           self.jitter_size, self.jitter_continuous, 
    289                                           numpy.array([1., 1., 1.]), numpy.array([0., 0., 0.])) 
    290  
    291         def before_draw_callback(): 
    292             # Override modelview (scatterplot points camera somewhat below the center, which doesn't 
    293             # look good with sphere) 
    294             modelview = QMatrix4x4() 
    295             if self.camera_in_center: 
    296                 modelview.lookAt( 
    297                     QVector3D(0, 0, 0), 
    298                     QVector3D(self.camera[0]*self.camera_distance, 
    299                               self.camera[1]*self.camera_distance, 
    300                               self.camera[2]*self.camera_distance), 
    301                     QVector3D(0, 1, 0)) 
    302                 projection = QMatrix4x4() 
    303                 projection.perspective(90., float(self.width()) / self.height(), 
    304                                        self.perspective_near, self.perspective_far) 
    305                 self.projection = projection 
    306             else: 
    307                 modelview.lookAt( 
    308                     QVector3D(self.camera[0]*self.camera_distance, 
    309                               self.camera[1]*self.camera_distance, 
    310                               self.camera[2]*self.camera_distance), 
    311                     QVector3D(0, 0, 0), 
    312                     QVector3D(0, 1, 0)) 
    313             self.modelview = modelview 
    314             self.draw_sphere() 
    315  
    316         self.before_draw_callback = before_draw_callback 
    317         self.updateGL() 
    318  
    319     def updateGraph(self, attrList=None, setAnchors=0, insideColors=None, **args): 
    320         print('updateGraph') 
     222            modelview.lookAt( 
     223                QVector3D(self.camera[0]*self.camera_distance, 
     224                          self.camera[1]*self.camera_distance, 
     225                          self.camera[2]*self.camera_distance), 
     226                QVector3D(0, 0, 0), 
     227                QVector3D(0, 1, 0)) 
     228        self.modelview = modelview 
     229        self.draw_sphere() 
    321230 
    322231    def draw_sphere(self): 
     
    437346                    glEnd(GL_LINES) 
    438347 
    439     def setCanvasColor(self, c): 
    440         pass 
    441  
    442     def color(self, role, group=None): 
    443         if group: 
    444             return self.palette().color(group, role) 
    445         else: 
    446             return self.palette().color(role) 
    447  
    448     def set_palette(self, palette): 
    449         self.updateGL() 
    450  
    451     def getSelectionsAsExampleTables(self, attrList, useAnchorData=1, addProjectedPositions=0): 
    452         return (None, None) 
    453  
    454     def removeAllSelections(self): 
    455         pass 
    456  
    457     def update_point_size(self): 
    458         self.symbol_scale = self.point_width*self._point_width_to_symbol_scale 
    459         self.updateGL() 
    460  
    461     def update_alpha_value(self): 
    462         self.updateGL() 
    463  
    464     def replot(self): 
    465         pass 
    466  
    467348    def mouseMoveEvent(self, event): 
    468349        self.invert_mouse_x = self.camera_in_center 
    469         OWPlot3D.mouseMoveEvent(self, event) 
     350        OWLinProj3DPlot.mouseMoveEvent(self, event) 
    470351 
    471352class OWSphereviz3D(OWLinProjQt): 
Note: See TracChangeset for help on using the changeset viewer.