Changeset 8742:6622a887996f in orange


Ignore:
Timestamp:
08/23/11 16:05:59 (3 years ago)
Author:
matejd <matejd@…>
Branch:
default
Convert:
a74bd7c05ea44f9b2f6b1c20f800ce17ff391ba1
Message:

Improved OWSphereviz3d: wired some of the GUI

Location:
orange/OrangeWidgets
Files:
5 edited

Legend:

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

    r8735 r8742  
    111111        self.GeneralTab = OWGUI.createTabPage(self.tabs, "Main") 
    112112        self.SettingsTab = OWGUI.createTabPage(self.tabs, "Settings", canScroll = 1) 
    113         self.PerformanceTab = OWGUI.createTabPage(self.tabs, "Performance") 
     113        if not "sphereviz" in name.lower(): 
     114            self.PerformanceTab = OWGUI.createTabPage(self.tabs, "Performance") 
    114115         
    115116        #add controls to self.controlArea widget 
     
    154155        OWGUI.checkBox(box, self, 'graph.jitterContinuous', 'Jitter continuous attributes', callback = self.resetGraphData, tooltip = "Does jittering apply also on continuous attributes?") 
    155156 
    156         box = OWGUI.widgetBox(self.SettingsTab, "Scaling Options") 
    157         OWGUI.qwtHSlider(box, self, "graph.scaleFactor", label = 'Inflate points by: ', minValue=1.0, maxValue= 10.0, step=0.1, callback = self.updateGraph, tooltip="If points lie too much together you can expand their position to improve perception", maxWidth = 90) 
     157        if not "sphereviz" in name.lower(): 
     158            box = OWGUI.widgetBox(self.SettingsTab, "Scaling Options") 
     159            OWGUI.qwtHSlider(box, self, "graph.scaleFactor", label = 'Inflate points by: ', minValue=1.0, maxValue= 10.0, step=0.1, callback = self.updateGraph, tooltip="If points lie too much together you can expand their position to improve perception", maxWidth = 90) 
    158160 
    159161        box = OWGUI.widgetBox(self.SettingsTab, "General Graph Settings") 
     
    165167        OWGUI.checkBox(box, self, 'graph.useDifferentSymbols', 'Use different symbols', callback = self.updateGraph, tooltip = "Show different class values using different symbols") 
    166168        OWGUI.checkBox(box, self, 'graph.useDifferentColors', 'Use different colors', callback = self.updateGraph, tooltip = "Show different class values using different colors") 
    167         self.graph.gui.filled_symbols_check_box(box) 
    168         wbox = OWGUI.widgetBox(box, orientation = "horizontal") 
    169         OWGUI.checkBox(wbox, self, 'graph.showProbabilities', 'Show probabilities'+'  ', callback = self.updateGraph, tooltip = "Show a background image with class probabilities") 
    170         smallWidget = OWGUI.SmallWidgetLabel(wbox, pixmap = 1, box = "Advanced settings", tooltip = "Show advanced settings") 
    171         OWGUI.rubber(wbox) 
     169        if not "sphereviz" in name.lower(): 
     170            self.graph.gui.filled_symbols_check_box(box) 
     171            wbox = OWGUI.widgetBox(box, orientation = "horizontal") 
     172            OWGUI.checkBox(wbox, self, 'graph.showProbabilities', 'Show probabilities'+'  ', callback = self.updateGraph, tooltip = "Show a background image with class probabilities") 
     173            smallWidget = OWGUI.SmallWidgetLabel(wbox, pixmap = 1, box = "Advanced settings", tooltip = "Show advanced settings") 
     174            OWGUI.rubber(wbox) 
     175 
     176            box = OWGUI.widgetBox(smallWidget.widget, orientation = "horizontal") 
     177            OWGUI.widgetLabel(box, "Granularity:  ") 
     178            OWGUI.hSlider(box, self, 'graph.squareGranularity', minValue=1, maxValue=10, step=1, callback = self.updateGraph) 
     179 
     180            box = OWGUI.widgetBox(smallWidget.widget, orientation = "horizontal") 
     181            OWGUI.checkBox(box, self, 'graph.spaceBetweenCells', 'Show space between cells', callback = self.updateGraph) 
    172182 
    173183        box = OWGUI.widgetBox(self.SettingsTab, "Colors", orientation = "horizontal") 
     
    184194        self.selectionChanged() 
    185195 
    186         box = OWGUI.widgetBox(smallWidget.widget, orientation = "horizontal") 
    187         OWGUI.widgetLabel(box, "Granularity:  ") 
    188         OWGUI.hSlider(box, self, 'graph.squareGranularity', minValue=1, maxValue=10, step=1, callback = self.updateGraph) 
    189  
    190         box = OWGUI.widgetBox(smallWidget.widget, orientation = "horizontal") 
    191         OWGUI.checkBox(box, self, 'graph.spaceBetweenCells', 'Show space between cells', callback = self.updateGraph) 
    192  
    193196        self.SettingsTab.layout().addStretch(100) 
    194197         
    195         self.graph.gui.effects_box(self.PerformanceTab, ) 
    196         self.PerformanceTab.layout().addStretch(100) 
     198        if not "sphereviz" in name.lower(): 
     199            self.graph.gui.effects_box(self.PerformanceTab, ) 
     200            self.PerformanceTab.layout().addStretch(100) 
    197201 
    198202        self.icons = self.createAttributeIconDict() 
  • orange/OrangeWidgets/Visualize Qt/OWScatterPlot3D.py

    r8735 r8742  
    5858            return 
    5959        orngScaleScatterPlotData.set_data(self, data, subset_data, **args) 
    60         OWPlot3D.set_data(self, self.no_jittering_scaled_data, self.no_jittering_scaled_subset_data) 
     60        OWPlot3D.set_plot_data(self, self.no_jittering_scaled_data, self.no_jittering_scaled_subset_data) 
    6161        # TODO: wire jitter settings (actual jittering done in geometry shader) 
    6262 
     
    299299    settingsList = ['plot.show_legend', 'plot.symbol_size', 'plot.show_x_axis_title', 'plot.show_y_axis_title', 
    300300                    'plot.show_z_axis_title', 'plot.show_legend', 'plot.use_2d_symbols', 
    301                     'plot.transparency', 'plot.show_grid', 'plot.pitch', 'plot.yaw', 'plot.use_ortho', 
     301                    'plot.alpha_value', 'plot.show_grid', 'plot.pitch', 'plot.yaw', 'plot.use_ortho', 
    302302                    'plot.show_chassis', 'plot.show_axes', 
    303303                    'auto_send_selection', 'auto_send_selection_update', 
     
    395395        ss.setValue(4) 
    396396 
    397         OWGUI.hSlider(box, self, 'plot.transparency', label='Transparency', 
     397        OWGUI.hSlider(box, self, 'plot.alpha_value', label='Transparency', 
    398398            minValue=10, maxValue=255, 
    399399            tooltip='Point transparency value', 
     
    632632        self.reportSettings('Settings', 
    633633                            [('Symbol size', self.plot.symbol_scale), 
    634                              ('Transparency', self.plot.transparency), 
     634                             ('Transparency', self.plot.alpha_value), 
    635635                             ('Jittering', self.jitter_size), 
    636636                             ('Jitter continuous attributes', OWGUI.YesNo[self.jitter_continuous]) 
  • orange/OrangeWidgets/Visualize Qt/OWSphereviz3D.py

    r8735 r8742  
    1414from Orange.preprocess.scaling import ScaleLinProjData3D 
    1515 
     16import orange 
     17Discrete = orange.VarTypes.Discrete 
     18Continuous = orange.VarTypes.Continuous 
     19 
    1620class OWSphereviz3DPlot(OWPlot3D, ScaleLinProjData3D): 
    1721    def __init__(self, widget, parent=None, name='None'): 
     
    1923        ScaleLinProjData3D.__init__(self) 
    2024 
    21         self.camera_fov = 40. 
     25        self.camera_fov = 50. 
    2226        self.show_axes = self.show_chassis = self.show_grid = False 
    2327 
    24         self.point_width = 4 
     28        self.point_width = 6 
    2529        self.animate_plot = False 
    2630        self.animate_points = False 
     
    3438        self.setCanvasBackground = self.setCanvasColor 
    3539 
     40        self._point_width_to_symbol_scale = 1.5 
     41 
    3642        self.gui = OWPlotGUI(self) 
    3743 
     
    4046        self.initializeGL() # Apparently this is not called already 
    4147        self.makeCurrent() 
    42         #OWPlot3D.set_data(self, self.no_jittering_scaled_data, self.no_jittering_scaled_subset_data) 
    4348 
    4449        if hasattr(self, 'sphere_vao_id'): 
     
    222227        if not self.have_data or len(labels) < 3: 
    223228            self.anchor_data = [] 
    224             #self.updateLayout() 
     229            self.updateGL() 
    225230            return 
    226231 
     
    231236        valid_data = self.getValidList(indices) 
    232237        trans_proj_data = self.create_projection_as_numeric_array(indices, validData=valid_data, 
    233             scaleFactor=self.scaleFactor, normalize=self.normalizeExamples, jitterSize=-1, 
     238            scaleFactor=1.0, normalize=self.normalizeExamples, jitterSize=-1, 
    234239            useAnchorData=1, removeMissingData=0) 
    235240        if trans_proj_data == None: 
     
    237242 
    238243        proj_data = trans_proj_data.T 
    239         print(proj_data) 
    240         self.set_data(proj_data, None) 
    241         self.symbol_scale = self.point_width 
     244        proj_data[0:3] += 0.5 # Geometry shader offsets positions by -0.5; leave class unmodified 
     245        if self.data_has_discrete_class: 
     246            proj_data[3] = self.no_jittering_scaled_data[self.attribute_name_index[self.data_domain.classVar.name]] 
     247        self.set_plot_data(proj_data, None) 
     248        self.symbol_scale = self.point_width*self._point_width_to_symbol_scale 
    242249        self.hide_outside = False 
    243         self.set_shown_attributes_indices(0, 1, 2, -1, -1, -1, -1, [], -1, 
    244                                           False, False, False, 
     250        self.fade_outside = False 
     251 
     252        color_index = symbol_index = size_index = label_index = -1 
     253        color_discrete = False 
     254        x_discrete = self.data_domain[self.anchor_data[0][3]].varType == Discrete 
     255        y_discrete = self.data_domain[self.anchor_data[1][3]].varType == Discrete 
     256        z_discrete = self.data_domain[self.anchor_data[2][3]].varType == Discrete 
     257 
     258        if self.data_has_discrete_class: 
     259            self.discPalette.setNumberOfColors(len(self.dataDomain.classVar.values)) 
     260 
     261        use_different_symbols = self.useDifferentSymbols and self.data_has_discrete_class and\ 
     262            len(self.data_domain.classVar.values) < len(Symbol) 
     263 
     264        if use_different_symbols: 
     265            symbol_index = 3 
     266            num_symbols_used = len(self.data_domain.classVar.values) 
     267        else: 
     268            num_symbols_used = -1 
     269 
     270        if self.useDifferentColors and self.data_has_discrete_class: 
     271            color_discrete = True 
     272            color_index = 3 
     273 
     274        colors = [] 
     275        if color_discrete: 
     276            for i in range(len(self.data_domain.classVar.values)): 
     277                c = self.discPalette[i] 
     278                colors.append([c.red()/255., c.green()/255., c.blue()/255.]) 
     279 
     280        self.set_shown_attributes_indices(0, 1, 2, color_index, symbol_index, size_index, label_index, 
     281                                          colors, num_symbols_used, 
     282                                          x_discrete, y_discrete, z_discrete, 
    245283                                          self.jitter_size, self.jitter_continuous, 
    246284                                          numpy.array([1., 1., 1.]), numpy.array([0., 0., 0.])) 
     
    257295                QVector3D(0, 1, 0)) 
    258296            self.modelview = modelview 
     297            self.draw_sphere() 
    259298 
    260299        self.before_draw_callback = before_draw_callback 
    261         self.after_draw_callback = self.draw_sphere_callback 
    262300        self.updateGL() 
    263301 
     
    265303        print('updateGraph') 
    266304 
    267     def draw_sphere_callback(self): 
     305    def draw_sphere(self): 
    268306        glDisable(GL_DEPTH_TEST) 
    269307        glEnable(GL_BLEND) 
     
    364402 
    365403                glColor4f(0, 0, 0, 1) 
    366                 self.renderText(x*1.3*radius, y*1.3*radius, z*1.3*radius, label) 
     404                self.renderText(x*1.2*radius, y*1.2*radius, z*1.2*radius, label) 
    367405 
    368406            num_parts = 30 
     
    384422        pass 
    385423 
    386     def color(self, role, group = None): 
    387         return None 
    388         #if group: 
    389             #return self.palette().color(group, role) 
    390         #else: 
    391             #return self.palette().color(role) 
     424    def color(self, role, group=None): 
     425        if group: 
     426            return self.palette().color(group, role) 
     427        else: 
     428            return self.palette().color(role) 
    392429 
    393430    def set_palette(self, palette): 
    394         self.palette = palette 
     431        self.updateGL() 
    395432 
    396433    def getSelectionsAsExampleTables(self, attrList, useAnchorData=1, addProjectedPositions=0): 
     
    401438 
    402439    def update_point_size(self): 
    403         self.symbol_scale = self.point_width 
     440        self.symbol_scale = self.point_width*self._point_width_to_symbol_scale 
    404441        self.updateGL() 
    405442 
  • orange/OrangeWidgets/plot/owplot3d.py

    r8735 r8742  
    397397        self.use_fbos = True 
    398398        self.use_geometry_shader = True 
     399        # TODO: self.cpu_code_path 
    399400 
    400401        self.hide_outside = False 
     402        self.fade_outside = True 
     403        self.label_index = -1 
    401404 
    402405        self.build_axes() 
     
    470473        self.symbol_program_translation    = self.symbol_program.uniformLocation('translation') 
    471474        self.symbol_program_hide_outside   = self.symbol_program.uniformLocation('hide_outside') 
     475        self.symbol_program_fade_outside   = self.symbol_program.uniformLocation('fade_outside') 
    472476        self.symbol_program_force_color    = self.symbol_program.uniformLocation('force_color') 
    473477        self.symbol_program_encode_color   = self.symbol_program.uniformLocation('encode_color') 
     
    599603        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 
    600604 
    601         if not self.feedback_generated: 
    602             return 
    603  
    604605        modelview, projection = self.get_mvp() 
    605606        self.modelview = modelview 
     
    612613            self.draw_axes() 
    613614 
    614         self.symbol_program.bind() 
    615         self.symbol_program.setUniformValue('modelview', modelview) 
    616         self.symbol_program.setUniformValue('projection', projection) 
    617         self.symbol_program.setUniformValue(self.symbol_program_use_2d_symbols, self.use_2d_symbols) 
    618         self.symbol_program.setUniformValue(self.symbol_program_hide_outside,   self.hide_outside) 
    619         self.symbol_program.setUniformValue(self.symbol_program_encode_color,   False) 
    620         # Specifying float uniforms with vec2 because of a weird bug in PyQt 
    621         self.symbol_program.setUniformValue(self.symbol_program_symbol_scale,   self.symbol_scale, self.symbol_scale) 
    622         self.symbol_program.setUniformValue(self.symbol_program_alpha_value,    self.alpha_value / 255., self.alpha_value / 255.) 
    623         plot_scale = numpy.maximum([1e-5, 1e-5, 1e-5],                          self.plot_scale+self.additional_scale) 
    624         self.symbol_program.setUniformValue(self.symbol_program_scale,          *plot_scale) 
    625         self.symbol_program.setUniformValue(self.symbol_program_translation,    *self.plot_translation) 
    626         self.symbol_program.setUniformValue(self.symbol_program_force_color,    0., 0., 0., 0.) 
    627  
    628         glEnable(GL_DEPTH_TEST) 
    629         glEnable(GL_BLEND) 
    630         glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 
    631  
    632         glBindVertexArray(self.feedback_vao) 
    633         glDrawArrays(GL_TRIANGLES, 0, self.num_primitives_generated*3) 
    634         glBindVertexArray(0) 
    635  
    636         self.symbol_program.release() 
     615        if self.feedback_generated: 
     616            self.symbol_program.bind() 
     617            self.symbol_program.setUniformValue('modelview', modelview) 
     618            self.symbol_program.setUniformValue('projection', projection) 
     619            self.symbol_program.setUniformValue(self.symbol_program_use_2d_symbols, self.use_2d_symbols) 
     620            self.symbol_program.setUniformValue(self.symbol_program_fade_outside,   self.fade_outside) 
     621            self.symbol_program.setUniformValue(self.symbol_program_hide_outside,   self.hide_outside) 
     622            self.symbol_program.setUniformValue(self.symbol_program_encode_color,   False) 
     623            # Specifying float uniforms with vec2 because of a weird bug in PyQt 
     624            self.symbol_program.setUniformValue(self.symbol_program_symbol_scale,   self.symbol_scale, self.symbol_scale) 
     625            self.symbol_program.setUniformValue(self.symbol_program_alpha_value,    self.alpha_value / 255., self.alpha_value / 255.) 
     626            plot_scale = numpy.maximum([1e-5, 1e-5, 1e-5],                          self.plot_scale+self.additional_scale) 
     627            self.symbol_program.setUniformValue(self.symbol_program_scale,          *plot_scale) 
     628            self.symbol_program.setUniformValue(self.symbol_program_translation,    *self.plot_translation) 
     629            self.symbol_program.setUniformValue(self.symbol_program_force_color,    0., 0., 0., 0.) 
     630 
     631            glEnable(GL_DEPTH_TEST) 
     632            glEnable(GL_BLEND) 
     633            glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 
     634 
     635            glBindVertexArray(self.feedback_vao) 
     636            glDrawArrays(GL_TRIANGLES, 0, self.num_primitives_generated*3) 
     637            glBindVertexArray(0) 
     638 
     639            self.symbol_program.release() 
    637640 
    638641        self.draw_labels() 
     
    641644            self.after_draw_callback() 
    642645 
    643         if self.tooltip_fbo_dirty: 
     646        if self.tooltip_fbo_dirty and self.feedback_generated: 
    644647            self.tooltip_fbo.bind() 
    645648            glClearColor(1, 1, 1, 1) 
     
    662665            glViewport(0, 0, self.width(), self.height()) 
    663666 
    664         if self.selection_fbo_dirty: 
     667        if self.selection_fbo_dirty and self.feedback_generated: 
    665668            # TODO: use transform feedback instead 
    666669            self.selection_fbo.bind() 
     
    9991002        self.updateGL() 
    10001003 
    1001     def set_data(self, data, subset_data=None): 
     1004    def set_plot_data(self, data, subset_data=None): 
    10021005        self.makeCurrent() 
    10031006        #if self.data != None: 
     
    13491352        self.tooltip_fbo_dirty = True 
    13501353        self.selection_fbo_dirty = True 
     1354        self.feedback_generated = False 
    13511355 
    13521356if __name__ == "__main__": 
  • orange/OrangeWidgets/plot/symbol.vs

    r8735 r8742  
    1414uniform bool encode_color; 
    1515uniform bool hide_outside; 
     16uniform bool fade_outside; 
    1617uniform vec4 force_color; 
    1718uniform vec2 alpha_value; // vec2 instead of float, fixing a bug on windows 
     
    7677        pos = abs(pos); 
    7778        float manhattan_distance = max(max(pos.x, pos.y), pos.z)+0.5; 
    78         float a = min(pow(min(1., 1. / manhattan_distance), 5.), alpha_value.x); 
     79        float a = alpha_value.x; 
     80 
     81        if (fade_outside) 
     82            a = min(pow(min(1., 1. / manhattan_distance), 5.), a); 
    7983 
    8084        if (use_2d_symbols) 
Note: See TracChangeset for help on using the changeset viewer.