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