Exemplo n.º 1
0
 def _init_data(self):
     try:
         OM = ObjectManager()
         data_obj = OM.get(self.data_obj_uid)
         # No need to get unit from data_obj if it not changed.
         self._data_name = data_obj.name
         self._data_unit = data_obj.unit
         self._data_type = data_obj.datatype
         #
         data_indexes = data_obj.get_data_indexes()
         for dim_idx in range(len(data_indexes)):
             indexes_per_dim_uid = data_indexes[dim_idx]
             di_uid = indexes_per_dim_uid[0]  # Chosing the first one!
             di = OM.get(di_uid)
             if (len(data_indexes) - dim_idx) <= 2:
                 # Sempre exibe as 2 ultimas dimensoes do dado.
                 # Ex: sismica 3-d stacked (iline, xline, tempo) serah exibido
                 # xline e tempo, em principio.
                 # (di_uid, is_ranged, start, stop)
                 self._data.append([di_uid, True, 0, len(di.data)])
             else:
                 self._data.append([di_uid, False, 0, len(di.data)])
                 #
     except Exception as e:
         print('ERROR _init_data:', e)
         raise
Exemplo n.º 2
0
    def OnRenameObject(self, event):
        (node_type, node_main_info, node_extra_info) = self.popup_obj
        OM = ObjectManager()
        obj = OM.get(node_main_info)

        UIM = UIManager()
        dlg = UIM.create('dialog_controller', title='Rename object')
        #
        try:
            ctn_details = dlg.view.AddCreateContainer('StaticBox',
                                                      label='Object details',
                                                      orient=wx.VERTICAL,
                                                      proportion=0,
                                                      flag=wx.EXPAND | wx.TOP,
                                                      border=5)
            dlg.view.AddStaticText(ctn_details,
                                   proportion=0,
                                   flag=wx.EXPAND | wx.TOP,
                                   border=5,
                                   label='Name: ' + obj.name)
            #
            dlg.view.AddStaticText(ctn_details,
                                   proportion=0,
                                   flag=wx.EXPAND | wx.TOP,
                                   border=5,
                                   label='Type id: ' + obj.tid)
            dlg.view.AddStaticText(ctn_details,
                                   proportion=0,
                                   flag=wx.EXPAND | wx.TOP,
                                   border=5,
                                   label='Object id: ' + str(obj.oid))
            #
            ctn_new_name = dlg.view.AddCreateContainer('StaticBox',
                                                       label='New name',
                                                       orient=wx.VERTICAL,
                                                       proportion=0,
                                                       flag=wx.EXPAND | wx.TOP,
                                                       border=5)
            dlg.view.AddTextCtrl(ctn_new_name,
                                 proportion=0,
                                 flag=wx.EXPAND | wx.TOP,
                                 border=5,
                                 widget_name='new_name',
                                 initial=obj.name)
            #
            dlg.view.SetSize((300, 330))
            answer = dlg.view.ShowModal()
            #
            if answer == wx.ID_OK:
                results = dlg.get_results()
                new_name = results.get('new_name')
                obj.name = new_name
                UIM = UIManager()
                controller = UIM.get(self._controller_uid)
                controller.reload_object_node(obj.uid)
        except Exception as e:
            print('\nERROR OnRenameObject:', e)
            raise
        finally:
            UIM.remove(dlg.uid)
Exemplo n.º 3
0
    def get_equivalent_index(self, datatype, dim_idx=-1):
        """
        Metodo usado para se obter um DataIndex de equivalencia (e.g. obter
        um TWT quando self.datatype == 'MD').
        
        Valido somente para dados de pocos, devido a busca por CurveSet.
        
        Retorna uma tupla onde o primeiro elemento informa se foi encontrado
        objeto equivalente diferente o DataIndex mask sendo aplicado. Em caso 
        afirmativo, o segundo elemento da tupla contem o objeto encontrado.
        Caso nao tenha sido obtido index equivalente, o segundo elemento 
        retornara o proprio objeto, se este tiver o datatype procurado. 
        Se o datatype desejado nao for encontrado, sera retornado (False, None).
        """
        dim_di_uid, _ = self.get_index_for_dimension(dim_idx)
        OM = ObjectManager()
        di = OM.get(dim_di_uid)

        if di.datatype == datatype:
            return False, di
        OM = ObjectManager()
        curve_set_uid = OM._getparentuid(di.uid)
        if curve_set_uid[0] != 'curve_set':
            msg = 'ERROR DataIndex.get_equivalent_data_index: curve_set not found.'
            raise Exception(msg)
        for possible_di in OM.list('data_index', curve_set_uid):
            if possible_di.uid == di.uid:
                continue
            if possible_di.datatype == datatype:
                # Found it!
                return True, possible_di
        return False, None
Exemplo n.º 4
0
 def PostInit(self):
     OM = ObjectManager()
     UIM = UIManager()
     controller = UIM.get(self._controller_uid)
     controller.subscribe(self.set_fit, 'change.fit')
     controller.subscribe(self.set_multicursor, 'change.multicursor')
     #
     well = OM.get(controller.obj_uid)
     controller.attach(well.uid)
     # Populate index type Choice
     for z_axis_dt in well.get_z_axis_datatypes().keys():
         self._tool_bar.choice_IT.Append(z_axis_dt)
     # Setting index type Choice
     idx_index_type = self._tool_bar.choice_IT.GetItems().index(
         controller.index_type)
     self._tool_bar.choice_IT.SetSelection(idx_index_type)
     #
     self._tool_bar.choice_IT.Bind(wx.EVT_CHOICE, self._on_index_type)
     # Setting min and max Z axis TextCtrls
     self._reload_z_axis_textctrls()
     # Create Overview Track
     UIM.create('track_controller',
                self._controller_uid,
                overview=True,
                plotgrid=False)
Exemplo n.º 5
0
    def _on_track_move(self, event):
        axes = event.inaxes
        if axes is None:
            return

        OM = ObjectManager()
        UIM = UIManager()
        parent_controller_uid = UIM._getparentuid(self._controller_uid)
        parent_controller = UIM.get(parent_controller_uid)
        info = parent_controller.index_type + ': {:0.2f}'.format(event.ydata)

        for toc in UIM.list('track_object_controller', self._controller_uid):

            data = toc.get_data_info(event)
            if data is None:
                continue
            if isinstance(data, float):
                str_x = '{:0.2f}'.format(data)
            else:
                str_x = str(data)

            obj = OM.get(toc.data_obj_uid)
            info += ', {}: {}'.format(obj.name, str_x)

#        print ('on_track_move:', event.xdata, event.ydata)

        parent_controller.show_status_message(info)
Exemplo n.º 6
0
 def get_data_info(self, event):
     """
     Retorna a string com informações do dado exibido em tela, 
     de acordo com a posicao do mouse no momento.
     """
     image = self._mplot_objects.get('density')
     if image:
         value = image.get_cursor_data(event)
         #
         #            UIM = UIManager()
         #            controller = UIM.get(self._controller_uid)
         toc = self.get_parent_controller()
         x_di_uid, x_index_data = toc.get_index_for_dimension(-2)
         y_di_uid, y_index_data = toc.get_index_for_dimension(-1)
         canvas = self.get_canvas()
         xvalue = canvas.inverse_transform(event.xdata, x_index_data[0],
                                           x_index_data[-1])
         #
         OM = ObjectManager()
         x_data_index = OM.get(x_di_uid)
         y_data_index = OM.get(y_di_uid)
         #
         if event.ydata < y_index_data[0] or event.ydata > y_index_data[-1]:
             return None
         #
         msg = x_data_index.name + ': {:0.2f}'.format(xvalue) + ', ' \
               + y_data_index.name + ': {:0.2f}'.format(event.ydata)
         msg += ', Value: {:0.2f}'.format(value)
         return '[' + msg + ']'
     else:
         msg = ''
         return '[' + msg + ']'
Exemplo n.º 7
0
    def _open_model(self, model_uid):
        OM = ObjectManager()
        model = OM.get(model_uid)

        UIM = UIManager()
        mwc = wx.GetApp().get_main_window_controller()
        cc = UIM.create('modelplot_controller', mwc.uid)

        #xlim_max, ylim_max = model.data.shape
        # (left, right, bottom, top)
        extent = (0, model.nx, model.ny, 0)

        print("\n\n")
        print(extent)
        print("\n\n")

        image = cc._main_panel.append_artist("AxesImage",
                                             cmap="binary",
                                             extent=extent)

        image.set_data(model.data)

        cpc = UIM.list('canvas_plotter_controller', cc.uid)[0]
        cpc.figure_titletext = model.name

        xlim = (0, model.nx)
        cpc.xlim = xlim
        cpc.set_plot_lim("x", xlim)
        ylim = (model.ny, 0)
        cpc.ylim = ylim
        cpc.set_plot_lim("y", ylim)

        print(model.nx, model.ny)
Exemplo n.º 8
0
    def _get_log_state(self):
        # TODO: Rever necessidade de obj.name - ParametersManager
        state = {}
        OM = ObjectManager()
        obj = OM.get(self.data_obj_uid)

        if obj.tid == 'log':
            # TODO: Rever isso
            PM = ParametersManager.get()
            parms = PM.get_datatypes_visual_props(obj.datatype)
            if parms is not None:
                state['left_scale'] = parms.get('LeftScale')
                state['right_scale'] = parms.get('RightScale')
                state['thickness'] = parms.get('LineWidth')
                state['color'] = parms.get('Color', 'Black')
                loglin = parms.get('LogLin')
                if loglin == 'Lin':
                    state['x_scale'] = 0
                elif loglin == 'Log':
                    state['x_scale'] = 1
                else:
                    raise ValueError('Unknown LogLin: [{}]'.format(loglin))
            else:
                if obj.name == 'LOG_TESTE_CURVE':
                    state['x_scale'] = 1
                    ls, rs = (0.01, 100000.0)
                else:
                    state['x_scale'] = 0
                    ls, rs = calculate_extremes(obj)
                state['left_scale'] = ls
                state['right_scale'] = rs

        return state
Exemplo n.º 9
0
 def PostInit(self):
     toc = self._get_track_object_controller()
     OM = ObjectManager()
     for (di_uid, display, first, last) in toc._data:
         di = OM.get(di_uid)
         print('\n', di.name, display, first, last)
         self.view.add_panel(di_uid, display, first, last)
     self.view.add_bottom_panel()
Exemplo n.º 10
0
    def set_dimension(self, dim_idx=-1, **kwargs):
        """
        dim_idx here refers to object actual data indexes.
        """
        # TODO: make dimensions changeable with np.transpose.
        #"""
        #dim_idx here refers to DataMask current dimension, not object
        #data indexes.
        #"""
        datatype = kwargs.pop('datatype', None)
        name = kwargs.pop('name', None)
        di_uid = kwargs.pop('di_uid', None)
        #
        if datatype is None and name is None and di_uid is None:
            raise Exception(
                'Either di_uid, datatype or name must be informed.')
        #
        OM = ObjectManager()
        data_obj = OM.get(self.data_obj_uid)
        data_indexes = data_obj.get_data_indexes()
        dim_dis_uids = data_indexes[dim_idx]
        #        print('dim_dis_uids:', dim_dis_uids)
        ret_datatypes = []
        #
        for dim_di_uid in dim_dis_uids:
            if dim_di_uid == di_uid:
                self._data[dim_idx][0] = di_uid
                #                print('self._data[dim_idx] 2.1:', self._data[dim_idx])
                return True
            dim_di = OM.get(dim_di_uid)
            #            print(dim_di.datatype, datatype)
            if dim_di.name == name:
                self._data[dim_idx][0] = dim_di_uid
                #                print('self._data[dim_idx] 2.2:', self._data[dim_idx])
                return True
            elif dim_di.datatype == datatype:
                ret_datatypes.append(dim_di_uid)
        if ret_datatypes:
            self._data[dim_idx][0] = ret_datatypes[
                0]  # Sets with the first one
            #            print('self._data[dim_idx] 2.3:', self._data[dim_idx])
            return True


#        print('set_dimension DEU FALSE')
        return False
Exemplo n.º 11
0
 def get_friendly_name(self):
     """
     Metodo duplicado em Log e DataIndex
     """
     OM = ObjectManager()
     parent_well_uid = OM._getparentuid(self.uid)
     parent_well = OM.get(parent_well_uid)
     return self.name + '@' + parent_well.name
Exemplo n.º 12
0
def on_save_image(*args, **kwargs):
    
    OM = ObjectManager()
    UIM = UIManager()
    #
    images_od = OrderedDict()
    images = OM.list('image')
    for image in images:
        images_od[image.name] = image.uid    

    #
    dlg = UIM.create('dialog_controller', title='Save image file')
    ctn_image = dlg.view.AddCreateContainer('StaticBox', label='Select Image', 
                                            orient=wx.VERTICAL, proportion=0, 
                                            flag=wx.EXPAND|wx.TOP, border=5)


    dlg.view.AddChoice(ctn_image, proportion=0, flag=wx.EXPAND|wx.TOP, 
                       border=5, widget_name='images_choice', options=images_od,
                       initial=0) 
    #
    
    dlg.view.SetSize((300, 180))
    result = dlg.view.ShowModal()

  
    
    if result == wx.ID_OK:
        results = dlg.get_results()  
            
        print(results)    
    
        image_uid = results.get("images_choice")
    
    
        wildcard = "Save image file (*.png, *.tif)|*.png;*.tif"
    
        fdlg = wx.FileDialog(wx.App.Get().GetTopWindow(), 
                             "Save file", 
                             wildcard=wildcard, 
                             style=wx.FD_SAVE
        )
        
        if fdlg.ShowModal() == wx.ID_OK:
            file_name = fdlg.GetFilename()
            dir_name = fdlg.GetDirectory()
            fdlg.Destroy()
        else:
            fdlg.Destroy()
            return
        
        fullfilename = os.path.join(dir_name, file_name)        
        
        print("fullfilename: ", fullfilename)

        image = OM.get(image_uid)
        img = Image.fromarray(image.data)
        img.save(fullfilename)
Exemplo n.º 13
0
 def get_friendly_name(self):
     UIM = UIManager()
     controller = UIM.get(self._controller_uid)
     OM = ObjectManager()
     well = OM.get(controller.obj_uid)
     idx = self._get_sequence_number()
     name = self._get_tid_friendly_name() \
                            + ': ' + well.name + ' ['+ str(idx) + ']'
     return name
Exemplo n.º 14
0
    def _create_data_index_map(self, *args):
        """
        args: List of lists of DataIndex uids. 
              
        Examples:
            
            1-D data: [index.uid, owt_index.uid, twt_index.uid]
            
            5-D data: [i_line_index.uid],
                      [x_line_index.uid],
                      [offset_index.uid],
                      [freq_index.uid],
                      [time_index.uid, prof_index.uid]
        """
        max_dims = self._get_max_dimensions()
        if len(args) > max_dims:
            msg = 'Exceed number of dimensions [{}] - {}.'.format(
                max_dims, args)
            print('\n' + msg)
            raise Exception(msg)

        OM = ObjectManager()
        data = []

        for di_objs in args:
            if not isinstance(di_objs, list):
                # arg should be a object uid.
                di_objs = [di_objs]
            for di_obj in di_objs:
                try:
                    # Then, test if object exist this is a valid object uid.
                    obj = OM.get(di_obj)
                    if not obj.tid == 'data_index':
                        raise Exception()
                except:
                    print('\n\nDEU RUIM:', di_obj)
                    msg = 'Error in objects informed as ' + \
                                            'Data Indexes: {}.'.format(args)
                    raise Exception(msg)

            data.append(di_objs)

        try:
            di_map = OM.new('data_index_map', data)
        except Exception as e:
            msg = 'ERROR DataObject._create_data_index_map: {} - data: {}'.format(
                e, data)
            print('\n' + msg)
            raise

        if not OM.add(di_map, self.uid):
            msg = 'Cannot add {} to {}.'.format(di_map, self.uid)
            print('\n' + msg)
            raise Exception(msg)

        msg = 'Criado {} com sucesso.'.format(di_map)
Exemplo n.º 15
0
 def get_curve_set(self):
     """
     Metodo de conveniencia.
     
     Se o objeto possui curve_set, o retorna. Senão retorna None.
     
     Metodo duplicado em DataIndex e Log.
     """
     OM = ObjectManager()
     curve_set_uid = OM._getparentuid(self.uid)
     return OM.get(curve_set_uid)
Exemplo n.º 16
0
 def get_index_for_dimension(self, dim_idx=-1):
     """
     For some data dimension, returns the DataIndex uid and 
     its data filtered by mask values.
     """
     OM = ObjectManager()
     dim_data = self._data[dim_idx]
     dim_di_uid = dim_data[0]
     di = OM.get(dim_di_uid)
     slicer = self._get_slicer()
     dim_di_data = di.data[slicer[dim_idx]]
     return dim_di_uid, dim_di_data
Exemplo n.º 17
0
 def get_friendly_indexes_dict(self):
     """Used by menu_functions
     """
     OM = ObjectManager()
     ret_od = OrderedDict()
     indexes_set = self.get_data_indexes()
     for curve_set_uid, data_indexes in indexes_set.items():
         curve_set = OM.get(curve_set_uid)
         for data_index in data_indexes:
             di_friendly_name = data_index.name + '@' + curve_set.name
             ret_od[di_friendly_name] = data_index.uid
     return ret_od
