Commit f6eb65b3 authored by Félix Hartmann's avatar Félix Hartmann
Browse files

Better handling of organ removal, organ option change, organ data

loading. This allows to keep the zoom after action.
parent 66355c11
......@@ -422,46 +422,31 @@ def get_hdf5_tigeid(h5file, gui_tige_id):
return tigeid
def load_hdf5_tiges(hdf5file, display_message=True):
"""
Fonction pour recharger toutes les tiges depuis le fichier hdf5
vers les variables globales d'Interekt.
"""Loads organ data from the hdf5 file and set global variables."""
load_data: permet de charger en mémoire les données tiges_data et
celle du post_processing pour afficher les profils des
tiges voir la fonction Load_postprocessed_data()
"""
global tiges_data, base_tiges, btige_plt, btige_text, tiges_names
global tiges_plot_object
# On trouve combien on a de tiges traitées
# How many organs have been precessed
Ntiges = h5store.get_number_of_tiges(hdf5file)
# On crée les listes pour stoker les textes et les plots
# pour chaque tiges
# Let's create lists for storing texts and plots for the organs
btige_plt = [None]*Ntiges
btige_text = [None]*Ntiges
tiges_plot_object = [None]*Ntiges
# Chargement du nom des tiges
# Loading organ names
if display_message:
interekt.display_message(_("""Loading data"""))
tiges_names = h5store.get_tiges_names(hdf5file)
base_tiges = h5store.get_tiges_bases(hdf5file)
#Recharge la colormap pour les tiges ouvertes
# Reloading colormap for the organs to display
set_tiges_colormap()
#Traitement des données
print("Loading data from the h5 file")
# Get a TigesManager object the hdf5 file data
tiges_data = h5store.get_tigesmanager(hdf5file)
# For each tige, let's check whether useful data have been stored by 'Traite_data'
for tige_id in range(Ntiges):
# Let's get the id of the tige in the hdf5 file
hdf_tige_id = get_hdf5_tigeid(hdf5file, tige_id)
angle = h5store.get_postprocessing(hdf5file, 'angle', hdf_tige_id)
if angle is None:
Traite_data(save_to_hdf5=True)
def load_hdf5_file(hdf5file):
"""Loads a hdf5 file into Interekt."""
global dtphoto
......@@ -956,7 +941,8 @@ def check_process():
print('Failed to process data')
print(e)
def process_data(display_message=True):
def process_data():
"""Process the raw skeleton and store data into the hdf5 file."""
global data_out, tiges_data
# Get queue result
......@@ -965,11 +951,8 @@ def process_data(display_message=True):
# When it's done get the tiges_data from the data from data_out
tiges_data = data_out['data']['tiges_data']
# On affiche que l'on fait la sauvegarde
if display_message:
interekt.display_message(_("Saving data into the .h5 file"))
print("Saving data into the .h5 file")
for idt in range(len(base_tiges)):
# Recup l'id dans le fichier hdf
idhdf = get_hdf5_tigeid(hdf5file, idt)
tige_name = h5store.get_tiges_names(hdf5file, idhdf)
h5store.tige_to_hdf5(hdf5file, idhdf, tige_name, base_tiges[idt],
......@@ -978,17 +961,15 @@ def process_data(display_message=True):
tiges_data.xb1[idt], tiges_data.yb1[idt],
tiges_data.xb2[idt], tiges_data.yb2[idt])
# On lance le traitement et on le sauvegarde dans le fichier hdf5
if display_message:
interekt.display_message(_("Processing extracted data"))
# Launch processing and save it into the hdf5 file
print("Processing extracted data")
Traite_data(save_to_hdf5=True)
# Recharge les données des tiges a partir du fichier hdf5
load_hdf5_tiges(hdf5file)
# Reload organ data from the hdf5 file
load_hdf5_tiges(hdf5file, display_message=False)
# Plot the first image in the list
interekt.plot_image(cur_image, force_clear=True)
# Replot the current image, with the organ skeleton
interekt.plot_image(cur_image, keep_zoom=True, force_clear=True)
interekt.change_button_state()
interekt.prog_bar.stop()
......@@ -1212,41 +1193,6 @@ def load_postprocessed_data(hdf5file, hdf_tige_id):
###############################################################################
###################### Gestion des actions du menu pour les tiges individuelles ####
def remove_tige():
"""
Fonction pour supprimer une tige qui est sélectionnée par la
valeur contenue dans la variable globale cur_tige.
Étapes de la suppression:
1- on trouve l'id de la tige dans le fichier hdf5 (car elle
peuvent avoir des ids discontinue)
2- on supprime les données de cette tige dans le fichier hdf5
3- on re-charge à partir du fichier hdf5 les données des variables
globales: tiges_data, tige_id_mapper, base_tiges
4- on fait un refresh des plots
"""
# Force la fermeture du menu popup dans tk
interekt.floatmenuisopen = False
# Récupération des ids dans le fichier hdf5
tigeid = get_hdf5_tigeid(hdf5file, cur_tige)
tige_name = h5store.get_tiges_names(hdf5file, tigeid)
# Suppression de la tige dans le fichier hdf5
h5store.delete_tige(hdf5file, tigeid)
# remet a zero les tracés sur la figure
reset_graph_data()
# recharger les données du fichier hdf5 en mémoire
load_hdf5_tiges(hdf5file)
interekt.plot_image(cur_image, force_clear=True)
###################### Fenetre pour afficher une tige #########################
def export_one_tige():
"""
......@@ -1298,29 +1244,29 @@ def save_tige_options():
Fonction pour sauvegarder les options modifiées dans le gui
(fonction show_tiges_options) dans le fichier hdf5
"""
reset_graph_data()
hdf5_tigeid = get_hdf5_tigeid(hdf5file, cur_tige)
new_tige_name = tktigeid.get()
new_offset = tk_tige_offset.get()
new_percent_diam = tk_tige_percent_diam.get()
hdf5_tigeid = get_hdf5_tigeid(hdf5file, cur_tige)
try:
h5store.save_tige_name(hdf5file, hdf5_tigeid, new_tige_name)
# Mise a jour des données de la tiges dans le fichier hdf5
# Update organ data in the hdf5 file
new_data_tige = {"Tiges_seuil_offset": new_offset,
'Tiges_percent_diam': new_percent_diam}
#besoin de recup l'id de la tiges dans le fichier hdf5
h5store.save_tige_dict_to_hdf(hdf5file, hdf5_tigeid, new_data_tige)
except Exception as e:
print("Failed to update options")
print(e)
# Rechargement des données des tiges a partir du hdf5
load_hdf5_tiges(hdf5file)
# Replot the main image
interekt.plot_image(cur_image, keep_zoom=True, force_clear=True)
old_tige_name = h5store.get_tiges_names(hdf5file, tige_num=hdf5_tigeid)
new_tige_name = tktigeid.get()
if new_tige_name != old_tige_name:
# Save the new name
h5store.save_tige_name(hdf5file, hdf5_tigeid, new_tige_name)
# Update the global variable 'tiges_names'
global tiges_names
tiges_names = h5store.get_tiges_names(hdf5file)
# Replot organ bases
interekt.plot_basetiges(force_redraw=True)
def show_tige_options():
......@@ -1389,6 +1335,7 @@ def show_tige_options():
tigebutton_export.pack(side=Tk.BOTTOM)
#TODO change the handling of tktigeid
tktigeid = None
def show_time_series(tige_id=None):
global cur_tige
......@@ -3922,7 +3869,7 @@ class Interekt:
command=self._addtige, state=Tk.DISABLED)
self.button_suppr_all_tiges = Button(
master=buttonFrame, text=_("Suppress all bases"), # 'Supprimer les bases'
command=self._suppr_all_tiges, state=Tk.DISABLED)
command=self.remove_all_organs, state=Tk.DISABLED)
self.button_traiter = Button(
master=buttonFrame, text=_('Process'), # 'Traiter'
command=launch_process, state=Tk.DISABLED)
......@@ -3968,7 +3915,7 @@ class Interekt:
command=show_tige_options)
self.floatmenu.add_command(label=_("Suppress the base"),
command=remove_tige)
command=self.remove_organ)
self.floatmenuisopen = False
......@@ -4064,7 +4011,7 @@ class Interekt:
self.floatmenu.add_command(label=_("Settings"),
command=show_tige_options)
self.floatmenu.add_command(label=_("Suppress the base"),
command=remove_tige)
command=self.remove_organ)
def popup(self, tige_id):
global cur_tige
......@@ -4539,7 +4486,7 @@ class Interekt:
self.update_imgid = self.master.after(350, self.plot_image_fullres)
####################### GESTION GRAPHIQUE DES TIGES #######################
############################# ORGAN HANDLING ###############################
def _addtige(self):
"""Activates the addition of a tige with the GUI.
......@@ -4552,8 +4499,40 @@ class Interekt:
self.change_button_state()
def _suppr_all_tiges(self):
"""Suppress all tiges in the hdf5 file."""
def remove_organ(self):
"""
Fonction pour supprimer une tige qui est sélectionnée par la
valeur contenue dans la variable globale cur_tige.
Étapes de la suppression:
1- on trouve l'id de la tige dans le fichier hdf5 (car elle
peuvent avoir des ids discontinue)
2- on supprime les données de cette tige dans le fichier hdf5
3- on re-charge à partir du fichier hdf5 les données des variables
globales: tiges_data, tige_id_mapper, base_tiges
4- on fait un refresh des plots
"""
# Force la fermeture du menu popup dans tk
self.floatmenuisopen = False
# Récupération des ids dans le fichier hdf5
tigeid = get_hdf5_tigeid(hdf5file, cur_tige)
# Suppression de la tige dans le fichier hdf5
h5store.delete_tige(hdf5file, tigeid)
# Reset all plots in figure
reset_graph_data()
# recharger les données du fichier hdf5 en mémoire
load_hdf5_tiges(hdf5file, display_message=False)
# Replot the current image
self.plot_image(cur_image, force_clear=True, keep_zoom=True)
def remove_all_organs(self):
"""Delete all organs in the hdf5 file and update display."""
reset_graph_data()
tiges_ids_hdf = h5store.get_tiges_indices(hdf5file)
......@@ -4561,12 +4540,18 @@ class Interekt:
for idt in tiges_ids_hdf:
h5store.delete_tige(hdf5file, idt)
# Recharge les données depuis le fichier hdf
load_hdf5_tiges(hdf5file)
# Reset all plots in figure
reset_graph_data()
# recharger les données du fichier hdf5 en mémoire
load_hdf5_tiges(hdf5file, display_message=False)
# Replot the current image
self.plot_image(cur_image, force_clear=True)
self.plot_image(cur_image, force_clear=True, keep_zoom=True)
self.change_button_state()
def plot_basetiges(self, force_redraw=False, ratio=1):
"""
Trace les bases des tiges sur le graphique avec la ligne du centre
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment