Salome HOME
PN bug notation scientifique
[tools/eficas.git] / Editeur / panelsSalome.py
1 # -*- coding: utf-8 -*-
2 print "Import de panelsSalome"
3
4 from Tkinter import *
5 from widgets import ListeChoix
6 from widgets import showerror
7
8 from fonctionpanel      import FONCTION_Panel
9 from shellpanel         import SHELLPanel
10 from plusieursintopanel import PLUSIEURS_INTO_Panel
11 from plusieursassdpanel import PLUSIEURS_ASSD_Panel
12 from plusieursbasepanel import PLUSIEURS_BASE_Panel
13 from uniquesdcopanel    import UNIQUE_SDCO_Panel
14 from uniqueassdpanel    import UNIQUE_ASSD_Panel
15 from uniqueintopanel    import UNIQUE_INTO_Panel
16 from uniquecomppanel    import UNIQUE_COMP_Panel
17 from uniquebasepanel    import UNIQUE_BASE_Panel
18
19 from Noyau.N_CR import justify_text
20
21 import traceback
22 import SalomePyQt
23 import salome
24 import images
25 import SMESH_utils
26 sgQt=SalomePyQt.SalomePyQt()
27
28
29
30 # 2 types de commandes vont etre particularisees dans Salome
31 #
32 # - un cas general : 
33 # Toutes les commandes possedant GROUP_NO ou GROUP_MA
34 # seront surchargees d office
35 # pour cela on va utiliser le dictionnaire dict_classes_salome
36 # qui va permettre de changer la classe de la commande
37 # ainsi si un panel en dehors de salome a pour classe PLUSIEURS_BASE_Panel
38 # la classe de ce panel devient alors SALOME_PLUSIEURS_BASE_Panel
39 # (pour cela voir composimp)
40
41 # des commandes "autres" ne pouvant pas etre identifiées par leur nom 
42 # il suffit de creer dans la classe SALOME de la commande
43 # une fonction portant son nom 
44 # Exemple de particularisation d un panel :
45 # Supposons que l on veuille particulariser la commande
46 #       - LIRE_MAILLAGE_UNITE 
47 # le panel initial a pour classe UNIQUE_BASE_Panel
48 # il suffit d'ajouter dans la classe derivée SALOME_UNIQUE_BASE_Panel
49 # une fonction  SALOME_LIRE_MAILLAGE_UNITE
50 # la classe de ce panel devient alors SALOME_UNIQUE_BASE_Panel
51 # on peut surcharger les methodes nécessaires (affichage par exemple)  
52
53
54 class SALOME_SHELLPanel (SHELLPanel):
55         ""
56
57 class SALOME_FONCTION_Panel (FONCTION_Panel):
58         ""
59
60 class SALOME_PLUSIEURS_INTO_Panel (PLUSIEURS_INTO_Panel):
61         ""
62
63 class SALOME_PLUSIEURS_ASSD_Panel (PLUSIEURS_ASSD_Panel):
64         ""
65
66 class SALOME_UNIQUE_INTO_Panel (UNIQUE_INTO_Panel):
67         ""
68
69 class SALOME_UNIQUE_SDCO_Panel (UNIQUE_SDCO_Panel):
70         ""
71
72 class SALOME_UNIQUE_ASSD_Panel (UNIQUE_ASSD_Panel):
73         ""
74
75 class SALOME_UNIQUE_COMP_Panel (UNIQUE_COMP_Panel):
76         ""
77
78 # ------------------------------------------------------------------------------#
79 # classe SALOME_PLUSIEURS_BASE_Panel
80 #
81 # Commandes modifiées  :  
82 #       - AFFE_CHAR_MECA_DDL_IMPO_GROUP_NO
83 # Methodes surchargées :  
84 #       - makeValeurPage(self,page)
85 #
86 # ------------------------------------------------------------------------------#
87
88 class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel):
89
90
91   def convertit_group_no_from_salome(self,liste_in):
92       newr=[]
93       try:
94       #if ( 1 == 1 ) :
95           for entree in liste_in :
96                travail=[]
97                travail.append(entree)
98                entryname_list=SMESH_utils.entryToName(salome.myStudy,travail)
99                entreeName=entryname_list[0]
100                if dict_geom_numgroupe.has_key(entreeName):
101                    r=dict_geom_numgroupe[entreeName]
102                else:
103                    r=SMESH_utils.getAsterGroupNo(salome.myStudy,travail)
104                    dict_geom_numgroupe[entreeName]=r
105                for i in r :
106                    newr.append(i)
107       except:
108       #else :
109            print "pas de groupe de noeuds associé"
110            showerror("Pas de groupe associé","Cet Objet ne peut pas être défini comme un ensemble de groupe de noeuds")
111       return newr
112
113   def convertit_group_maille_from_salome(self,liste_in):
114       newr=[]
115       try:
116           print liste_in
117           for entree in liste_in :
118                travail=[]
119                travail.append(entree)
120                entryname_list=SMESH_utils.entryToName(salome.myStudy,travail)
121                entreeName=entryname_list[0]
122                if dict_geom_numgroupe.has_key(entreeName):
123                    r=dict_geom_numgroupe[entreeName]
124                else:
125                    r=SMESH_utils.getAsterGroupMa(salome.myStudy,travail)
126                    dict_geom_numgroupe[entreeName]=r
127                for i in r :
128                    newr.append(i)
129       except:
130            print "pas de groupe de maille associé"
131            showerror("Pas de groupe associé","Cet Objet ne peut pas être défini comme un ensemble de groupe de maille")
132       return newr
133
134   def convertit_entrees_en_valeurs(self,entrychaine):
135       if SALOME_PLUSIEURS_BASE_Panel.__dict__.has_key(self.clef_fonction):
136            valeur=apply(SALOME_PLUSIEURS_BASE_Panel.__dict__[self.clef_fonction],(self,entrychaine))
137       else :
138            if self.clef_fonction.find("GROUP_NO") != -1 :
139                valeur=self.convertit_group_no_from_salome(entrychaine)
140            else :
141                if self.clef_fonction.find("GROUP_MA") != -1 :
142                    valeur=self.convertit_group_maille_from_salome(entrychaine)
143                else :
144                     print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
145                     print "Pb pas de fonction de conversion de la valeur Salome en valeur Aster"
146                     print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
147                     valeur=[]
148       print "VALEUR", valeur
149       return valeur
150
151   def sup_valeur_from_salome(self,name=None):
152       """
153       Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée
154       """
155       liste_valeurs = self.Liste_valeurs.get_liste()
156       liste_valeurs_salome=self.Liste_valeurs_salome.get_liste()
157       entrychaine=salome.sg.getAllSelected()
158
159       try:
160           valeur = self.convertit_entrees_en_valeurs(entrychaine)
161           for i in valeur :
162             if i in liste_valeurs :
163                 liste_valeurs.remove(i)
164                 print "enleve" , i
165       except:
166           # la valeur sélectionnée n'est pas dans la liste
167           pass
168
169       entryname_list=SMESH_utils.entryToName(salome.myStudy,entrychaine)
170       self.entrygroupe.delete(0,END)
171       self.sortie.delete(0,END)
172       for entryname in entryname_list:
173           try:
174              liste_valeurs_salome.remove(entryname)
175           except:
176              print "la valeur ", entryname, "n est pas dans la liste"
177           entryname=entryname + " "
178           self.sortie.insert(0,entryname)
179       self.selected_valeur = None
180       self.Liste_valeurs.put_liste(liste_valeurs)
181       self.Liste_valeurs_salome.put_liste(liste_valeurs_salome)
182       self.recalcule()
183
184   def recalcule(self):
185       liste_valeurs_salome=self.Liste_valeurs_salome.get_liste()
186       groups={}
187       liste_valeurs = self.Liste_valeurs.get_liste()
188       for valeur in liste_valeurs_salome:
189           r=dict_geom_numgroupe[valeur]
190           for i in r :
191               if i not in liste_valeurs :
192                   liste_valeurs.append(i)
193       self.Liste_valeurs.put_liste(liste_valeurs)
194
195   def add_valeur_from_salome(self,name=None):
196        entrychaine=salome.sg.getAllSelected()
197        self.sortie.delete(0,END)
198        self.entrygroupe.delete(0,END)
199        if entrychaine != '':
200           entryname_list=SMESH_utils.entryToName(salome.myStudy,entrychaine)
201           touteslesvaleurs = self.convertit_entrees_en_valeurs(entrychaine)
202          
203           valeur=[]
204           liste_valeurs  = self.Liste_valeurs.get_liste()
205           for i in touteslesvaleurs:
206               if i not in liste_valeurs:
207                  valeur.append(i)
208               
209           if valeur==[]:
210              entryname_list=[]
211
212           liste_valeurs_salome = self.Liste_valeurs_salome.get_liste()
213           for entryname in entryname_list:
214               if entryname not in liste_valeurs_salome: 
215                  liste_valeurs_salome.append(entryname)
216               entryname=entryname + " "
217               self.entrygroupe.insert(0,entryname)
218           self.Liste_valeurs_salome.put_liste(liste_valeurs_salome)
219
220           if self.node.item.wait_reel():
221              print "wait_reel()"
222              valeur = self.traite_reel(valeur)
223           if self.node.item.wait_geom():
224              print "wait_geom()"
225              val,test1 = valeur,1
226           else:
227              print "else wait"
228              val,test1 = self.node.item.object.eval_valeur(valeur)
229
230           if test1 :
231              test2 = self.node.item.object.verif_type(val)
232              if test2 :
233                  liste_valeurs = self.Liste_valeurs.get_liste()
234                  if len(liste_valeurs) >= max :
235                      self.parent.appli.affiche_infos("La liste a déjà atteint le nombre maximum d'éléments, ajout refusé")
236                      self.erase_valeur()
237                      return
238                  if type(val) == type([]):
239                    for groupe in val:
240                      liste_valeurs.append(groupe)
241                  else:
242                    liste_valeurs.append(val)
243                  self.Liste_valeurs.put_liste(liste_valeurs)
244                  self.parent.appli.affiche_infos("Nouvelle valeur acceptée")
245              else:
246                  self.parent.appli.affiche_infos("Valeur incorrecte : ajout à la liste refusé")
247           else:
248              print "impossible d'évaluer %s" %val
249              self.parent.appli.affiche_infos("Valeur incorrecte : ajout à la liste refusé")
250
251    
252   def makeValeurPage(self,page):
253       """
254       Crée la page de saisie d'une liste de valeurs à priori quelconques,
255       cad qui ne sont  pas à choisir dans une liste prédéfinie
256       """
257       # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
258       # et la liste des valeurs déjà affectées à l'objet courant
259       bulle_aide=self.get_bulle_aide()
260       objet_mc = self.node.item.get_definition()
261       aide = self.get_aide()
262       aide = justify_text(texte=aide)
263       min,max = self.node.item.GetMinMax()
264       self.clef_fonction=  self.node.item.clef_fonction
265       l_valeurs = self.node.item.GetListeValeurs()
266
267       self.frame1 = Frame(page,relief='groove',bd=2)
268       self.frame2 = Frame(page)
269       self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85)
270       self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
271       self.frame_right = Frame(self.frame1)
272       self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
273
274       # création des frames internes
275       self.frame_valeurs = Frame(self.frame1)
276       self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95)
277
278       self.frame_boutons_fleches = Frame(self.frame_right)
279       self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.3)
280       self.frame_choix = Frame(self.frame_right)
281       self.frame_choix.place(relx=0.2,rely=0.1,relwidth=0.85,relheight=0.9)
282       self.frame_valeurs_salome = Frame(self.frame_right)
283       self.frame_valeurs_salome.place(relx=0.02,rely=0.7,relwidth=0.9,relheight=0.3)
284
285       self.frame_boutons = Frame(self.frame2)
286       self.frame_boutons.place(relx=0.1,rely=0.,relwidth=0.5,relheight=1.)
287       self.frame_aide = Frame(self.frame2)
288       self.frame_aide.place(relx=0.6,rely=0.,relwidth=0.5,relheight=1)
289
290       for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs,
291                  self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons):
292             fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
293             fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
294
295       # création des objets dans les frames
296       liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
297                                  ("<Button-3>",self.deselectValeur),
298                                  ("<Double-Button-1>",self.sup_valeur_sans_into))
299       self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,
300                                       liste_commandes = liste_commandes_valeurs,
301                                       titre="Valeur(s) actuelle(s)")
302
303       self.label = Label(self.frame_choix,text="Valeur :")
304       self.label.place(relx=0.05,rely=0.4)
305     # PN : pour ajouter les validators
306       self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base)
307
308       bouton_valeurs_fichier = Button(self.frame_choix,
309                                       text="Importer ...",
310                                       command=self.select_in_file)
311       bouton_valeurs_fichier.place(relx=0.28,rely=0.55,relwidth=0.6)
312
313       self.ajout_valeurs = None
314       self.b = Button(self.frame_choix,text='ajouter  selection',command=self.add_valeur_from_salome)
315
316       self.b.place(relx=0.05,rely=0.05)
317       self.entrygroupe = Entry(self.frame_choix,relief='sunken')
318       self.entrygroupe.place(relx=0.50,rely=0.05)
319
320       self.a = Button(self.frame_choix,text='enlever selection',command=self.sup_valeur_from_salome)
321       self.a.place(relx=0.05,rely=0.2)
322       self.sortie = Entry(self.frame_choix,relief='sunken')
323       self.sortie.place(relx=0.50,rely=0.2)
324
325       l_salome_valeurs=self.node.item.get_salome_valeurs()
326       self.Liste_valeurs_salome=ListeChoix(self,self.frame_valeurs_salome,l_salome_valeurs,
327                                         liste_commandes = liste_commandes_valeurs,
328                                         titre="Valeur(s) Salome actuelle(s) ")
329       self.Liste_valeurs_salome.affiche_liste()
330
331
332       # boutons Ajouter et Supprimer
333       bouton_add = Button(self.frame_boutons_fleches,
334                           image = images.get_image('arrow_left'),
335                           command = self.add_valeur_plusieurs_base)
336       bouton_sup = Button(self.frame_boutons_fleches,
337                           image = images.get_image('arrow_right'),
338                           command = self.sup_valeur_sans_into)
339       bouton_add.place(relx=0.3,rely=0.35)
340       bouton_sup.place(relx=0.3,rely=0.65)
341
342       # affichage de l'aide
343       self.frame_aide.update()
344       self.aide = Label(self.frame_aide, text = aide,
345                         justify='center', anchor='center',
346                         wraplength=int(self.frame_aide.winfo_width()*0.8))
347       self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
348       self.Liste_valeurs.affiche_liste()
349
350       # boutons Accepter et Annuler
351       bouton_accepter = Button(self.frame_boutons,
352                                text='Valider',
353                                command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
354       bouton_annuler = Button(self.frame_boutons,
355                               text = 'Annuler',
356                               command = self.annule_modifs_valeur)
357       for but in (bouton_accepter,bouton_annuler):
358           but.pack(side='left',padx=5)
359
360
361
362 # ------------------------------------------------------------------------------#
363 # classe SALOME_UNIQUE_BASE_Panel
364 #
365 # Commandes modifiées  :  
366 #       - LIRE_MAILLAGE_UNITE 
367 # Methodes surchargées :  
368 #       - makeValeurPage(self,page)
369 #
370 # ------------------------------------------------------------------------------#
371
372 class SALOME_UNIQUE_BASE_Panel(UNIQUE_BASE_Panel):
373
374 # ce dictionnaire va servir lors de la sortie d efficas
375 # a creer le fichier qui sera integre au config.txt
376 # pour relier une unite logique et un nom de fichier
377
378   dict_fichier_unite={}
379
380
381   def SALOME_DONNEES_HOMARD_TRAITEMENT_FICHIER_MED_MAILLAGE_N(self):
382       entrychaine=salome.sg.getAllSelected()
383       if entrychaine != '':
384           self.entry2.delete(0,END)
385           try:
386               SO = salome.myStudy.FindObjectID(entrychaine[0])
387           except:
388               boo = 0
389               SO = None
390
391           FileName=''
392           if SO != None:
393               myBuilder = salome.myStudy.NewBuilder()
394               boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeFileType")
395               if boo:
396                  val=FileAttr.Value()
397                  if (val !="FICHIERMED"):
398                      boo=0
399                      showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
400                  else:
401                      boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeExternalFileDef")
402               if boo :
403                 FileName=FileAttr.Value()
404               else:
405                  showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
406           if FileName != '' :
407               self.entry2.insert(0,FileName)
408               self.entry.delete(0,END)
409               self.entry.insert(0,FileName)
410               self.valid_valeur()
411
412
413   def SALOME_DONNEES_HOMARD_TRAITEMENT_NOM_MED_MAILLAGE_N(self):
414       EntryName=''
415       entrychaine=salome.sg.getAllSelected()
416       if entrychaine != '':
417           self.entry2.delete(0,END)
418           try:
419               SO = salome.myStudy.FindObjectID(entrychaine[0])
420           except:
421               boo = 0
422               SO = None
423
424           if SO is not None:
425              myBuilder = salome.myStudy.NewBuilder()
426              ok, AtName = myBuilder.FindAttribute(SO,"AttributeName")
427              if ok:
428                 EntryName=AtName.Value()
429
430       if EntryName != '':
431           self.entry2.insert(0,EntryName)
432           self.entry.delete(0,END)
433           self.entry.insert(0,EntryName)
434           self.valid_valeur()
435
436   def SALOME_DONNEES_HOMARD_TRAITEMENT_FICHIER_MED_MAILLAGE_NP1(self):
437       self.SALOME_DONNEES_HOMARD_TRAITEMENT_FICHIER_MED_MAILLAGE_N()
438
439
440   def SALOME_LIRE_MAILLAGE_UNITE(self):
441
442       unite=self.node.item.get_valeur()
443       entrychaine=salome.sg.getAllSelected()
444       if entrychaine != '':
445           self.entry2.delete(0,END)
446
447           try:
448               SO = salome.myStudy.FindObjectID(entrychaine[0])
449           except:
450               boo = 0
451               SO = None
452
453           if SO != None:
454               myBuilder = salome.myStudy.NewBuilder()
455               boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeComment")
456
457           FileName=''
458           if SO != None:
459               myBuilder = salome.myStudy.NewBuilder()
460               boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeFileType")
461               if boo:
462                  boo=0
463                  val=FileAttr.Value()
464                  if (val !="FICHIERMED"):
465                      showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
466                  else:
467                      boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeExternalFileDef")
468           if boo :
469               FileName=FileAttr.Value()
470           else:
471               showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
472
473           print "FileName = " , FileName
474           if FileName != '' :
475               self.entry2.insert(0,FileName)
476               typefic='D'
477               SALOME_UNIQUE_BASE_Panel.dict_fichier_unite[unite]=typefic+FileName
478           else :
479               print "il faut afficher une Fenetre d impossibilit\xe9"
480               showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
481
482   def redistribue_selon_simp(self):
483       genea = self.node.item.get_genealogie()
484       commande="SALOME"
485       for i in range(0,len( genea )) :
486         commande=commande+"_"+ genea[i]
487       (SALOME_UNIQUE_BASE_Panel.__dict__[commande])(self)
488
489
490   def makeValeurPage(self,page):
491       """
492       Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
493       de base cad entier, réel, string ou complexe
494       """
495       # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
496       # et de la liste des SD du bon type (constituant la liste des choix)
497       bulle_aide=self.get_bulle_aide()
498       aide=self.get_aide()
499       aide= justify_text(texte=aide)
500       liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
501       # Remplissage du panneau
502       self.frame_valeur = Frame(page)
503       self.frame_valeur.pack(fill='both',expand=1)
504       self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
505       self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
506       self.label = Label(self.frame_valeur,text='Valeur :')
507       self.label.place(relx=0.1,rely=0.5)
508       self.entry = Entry(self.frame_valeur,relief='sunken')
509       self.entry.place(relx=0.28,rely=0.5,relwidth=0.6)
510       self.entry.bind("<Return>",lambda e,c=self.valid_valeur:c())
511
512       # PN : Ajout d'un bouton pour selectionner  à partir de Salome  
513       self.b = Button(self.frame_valeur,text='Relier selection',command=self.redistribue_selon_simp)
514       self.b.place(relx=0.05,rely=0.1)
515       unite=self.node.item.get_valeur()
516       self.entry2 = Entry(self.frame_valeur,relief='sunken')
517       self.entry2.place(relx=0.3,rely=0.1)
518       self.entry2.configure(width = 250)
519
520       if SALOME_UNIQUE_BASE_Panel.dict_fichier_unite.has_key(unite):
521          associe=SALOME_UNIQUE_BASE_Panel.dict_fichier_unite[unite][1:]
522          self.entry2.delete(0,END)
523          if associe != "" :
524              self.entry2.insert(0,associe)
525       else:
526          self.entry2.delete(0,END)
527
528       # aide associée au panneau
529       self.frame_valeur.update()
530       self.aide = Label(self.frame_valeur,
531                         text = aide,
532                         wraplength=int(self.frame_valeur.winfo_width()*0.8),
533                         justify='center')
534       self.aide.place(relx=0.5,rely=0.7,anchor='n')
535       # affichage de la valeur du MCS
536       self.display_valeur()
537
538 #---------------------------------------------------------------------------------------
539 # Correspondances entre les classes eficas et les classes salome_eficas 
540 #______________________________________________________________________________________
541 dict_classes_salome = { SHELLPanel : SALOME_SHELLPanel, 
542                           FONCTION_Panel       : SALOME_FONCTION_Panel,
543                           PLUSIEURS_INTO_Panel : SALOME_PLUSIEURS_INTO_Panel,
544                           PLUSIEURS_ASSD_Panel : SALOME_PLUSIEURS_ASSD_Panel,
545                           PLUSIEURS_BASE_Panel : SALOME_PLUSIEURS_BASE_Panel,
546                           UNIQUE_INTO_Panel :  SALOME_UNIQUE_INTO_Panel,
547                           UNIQUE_SDCO_Panel : SALOME_UNIQUE_SDCO_Panel,
548                           UNIQUE_ASSD_Panel : SALOME_UNIQUE_ASSD_Panel,
549                           UNIQUE_COMP_Panel : SALOME_UNIQUE_COMP_Panel,
550                           UNIQUE_BASE_Panel : SALOME_UNIQUE_BASE_Panel}
551
552 dict_geom_numgroupe = { }
553 dict_geom_numface = { }