Exemplo n.º 18
0
 def __init__(self, data_index_uid, display, is_range, min_idx, max_idx,
              *args, **kwargs):
     super(DimensionPanel, self).__init__(*args, **kwargs)
     self.SetSize(300, 50)
     #
     self.data_index_uid = data_index_uid
     OM = ObjectManager()
     obj = OM.get(data_index_uid)
     #
     main_sizer = wx.StaticBoxSizer(wx.VERTICAL, self, obj.name)
     #
     self.top_panel = wx.Panel(self)
     self.top_sizer = wx.BoxSizer(wx.HORIZONTAL)
     #
     self.check_display = wx.CheckBox(self.top_panel, -1, label='Display')
     self.check_display.Bind(wx.EVT_CHECKBOX, self._on_check_display)
     self.top_sizer.Add(self.check_display, 1, wx.ALIGN_CENTER | wx.LEFT,
                        30)
     #
     self.check_range = wx.CheckBox(self.top_panel, -1, label='Range')
     self.check_range.Bind(wx.EVT_CHECKBOX, self._on_check_range)
     self.top_sizer.Add(self.check_range, 1, wx.ALIGN_CENTER | wx.RIGHT, 30)
     self.top_panel.SetSizer(self.top_sizer)
     #
     main_sizer.Add(self.top_panel, 0, wx.EXPAND | wx.TOP | wx.BOTTOM, 3)
     #
     self.label = obj.name
     self.vec = obj.data
     self.display = display
     self.is_range = is_range
     #
     self.bottom_panel = wx.Panel(self)
     self.bottom_sizer = wx.BoxSizer(wx.VERTICAL)
     self.slider = RangeSlider(self.bottom_panel)
     self.bottom_sizer.Add(self.slider, 0, wx.EXPAND)
     self.text_value = wx.StaticText(self.bottom_panel, -1)
     self.bottom_sizer.Add(self.text_value, 0, wx.ALIGN_CENTER)
     self.bottom_panel.SetSizer(self.bottom_sizer)
     #
     main_sizer.Add(self.bottom_panel, 0, wx.EXPAND)
     #
     self.slider.SetRange(0, len(self.vec) - 1)
     self.min_idx = min_idx
     self.max_idx = max_idx
     #
     if self.display:
         self.set_check_display(1)
     else:
         self.set_check_display(0)
     #
     self.Bind(wx.EVT_PAINT, self._on_paint)
     self.SetSizer(main_sizer)
     main_sizer.Layout()
Exemplo n.º 19
0
 def _reload_ylims_from_index_type(self):
     """
     Given a y axis datatype (e.g. MD), reload its limits.
     """
     OM = ObjectManager()
     try:
         well = OM.get(self.obj_uid)
     except:
         raise
     ylim = well.get_z_axis_datatype_range(self.index_type)
     self.wellplot_ylim = ylim
     self.shown_ylim = ylim
Exemplo n.º 20
0
 def OnUnitConvert(self, event):
     (node_type, node_main_info, node_extra_info) = self.popup_obj
     OM = ObjectManager()
     obj = OM.get(node_main_info)
     try:
         unit = uom.get_unit(obj.unit)
         dim = uom.get_unit_dimension(unit.dimension)
         qc = uom.get_quantity_class(dim.name)
         UNITS_OPTIONS = OrderedDict()
         for mu in qc.memberUnit:
             UNITS_OPTIONS[mu] = mu
     except:
         msg = 'Unit ' + obj.unit + ' cannot be converted.'
         wx.MessageBox(msg, 'Warning', wx.OK | wx.ICON_WARNING)
         return
         #
     UIM = UIManager()
     dlg = UIM.create('dialog_controller', title='Unit conversion')
     #
     try:
         ctn_details = dlg.view.AddCreateContainer('StaticBox', label='Object details', orient=wx.VERTICAL,
                                                   proportion=0, flag=wx.EXPAND | wx.TOP, border=5)
         dlg.view.AddStaticText(ctn_details, proportion=0, flag=wx.EXPAND | wx.TOP, border=5,
                                label='Name: ' + obj.name)
         #
         dlg.view.AddStaticText(ctn_details, proportion=0, flag=wx.EXPAND | wx.TOP, border=5,
                                label='Type id: ' + obj.tid)
         dlg.view.AddStaticText(ctn_details, proportion=0, flag=wx.EXPAND | wx.TOP, border=5,
                                label='Object id: ' + str(obj.oid))
         dlg.view.AddStaticText(ctn_details, proportion=0, flag=wx.EXPAND | wx.TOP, border=5,
                                label='Current unit: ' + obj.unit)
         #
         ctn_new_unit = dlg.view.AddCreateContainer('StaticBox', label='New unit', orient=wx.VERTICAL, proportion=0,
                                                    flag=wx.EXPAND | wx.TOP, border=5)
         dlg.view.AddChoice(ctn_new_unit, proportion=0, flag=wx.EXPAND | wx.TOP, border=5, widget_name='new_unit',
                            options=UNITS_OPTIONS)
         #    
         dlg.view.SetSize((300, 330))
         answer = dlg.view.ShowModal()
         #
         if answer == wx.ID_OK:
             results = dlg.get_results()
             new_unit_name = results.get('new_unit')
             new_data = uom.convert(obj.data, obj.unit, new_unit_name)
             obj._data = new_data
             obj.unit = new_unit_name
         #                UIM = UIManager()
     #                controller = UIM.get(self._controller_uid)
     #                controller.reload_object(obj.uid)
     except Exception:
         pass
     finally:
         UIM.remove(dlg.uid)
Exemplo n.º 21
0
    def _add_tree_node(self, objuid, parentuid=None):

        logging.debug("_add_tree_node " + str(objuid) + " - " + str(parentuid))

        OM = ObjectManager()
        obj = OM.get(objuid)

        node_props = obj._get_tree_object_node_properties()
        if node_props is None:
            return

        if obj._is_tree_tid_node_needed():

            obj_parent_node = self.get_object_tree_item(
                ID_TYPE_TID, objuid[0], parentuid)
            if obj_parent_node is None:

                if parentuid is None:
                    # Create tid node as a root child
                    tid_parent_node = self.GetRootItem()
                else:
                    # Create tid node as another object child
                    tid_parent_node = self.get_object_tree_item(
                        ID_TYPE_OBJECT, parentuid)

                # Create tid node
                class_ = OM._gettype(objuid[0])
                tid_label = class_._get_tid_friendly_name()

                obj_parent_node = self.AppendItem(tid_parent_node, tid_label)
                self.SetItemData(obj_parent_node,
                                 (ID_TYPE_TID, objuid[0], parentuid))
                self.Expand(tid_parent_node)
        else:
            obj_parent_node = self.get_object_tree_item(
                ID_TYPE_OBJECT, parentuid)

        obj_repr = node_props.pop('name')
        obj_node = self.AppendItem(obj_parent_node, obj_repr)
        self.SetItemData(obj_node, (ID_TYPE_OBJECT, objuid, 'name'))

        self.Expand(obj_parent_node)

        for attr, attr_label in node_props.items():
            logging.debug('Creating attr_node: {} - {} - {}'.format(
                ID_TYPE_ATTRIBUTE, objuid, attr))
            attr_node = self.AppendItem(obj_node, attr_label)
            self.SetItemData(attr_node, (ID_TYPE_ATTRIBUTE, objuid, attr))
            #print ('Creating attr_node:',  (ID_TYPE_ATTRIBUTE, objuid, attr))

        self.Expand(obj_node)
Exemplo n.º 22
0
 def attach(self, OM_obj_uid):
     """Attaches this object to a ObjectManager object.
     
     Example: 
         self.attach(('log', 1))
         OM.remove(('log', 1))     -> self will be removed by UIManager 
     """
     #        print ('ATTACHING...')
     # obj = OM.get(OM_objuid)
     try:
         OM = ObjectManager()
         # Is OM_objuid valid?
         obj = OM.get(OM_obj_uid)
         if obj:
             OM.subscribe(self._check_OM_removals, 'pre_remove')
             self._attached_to = obj.uid
     #                print ('{} IS NOW ATTACHED TO {} \n'.format(self.uid, self._attached_to))
     except Exception as e:
         print('ERROR WHILE ATTACHING:', e)
