Introduction à l’automatisation de la création d’images de résultats avec Mentat, et un peu de python

Pourquoi

La création des captures d’écran lors de la rédaction du rapport technique peut prendre du temps, et surtout être répétitif si vous faites plusieurs itérations.
Le but de cette article est de vous sensibiliser à la possibilité d’automatiser certaines tâches dans Mentat, sans rentrer dans les détails du python et de toutes les possibilités de la programmation avec Mentat.

Comment

Une simple procédure peut être pratique mais vous ne pourrez pas ajouter de variables. La solution est donc de transformer une procédure Mentat en programme python.
Pour appeler une commande Mentat depuis python, la commande miracle est py_send(commande)

Le minimum vital pour un programme python dans Mentat est :

Import du module py_mentat

# coding: utf8
from py_mentat import *

La fonction main() qui sera appelée par Mentat lors du lancement

def main():
  # vos commandes python

 

Le programme principal

if __name__ == "__main__":
  main()

Le programme complet de la routine. Attention, si vous faites un copié/collé de bien vérifier dans votre éditeur de texte que l’indentation est bonne.

Il faut enregistrer le programme dans le répertoire courant de votre fichier résultats. Par exemple post.py

 

# coding: utf8
from py_mentat import *
import os
#
# Python de création automatique d'images (capture d'écran)
# pour le post-traitement
#
# Remarques
# Attention cette routine n'est pas blindée. Ce qui signifie
# qu'un mauvais réglage des paramètres ci-dessous risque de faire
# planter la routine.
#
# Définition des incréments pour le post-traitement
# vous pouvez également utiliser 
# inc_list = range(1,11) pour les 10 premiers incréments
# inc_list = range(1,100,10) pour les incréments de 1 à 100 par pas de 10
# inc_list = [1,2,3,10,15,20]
inc_list = [10,20,30,40,46,50,800]
#
# Définition des types de résultats que l'on veut post-traiter
# Pour connaitre la syntaxe il suffit de la récupérer dans mentat
result_type = ["Minimum Principal Value of Stress",\
               "Maximum Principal Value of Stress", \
               "Displacement"]

# Définition de la racine du nom des fichiers qui seront générés
# Le nombre de racines doit être égal au nombre de result_type
image_name_racine = ["compression_max_principal_",\
                     "compression_min_principal_",\
                     "compression_deplacement_"]
#
# Chemin (par défaut en relatif) pour la sauvegarde des images
image_dir_out = "IMAGE"
#
# Type d'affichage
type_affichage = "*post_contour_bands"
#type_affichage = "*post_contour_centroid"

def post():
  py_send("*set_nodes off *regenerate")
  py_send("*post_off")
 
  # Active le type d'affichage
  py_send(type_affichage)
 
  decal = 0
  for res in result_type:
    # permet de se repositionner sur le premier incrément dans le fichier t16
    py_send("*post_rewind")
 
    # Active le type de résultats
    str = "*post_value " + res
    py_send(str)
    print(str)
  
    for i in inc_list:
      # Se positionner sur l'incrément i
    str = "*post_skip_to %d " %i
    py_send(str)
    #
    # Création de l'image
    str = '*image_save_current %s/%s%d.png yes' %(image_dir_out,image_name_racine[decal],i)
    print(str)
    py_send(str)
   decal = decal + 1

def main():
  print
  print '**********************************************'
  print '** Programme de creation de capture d ecran **'
  print '** **'
  print '** Auteur : E. Beets **'
  print '** Societe : SimuFem **'
  print '** Date : Juin 2017 **'
  print '**********************************************'
  if (not os.path.isdir(image_dir_out)):
    print('Le repertoire de sortie n existe pas')
  elif len(result_type) != len(image_name_racine):
    print('Attention les 2 tableaux result_type et image_name_racine doivent avoir la meme taille')
  else:
    post()


if __name__ == "__main__":
  print '***************************************'
  main()
  print '***************************************'

 

Pour lancer la routine :

  • Ouvrir le fichier t16
  • Dimensionner votre fenêtre d’affichage pour choisir la dimension de l’image qui sera créee
  • Choisir votre orientation et zoom pour l’affichage (Si vous le désirez vous pouvez modifier le python pour intégrer ces commandes)
  • tools.Python, puis Run : Choisir le fichier post.py
  • Si tout va bien, vous devriez avoir les images dans le répertoire IMAGE
  • En cas de problème, les erreurs sont affichées dans la fenêtre noire de commande qui se lance en même temps que Mentat

 

N’hésitez pas à modifier la routine, ajoutez vos propres réglages, etc …

Utilisez le formulaire “contact” pour obtenir plus d’informations si besoin ou pour obtenir le source de post.py

 

Related posts