1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013 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 if __name__ == "__main__" :
27 sys.path[:0]=["../Aster"]
28 sys.path[:0]=["../Saturne"]
30 from Accas import NUPL
32 def traite_entiteNUPL(entite):
34 Fonction speciale pour les nuplets (classe NUPL)
35 Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc
36 qui est une liste vide.
40 def traite_entite(entite,liste_simp_reel):
42 Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc
43 qui est une liste contenant le nom des sous entites dans l'ordre
44 de leur apparition dans le catalogue.
45 L'ordre d'apparition dans le catalogue est donne par l'attribut _no
47 La fonction active le meme type de traitement pour les sous entites
51 for k,v in entite.entites.items():
52 if isinstance(v,NUPL):
55 traite_reel(v,liste_simp_reel)
56 traite_entite(v,liste_simp_reel)
60 entite.ordre_mc=[ item for index, item in l ]
62 def traite_cache(objet):
63 if not hasattr(objet, "cache"): return
64 if objet.cache == 0 :return
66 if objet.equiv != None : clef=objet.equiv
67 if hasattr(objet.pere,"mcOblig"):
68 objet.pere.mcOblig[clef]=objet.defaut
71 objet.pere.mcOblig[clef]=objet.defaut
73 def traite_reel(objet,liste_simp_reel):
74 if objet.__class__.__name__ == "SIMP":
75 if ( 'R' in objet.type):
76 if objet.nom not in liste_simp_reel :
77 liste_simp_reel.append(objet.nom)
79 def analyse_niveau(cata_ordonne_dico,niveau,liste_simp_reel):
81 Analyse un niveau dans un catalogue de commandes
83 if niveau.l_niveaux == ():
84 # Il n'y a pas de sous niveaux
85 for oper in niveau.entites:
86 traite_entite(oper,liste_simp_reel)
87 cata_ordonne_dico[oper.nom]=oper
89 for niv in niveau.l_niveaux:
90 analyse_niveau(cata_ordonne_dico,niv)
92 def analyse_catalogue(cata):
94 Cette fonction analyse le catalogue cata pour construire avec l'aide
95 de traite_entite la structure de donnees ordre_mc qui donne l'ordre
96 d'apparition des mots cles dans le catalogue
97 Elle retourne un dictionnaire qui contient toutes les commandes
98 du catalogue indexees par leur nom
102 if cata.JdC.l_niveaux == ():
103 # Il n'y a pas de niveaux
104 for oper in cata.JdC.commandes:
105 traite_entite(oper,liste_simp_reel)
106 cata_ordonne_dico[oper.nom]=oper
108 for niv in cata.JdC.l_niveaux:
109 analyse_niveau(cata_ordonne_dico,niv,liste_simp_reel)
110 return cata_ordonne_dico,liste_simp_reel
113 if __name__ == "__main__" :
114 from Cata import cata_STA6
115 dico=analyse_catalogue(cata_STA6)
117 #dico=analyse_catalogue(cata_saturne)
119 def print_entite(entite,dec=' '):
120 print (dec,entite.nom,entite.__class__.__name__)
121 for mocle in entite.ordre_mc:
122 print_entite(entite.entites[mocle],dec=dec+' ')
124 for k,v in dico.items():
125 print_entite(v,dec='')