Exemplo n.º 23
0
    def on_rightclick(self, event):
        tree_item = event.GetItem()
        if tree_item == self.GetRootItem():
            return
        item_data = self.GetItemData(tree_item)
        (node_type, node_main_info, node_extra_info) = item_data

        if node_type == ID_TYPE_ATTRIBUTE:
            return

        self.popup_obj = (node_type, node_main_info, node_extra_info)
        self.popupmenu = wx.Menu()

        OM = ObjectManager()

        if node_type == ID_TYPE_OBJECT:
            item = self.popupmenu.Append(wx.NewId(), 'Rename object')
            self.Bind(wx.EVT_MENU, self.OnRenameObject, item)
            self.popupmenu.AppendSeparator()
            #
            if self._is_convertible(node_main_info):
                item = self.popupmenu.Append(wx.NewId(), 'Convert unit')
                self.Bind(wx.EVT_MENU, self.OnUnitConvert, item)
                self.popupmenu.AppendSeparator()
            # Exclude a specific object
            obj = OM.get(node_main_info)
            menu_option_str = 'Exclude object ['
            menu_option_str = menu_option_str + str(obj.name) + ']'
        elif node_type == ID_TYPE_TID:
            # Exclude all objects from a class
            menu_option_str = 'Exclude all objects [{}]'.format(node_main_info)
        item = self.popupmenu.Append(wx.NewId(), menu_option_str)
        self.Bind(wx.EVT_MENU, self.OnPopupItemSelected, item)
        #
        self.popupmenu.AppendSeparator()
        item = self.popupmenu.Append(wx.NewId(), 'Properties')
        self.Bind(wx.EVT_MENU, self.on_object_properties, item)
        #
        pos = event.GetPoint()
        self.PopupMenu(self.popupmenu, pos)
Exemplo n.º 24
0
 def get_filtered_data(self, dimensions_desired=None):
     if dimensions_desired is not None and dimensions_desired not in [1, 2]:
         raise Exception('Dimensions must be 1 or 2.')
     OM = ObjectManager()
     data_obj = OM.get(self.data_obj_uid)
     #
     slicer = self._get_slicer()
     data = data_obj.data[slicer]
     #
     #        print('get_data - len(data.shape):', len(data.shape),
     #                                  ' dimensions_desired:', dimensions_desired)
     if (dimensions_desired is None
             or (dimensions_desired == len(data.shape))):
         return data
     #
     if dimensions_desired > len(data.shape):
         # Quando se deseja acrescentar dimensoes ao dado. Por exemplo,
         # exibindo dados 1-D em um grafico 2-D.
         redim_slicer = []
         for i in range(dimensions_desired - len(data.shape)):
             redim_slicer.append(np.newaxis)
         for i in range(len(data.shape)):
             # slice(None, None, None) equals ":"
             redim_slicer.append(slice(None, None, None))
         data = data[tuple(redim_slicer)]
     #
     elif len(data.shape) > dimensions_desired and dimensions_desired == 2:
         # Flipa todas as dimensoes que sao exibidas, exceto a
         # ultima (em geral o Z axis). Essas dimensoes farao a composicao
         # do eixo X. A ultima dimensao sera exibida no eixo Y do grafico.
         # Valido para uso em 2-D
         new_dim = 1
         for dim_value in data.shape[::-1][1::]:
             new_dim *= dim_value
         data = data.reshape(new_dim, data.shape[-1])
         #
     else:
         # Possivel uso alem 2-D ou algum erro nao mapeado.
         raise Exception('get_filtered_data - Tratar isso.')
     return data
