1 # -*- coding: iso-8859-1 -*-
11 # module pour le maillage
16 controleur de la classe Geometrie, permet la sélection de la géométrie dans l'arbre d'étude
17 de Salome. Met à jour les champs correspondants (sous-géométries, ...)
18 - geometrie = référence sur le panneau géométrie
19 - dicoSousGeom = clé = IORString
22 def __init__(self, appli, geometrie):
24 self.geometrie = geometrie
25 self.dicoSousGeom = []
27 def getGeometrie(self):
29 affecte le nom de la géométrie sélectionnée dans l'arbre d'étude de Salome
30 à l'instance étude de l'application et au lineedit correspondant
32 # récupération de tous les objets sélectionnés dans l'arbre d'étude
33 listeSelection = salome.sg.getAllSelected()
34 if len(listeSelection) > 1:
35 print "----------------------------------------"
36 print "1 seule géométrie doit être sélectionnée"
37 elif len(listeSelection) == 0:
38 print "----------------------------------------"
39 print "Sélectionnez une géométrie"
41 # on teste si l'objet sélectionné est une géométrie et s'il possède des fils
44 anObject=SMESH_utils.entryToIor(salome.myStudy,listeSelection[0])
45 if not anObject: # l'objet n'a pas encore chargé
46 strContainer, strComponentName = "FactoryServer", "GEOM"
47 myComponent = salome.lcc.FindOrLoadComponent( strContainer, strComponentName )
48 SCom=salome.myStudy.FindComponent( strComponentName )
49 myBuilder = salome.myStudy.NewBuilder()
50 myBuilder.LoadWith( SCom , myComponent )
51 anObject=SMESH_utils.entryToIor(salome.myStudy,listeSelection[0])
54 type = anObject._narrow(GEOM.GEOM_Object)
58 # le type doit être une géométrie
60 print "----------------------------------------"
61 print "Sélectionnez une géométrie"
64 # on vérifie que cette géométrie possède au moins un fils qui soit une géoméotrie
65 geom = salome.lcc.FindOrLoadComponent( "FactoryServer", "GEOM" )
66 group = geom.GetIMeasureOperations(EFICASGUI.currentStudyId)
67 nom = SMESH_utils.entryToName(salome.myStudy, listeSelection)
69 # modelisation 3D --> il faut un SOLID
70 if self.appli.etude.modelisation == '3D':
71 n = string.find(group.WhatIs(type), 'SOLID')
72 if group.WhatIs(type)[n+8] != 0:
74 liste = [nom[0], listeSelection[0]]
75 self.geometrie.ln.setText(nom[0])
76 self.appli.etude.setGeometrie(liste)
77 # groupes de mailles = face ou shell
78 self.dicoSousGeom = SMESH_utils.getSubGeometryIorAndName(salome.myStudy, self.appli.etude.geometrie)
80 for maille in self.dicoSousGeom.keys():
81 anObject = SMESH_utils.iorStringToIor(maille)
82 type = anObject._narrow(GEOM.GEOM_Object)
83 n = string.find(group.WhatIs(type), 'FACE')
84 if group.WhatIs(type)[n+7] != 0:
85 listeSousGeom.append(self.dicoSousGeom[maille])
87 n = string.find(group.WhatIs(type), 'SHELL')
88 if group.WhatIs(type)[n+8] != 0:
89 listeSousGeom.append(self.dicoSousGeom[maille])
92 self.appli.etude.setSousGeometrie(listeSousGeom)
95 print "----------------------------------------"
96 print "Pour une modélisation 3D, la géométrie sélectionnée doit être un solide."
98 # modelisation 2D --> SHELL ou FACE
99 if string.find(self.appli.etude.modelisation, '2D') != -1:
101 liste = [nom[0], listeSelection[0]]
102 self.geometrie.ln.setText(nom[0])
103 self.appli.etude.setGeometrie(liste)
104 self.dicoSousGeom = SMESH_utils.getSubGeometryIorAndName(salome.myStudy, self.appli.etude.geometrie)
106 n = string.find(group.WhatIs(type), 'SHELL')
107 if group.WhatIs(type)[n+8] != 0:
108 # groupes de mailles = edge
109 for maille in self.dicoSousGeom.keys():
110 anObject = SMESH_utils.iorStringToIor(maille)
111 type = anObject._narrow(GEOM.GEOM_Object)
112 n = string.find(group.WhatIs(type), 'EDGE')
113 if group.WhatIs(type)[n+7] != 0:
114 listeSousGeom.append(self.dicoSousGeom[maille])
116 n = string.find(group.WhatIs(type), 'FACE')
117 if group.WhatIs(type)[n+7] != 0:
118 # groupes de mailles = edge
119 for maille in self.dicoSousGeom.keys():
120 anObject = SMESH_utils.iorStringToIor(maille)
121 type = anObject._narrow(GEOM.GEOM_Object)
122 n = string.find(group.WhatIs(type), 'EDGE')
123 if group.WhatIs(type)[n+7] != 0:
124 listeSousGeom.append(self.dicoSousGeom[maille])
127 self.appli.etude.setSousGeometrie(listeSousGeom)
129 # on cree le bon nombre de panneaux maillages : autant qu'il y a de sous geometries
130 #self.createMeshPanel()
131 #print "-----------------------------"
132 #print "-----------------------------"
133 #print "-----------------------------"
134 #print "-----------------------------"
135 #print "-----------------------------"
136 #print "-----------------------------"
137 #print "-----------------------------"
138 #print "liste des panneaux ="
139 #print self.appli.mw.listePanels
141 # def createMeshPanel(self):
143 # cree autant de panneaux maillages que de sous geometries
145 # self.listeMaillages = []
146 # for i in self.appli.etude.sousGeometrie:
147 # mesh = maillage.Maillage(self.appli.mw.ws, self.appli)
148 # self.listeMaillages.append(mesh)
149 # self.appli.mw.listePanels.append(mesh)
150 # #self.appli.mw.listePanels.insert(0, self.appli.mw.listePanels[0] + 1)
151 # #del self.appli.mw.listePanels[1]
153 # self.updateGeomMaillage(mesh, i)
155 def getSousGeometrie(self):
157 retourne les sous-géométries de la géométrie sélectionnée dans l'arbre d'étude de Salome
159 liste = SMESH_utils.getSubGeometry(salome.myStudy, self.geometrie.appli.etude.geometrie)
163 def updateComboSousGeom(self):
165 affecte les combobox des tables des panneaux ddl et pression avec les valeurs
168 # insertion pour le panneau ddl
169 for cmb in self.geometrie.appli.mw.ddl.controleurNouvelleLigneTable.controleurTable.listeComboGeom:
170 cmb.insertStrList(self.geometrie.appli.etude.sousGeometrie)
172 # insertion pour le panneau pression
173 for cmb in self.geometrie.appli.mw.pression.controleurNouvelleLigneTable.controleurTable.listeComboGeom:
174 cmb.insertStrList(self.geometrie.appli.etude.sousGeometrie)
176 def updateGeomMaillage(self, maillage, sousGeom):
178 affecte le label indiquant la géométrie sélectionnée du panneau maillage
179 affecte la listbox du panneau maillage avec les valeurs des maillages trouvés dans l'arbre d'étude
180 Salome correspondant à la géométrie sélectionnée
182 # affectation de la géométrie sélectionnée au label du panneau maillage
183 maillage.lblGeom2.setText(str(self.appli.etude.geometrie[0]))
185 # affectation de la sous géométrie au label du panneau maillage
186 maillage.lblSousGeom2.setText(str(sousGeom))
188 # récupération des mailles correspondants
190 maillage.cl=eelihCL.CLinit()
191 # récupération de l'IOR des sous géométries
193 for iorSousGeom in self.dicoSousGeom.keys():
194 GEOMIor.append(iorSousGeom)
195 maillage.cl.GetOrCreateCL(iorSousGeom)
196 #self.appli.mw.maillage.cl.traiteCL()
197 maillage.cl.get_geoms()
198 maillage.cl.get_maillages()
200 maillage.cl.MainShapes(0)
202 listeMaillage = maillage.cl.Possibles(0, str(self.appli.etude.geometrie[0]))
203 # insertion des maillages trouvés dans la listbox du panneau maillage
204 # si aucun maillage on disable la listbox
205 # sinon on disable le lineedit pour donner le nom d'un nouveau maillage
206 if listeMaillage != []:
207 maillage.lbMaillage.insertStrList(listeMaillage)
208 #maillage.lbMaillage.setEnabled(1)
209 #maillage.lblMaillage.setEnabled(1)
210 #maillage.lblNouveauMaillage.setEnabled(0)
211 #maillage.lnNouveauMaillage.setEnabled(0)
213 #maillage.lnNouveauMaillage.setEnabled(1)
214 #maillage.lblNouveauMaillage.setEnabled(1)
215 #maillage.lbMaillage.setEnabled(0)
216 #maillage.lblMaillage.setEnabled(0)
219 def convertit_group_maille_from_salome(self,liste_in):
221 convertit les groupes de maille
225 for entree in liste_in :
227 travail.append(entree)
228 if dict_geom_numgroupe.has_key(entree):
229 r=dict_geom_numgroupe[entree]
231 r=SMESH_utils.getAsterGroupMa(salome.myStudy,travail)
232 dict_geom_numgroupe[entree]=r
236 print "pas de groupe de maille associé"
237 showerror("Pas de groupe associé","Cet Objet ne peut pas être défini comme un ensemble de groupe de maille")
240 def convertit_entrees_en_valeurs(self,liste_faces):
242 convertit les entry de l'arbre d'étude en valeur
244 valeur=self.convertit_group_maille_from_salome(liste_faces)
246 print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
247 print "Pb pas de fonction de conversion de la valeur Salome en valeur Aster"
248 print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
249 print "VALEUR", valeur
251 valeur = "'" + str(valeur[0]) + "'"
254 def add_selection(self):
256 retourne le nom des objets sélectionnés dans l'arbre d'étude
258 entrychaine=salome.sg.getAllSelected()
259 if len(entrychaine) >= 1:
260 print "1 seule géométrie doit être sélectionnée"
263 # liste des faces sélectionnées dans ddl et pression
265 # for face in self.appli.etude.ddls:
266 # if face[0] not in liste_faces:
267 # liste_faces.append(face[0])
269 # for face in self.appli.etude.chargements:
270 # if face[0] not in liste_faces:
271 # liste_faces.append(face[0])
272 # if liste_faces != '':
274 #liste_faces.append('0:1:2:1:1')
275 #liste_faces.append('0:1:2:1:2')
277 # récupération de toutes les sous géométries
278 for sousGeom in self.appli.etude.sousGeometrie:
279 SO = salome.myStudy.FindObject(str(sousGeom))
280 liste_faces.append(SO.GetID())
282 touteslesvaleurs = self.convertit_entrees_en_valeurs(liste_faces)
284 #liste_faces.append('0:1:2:1:2')
285 #touteslesvaleurs = self.convertit_entrees_en_valeurs(liste_faces)
286 return touteslesvaleurs
288 dict_geom_numgroupe = { }
289 dict_geom_numface = { }