1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2017 EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 Ce module sert a retrouver l'ordre des mots cles d'un catalogue de
24 from __future__ import absolute_import
25 from __future__ import print_function
26 if __name__ == "__main__" :
29 sys.path[:0]=["../Aster"]
30 sys.path[:0]=["../Saturne"]
32 from Accas import NUPL
34 def traite_entiteNUPL(entite):
36 Fonction speciale pour les nuplets (classe NUPL)
37 Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc
38 qui est une liste vide.
42 def traite_entite(entite,liste_simp_reel):
44 Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc
45 qui est une liste contenant le nom des sous entites dans l'ordre
46 de leur apparition dans le catalogue.
47 L'ordre d'apparition dans le catalogue est donne par l'attribut _no
49 La fonction active le meme type de traitement pour les sous entites
53 for k,v in list(entite.entites.items()):
54 if isinstance(v,NUPL):
57 traite_reel(v,liste_simp_reel)
58 traite_entite(v,liste_simp_reel)
62 entite.ordre_mc=[ item for index, item in l ]
64 def traite_cache(objet):
65 if not hasattr(objet, "cache"): return
66 if objet.cache == 0 :return
68 if objet.equiv != None : clef=objet.equiv
69 if hasattr(objet.pere,"mcOblig"):
70 objet.pere.mcOblig[clef]=objet.defaut
73 objet.pere.mcOblig[clef]=objet.defaut
75 def traite_reel(objet,liste_simp_reel):
76 if objet.__class__.__name__ == "SIMP":
77 if ( 'R' in objet.type):
78 if objet.nom not in liste_simp_reel :
79 liste_simp_reel.append(objet.nom)
81 def analyse_niveau(cata_ordonne_dico,niveau,liste_simp_reel):
83 Analyse un niveau dans un catalogue de commandes
85 if niveau.l_niveaux == ():
86 # Il n'y a pas de sous niveaux
87 for oper in niveau.entites:
88 traite_entite(oper,liste_simp_reel)
89 cata_ordonne_dico[oper.nom]=oper
91 for niv in niveau.l_niveaux:
92 analyse_niveau(cata_ordonne_dico,niv)
94 def analyse_catalogue(cata):
96 Cette fonction analyse le catalogue cata pour construire avec l'aide
97 de traite_entite la structure de donnees ordre_mc qui donne l'ordre
98 d'apparition des mots cles dans le catalogue
99 Elle retourne un dictionnaire qui contient toutes les commandes
100 du catalogue indexees par leur nom
104 if cata.JdC.l_niveaux == ():
105 # Il n'y a pas de niveaux
106 for oper in cata.JdC.commandes:
107 traite_entite(oper,liste_simp_reel)
108 cata_ordonne_dico[oper.nom]=oper
110 for niv in cata.JdC.l_niveaux:
111 analyse_niveau(cata_ordonne_dico,niv,liste_simp_reel)
112 return cata_ordonne_dico,liste_simp_reel
115 if __name__ == "__main__" :
116 from Cata import cata_STA6
117 dico=analyse_catalogue(cata_STA6)
119 #dico=analyse_catalogue(cata_saturne)
121 def print_entite(entite,dec=' '):
122 print (dec,entite.nom,entite.__class__.__name__)
123 for mocle in entite.ordre_mc:
124 print_entite(entite.entites[mocle],dec=dec+' ')
126 for k,v in list(dico.items()):
127 print_entite(v,dec='')