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
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)
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
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)
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)
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 + ']'
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)
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
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()
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
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
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)
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
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)
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)
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
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
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()
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
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)
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)
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)
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)
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
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
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
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)
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()
def get_data_object(self): do_uid = self.get_data_object_uid() OM = ObjectManager() data_object = OM.get(do_uid) return data_object
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)