Exemplo n.º 25
0
class RockTable(wx.grid.GridTableBase):
    @debugdecorator
    def __init__(self, rocktableuid):
        super(RockTable, self).__init__()

        self.OM = ObjectManager()
        self.rocktypeuid = []
        self.rocktableuid = rocktableuid

        self.rocktypemap = [
            rocktype.uid
            for rocktype in self.OM.list('rocktype', self.rocktableuid)
        ]
        self.N_COLS = 4
        self.N_ROWS = 0

    @debugdecorator
    def AppendRows(self, numRows=1):
        rocktype = self.GrainEntry()
        #        rocktype = self.OM.new('rocktype')
        rocktype.defaultdata = np.nan
        self.OM.add(rocktype, self.rocktableuid)

        self.rocktypemap.append(rocktype.uid)
        color = self.get_color(0)
        self.set_color(-1, color)

        self.GetView().BeginBatch()
        msg = wx.grid.GridTableMessage(self,
                                       wx.grid.GRIDTABLE_NOTIFY_ROWS_APPENDED,
                                       numRows)
        self.GetView().ProcessTableMessage(msg)
        self.GetView().EndBatch()

        return True

    @debugdecorator
    def GrainEntry(self):
        UIM = UIManager()
        dlg = UIM.create('dialog_controller', title='Rock creator')
        cont_grain = dlg.view.AddCreateContainer('StaticBox',
                                                 label='Grain Parts',
                                                 orient=wx.VERTICAL,
                                                 proportion=0,
                                                 flag=wx.EXPAND | wx.TOP,
                                                 border=5)
        cont_matr = dlg.view.AddCreateContainer('StaticBox',
                                                label='Matrix Parts',
                                                orient=wx.VERTICAL,
                                                proportion=0,
                                                flag=wx.EXPAND | wx.TOP,
                                                border=5)

        json_file = '\\Temp\\min.json'
        #        fullpath_json = 'C:\\Users\\rtabelini\\Documents\\Github\\GRIPy'+json_file
        fullpath_json = cwd() + json_file

        dictmin = app.app_utils.read_json_file(fullpath_json)

        def on_change_mineral(name, old_value, new_value, **kwargs):
            print('new\n', name, new_value, new_value['name'],
                  dictmin.iterkeys())
            if name == 'mineralgrain':
                textctrl_k = dlg.view.get_object('kmod1')
                textctrl_g = dlg.view.get_object('gmod1')
                textctrl_rho = dlg.view.get_object('dens1')
            elif name == 'mineralmatrix':
                textctrl_k = dlg.view.get_object('kmod2')
                textctrl_g = dlg.view.get_object('gmod2')
                textctrl_rho = dlg.view.get_object('dens2')

            if new_value['name'] in dictmin.iterkeys():
                textctrl_k.set_value(new_value['K'])
                textctrl_g.set_value(new_value['G'])
                textctrl_rho.set_value(new_value['Dens'])

        dlg.view.AddChoice(cont_grain,
                           widget_name='mineralgrain',
                           options=dictmin,
                           flag=wx.EXPAND)
        choice_grain = dlg.view.get_object('mineralgrain')
        choice_grain.set_trigger(on_change_mineral)

        dlg.view.AddChoice(cont_matr,
                           widget_name='mineralmatrix',
                           options=dictmin,
                           flag=wx.EXPAND)
        choice_matrix = dlg.view.get_object('mineralmatrix')
        choice_matrix.set_trigger(on_change_mineral)

        gr_frac = dlg.view.AddCreateContainer('BoxSizer',
                                              cont_grain,
                                              orient=wx.HORIZONTAL,
                                              proportion=1,
                                              flag=wx.EXPAND | wx.ALL,
                                              border=5)
        dlg.view.AddStaticText(gr_frac,
                               proportion=1,
                               initial='Fraction ',
                               flag=wx.ALIGN_RIGHT)
        dlg.view.AddTextCtrl(gr_frac,
                             proportion=1,
                             widget_name='frac1',
                             initial='0.8',
                             flag=wx.ALIGN_RIGHT)

        gr_poro = dlg.view.AddCreateContainer('BoxSizer',
                                              cont_grain,
                                              orient=wx.HORIZONTAL,
                                              proportion=1,
                                              flag=wx.EXPAND | wx.ALL,
                                              border=5)
        dlg.view.AddStaticText(gr_poro,
                               proportion=1,
                               initial='Porosity ',
                               flag=wx.ALIGN_RIGHT)
        dlg.view.AddTextCtrl(gr_poro,
                             proportion=1,
                             widget_name='poro1',
                             initial='0.20',
                             flag=wx.ALIGN_RIGHT)

        gr_kmod = dlg.view.AddCreateContainer('BoxSizer',
                                              cont_grain,
                                              orient=wx.HORIZONTAL,
                                              proportion=1,
                                              flag=wx.EXPAND | wx.ALL,
                                              border=5)
        dlg.view.AddStaticText(gr_kmod,
                               proportion=1,
                               widget_name='K_Modulus',
                               initial='K Modulus (GPa) ',
                               flag=wx.ALIGN_RIGHT)
        dlg.view.AddTextCtrl(gr_kmod,
                             proportion=1,
                             widget_name='kmod1',
                             initial='36.5',
                             flag=wx.ALIGN_RIGHT)

        gr_gmod = dlg.view.AddCreateContainer('BoxSizer',
                                              cont_grain,
                                              orient=wx.HORIZONTAL,
                                              proportion=1,
                                              flag=wx.EXPAND | wx.ALL,
                                              border=5)
        dlg.view.AddStaticText(gr_gmod,
                               proportion=1,
                               widget_name='G_Modulus',
                               initial='G Modulus (GPa) ',
                               flag=wx.ALIGN_RIGHT)
        dlg.view.AddTextCtrl(gr_gmod,
                             proportion=1,
                             widget_name='gmod1',
                             initial='78.6',
                             flag=wx.ALIGN_RIGHT)

        gr_dens = dlg.view.AddCreateContainer('BoxSizer',
                                              cont_grain,
                                              orient=wx.HORIZONTAL,
                                              proportion=1,
                                              flag=wx.EXPAND | wx.ALL,
                                              border=5)
        dlg.view.AddStaticText(gr_dens,
                               proportion=1,
                               widget_name='Density',
                               initial='Density (g/cc) ',
                               flag=wx.ALIGN_RIGHT)
        dlg.view.AddTextCtrl(gr_dens,
                             proportion=1,
                             widget_name='dens1',
                             initial='2.65',
                             flag=wx.ALIGN_RIGHT)

        mtr_frac = dlg.view.AddCreateContainer('BoxSizer',
                                               cont_matr,
                                               orient=wx.HORIZONTAL,
                                               proportion=1,
                                               flag=wx.EXPAND | wx.ALL,
                                               border=5)
        dlg.view.AddStaticText(mtr_frac,
                               proportion=1,
                               widget_name='fraction2',
                               initial='Fraction ',
                               flag=wx.ALIGN_RIGHT)
        dlg.view.AddTextCtrl(mtr_frac,
                             proportion=1,
                             widget_name='frac2',
                             initial='0.2',
                             flag=wx.ALIGN_LEFT)

        mtr_poro = dlg.view.AddCreateContainer('BoxSizer',
                                               cont_matr,
                                               orient=wx.HORIZONTAL,
                                               proportion=1,
                                               flag=wx.EXPAND | wx.ALL,
                                               border=5)
        dlg.view.AddStaticText(mtr_poro,
                               proportion=1,
                               initial='Porosity ',
                               flag=wx.ALIGN_RIGHT)
        dlg.view.AddTextCtrl(mtr_poro,
                             proportion=1,
                             widget_name='poro2',
                             initial='0.10',
                             flag=wx.ALIGN_RIGHT)

        mtr_kmod = dlg.view.AddCreateContainer('BoxSizer',
                                               cont_matr,
                                               orient=wx.HORIZONTAL,
                                               proportion=1,
                                               flag=wx.EXPAND | wx.ALL,
                                               border=5)
        dlg.view.AddStaticText(mtr_kmod,
                               proportion=1,
                               widget_name='K_Modulus2',
                               initial='K Modulus (GPa) ',
                               flag=wx.ALIGN_RIGHT)
        dlg.view.AddTextCtrl(mtr_kmod,
                             proportion=1,
                             widget_name='kmod2',
                             initial='36.5',
                             flag=wx.ALIGN_LEFT)

        mtr_gmod = dlg.view.AddCreateContainer('BoxSizer',
                                               cont_matr,
                                               orient=wx.HORIZONTAL,
                                               proportion=1,
                                               flag=wx.EXPAND | wx.ALL,
                                               border=5)
        dlg.view.AddStaticText(mtr_gmod,
                               proportion=1,
                               widget_name='G_Modulus2',
                               initial='G Modulus (GPa) ',
                               flag=wx.ALIGN_RIGHT)
        dlg.view.AddTextCtrl(mtr_gmod,
                             proportion=1,
                             widget_name='gmod2',
                             initial='78.6',
                             flag=wx.ALIGN_LEFT)

        mtr_dens = dlg.view.AddCreateContainer('BoxSizer',
                                               cont_matr,
                                               orient=wx.HORIZONTAL,
                                               proportion=1,
                                               flag=wx.EXPAND | wx.ALL,
                                               border=5)
        dlg.view.AddStaticText(mtr_dens,
                               proportion=1,
                               widget_name='Density2',
                               initial='Density (g/cc) ',
                               flag=wx.ALIGN_RIGHT)
        dlg.view.AddTextCtrl(mtr_dens,
                             proportion=1,
                             widget_name='dens2',
                             initial='2.65',
                             flag=wx.ALIGN_LEFT)
        #
        try:
            if dlg.view.ShowModal() == wx.ID_OK:
                results = dlg.get_results()
                gr_f = results.get('frac1')
                mtr_f = results.get('frac2')
                ngrain = results.get('mineralgrain')['name']
                nmatrix = results.get('mineralmatrix')['name']
                gr_phi = results.get('poro1')
                gr_k = results.get('kmod1')
                gr_mi = results.get('gmod1')
                gr_rho = results.get('dens1')
                mtr_phi = results.get('poro2')
                mtr_k = results.get('kmod2')
                mtr_mi = results.get('gmod2')
                mtr_rho = results.get('dens2')
                #                kk = RP.VRHill (gr_k, gr_f, mtr_k)
                #                g = RP.VRHill (gr_mi, gr_f, mtr_mi)
                print('\ngrd', gr_k, gr_f, mtr_k, type(float(mtr_k)))
                rocktype = self.OM.new(
                    'rocktype',
                    fracgrain=gr_f,
                    fracmatrix=mtr_f,
                    grain=ngrain,
                    matrix=nmatrix,
                    k=10,
                    mi=20)  #vp=vp, vs=vs, rho = rho, k=k, mi=mi, poi=poi
                return rocktype

        except Exception as e:
            print('ERROR:', str(e))
        finally:
            UIM.remove(dlg.uid)

    @debugdecorator
    def DeleteRows(self, pos=0, numRows=1):
        if pos >= self.N_ROWS:
            i = pos - self.N_ROWS
            for j in range(numRows)[::-1]:
                self.OM.remove(self.rocktypemap.pop(i + j))

            self.GetView().BeginBatch()
            msg = wx.grid.GridTableMessage(
                self, wx.grid.GRIDTABLE_NOTIFY_ROWS_DELETED, pos, numRows)
            self.GetView().ProcessTableMessage(msg)
            self.GetView().EndBatch()

            return True
        else:
            return False

    @debugdecorator
    def GetColLabelValue(self, col):
        if col == 0:
            return "Nome"
        elif col == 1:
            return "Cor"
        elif col == 2:
            return "Grain"
        elif col == 3:
            return "Matrix"
        else:
            return

    @debugdecorator
    def GetRowLabelValue(self, row):
        return str(row + 1)

    @debugdecorator
    def SetRowLabelValue(self, row, label):
        return

    @debugdecorator
    def GetNumberCols(self):
        return self.N_COLS


#        return len(self.propmap) + self.N_COLS

    @debugdecorator
    def GetNumberRows(self):
        return len(self.rocktypemap)

    @debugdecorator
    def GetAttr(self, row, col, kind):

        #if _iswxphoenix:
        attr = wx.grid.GridCellAttr().Clone()

        if col >= self.N_COLS:
            attr.SetAlignment(wx.ALIGN_RIGHT, wx.ALIGN_CENTER)
        elif col == 0:
            attr.SetAlignment(wx.ALIGN_RIGHT, wx.ALIGN_CENTER)
        elif col == 1:
            rocktype = self.OM.get(self.rocktypemap[row])
            attr.SetBackgroundColour(rocktype.color)
            attr.SetReadOnly(True)
        elif col == 2:
            attr.SetAlignment(wx.ALIGN_RIGHT, wx.ALIGN_CENTER)
        elif col == 3:
            attr.SetAlignment(wx.ALIGN_RIGHT, wx.ALIGN_CENTER)
        return attr

    @debugdecorator
    def GetValue(self, row, col):
        if col >= self.N_COLS:
            i = col - self.N_COLS
            prop = self.OM.get(self.propmap[i])
            value = prop.getdata(self.rocktypemap[row])
            if not np.isnan(value):
                return str(value)
            else:
                return ''
        elif col == 0:
            rocktype = self.OM.get(self.rocktypemap[row])
            return rocktype.name
        elif col == 1:
            return ''
        elif col == 2:
            rocktype = self.OM.get(self.rocktypemap[row])
            return rocktype.fracgrain + ' ' + rocktype.grain
        elif col == 3:
            rocktype = self.OM.get(self.rocktypemap[row])
            return rocktype.fracmatrix + ' ' + rocktype.matrix

    @debugdecorator
    def SetValue(self, row, col, value):
        if col >= self.N_COLS:
            i = col - self.N_COLS
            if value:
                value = float(value)
            else:
                value = np.nan
            prop = self.OM.get(self.propmap[i])
            prop.setdata(self.rocktypemap[row], value)
        elif col == 0:
            rocktype = self.OM.get(self.rocktypemap[row])
            rocktype.name = value
        elif col == 1:
            return
        elif col == 2:
            return
        elif col == 3:
            return

    @debugdecorator
    def set_color(self, row, color):
        rocktype = self.OM.get(self.rocktypemap[row])
        rocktype.color = color

    @debugdecorator
    def get_color(self, row):
        rocktype = self.OM.get(self.rocktypemap[row])
        return rocktype.color

    @debugdecorator
    def get_nameunit(self, col):
        if col >= self.N_COLS:
            i = col - self.N_COLS
            prop = self.OM.get(self.propmap[i])
            return prop.name, prop.unit

    @debugdecorator
    def set_nameunit(self, col, name, unit):
        if col >= self.N_COLS:
            i = col - self.N_COLS
            prop = self.OM.get(self.propmap[i])
            prop.name = name
            prop.unit = unit
