Salome HOME
PN : pour Salome
[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) and (self.clef_fonction.find("GROUP_MA") != -1) :
139               if (self.clef_fonction.find("GROUP_NO") < self.clef_fonction.find("GROUP_MA")) :
140                 valeur=self.convertit_group_maille_from_salome(entrychaine)
141               else :
142                 valeur=self.convertit_group_no_from_salome(entrychaine)  
143            elif self.clef_fonction.find("GROUP_NO") != -1 :
144                valeur=self.convertit_group_no_from_salome(entrychaine)
145            else :
146                if self.clef_fonction.find("GROUP_MA") != -1 :
147                    valeur=self.convertit_group_maille_from_salome(entrychaine)
148                else :
149                     print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
150                     print "Pb pas de fonction de conversion de la valeur Salome en valeur Aster"
151                     print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
152                     valeur=[]
153       print "VALEUR", valeur
154       return valeur
155
156   def sup_valeur_from_salome(self,name=None):
157       """
158       Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée
159       """
160       liste_valeurs = self.Liste_valeurs.get_liste()
161       liste_valeurs_salome=self.Liste_valeurs_salome.get_liste()
162       entrychaine=salome.sg.getAllSelected()
163
164       try:
165           valeur = self.convertit_entrees_en_valeurs(entrychaine)
166           for i in valeur :
167             if i in liste_valeurs :
168                 liste_valeurs.remove(i)
169                 print "enleve" , i
170       except:
171           # la valeur sélectionnée n'est pas dans la liste
172           pass
173
174       entryname_list=SMESH_utils.entryToName(salome.myStudy,entrychaine)
175       self.entrygroupe.delete(0,END)
176       self.sortie.delete(0,END)
177       for entryname in entryname_list:
178           try:
179              liste_valeurs_salome.remove(entryname)
180           except:
181              print "la valeur ", entryname, "n est pas dans la liste"
182           entryname=entryname + " "
183           self.sortie.insert(0,entryname)
184       self.selected_valeur = None
185       self.Liste_valeurs.put_liste(liste_valeurs)
186       self.Liste_valeurs_salome.put_liste(liste_valeurs_salome)
187       self.recalcule()
188
189   def recalcule(self):
190       liste_valeurs_salome=self.Liste_valeurs_salome.get_liste()
191       groups={}
192       liste_valeurs = self.Liste_valeurs.get_liste()
193       for valeur in liste_valeurs_salome:
194           r=dict_geom_numgroupe[valeur]
195           for i in r :
196               if i not in liste_valeurs :
197                   liste_valeurs.append(i)
198       self.Liste_valeurs.put_liste(liste_valeurs)
199
200   def add_valeur_from_salome(self,name=None):
201        entrychaine=salome.sg.getAllSelected()
202        self.sortie.delete(0,END)
203        self.entrygroupe.delete(0,END)
204        if entrychaine != '':
205           entryname_list=SMESH_utils.entryToName(salome.myStudy,entrychaine)
206           touteslesvaleurs = self.convertit_entrees_en_valeurs(entrychaine)
207          
208           valeur=[]
209           liste_valeurs  = self.Liste_valeurs.get_liste()
210           for i in touteslesvaleurs:
211               if i not in liste_valeurs:
212                  valeur.append(i)
213               
214           if valeur==[]:
215              entryname_list=[]
216
217           liste_valeurs_salome = self.Liste_valeurs_salome.get_liste()
218           for entryname in entryname_list:
219               if entryname not in liste_valeurs_salome: 
220                  liste_valeurs_salome.append(entryname)
221               entryname=entryname + " "
222               self.entrygroupe.insert(0,entryname)
223           self.Liste_valeurs_salome.put_liste(liste_valeurs_salome)
224
225           if self.node.item.wait_reel():
226              print "wait_reel()"
227              valeur = self.traite_reel(valeur)
228           if self.node.item.wait_geom():
229              print "wait_geom()"
230              val,test1 = valeur,1
231           else:
232              print "else wait"
233              val,test1 = self.node.item.object.eval_valeur(valeur)
234
235           if test1 :
236              test2 = self.node.item.object.verif_type(val)
237              if test2 :
238                  liste_valeurs = self.Liste_valeurs.get_liste()
239                  if len(liste_valeurs) >= max :
240                      self.parent.appli.affiche_infos("La liste a déjà atteint le nombre maximum d'éléments, ajout refusé")
241                      self.erase_valeur()
242                      return
243                  if type(val) == type([]):
244                    for groupe in val:
245                      liste_valeurs.append(groupe)
246                  else:
247                    liste_valeurs.append(val)
248                  self.Liste_valeurs.put_liste(liste_valeurs)
249                  self.parent.appli.affiche_infos("Nouvelle valeur acceptée")
250              else:
251                  self.parent.appli.affiche_infos("Valeur incorrecte : ajout à la liste refusé")
252           else:
253              print "impossible d'évaluer %s" %val
254              self.parent.appli.affiche_infos("Valeur incorrecte : ajout à la liste refusé")
255
256    
257   def makeValeurPage(self,page):
258       """
259       Crée la page de saisie d'une liste de valeurs à priori quelconques,
260       cad qui ne sont  pas à choisir dans une liste prédéfinie
261       """
262       # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste),
263       # et la liste des valeurs déjà affectées à l'objet courant
264       bulle_aide=self.get_bulle_aide()
265       objet_mc = self.node.item.get_definition()
266       aide = self.get_aide()
267       aide = justify_text(texte=aide)
268       min,max = self.node.item.GetMinMax()
269       self.clef_fonction=  self.node.item.clef_fonction
270       l_valeurs = self.node.item.GetListeValeurs()
271
272       self.frame1 = Frame(page,relief='groove',bd=2)
273       self.frame2 = Frame(page)
274       self.frame1.place(relx=0.,rely=0.,relwidth=1.,relheight=0.85)
275       self.frame2.place(relx=0.,rely=0.85,relwidth=1,relheight=0.15)
276       self.frame_right = Frame(self.frame1)
277       self.frame_right.place(relx=0.35,rely=0.,relwidth=0.65,relheight=1.)
278
279       # création des frames internes
280       self.frame_valeurs = Frame(self.frame1)
281       self.frame_valeurs.place(relx=0.02,rely=0.05,relwidth=0.35,relheight=0.95)
282
283       self.frame_boutons_fleches = Frame(self.frame_right)
284       self.frame_boutons_fleches.place(relx=0.,rely=0.2,relwidth=0.2,relheight=0.3)
285       self.frame_choix = Frame(self.frame_right)
286       self.frame_choix.place(relx=0.2,rely=0.1,relwidth=0.85,relheight=0.9)
287       self.frame_valeurs_salome = Frame(self.frame_right)
288       self.frame_valeurs_salome.place(relx=0.02,rely=0.7,relwidth=0.9,relheight=0.3)
289
290       self.frame_boutons = Frame(self.frame2)
291       self.frame_boutons.place(relx=0.1,rely=0.,relwidth=0.5,relheight=1.)
292       self.frame_aide = Frame(self.frame2)
293       self.frame_aide.place(relx=0.6,rely=0.,relwidth=0.5,relheight=1)
294
295       for fram in (self.frame1,self.frame2,self.frame_right,self.frame_valeurs,
296                  self.frame_boutons_fleches,self.frame_choix,self.frame_aide,self.frame_boutons):
297             fram.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
298             fram.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
299
300       # création des objets dans les frames
301       liste_commandes_valeurs = (("<Button-1>",self.selectValeur),
302                                  ("<Button-3>",self.deselectValeur),
303                                  ("<Double-Button-1>",self.sup_valeur_sans_into))
304       self.Liste_valeurs = ListeChoix(self,self.frame_valeurs,l_valeurs,
305                                       liste_commandes = liste_commandes_valeurs,
306                                       titre="Valeur(s) actuelle(s)")
307
308       self.label = Label(self.frame_choix,text="Valeur :")
309       self.label.place(relx=0.05,rely=0.4)
310     # PN : pour ajouter les validators
311       self.make_entry(frame = self.frame_choix,command = self.add_valeur_plusieurs_base)
312
313       bouton_valeurs_fichier = Button(self.frame_choix,
314                                       text="Importer ...",
315                                       command=self.select_in_file)
316       bouton_valeurs_fichier.place(relx=0.28,rely=0.55,relwidth=0.6)
317
318       self.ajout_valeurs = None
319       self.b = Button(self.frame_choix,text='ajouter  selection',command=self.add_valeur_from_salome)
320
321       self.b.place(relx=0.05,rely=0.05)
322       self.entrygroupe = Entry(self.frame_choix,relief='sunken')
323       self.entrygroupe.place(relx=0.50,rely=0.05)
324
325       self.a = Button(self.frame_choix,text='enlever selection',command=self.sup_valeur_from_salome)
326       self.a.place(relx=0.05,rely=0.2)
327       self.sortie = Entry(self.frame_choix,relief='sunken')
328       self.sortie.place(relx=0.50,rely=0.2)
329
330       l_salome_valeurs=self.node.item.get_salome_valeurs()
331       self.Liste_valeurs_salome=ListeChoix(self,self.frame_valeurs_salome,l_salome_valeurs,
332                                         liste_commandes = liste_commandes_valeurs,
333                                         titre="Valeur(s) Salome actuelle(s) ")
334       self.Liste_valeurs_salome.affiche_liste()
335
336
337       # boutons Ajouter et Supprimer
338       bouton_add = Button(self.frame_boutons_fleches,
339                           image = images.get_image('arrow_left'),
340                           command = self.add_valeur_plusieurs_base)
341       bouton_sup = Button(self.frame_boutons_fleches,
342                           image = images.get_image('arrow_right'),
343                           command = self.sup_valeur_sans_into)
344       bouton_add.place(relx=0.3,rely=0.35)
345       bouton_sup.place(relx=0.3,rely=0.65)
346
347       # affichage de l'aide
348       self.frame_aide.update()
349       self.aide = Label(self.frame_aide, text = aide,
350                         justify='center', anchor='center',
351                         wraplength=int(self.frame_aide.winfo_width()*0.8))
352       self.aide.place(relx=0.5,rely=0.5,anchor='center',relwidth=1)
353       self.Liste_valeurs.affiche_liste()
354
355       # boutons Accepter et Annuler
356       bouton_accepter = Button(self.frame_boutons,
357                                text='Valider',
358                                command = lambda s=self,m=min,M=max : s.accepte_modifs_valeur(m,M))
359       bouton_annuler = Button(self.frame_boutons,
360                               text = 'Annuler',
361                               command = self.annule_modifs_valeur)
362       for but in (bouton_accepter,bouton_annuler):
363           but.pack(side='left',padx=5)
364
365
366
367 # ------------------------------------------------------------------------------#
368 # classe SALOME_UNIQUE_BASE_Panel
369 #
370 # Commandes modifiées  :  
371 #       - LIRE_MAILLAGE_UNITE 
372 # Methodes surchargées :  
373 #       - makeValeurPage(self,page)
374 #
375 # ------------------------------------------------------------------------------#
376
377 class SALOME_UNIQUE_BASE_Panel(UNIQUE_BASE_Panel):
378
379 # ce dictionnaire va servir lors de la sortie d efficas
380 # a creer le fichier qui sera integre au config.txt
381 # pour relier une unite logique et un nom de fichier
382
383   dict_fichier_unite={}
384
385
386   def SALOME_DONNEES_HOMARD_TRAITEMENT_FICHIER_MED_MAILLAGE_N(self):
387       entrychaine=salome.sg.getAllSelected()
388       if entrychaine != '':
389           self.entry2.delete(0,END)
390           try:
391               SO = salome.myStudy.FindObjectID(entrychaine[0])
392           except:
393               boo = 0
394               SO = None
395
396           FileName=''
397           if SO != None:
398               myBuilder = salome.myStudy.NewBuilder()
399               boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeFileType")
400               if boo:
401                  val=FileAttr.Value()
402                  if (val !="FICHIERMED"):
403                      boo=0
404                      showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
405                  else:
406                      boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeExternalFileDef")
407               if boo :
408                 FileName=FileAttr.Value()
409               else:
410                  showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
411           if FileName != '' :
412               self.entry2.insert(0,FileName)
413               self.entry.delete(0,END)
414               self.entry.insert(0,FileName)
415               self.valid_valeur()
416
417
418   def SALOME_DONNEES_HOMARD_TRAITEMENT_NOM_MED_MAILLAGE_N(self):
419       EntryName=''
420       entrychaine=salome.sg.getAllSelected()
421       if entrychaine != '':
422           self.entry2.delete(0,END)
423           try:
424               SO = salome.myStudy.FindObjectID(entrychaine[0])
425           except:
426               boo = 0
427               SO = None
428
429           if SO is not None:
430              myBuilder = salome.myStudy.NewBuilder()
431              ok, AtName = myBuilder.FindAttribute(SO,"AttributeName")
432              if ok:
433                 EntryName=AtName.Value()
434
435       if EntryName != '':
436           self.entry2.insert(0,EntryName)
437           self.entry.delete(0,END)
438           self.entry.insert(0,EntryName)
439           self.valid_valeur()
440
441   def SALOME_DONNEES_HOMARD_TRAITEMENT_FICHIER_MED_MAILLAGE_NP1(self):
442       self.SALOME_DONNEES_HOMARD_TRAITEMENT_FICHIER_MED_MAILLAGE_N()
443
444
445   def SALOME_LIRE_MAILLAGE_UNITE(self):
446
447       unite=self.node.item.get_valeur()
448       entrychaine=salome.sg.getAllSelected()
449       if entrychaine != '':
450           self.entry2.delete(0,END)
451
452           try:
453               SO = salome.myStudy.FindObjectID(entrychaine[0])
454           except:
455               boo = 0
456               SO = None
457
458           if SO != None:
459               myBuilder = salome.myStudy.NewBuilder()
460               boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeComment")
461
462           FileName=''
463           if SO != None:
464               myBuilder = salome.myStudy.NewBuilder()
465               boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeFileType")
466               if boo:
467                  boo=0
468                  val=FileAttr.Value()
469                  if (val !="FICHIERMED"):
470                      showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
471                  else:
472                      boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeExternalFileDef")
473           if boo :
474               FileName=FileAttr.Value()
475           else:
476               showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
477
478           print "FileName = " , FileName
479           if FileName != '' :
480               self.entry2.insert(0,FileName)
481               typefic='D'
482               SALOME_UNIQUE_BASE_Panel.dict_fichier_unite[unite]=typefic+FileName
483           else :
484               print "il faut afficher une Fenetre d impossibilit\xe9"
485               showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
486
487   def redistribue_selon_simp(self):
488       genea = self.node.item.get_genealogie()
489       commande="SALOME"
490       for i in range(0,len( genea )) :
491         commande=commande+"_"+ genea[i]
492       (SALOME_UNIQUE_BASE_Panel.__dict__[commande])(self)
493
494
495   def makeValeurPage(self,page):
496       """
497       Génère la page de saisie de la valeur du mot-clé simple courant qui doit être de type
498       de base cad entier, réel, string ou complexe
499       """
500       # Récupération de l'aide associée au panneau, de l'aide destinée à l'utilisateur,
501       # et de la liste des SD du bon type (constituant la liste des choix)
502       bulle_aide=self.get_bulle_aide()
503       aide=self.get_aide()
504       aide= justify_text(texte=aide)
505       liste_noms_sd = self.node.item.get_sd_avant_du_bon_type()
506       # Remplissage du panneau
507       self.frame_valeur = Frame(page)
508       self.frame_valeur.pack(fill='both',expand=1)
509       self.frame_valeur.bind("<Button-3>",lambda e,s=self,a=bulle_aide : s.parent.appli.affiche_aide(e,a))
510       self.frame_valeur.bind("<ButtonRelease-3>",self.parent.appli.efface_aide)
511       self.label = Label(self.frame_valeur,text='Valeur :')
512       self.label.place(relx=0.1,rely=0.5)
513       self.entry = Entry(self.frame_valeur,relief='sunken')
514       self.entry.place(relx=0.28,rely=0.5,relwidth=0.6)
515       self.entry.bind("<Return>",lambda e,c=self.valid_valeur:c())
516
517       # PN : Ajout d'un bouton pour selectionner  à partir de Salome  
518       self.b = Button(self.frame_valeur,text='Relier selection',command=self.redistribue_selon_simp)
519       self.b.place(relx=0.05,rely=0.1)
520       unite=self.node.item.get_valeur()
521       self.entry2 = Entry(self.frame_valeur,relief='sunken')
522       self.entry2.place(relx=0.3,rely=0.1)
523       self.entry2.configure(width = 250)
524
525       if SALOME_UNIQUE_BASE_Panel.dict_fichier_unite.has_key(unite):
526          associe=SALOME_UNIQUE_BASE_Panel.dict_fichier_unite[unite][1:]
527          self.entry2.delete(0,END)
528          if associe != "" :
529              self.entry2.insert(0,associe)
530       else:
531          self.entry2.delete(0,END)
532
533       # aide associée au panneau
534       self.frame_valeur.update()
535       self.aide = Label(self.frame_valeur,
536                         text = aide,
537                         wraplength=int(self.frame_valeur.winfo_width()*0.8),
538                         justify='center')
539       self.aide.place(relx=0.5,rely=0.7,anchor='n')
540       # affichage de la valeur du MCS
541       self.display_valeur()
542
543 #---------------------------------------------------------------------------------------
544 # Correspondances entre les classes eficas et les classes salome_eficas 
545 #______________________________________________________________________________________
546 dict_classes_salome = { SHELLPanel : SALOME_SHELLPanel, 
547                           FONCTION_Panel       : SALOME_FONCTION_Panel,
548                           PLUSIEURS_INTO_Panel : SALOME_PLUSIEURS_INTO_Panel,
549                           PLUSIEURS_ASSD_Panel : SALOME_PLUSIEURS_ASSD_Panel,
550                           PLUSIEURS_BASE_Panel : SALOME_PLUSIEURS_BASE_Panel,
551                           UNIQUE_INTO_Panel :  SALOME_UNIQUE_INTO_Panel,
552                           UNIQUE_SDCO_Panel : SALOME_UNIQUE_SDCO_Panel,
553                           UNIQUE_ASSD_Panel : SALOME_UNIQUE_ASSD_Panel,
554                           UNIQUE_COMP_Panel : SALOME_UNIQUE_COMP_Panel,
555                           UNIQUE_BASE_Panel : SALOME_UNIQUE_BASE_Panel}
556
557 dict_geom_numgroupe = { }
558 dict_geom_numface = { }