]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceTK/panelsSalome.py
Salome HOME
CCAR: merge de la version 1.14 dans la branche principale
[tools/eficas.git] / InterfaceTK / panelsSalome.py
1 # -*- coding: utf-8 -*-
2
3 from Tkinter import *
4 from widgets import ListeChoix
5 from widgets import showerror
6
7 from fonctionpanel      import FONCTION_Panel
8 from shellpanel         import SHELLPanel
9 from plusieursintopanel import PLUSIEURS_INTO_Panel
10 from plusieursassdpanel import PLUSIEURS_ASSD_Panel
11 from plusieursbasepanel import PLUSIEURS_BASE_Panel
12 from plusieursbasepanel import PLUSIEURS_BASE_OR_UNELISTE_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 images
24
25
26
27 # 2 types de commandes vont etre particularisees dans Salome
28 #
29 # - un cas general : 
30 # Toutes les commandes possedant GROUP_NO ou GROUP_MA
31 # seront surchargees d office
32 # pour cela on va utiliser le dictionnaire dict_classes_salome
33 # qui va permettre de changer la classe de la commande
34 # ainsi si un panel en dehors de salome a pour classe PLUSIEURS_BASE_Panel
35 # la classe de ce panel devient alors SALOME_PLUSIEURS_BASE_Panel
36 # (pour cela voir composimp)
37
38 # des commandes "autres" ne pouvant pas etre identifiées par leur nom 
39 # il suffit de creer dans la classe SALOME de la commande
40 # une fonction portant son nom 
41 # Exemple de particularisation d un panel :
42 # Supposons que l on veuille particulariser la commande
43 #        - LIRE_MAILLAGE_UNITE 
44 # le panel initial a pour classe UNIQUE_BASE_Panel
45 # il suffit d'ajouter dans la classe derivée SALOME_UNIQUE_BASE_Panel
46 # une fonction  SALOME_LIRE_MAILLAGE_UNITE
47 # la classe de ce panel devient alors SALOME_UNIQUE_BASE_Panel
48 # on peut surcharger les methodes nécessaires (affichage par exemple)  
49
50
51 class SALOME_SHELLPanel (SHELLPanel):
52         ""
53
54 class SALOME_FONCTION_Panel (FONCTION_Panel):
55         ""
56
57 class SALOME_PLUSIEURS_INTO_Panel (PLUSIEURS_INTO_Panel):
58         ""
59
60 class SALOME_PLUSIEURS_ASSD_Panel (PLUSIEURS_ASSD_Panel):
61         ""
62
63 class SALOME_UNIQUE_INTO_Panel (UNIQUE_INTO_Panel):
64         ""
65
66 class SALOME_UNIQUE_SDCO_Panel (UNIQUE_SDCO_Panel):
67         ""
68
69 class SALOME_UNIQUE_ASSD_Panel (UNIQUE_ASSD_Panel):
70         ""
71
72 class SALOME_UNIQUE_COMP_Panel (UNIQUE_COMP_Panel):
73         ""
74
75 class SALOME_UNIQUE_ASSD_Panel_Reel (UNIQUE_ASSD_Panel_Reel):
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_OR_UNELISTE_Panel(PLUSIEURS_BASE_OR_UNELISTE_Panel):
89       ""        
90
91 class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel):
92
93   def __init__(self,parent,panneau,node):
94       PLUSIEURS_BASE_Panel.__init__( self, parent, panneau, node )
95       #self.selected_valeur = None
96       
97   def add_valeur_plusieurs_base(self,name=None):
98       try: 
99         valeur,validite,commentaire=self.get_valeur()
100         if not valeur: # sélection dans salome        
101             strSelection = ''
102             
103             genea=self.node.item.get_genealogie()
104             kwType = None
105             for e in genea:
106                 if "GROUP_NO" in e:
107                     kwType = "GROUP_NO"
108                 if "GROUP_MA" in e:
109                     kwType = "GROUP_MA"            
110                 
111             selection, msg = self.parent.appli.selectGroupFromSalome(kwType)
112             if selection:
113                 for oneSelection in selection:
114                     strSelection +=str( oneSelection )
115                     strSelection +=','
116                             
117                 strSelection = strSelection.rstrip(',')
118                 self.display_valeur( strSelection )                
119                     
120         PLUSIEURS_BASE_Panel.add_valeur_plusieurs_base( self, name )
121         if msg:
122             self.parent.appli.affiche_infos(msg)
123         self.erase_valeur()
124       except:
125         print ' erreur  add_valeur_plusieurs_base' #CS_pbruno : afficher boite de dialogue ici ?          
126         
127   def makeValeurPage(self,page):
128       """
129       Crée la page de saisie d'une liste de valeurs à priori quelconques,
130       cad qui ne sont  pas à choisir dans une liste prédéfinie
131       """      
132       PLUSIEURS_BASE_Panel.makeValeurPage(self,page)
133       self.c = Button( self.frame_choix, text='Visualiser',command=self.displayInSalomeGeom )      
134       self.c.place( relx=0.3, rely=0.0,relwidth=0.55)
135       
136       
137   def displayInSalomeGeom( self ):
138       if self.selected_valeur:        
139         ok, msgError = self.parent.appli.displayShape( self.selected_valeur )
140         if not ok:
141             self.parent.appli.affiche_infos(msgError)
142       
143       
144
145
146 # ------------------------------------------------------------------------------#
147 # classe SALOME_UNIQUE_BASE_Panel
148 #
149 # Commandes modifiées  :  
150 #        - LIRE_MAILLAGE_UNITE 
151 # Methodes surchargées :  
152 #        - makeValeurPage(self,page)
153 #
154 # ------------------------------------------------------------------------------#
155
156 class SALOME_UNIQUE_BASE_Panel(UNIQUE_BASE_Panel):
157
158 # ce dictionnaire va servir lors de la sortie d efficas
159 # a creer le fichier qui sera integre au config.txt
160 # pour relier une unite logique et un nom de fichier
161
162   dict_fichier_unite={}
163
164
165   def SALOME_DONNEES_HOMARD_FICHIER_MED_MAILLAGE_N(self):
166       import salome 
167       entrychaine=salome.sg.getAllSelected()
168       if entrychaine != '':
169           self.entry2.delete(0,END)
170           try:
171               SO = salome.myStudy.FindObjectID(entrychaine[0])
172           except:
173               boo = 0
174               SO = None
175
176           FileName=''
177           if SO != None:
178               myBuilder = salome.myStudy.NewBuilder()
179               boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeFileType")
180               if boo:
181                  val=FileAttr.Value()
182                  if (val !="FICHIERMED" and val != "FICHIER_RESU_MED"):
183                      boo=0
184                      showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
185                  else:
186                      boo,FileAttr = myBuilder.FindAttribute(SO,"AttributeExternalFileDef")
187               if boo :
188                 FileName=FileAttr.Value()
189               else:
190                  showerror("Pas de Fichier MED","Cet Objet n a pas de fichier MED Associ\xe9")
191           if FileName != '' :
192               self.entry.delete(0,END)
193               self.entry2.delete(0,END)
194               self.entry.insert(0,FileName)
195               self.entry2.insert(0,FileName)
196               self.valid_valeur()
197
198
199   def SALOME_DONNEES_HOMARD_TRAITEMENT_NOM_MED_MAILLAGE_N(self):
200       import salome 
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 = { }