Exemplo n.º 26
0
    def create_object_node(self, objuid):
        OM = ObjectManager()
        obj = OM.get(objuid)

        #        print ('\n\ncreate_object_node', objuid)
        ####
        #   VERIFICA SE O OBJETO DEVE SER INCLUIDO NA ÁRVORE (NAO EH O TID!)
        #   O TID EH VERIFICADO PELA FUNCAO _is_tree_tid_node_needed ABAIXO.
        #

        node_props = obj._get_tree_object_node_properties()
        if node_props is None:
            return

        # print ()
        #        print ('node_props:', node_props)

        try:
            parentuid = OM._getparentuid(objuid)
            # Find location to create tid node

            #            print ('\nparentuid:', parentuid)

            if obj._is_tree_tid_node_needed():

                #                print ('\n\n1 - PROCURANDO TID:', objuid[0],
                #                                           'FILHO DE:', parentuid
                #                )

                # Then, tid node will be object node parent
                obj_parent_node = self.get_object_tree_item(ID_TYPE_TID,
                                                            objuid[0], parentuid
                                                            )

                #                print ('\n\n2 - obj_parent_node:', obj_parent_node, ID_TYPE_TID,
                #                                                        objuid[0], parentuid)

                #                PAREI AQUI!!!!!!

                if obj_parent_node is None:

                    #                    print ('\n\n2 - NÃO ACHOU O TID')

                    # It's necessary to create tid node
                    if parentuid is None:
                        # Create tid node as a root child
                        tid_parent_node = self.view.GetRootItem()
                    else:
                        # Create tid node as another object child
                        #                        print('\n\n\nBUSCANDO PAI DO TID_NODE:',
                        #                                                ID_TYPE_OBJECT, parentuid
                        #                        )
                        tid_parent_node = self.get_object_tree_item(
                            ID_TYPE_OBJECT, parentuid
                        )
                    #                        print('\n\n\ntid_parent_node:', tid_parent_node)

                    #                        print(self.view.GetItemData(tid_parent_node))

                    #                    print('objuid[0]:', objuid[0])
                    # Create tid node    
                    class_ = OM._gettype(objuid[0])

                    #                    print('class_:', class_)

                    tid_label = class_._get_tid_friendly_name()

                    #                    print('PRE')
                    #                    print(str(tid_label))
                    #                    print('    Tree 1 - ' +  str(tid_parent_node) + ' ' + tid_label)
                    obj_parent_node = self.view.AppendItem(tid_parent_node,
                                                           tid_label)
                    self.view.SetItemData(obj_parent_node,
                                          (ID_TYPE_TID, objuid[0], parentuid))

                    #                    print ('Creating tid_node:',  (ID_TYPE_TID, objuid[0], parentuid))

                    self.view.Expand(tid_parent_node)
            else:
                #                print (3)
                # Create direct link to parent object
                obj_parent_node = self.get_object_tree_item(ID_TYPE_OBJECT, parentuid)

                # Create object node itself
            #            print ('node_props 2:', node_props)
            obj_repr = node_props.pop('name')
            # obj_repr, obj_props = node_props
            obj_node = self.view.AppendItem(obj_parent_node, obj_repr)

            #
            # TODO: Consider create (ID_TYPE_OBJECT, objuid, ('ATTRIBUTE','name') vs
            #                       (ID_TYPE_OBJECT, objuid, ('FUNCTION', 'function_name')
            # For objects and attributes
            #

            self.view.SetItemData(obj_node, (ID_TYPE_OBJECT, objuid, 'name'))
            #            print ('Creating obj_node:', (ID_TYPE_OBJECT, objuid, 'name'))
            self.view.Expand(obj_parent_node)

            #            print ()
            # Create item object attributes
            for attr, attr_label in node_props.items():
                #                print ('Creating attr_node:',  (ID_TYPE_ATTRIBUTE, objuid, attr))
                attr_node = self.view.AppendItem(obj_node, attr_label)
                self.view.SetItemData(attr_node, (ID_TYPE_ATTRIBUTE, objuid, attr))
            #                print ('Creating attr_node:',  (ID_TYPE_ATTRIBUTE, objuid, attr))
            #

            self.view.Expand(obj_node)

        except Exception as e:
            print('\nERRO ARVORE:', e)
            raise
