]> SALOME platform Git repositories - tools/eficas.git/blob - Editeur/panelsSalome.py
Salome HOME
CCAR: creation V1_13a1 a partir de la branche Liv-V1_12
[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 plusieursbasepanel import PLUSIEURS_BASE_OR_UNELISTE_Panel
14 from uniquesdcopanel    import UNIQUE_SDCO_Panel
15 from uniqueassdpanel    import UNIQUE_ASSD_Panel
16 from uniqueintopanel    import UNIQUE_INTO_Panel
17 from uniquecomppanel    import UNIQUE_COMP_Panel
18 from uniquebasepanel    import UNIQUE_BASE_Panel
19 from uniqueassdpanel    import UNIQUE_ASSD_Panel_Reel
20
21 from Noyau.N_CR import justify_text
22
23 import traceback
24 import salome           # CS_pbruno à poubelliser
25 import images
26
27
28
29 # 2 types de commandes vont etre particularisees dans Salome
30 #
31 # - un cas general : 
32 # Toutes les commandes possedant GROUP_NO ou GROUP_MA
33 # seront surchargees d office
34 # pour cela on va utiliser le dictionnaire dict_classes_salome
35 # qui va permettre de changer la classe de la commande
36 # ainsi si un panel en dehors de salome a pour classe PLUSIEURS_BASE_Panel
37 # la classe de ce panel devient alors SALOME_PLUSIEURS_BASE_Panel
38 # (pour cela voir composimp)
39
40 # des commandes "autres" ne pouvant pas etre identifiées par leur nom 
41 # il suffit de creer dans la classe SALOME de la commande
42 # une fonction portant son nom 
43 # Exemple de particularisation d un panel :
44 # Supposons que l on veuille particulariser la commande
45 #        - LIRE_MAILLAGE_UNITE 
46 # le panel initial a pour classe UNIQUE_BASE_Panel
47 # il suffit d'ajouter dans la classe derivée SALOME_UNIQUE_BASE_Panel
48 # une fonction  SALOME_LIRE_MAILLAGE_UNITE
49 # la classe de ce panel devient alors SALOME_UNIQUE_BASE_Panel
50 # on peut surcharger les methodes nécessaires (affichage par exemple)  
51
52
53 class SALOME_SHELLPanel (SHELLPanel):
54         ""
55
56 class SALOME_FONCTION_Panel (FONCTION_Panel):
57         ""
58
59 class SALOME_PLUSIEURS_INTO_Panel (PLUSIEURS_INTO_Panel):
60         ""
61
62 class SALOME_PLUSIEURS_ASSD_Panel (PLUSIEURS_ASSD_Panel):
63         ""
64
65 class SALOME_UNIQUE_INTO_Panel (UNIQUE_INTO_Panel):
66         ""
67
68 class SALOME_UNIQUE_SDCO_Panel (UNIQUE_SDCO_Panel):
69         ""
70
71 class SALOME_UNIQUE_ASSD_Panel (UNIQUE_ASSD_Panel):
72         ""
73
74 class SALOME_UNIQUE_COMP_Panel (UNIQUE_COMP_Panel):
75         ""
76
77 class SALOME_UNIQUE_ASSD_Panel_Reel (UNIQUE_ASSD_Panel_Reel):
78         ""
79
80 # ------------------------------------------------------------------------------#
81 # classe SALOME_PLUSIEURS_BASE_Panel
82 #
83 # Commandes modifiées  :  
84 #        - AFFE_CHAR_MECA_DDL_IMPO_GROUP_NO
85 # Methodes surchargées :  
86 #        - makeValeurPage(self,page)
87 #
88 # ------------------------------------------------------------------------------#
89
90 class SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel(PLUSIEURS_BASE_OR_UNELISTE_Panel):
91       ""        
92
93 class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel):
94
95   def __init__(self,parent,panneau,node):
96       PLUSIEURS_BASE_Panel.__init__( self, parent, panneau, node )
97       #self.selected_valeur = None
98       
99   def add_valeur_plusieurs_base(self,name=None):
100       try: 
101         valeur,validite,commentaire=self.get_valeur()
102         if not valeur: # sélection dans salome        
103             strSelection = ''
104             
105             genea=self.node.item.get_genealogie()
106             kwType = None
107             for e in genea:
108                 if "GROUP_NO" in e:
109                     kwType = "GROUP_NO"
110                 if "GROUP_MA" in e:
111                     kwType = "GROUP_MA"            
112                 
113             selection, msg = self.parent.appli.selectGroupFromSalome(kwType)
114             if selection:
115                 for oneSelection in selection:
116                     strSelection +=str( oneSelection )
117                     strSelection +=','
118                             
119                 strSelection = strSelection.rstrip(',')
120                 self.display_valeur( strSelection )                
121                     
122         PLUSIEURS_BASE_Panel.add_valeur_plusieurs_base( self, name )
123         if msg:
124             self.parent.appli.affiche_infos(msg)
125         self.erase_valeur()
126       except:
127         print ' erreur  add_valeur_plusieurs_base' #CS_pbruno : afficher boite de dialogue ici ?          
128         
129   def makeValeurPage(self,page):
130       """
131       Crée la page de saisie d'une liste de valeurs à priori quelconques,
132       cad qui ne sont  pas à choisir dans une liste prédéfinie
133       """      
134       PLUSIEURS_BASE_Panel.makeValeurPage(self,page)
135       self.c = Button( self.frame_choix, text='Visualiser',command=self.displayInSalomeGeom )      
136       self.c.place( relx=0.3, rely=0.0,relwidth=0.55)
137       
138       
139   def displayInSalomeGeom( self ):
140       if self.selected_valeur:        
141         ok, msgError = self.parent.appli.displayShape( self.selected_valeur )
142         if not ok:
143             self.parent.appli.affiche_infos(msgError)
144       
145       
146
147
148 # ------------------------------------------------------------------------------#
149 # classe SALOME_UNIQUE_BASE_Panel
150 #
151 # Commandes modifiées  :  
152 #        - LIRE_MAILLAGE_UNITE 
153 # Methodes surchargées :  
154 #        - makeValeurPage(self,page)
155 #
156 # ------------------------------------------------------------------------------#
157
158 class SALOME_UNIQUE_BASE_Panel(UNIQUE_BASE_Panel):
159
160 # ce dictionnaire va servir lors de la sortie d efficas
161 # a creer le fichier qui sera integre au config.txt
162 # pour relier une unite logique et un nom de fichier
163
164   dict_fichier_unite={}
165
166
167   def SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_N(self):
168       entrychaine=salome.sg.getAllSelected()
169       if entrychaine != '':
170           self.entry2.delete(0,END)
171           try:
172               SO = salome.myStudy.FindObjectID(entrychaine[0])
173           except:
174               boo = 0
175               SO = None
176
177           FileName=''
178           if SO != None:
179               myBuilder = salome.myStudy.NewBuilder()
180               boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeFileType")
181               if boo:
182                  val=FileAttr.Value()
183                  if (val !="FICHIERMED" and val != "FICHIER_RESU_MED"):
184                      boo=0
185                      showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
186                  else:
187                      boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeExternalFileDef")
188               if boo :
189                 FileName=FileAttr.Value()
190               else:
191                  showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
192           if FileName != '' :
193               self.entry.delete(0,END)
194               self.entry2.delete(0,END)
195               self.entry.insert(0,FileName)
196               self.entry2.insert(0,FileName)
197               self.valid_valeur()
198
199
200   def SALOME_DONNEES_HOMARD_TRAITEMENT_NOM_MED_MAILLAGE_N(self):
201       EntryName=''
202       entrychaine=salome.sg.getAllSelected()
203       if entrychaine != '':
204           self.entry2.delete(0,END)
205           try:
206               SO = salome.myStudy.FindObjectID(entrychaine[0])
207           except:
208               boo = 0
209               SO = None
210
211           if SO is not None:
212              myBuilder = salome.myStudy.NewBuilder()
213              ok, AtName = myBuilder.FindAttribute(SO,"AttributeName")
214              if ok:
215                 EntryName=AtName.Value()
216
217       if EntryName != '':
218           self.entry.delete(0,END)
219           self.entry2.delete(0,END)
220           self.entry.insert(0,EntryName)
221           self.entry2.insert(0,EntryName)
222           self.valid_valeur()
223
224   def SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_NP1(self):
225       self.SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_N()
226
227   def SALOME_DEFI_GROUP_CREA_GROUP_MA_GROUP_MA(self):
228       #try: 
229       if ( 1 == 1 ) :
230         selection, msg = self.parent.appli.selectGroupFromSalome()
231         if selection:
232            strSelection =str( selection )
233            UNIQUE_BASE_Panel.valid_valeur(self,strSelection)
234         if msg:
235             self.parent.appli.affiche_infos(msg)
236         self.erase_valeur()
237       #except:
238       else :
239         print ' erreur  '
240         
241
242   def redistribue_selon_simp(self):
243       genea = self.node.item.get_genealogie()
244       commande="SALOME"
245       for i in range(0,len( genea )) :
246         commande=commande+"_"+ genea[i]
247       # --------------------------------------------------------------
248       # on verifie que la methode n est pas particularise
249       # sinon on appelle SALOME_DEFI_GROUP_CREA_GROUP_MA_GROUP_MA qui
250       # sert comme methode par defaut 
251       # --------------------------------------------------------------
252       try :
253         SALOME_UNIQUE_BASE_Panel.__dict__[commande](self)
254       except :
255          SALOME_UNIQUE_BASE_Panel.SALOME_DEFI_GROUP_CREA_GROUP_MA_GROUP_MA(self)
256
257
258
259   def makeValeurPage(self,page):
260       """
261       Crée la page de saisie d'une valeur à priori quelconque,
262       cad qui ne sont  pas à choisir dans une liste prédéfinie
263       Ajout d'un bouton pour selectionner  à partir de Salome  
264       """      
265       UNIQUE_BASE_Panel.makeValeurPage(self,page)
266       self.b = Button(self.frame_valeur,text='Relier selection',command=self.redistribue_selon_simp)
267       self.b.place(relx=0.28,rely=0.4,relwidth=0.4)
268
269 #---------------------------------------------------------------------------------------
270 # Correspondances entre les classes eficas et les classes salome_eficas 
271 #______________________________________________________________________________________
272 dict_classes_salome = { SHELLPanel : SALOME_SHELLPanel, 
273                           FONCTION_Panel       : SALOME_FONCTION_Panel,
274                           PLUSIEURS_INTO_Panel : SALOME_PLUSIEURS_INTO_Panel,
275                           PLUSIEURS_ASSD_Panel : SALOME_PLUSIEURS_ASSD_Panel,
276                           PLUSIEURS_BASE_Panel : SALOME_PLUSIEURS_BASE_Panel,
277                           PLUSIEURS_BASE_OR_UNELISTE_Panel : SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel,
278                           UNIQUE_INTO_Panel :  SALOME_UNIQUE_INTO_Panel,
279                           UNIQUE_SDCO_Panel : SALOME_UNIQUE_SDCO_Panel,
280                           UNIQUE_ASSD_Panel : SALOME_UNIQUE_ASSD_Panel,
281                           UNIQUE_ASSD_Panel_Reel : SALOME_UNIQUE_ASSD_Panel_Reel,
282                           UNIQUE_COMP_Panel : SALOME_UNIQUE_COMP_Panel,
283                           UNIQUE_BASE_Panel : SALOME_UNIQUE_BASE_Panel}
284
285 dict_geom_numgroupe = { }
286 dict_geom_numface = { }