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, ...)
19 def __init__(self, appli, geometrie):
21 self.geometrie = geometrie
22 self.dicoSousGeom = []
24 def getGeometrie(self):
26 affecte le nom de la géométrie sélectionnée dans l'arbre d'étude de Salome
27 à l'instance étude de l'application et au lineedit correspondant
29 # récupération de tous les objets sélectionnés dans l'arbre d'étude
30 listeSelection = salome.sg.getAllSelected()
31 if len(listeSelection) > 1:
32 print "----------------------------------------"
33 print "1 seule géométrie doit être sélectionnée"
34 elif len(listeSelection) == 0:
35 print "----------------------------------------"
36 print "Sélectionnez une géométrie"
38 # on teste si l'objet sélectionné est une géométrie et s'il possède des fils
41 anObject=SMESH_utils.entryToIor(salome.myStudy,listeSelection[0])
42 if not anObject: # l'objet n'a pas encore chargé
43 strContainer, strComponentName = "FactoryServer", "GEOM"
44 myComponent = salome.lcc.FindOrLoadComponent( strContainer, strComponentName )
45 SCom=salome.myStudy.FindComponent( strComponentName )
46 myBuilder = salome.myStudy.NewBuilder()
47 myBuilder.LoadWith( SCom , myComponent )
48 anObject=SMESH_utils.entryToIor(salome.myStudy,listeSelection[0])
51 type = anObject._narrow(GEOM.GEOM_Object)
55 # le type doit être une géométrie
57 print "----------------------------------------"
58 print "Sélectionnez une géométrie"
61 # on vérifie que cette géométrie possède au moins un fils qui soit une géoméotrie
62 geom = salome.lcc.FindOrLoadComponent( "FactoryServer", "GEOM" )
63 group = geom.GetIMeasureOperations(EFICASGUI.currentStudyId)
64 nom = SMESH_utils.entryToName(salome.myStudy, listeSelection)
66 # modelisation 3D --> il faut un SOLID
67 if self.appli.etude.modelisation == '3D':
68 n = string.find(group.WhatIs(type), 'SOLID')
69 if group.WhatIs(type)[n+8] != 0:
71 liste = [nom[0], listeSelection[0]]
72 self.geometrie.ln.setText(nom[0])
73 self.appli.etude.setGeometrie(liste)
74 # groupes de mailles = face ou shell
75 self.dicoSousGeom = SMESH_utils.getSubGeometryIorAndName(salome.myStudy, self.appli.etude.geometrie)
77 for maille in self.dicoSousGeom.keys():
78 anObject = SMESH_utils.iorStringToIor(maille)
79 type = anObject._narrow(GEOM.GEOM_Object)
80 n = string.find(group.WhatIs(type), 'FACE')
81 if group.WhatIs(type)[n+7] != 0:
82 listeSousGeom.append(self.dicoSousGeom[maille])
84 n = string.find(group.WhatIs(type), 'SHELL')
85 if group.WhatIs(type)[n+8] != 0:
86 listeSousGeom.append(self.dicoSousGeom[maille])
89 self.appli.etude.setSousGeometrie(listeSousGeom)
92 print "----------------------------------------"
93 print "Pour une modélisation 3D, la géométrie sélectionnée doit être un solide."
95 # modelisation 2D --> SHELL ou FACE
96 if string.find(self.appli.etude.modelisation, '2D') != -1:
98 liste = [nom[0], listeSelection[0]]
99 self.geometrie.ln.setText(nom[0])
100 self.appli.etude.setGeometrie(liste)
101 self.dicoSousGeom = SMESH_utils.getSubGeometryIorAndName(salome.myStudy, self.appli.etude.geometrie)
103 n = string.find(group.WhatIs(type), 'SHELL')
104 if group.WhatIs(type)[n+8] != 0:
105 # groupes de mailles = edge
106 for maille in self.dicoSousGeom.keys():
107 anObject = SMESH_utils.iorStringToIor(maille)
108 type = anObject._narrow(GEOM.GEOM_Object)
109 n = string.find(group.WhatIs(type), 'EDGE')
110 if group.WhatIs(type)[n+7] != 0:
111 listeSousGeom.append(self.dicoSousGeom[maille])
113 n = string.find(group.WhatIs(type), 'FACE')
114 if group.WhatIs(type)[n+7] != 0:
115 # groupes de mailles = edge
116 for maille in self.dicoSousGeom.keys():
117 anObject = SMESH_utils.iorStringToIor(maille)
118 type = anObject._narrow(GEOM.GEOM_Object)
119 n = string.find(group.WhatIs(type), 'EDGE')
120 if group.WhatIs(type)[n+7] != 0:
121 listeSousGeom.append(self.dicoSousGeom[maille])
124 self.appli.etude.setSousGeometrie(listeSousGeom)
126 def getSousGeometrie(self):
128 retourne les sous-géométries de la géométrie sélectionnée dans l'arbre d'étude de Salome
130 liste = SMESH_utils.getSubGeometry(salome.myStudy, self.geometrie.appli.etude.geometrie)
134 def updateComboSousGeom(self):
136 affecte les combobox des tables des panneaux ddl et pression avec les valeurs
139 # insertion pour le panneau ddl
140 for cmb in self.geometrie.appli.mw.ddl.controleurNouvelleLigneTable.controleurTable.listeComboGeom:
141 cmb.insertStrList(self.geometrie.appli.etude.sousGeometrie)
143 # insertion pour le panneau pression
144 for cmb in self.geometrie.appli.mw.pression.controleurNouvelleLigneTable.controleurTable.listeComboGeom:
145 cmb.insertStrList(self.geometrie.appli.etude.sousGeometrie)