Exemplo n.º 27
0
def on_create_model(*args, **kwargs):
    
    OM = ObjectManager()
    UIM = UIManager()
    
    

    #
    images_od = OrderedDict()
    images = OM.list('image')
    for image in images:
        images_od[image.name] = image.uid    

    #
    dlg = UIM.create('dialog_controller', title='Chose image for model input')
    ctn_image = dlg.view.AddCreateContainer('StaticBox', label='Select Image', 
                                            orient=wx.VERTICAL, proportion=0, 
                                            flag=wx.EXPAND|wx.TOP, border=5)


    dlg.view.AddChoice(ctn_image, proportion=0, flag=wx.EXPAND|wx.TOP, 
                       border=5, widget_name='images_choice', options=images_od,
                       initial=0) 
    #
    
    dlg.view.SetSize((300, 180))
    result = dlg.view.ShowModal()

  
    
    if result == wx.ID_OK:
        results = dlg.get_results()  
            
        print(results)    
    
        image_uid = results.get("images_choice")    
        
        if not image_uid:
            return
        
        image = OM.get(image_uid)    
    
    
        values = np.unique(image.data)
        print(values)
        print(values.size)
    
        if values.size > 2:
            raise Exception("ERRO!")
    
    
        #
        dlg = UIM.create('dialog_controller', title='Create model')


        ctn_model = dlg.view.AddCreateContainer('StaticBox', label='Model', orient=wx.VERTICAL, 
                                                  proportion=0, flag=wx.EXPAND|wx.TOP, border=5)
        #
        box_img_input = dlg.view.AddCreateContainer('BoxSizer', ctn_model, 
                                               orient=wx.HORIZONTAL, proportion=1, 
                                               flag=wx.EXPAND|wx.ALL, border=5)
        dlg.view.AddStaticText(box_img_input, label='Image input:', proportion=1)        
        dlg.view.AddTextCtrl(box_img_input, proportion=1, flag=wx.ALIGN_LEFT, border=5, 
                             widget_name='image_name', initial=image.name)         
        textctrl_image_name = dlg.view.get_object('image_name')
        textctrl_image_name.disable()        
        #
        box_name = dlg.view.AddCreateContainer('BoxSizer', ctn_model, 
                                               orient=wx.HORIZONTAL, proportion=1, 
                                               flag=wx.EXPAND|wx.ALL, border=5)
        dlg.view.AddStaticText(box_name, label='Name:', proportion=1)
        dlg.view.AddTextCtrl(box_name, proportion=1, flag=wx.ALIGN_LEFT, border=5, 
                             widget_name='model_name', initial="My model") 
        #
    
    
    # X Axis
    #
    def on_change_x_size(name, old_value, new_value, **kwargs):
        try:
            x_samples = float(dlg.view.get_object('x_samples').get_value())
            x_spacing = float(dlg.view.get_object('x_spacing').get_value())
            res = str(x_samples * x_spacing) 
        except:
            res = ""
        textctrl_x_size = dlg.view.get_object('x_size')
        textctrl_x_size.set_value(res)      
    #
    #
    ctn_x_axis = dlg.view.AddCreateContainer('StaticBox', label='X axis', 
        orient=wx.HORIZONTAL, proportion=0, flag=wx.EXPAND|wx.TOP, border=5)
    #
    ctn_x_samples = dlg.view.AddCreateContainer('StaticBox', ctn_x_axis, 
            label='Samples(pixels)', orient=wx.VERTICAL, proportion=1, 
            flag=wx.EXPAND|wx.TOP, border=5)
    dlg.view.AddTextCtrl(ctn_x_samples, proportion=0, flag=wx.EXPAND|wx.TOP, 
                         border=5, widget_name='x_samples', initial=image.width)
    textctrl_x_pixels = dlg.view.get_object('x_samples')
    textctrl_x_pixels.disable()
    #textctrl_x_samples.set_trigger(on_change_x_size)
    #
    ctn_x_spacing = dlg.view.AddCreateContainer('StaticBox', ctn_x_axis, 
                label='Spacing(m)', orient=wx.VERTICAL, proportion=1, 
                flag=wx.EXPAND|wx.TOP, border=5)
    dlg.view.AddTextCtrl(ctn_x_spacing, proportion=0, flag=wx.EXPAND|wx.TOP, 
                         border=5, widget_name='x_spacing', initial=1)
    
    
    textctrl_x_spacing = dlg.view.get_object('x_spacing')
    textctrl_x_spacing.set_trigger(on_change_x_size)
    #
    ctn_x_size = dlg.view.AddCreateContainer('StaticBox', ctn_x_axis, 
                label='Size(m)', orient=wx.VERTICAL, proportion=1, 
                flag=wx.EXPAND|wx.TOP, border=5)
    dlg.view.AddTextCtrl(ctn_x_size, proportion=1, flag=wx.EXPAND|wx.TOP, 
                         border=5, widget_name='x_size')
    textctrl_x_size = dlg.view.get_object('x_size')
    textctrl_x_size.disable()
    #
    on_change_x_size(None, None, None)
    #    
          
    
    # Y Axis
    #   
    def on_change_y_size(name, old_value, new_value, **kwargs):
        try:
            y_samples = float(dlg.view.get_object('y_samples').get_value())
            y_spacing = float(dlg.view.get_object('y_spacing').get_value())
            res = str(y_samples * y_spacing) 
        except:
            res = ""
        textctrl_y_size = dlg.view.get_object('y_size')
        textctrl_y_size.set_value(res)      
    #
    #
    ctn_y_axis = dlg.view.AddCreateContainer('StaticBox', label='Y axis', 
                                             orient=wx.HORIZONTAL, 
                                             proportion=0, 
                                             flag=wx.EXPAND|wx.TOP, border=5)
    #
    ctn_y_samples = dlg.view.AddCreateContainer('StaticBox', ctn_y_axis, 
                                                label='Samples(pixels)', 
                                                orient=wx.VERTICAL, 
                                                proportion=1, 
                                                flag=wx.EXPAND|wx.TOP, 
                                                border=5)
    dlg.view.AddTextCtrl(ctn_y_samples, proportion=0, flag=wx.EXPAND|wx.TOP, 
                         border=5, widget_name='y_samples', initial=image.height)
    textctrl_y_pixels = dlg.view.get_object('y_samples')
    textctrl_y_pixels.disable()
    #textctrl_y_samples.set_trigger(on_change_y_size)
    #
    ctn_y_spacing = dlg.view.AddCreateContainer('StaticBox', ctn_y_axis, 
                                                label='Spacing(m)', 
                                                orient=wx.VERTICAL, 
                                                proportion=1, 
                                                flag=wx.EXPAND|wx.TOP, 
                                                border=5)
    dlg.view.AddTextCtrl(ctn_y_spacing, proportion=0, flag=wx.EXPAND|wx.TOP, 
                         border=5, widget_name='y_spacing', initial=1)
    textctrl_y_spacing = dlg.view.get_object('y_spacing')
    textctrl_y_spacing.set_trigger(on_change_y_size)
    #
    ctn_y_size = dlg.view.AddCreateContainer('StaticBox', ctn_y_axis, 
                                                label='Size(m)', 
                                                orient=wx.VERTICAL, 
                                                proportion=1, 
                                                flag=wx.EXPAND|wx.TOP, 
                                                border=5)
    dlg.view.AddTextCtrl(ctn_y_size, proportion=1, flag=wx.EXPAND|wx.TOP, 
                         border=5, widget_name='y_size')
    textctrl_y_size = dlg.view.get_object('y_size')
    textctrl_y_size.disable()
    #
    on_change_y_size(None, None, None)
    #    
    
    if values[0] == 0:
        value_layer_1_text = "color: Black"
    elif values[0] == 255:    
        value_layer_1_text = "color: White"
    else:    
        value_layer_1_text = "value: " + str(values[0])
    
    ctn_prop_matrix = dlg.view.AddCreateContainer('StaticBox', 
            label="Layer 1 properties (" + value_layer_1_text + ")", 
            orient=wx.HORIZONTAL, proportion=0, flag=wx.EXPAND|wx.TOP, border=5)
    #
    ctn_matrix_vp = dlg.view.AddCreateContainer('StaticBox', ctn_prop_matrix, 
                                                label='Vp(m/s)', orient=wx.VERTICAL, proportion=1, flag=wx.EXPAND|wx.TOP, border=5)
    dlg.view.AddTextCtrl(ctn_matrix_vp, proportion=0, flag=wx.EXPAND|wx.TOP, 
                         border=5, widget_name='matrix_vp', initial=4000.0)  
    #
    ctn_matrix_rho = dlg.view.AddCreateContainer('StaticBox', ctn_prop_matrix, 
                                                label='Rho(m/s)', orient=wx.VERTICAL, proportion=1, flag=wx.EXPAND|wx.TOP, border=5)
    dlg.view.AddTextCtrl(ctn_matrix_rho, proportion=0, flag=wx.EXPAND|wx.TOP, 
                         border=5, widget_name='matrix_rho', initial=3.0)  
    #
    
    if values.size == 2:
        if values[1] == 0:
            value_layer_2_text = "color: Black"
        elif values[1] == 255:    
            value_layer_2_text = "color: White"
        else:    
            value_layer_2_text = "value: " + str(values[1])
            
        ctn_prop_pores = dlg.view.AddCreateContainer('StaticBox',
                label="Layer 2 properties (" + value_layer_2_text + ")", 
                orient=wx.HORIZONTAL, 
                proportion=0, flag=wx.EXPAND|wx.TOP, border=5)
        #          
        ctn_pores_vp = dlg.view.AddCreateContainer('StaticBox', ctn_prop_pores, 
                label='Vp(m/s)', orient=wx.VERTICAL, 
                proportion=1, flag=wx.EXPAND|wx.TOP, border=5)
        dlg.view.AddTextCtrl(ctn_pores_vp, proportion=0, flag=wx.EXPAND|wx.TOP, 
                             border=5, widget_name='pores_vp', initial=2500.0)  
        #
        ctn_pores_rho = dlg.view.AddCreateContainer('StaticBox', ctn_prop_pores, 
                label='Rho(m/s)', orient=wx.VERTICAL, proportion=1, 
                flag=wx.EXPAND|wx.TOP, border=5)
        dlg.view.AddTextCtrl(ctn_pores_rho, proportion=0, flag=wx.EXPAND|wx.TOP, 
                             border=5, widget_name='pores_rho', initial=2.2)  
        #    
    
    dlg.view.SetSize((400, 580))
    result = dlg.view.ShowModal()

    try:
        disableAll = wx.WindowDisabler()
        wait = wx.BusyInfo("Creating model. Wait...")
        if result == wx.ID_OK:
            results = dlg.get_results()  
            
            print(results)


            am = OM.new('acoustic_2d_model', 
                        image_uid=image.uid,
                        dx=results.get('x_spacing'), 
                        dy=results.get('y_spacing'), 
                        name=results.get('model_name'))
            result = OM.add(am)
            
            print ('result acoustic_2d_model:', result, args, kwargs)
    

    
            layer1 = OM.new('geolayer', value=values[0], 
                    vp=results.get('matrix_vp'), rho=results.get('matrix_rho'),
                    name="Layer 1")
            result = OM.add(layer1, am.uid)
            print ('result layer 1:', result)
            
            
            if values.size == 2:
                layer2 = OM.new('geolayer', value=values[1], 
                    vp=results.get('pores_vp'), rho=results.get('pores_rho'), 
                    name="Layer 2")
                result = OM.add(layer2, am.uid)
                print ('result layer 2:', result)    
    
    

            
            
    except Exception as e:
        print ('ERROR [on_create_model]:', str(e))
        raise
    finally:
        del wait
        del disableAll
        UIM.remove(dlg.uid)
Exemplo n.º 28
0
class Dialog(wx.Dialog):
    @debugdecorator
    def __init__(self, *args, **kwargs):
        if 'size' not in kwargs:
            kwargs['size'] = (640, 480)

        super(Dialog, self).__init__(*args, **kwargs)

        self.OM = ObjectManager()

        self.currentwellindex = 0
        self.currentrocktableindex = 0

        self.tables = []

        self.rocktablemap = [
            rocktable.uid for rocktable in self.OM.list('rocktable')
        ]
        work_table = []
        for rocktable in self.OM.list('rocktable'):
            work_table.append(RockTable(rocktable.uid))
        self.tables.append(work_table)
        self.grid = wx.grid.Grid(self)
        self.grid.SetDefaultColSize(100)

        #        else:
        self.grid.SetTable(
            self.tables[self.currentwellindex][self.currentrocktableindex])
        self.grid.Bind(wx.grid.EVT_GRID_CELL_LEFT_DCLICK, self.on_cell_dlclick)
        self.grid.Bind(wx.grid.EVT_GRID_LABEL_LEFT_DCLICK,
                       self.on_label_dlclick)

        toolbar_sizer = wx.BoxSizer(wx.HORIZONTAL)

        self.rocktable_choice = wx.Choice(self)
        self.rocktable_choice.AppendItems([
            self.OM.get(rocktableuid).name
            for rocktableuid in self.rocktablemap
        ])
        self.rocktable_choice.SetSelection(self.currentrocktableindex)
        self.rocktable_choice.Bind(wx.EVT_CHOICE, self.on_rocktable_choice)

        add_rocktype_button = wx.Button(self, label='ADD ROCK TYPE')
        add_rocktype_button.Bind(wx.EVT_BUTTON, self.on_add_rocktype)

        remove_rocktype_button = wx.Button(self, label='REM ROCK TYPE')
        remove_rocktype_button.Bind(wx.EVT_BUTTON, self.on_remove_rocktype)

        toolbar_sizer.Add(self.rocktable_choice, 1, wx.ALIGN_LEFT)
        toolbar_sizer.Add(add_rocktype_button, 0, wx.ALIGN_LEFT)
        toolbar_sizer.Add(remove_rocktype_button, 0, wx.ALIGN_LEFT)

        main_sizer = wx.BoxSizer(wx.VERTICAL)
        main_sizer.Add(toolbar_sizer, proportion=0, flag=wx.EXPAND)
        main_sizer.Add(self.grid, proportion=1, flag=wx.EXPAND)

        self.SetSizer(main_sizer)

    @debugdecorator
    def on_rocktable_choice(self, event):
        idx = event.GetSelection()
        if idx != self.currentrocktableindex:
            self.currentrocktableindex = idx
            self.grid.SetTable(
                self.tables[self.currentwellindex][self.currentrocktableindex])

            self.grid.ForceRefresh()

    @debugdecorator
    def on_add_rocktype(self, event):
        self.grid.AppendRows()
        self.grid.ForceRefresh()

    def on_remove_rocktype(self, event):
        to_remove = self.grid.GetSelectedRows()
        self.grid.ClearSelection()
        for i in to_remove[::-1]:
            self.grid.DeleteRows(i)
        self.grid.ForceRefresh()

    @debugdecorator
    def on_cell_dlclick(self, event):
        if event.GetCol() == 1:
            row = event.GetRow()
            table = self.tables[self.currentwellindex][
                self.currentrocktableindex]
            color = table.get_color(row)

            global COLOUR_DATA
            COLOUR_DATA.SetColour(color)

            dlg = wx.ColourDialog(self, COLOUR_DATA)

            if dlg.ShowModal() == wx.ID_OK:
                COLOUR_DATA = dlg.GetColourData()
                color = COLOUR_DATA.GetColour().Get(True)
                # TODO: alpha
                table.set_color(row, color)
                self.grid.ForceRefresh()
            dlg.Destroy()
        else:
            event.Skip()

    @debugdecorator
    def on_label_dlclick(self, event):
        row = event.GetRow()
        col = event.GetCol()
        table = self.tables[self.currentwellindex][self.currentrocktableindex]
        if row == -1 and col >= table.N_COLS:
            name, unit = table.get_nameunit(col)
            dlg = PropertyEntryDialog(self)
            dlg.set_value(name, unit)

            if dlg.ShowModal() == wx.ID_OK:
                name, unit = dlg.get_value()
                table.set_nameunit(col, name, unit)
                self.grid.ForceRefresh()
Exemplo n.º 29
0
 def get_data_object(self):
     do_uid = self.get_data_object_uid()
     OM = ObjectManager()
     data_object = OM.get(do_uid)
     return data_object
Exemplo n.º 30
0
    def draw(self):
        self.clear()
        self._mplot_objects['density'] = None
        self._mplot_objects['wiggle'] = []
        #
        UIM = UIManager()
        controller = UIM.get(self._controller_uid)
        toc = self.get_parent_controller()
        #
        data = toc.get_filtered_data(dimensions_desired=2)
        x_di_uid, x_index_data = toc.get_index_for_dimension(-2)
        y_di_uid, y_index_data = toc.get_index_for_dimension(-1)
        #
        OM = ObjectManager()
        xdata_index = OM.get(x_di_uid)
        ydata_index = OM.get(y_di_uid)
        #
        canvas = self.get_canvas()
        toc_uid = UIM._getparentuid(self._controller_uid)
        track_controller_uid = UIM._getparentuid(toc_uid)
        track_controller = UIM.get(track_controller_uid)
        #
        xlim_min, xlim_max = canvas.get_xlim('plot_axes')
        #
        if controller.type == 'density' or controller.type == 'both':
            # (left, right, bottom, top)
            extent = (xlim_min, xlim_max, np.nanmax(y_index_data),
                      np.nanmin(y_index_data))
            try:
                image = track_controller.append_artist(
                    'AxesImage',
                    cmap=controller.colormap,
                    interpolation=controller.interpolation,
                    extent=extent)
                image.set_data(data.T)
                image.set_label(self._controller_uid)
                if image.get_clip_path() is None:
                    # image does not already have clipping set,
                    # clip to axes patch
                    image.set_clip_path(image.axes.patch)
                if controller.min_density is None:
                    controller.set_value_from_event('min_density',
                                                    np.nanmin(data))
                if controller.max_density is None:
                    controller.set_value_from_event('max_density',
                                                    np.nanmax(data))
                    #
                image.set_clim(controller.min_density, controller.max_density)
                image.set_alpha(controller.density_alpha)
                self._mplot_objects['density'] = image
            except Exception as e:
                print('ERRO density.draw:', e)
                raise
        else:
            self._mplot_objects['density'] = None
        #
        if controller.type == 'wiggle' or controller.type == 'both':
            try:

                self._lines_center = []
                vec = np.arange(0.5, len(x_index_data))
                x_lines_position = canvas.transform(vec, 0.0,
                                                    len(x_index_data))
                if len(x_lines_position) > 1:
                    increment = (x_lines_position[0] +
                                 x_lines_position[1]) / 2.0
                elif len(x_lines_position) == 1:
                    increment = 0.5
                else:
                    msg = 'Error. x_lines_position cannot have lenght 0. Shape: {}'.format(
                        data.shape)
                    raise Exception(msg)

                if controller.min_wiggle == None:
                    controller.set_value_from_event(
                        'min_wiggle', (np.amax(np.absolute(data))) * -1)
                if controller.max_wiggle == None:
                    controller.set_value_from_event('max_wiggle',
                                                    np.amax(np.absolute(data)))
                data_ = np.where(data < 0,
                                 data / np.absolute(controller.min_wiggle),
                                 data)
                data_ = np.where(data_ > 0, data_ / controller.max_wiggle,
                                 data_)
                # print('\n\ndata_:', data_)

                for idx, pos_x in enumerate(x_lines_position):
                    self._lines_center.append(pos_x)
                    xdata = data_[idx]
                    #  def _transform_xdata_to_wiggledata(self, values, axes_left, axes_right):

                    xdata = self._transform_xdata_to_wiggledata(
                        xdata, pos_x, increment)
                    line = track_controller.append_artist(
                        'Line2D',
                        xdata,
                        y_index_data,
                        linewidth=controller.linewidth,
                        color=controller.linecolor)
                    self._mplot_objects['wiggle'].append(line)
                    self._mplot_objects['wiggle'].append(None)  # left fill
                    self._mplot_objects['wiggle'].append(None)  # right fill

            except Exception as e:
                print('ERRO wiggle.draw:', e)
                raise

        #
        label = toc.get_label()
        if label:
            label.set_plot_type(controller.type)
            if controller.type == 'density':
                label.set_colormap(controller.colormap)
                label.set_colormap_lim(
                    (controller.min_density, controller.max_density))
                #
                label.set_ruler(x_index_data[0], x_index_data[-1])
                label.set_ruler_title(xdata_index.name)
                label.set_ruler_subtitle(xdata_index.unit)
                #

            elif controller.type == 'wiggle':
                label.set_offset(x_index_data,
                                 x_lines_position,
                                 xlim=(xlim_min, xlim_max))
                label.set_offset_title(xdata_index.name)
                label.set_offset_subtitle(xdata_index.unit)

            elif controller.type == 'both':
                label.set_colormap(controller.colormap)
                label.set_colormap_lim(
                    (controller.min_density, controller.max_density))
                #
                label.set_offset(x_index_data,
                                 x_lines_position,
                                 xlim=(xlim_min, xlim_max))
                label.set_offset_title(xdata_index.name)
                label.set_offset_subtitle(xdata_index.unit)
                #

        self.draw_canvas()
        if controller.type == 'wiggle' or controller.type == 'both':
            self.fill_between(controller.fill, None)