4. Description des outils graphiques génériques#
Les routines graphiques sont organisées de la manière suivante :
routines chapeau et routines génériques : dans le fichier outils_ihm.py,
interfaces graphiques spécifiques à chaque onglet de calcul : dans un fichier python spécifique : par exemple, le fichier ce_ihm_expansion.py contient la classe graphique liée à l’onglet d’expansion de données, alors que le fichier ce_calcul_expansion.py contient les calculs associés (et peut être testé en mode non interactif sans faire appel aux modules Tk de python).
On détaille ici le fonctionnement des classes principales TabbedWindow et MessageBoxInteractif. Pour les autres classes, se reporter à leur description en-tête de celles-ci. Ces petites classes permettent d’afficher des menus spécifiques : sélection d’un groupe de noeuds dans un maillage, choix des paramètres pour une opération Aster, paramètres pour un changement de repère.
4.1. Classe TabbedWindow#
A l’appel de la macro-commande CALC_ESSAI en mode interactif, la routine create_interactive_window lance :
une fenêtre vierge TabbedWindow (dans outils.py) dans laquelle sont affichés le contenu spécifique de chaque onglet de travail.,
une fenêtre de message MessageBoxInteractif, dans laquelle seront affichés les message interactif affichés en cours de calcul.
Remarques :
L’intérieur de la fenêtre vierge TabbedWindow est un Canvas (l’avantage du Canvas sur une Frame classique est la possibilité d’ajouter une barre de défilement verticale si celui-ci est grand),
la routine set_current_tab sert à afficher l’interface correspondante à chaque changement d’onglet ; la méthode setup associée à la classe graphique de l’onglet est appelée pour rafraîchir l’environnement (concepts Aster crées) ; la méthode setupdoit donc exister dans les classes graphiques de tous les onglets,
la taille initiale des fenêtres principale et de message sont déterminées respectivement dans les routines __init__ de définition desdites fenêtres.
4.2. Classe MessageBoxInteractif#
Fenêtre vide dans laquelle sont imprimés les messages d’information pendant les calculs. Comme précisé dans la section précédente, la fenêtre est créée à l’appel de la macro CALC_ESSAI (instance mess), et est transportée comme argument de toutes les classes graphiques. Exemple :
iface = InterfaceCorrelation(main, objects, macro, mess,param_visu)
Les arguments sont les suivants :
main : la fenêtre principale de l’IHM, qui contient la TabbedWindow,
objects : instance de CalcEssaiObjects qui contient les concepts Aster existants,
macro : macro-commande, désuet
mess : instance de la fenêtre de messages
param_visu : instance de la classe IHM InterfaceParametres, qui permet de choisir les paramètres de visualisation des déformées et des courbes (Xmgrace + GMSH ou Salomé).
4.2.1. Affichage des messages d’erreur issus d’exceptions#
Lorsqu’on lance une commande Aster dans la macro au travers d’une commande interactive, et que le calcul termine en erreur (récupérée sous forme d’une exception par Aster), le message d’erreur est affiche dans la fenêtre de message interactive. On récupère cette erreur grâce à la commande suivante :
try:
MACRO_EXPANS( MODELE_CALCUL = mcfact_calcul,
MODELE_MESURE = mcfact_mesure,
NUME_DDL = nume,
RESU_ET = res_ET,
RESU_RD = res_RD,
RESOLUTION = parametres,
**args )
except aster.error,err :
message = « ERREUR ASTER : « + mess.GetText(“I”,err.id_message,
err.valk, err.vali, err.valr)
self.mess.disp_mess( message)
UTMESS(“A”,”CALCESSAI0_7”)
return
Remarque: lors des dernières restitutions réalisées, on a remarqué que ce tracking d’erreurs n’était plus fonctionnel. L’affichage en fenêtre interactive a été supprimé, et remplacé par un simple «Erreur dans le calcul Aster».
4.3. Classe ScrollList#
Frame générique permettant d’afficher un tableau avec barre de défilement. L’attribut values est une liste remplie par set_values correspondant à ce qui esst affiché dans le tableau. get_selection rend une liste contenant les indices sélectionnés à la souris et la valeur de values correspondante:
[[1,”N1_DX”],[3,”N4_DY”]]
4.3.1. Classes ModeList et ModeFreqList#
Sous-classe de ScrollList, elle possède deux boutons en-dessous permettant de sélectionner ou de dé-sélectionner d’un coup toutes les lignes de la liste. Elle est utilisée pour afficher des numéros d’ordre et une valeur associée (type fréquence propre ou NOEU_CMP). get_selection retourne uniquement la liste des numéros d’ordre sélectionnés.
La classe ModeFreqList, sous classe de ModeList est à utiliser préférentiellement car elle permet de mettre en forme correctement les valeurs des fréquences propres ou des NOEU_CMP.
4.3.2. Classe StudyList#
Sous-classe de ScrollList, elle permet d’afficher la liste des études Salomé ouvertes. Elle possède une méthode valider qui stocke l’étude Salomé courante pour l’affichage des déformées, MAC et courbes.
4.4. Classe VisuSpectre#
Cette classe crée une frame composée de un ou plusieurs tableaux pour l’affichage des coordonnées de l’inter-spectre à visualiser. Cette classe est utilisée pour l’onglet d’identification d’efforts et pour le traitement du signal.
Si choix != None, on ajoute un bouton au-dessus permettant de choisir entre plusieurs options à visualiser.
Remarque: il conviendrait d’ajouter dans cette classe des méthodes communes pour l’extraction des fonctions de l’inter-spectre, et leur affichage vers le logiciel de visualisation choisi. Actuellement, ces fonctionnalités sont écrites en double dans les classes d’IHM des onglets correspondantes.
4.5. Classes ParamModeICouple, ParamModeLMME et ParamProjMesuModal#
Ces classes permettent d’afficher dans la fenêtre principale ou dans des TopLevel des frame permettant de contrôler les paramètres de calcul pour l’utilisation de CALC_MODES ou PROJ_MESU_MODAL.
4.6. Classe Observation Window#
Cette classe génère une Frame pour appliquer à un concept résultat de type mode_meca la macro-commande OBSERVATION. Elle est utilisée dans l’onglet d’identification d’efforts et dans la fenêtre de visualisation des résultats.
Cette Frame est composée de deux cadres de couleurs verte et bleue, dans lesquelles on affiche les groupes de nœuds contenus dans le modèle expérimental choisi, et les DDL disponibles dans chaque groupe. Un bouton permettant de choisir le changement de repère associé est utilisé.
4.6.1. Classe DispObs#
Cette classe ouvre une fenêtre externe TopLevel lorsqu’on clique sur le bouton «Observations» dans l’onglet «Paramètres et visualisation».
On note que dans la méthode set_resu, on vérifie si le concept résultat choisi en amont a été créé par la macro-commande OBSERVATION. Si c’est le cas, alors on pré-sélectionne les DDL sélectionnés et les paramètres de changement de repère (voir la méthode set_selected dans la classe GroupNoWidget ci-dessous).
4.6.2. Classes SelectionNoeuds, SelectionMailles et _SelectionBase#
Les classes SelectionNoeuds et SelectionMailles affichent les lignes de groupes de nœuds et de mailles , et sont des sous-classes de _SelectionBase. Cette classe permet de faire le lien entre les DDL sélectionnés par l’utilisateur et la construction du mot-clé dans la macro OBSERVATION. Elles sont basées sur la classe ci-dessous.
4.6.3. Classe GroupNoWidget#
Cette classe affiche les listes de groupes de nœuds et de mailles, avec les DDL associés (méthode set_data).
get_selected est une méthode qui retourne sous forme de dictionnaire les options choisies par l’utilisateur.
set_selected est utilisé lorsque le concept mode_meca à visualiser a déjà été créé par OBSERVATION. Dans ce cas, on va chercher dans le contexte les mots-clés qui ont été utilisés lors de la création du concept, et on modifie les cases de l’interface en conséquence. Cela doit permettre de modifier le concept existant sans avoir à reproduire toutes les opérations.
Remarque: la méthode set_selected n’est pas optimale, et il conviendrait de la modifier:
on a ajouté en fin de routine la commande «return Rien», ce qui génère une erreur; on a cependant remarqué que si on ne retourne vraiment rien (commande «return» seule), alors lorsqu’on ouvre la fenêtre, les cases à cocher ne le sont pas,
si on veut modifier un concept déjà créé par OBSERVATION, il faudrait repartir du résultat initial, et non pas du concept déjà projeté, car en partant de ce dernier, on ne peut que retirer encore des points, mais on ne peut pas en modifier.