Salome HOME
Nettoyage et factorisation des appels
[modules/eficas.git] / src / EFICASGUI / SMESH_utils.py
1 #=============================================================================
2 # File      : SMESH_utils.py
3 # Created   : jeu fév 20 18:53:34 CET 2003
4 # Author    : Paul RASCLE, EDF
5 # Project   : SALOME
6 # Copyright : EDF 2003
7 #  $Header: /home/salome/PlateFormePAL/Bases_CVS_EDF/Modules_EDF/EFICAS_SRC/src/EFICASGUI/SMESH_utils.py,v 1.2 2004/12/10 16:43:25 salome Exp $
8 #=============================================================================
9
10 from omniORB import CORBA
11 import LifeCycleCORBA
12 import SALOMEDS
13 import GEOM
14 import SMESH
15
16 # initialise the ORB
17 orb = CORBA.ORB_init([''], CORBA.ORB_ID)
18
19 # create an LifeCycleCORBA instance
20 lcc = LifeCycleCORBA.LifeCycleCORBA(orb)
21
22 geom = lcc.FindOrLoadComponent("FactoryServer", "GEOM")
23 smesh = lcc.FindOrLoadComponent("FactoryServer", "SMESH")
24
25     #--------------------------------------------------------------------------
26
27 def entryToIor(myStudy,entry):
28     """
29     Retourne une référence ior de l'entry passée en argument.
30     """
31     ior = None
32     iorString = entryToIorString(myStudy,entry)
33     if iorString != None:
34         ior = orb.string_to_object(iorString)
35     return ior
36
37 def entryToIorString(myStudy,entry):
38     """
39     Retourne la sérialisation de l'ior de l'entry passée en
40     argument. Il s'agit de l'attribut AttributeIOR associé à l'entry
41     dans l'arbre d'étude.
42     """
43     myBuilder = myStudy.NewBuilder()
44     iorString = None
45     SO = None
46     try:
47         SO = myStudy.FindObjectID(entry)
48     except:
49         print "invalid entry: ",entry
50         SO = None
51     if SO != None:
52         boo,iorso = myBuilder.FindAttribute(SO,"AttributeIOR")
53         if boo == 0:
54             print "no IOR attribute on study object: ", entry
55         else:
56             iorString = iorso.Value()
57
58     return iorString
59
60
61     #--------------------------------------------------------------------------
62
63 def singleEntryToName(myStudy,entry):
64     """
65     Retourne le nom l'entry passée en argument. Il s'agit de
66     l'attribut AttributeName associé à l'entry dans l'arbre d'étude.
67     """
68     myBuilder = myStudy.NewBuilder()
69     name =[] 
70     SO = None
71     try:
72             SO = myStudy.FindObjectID(entry)
73     except:
74             print "invalid entry: ",entry
75             SO = None
76     if SO != None:
77             boo,nameso = myBuilder.FindAttribute(SO,"AttributeName")
78             if boo == 0:
79                 print "no Name attribute on study object: ", entry
80             else:
81                 name.append(nameso.Value())
82     return name
83
84 def entryListToName(myStudy,entryList):
85     """
86     Récupération de la liste des noms à partir d'une liste d'entry.
87     """
88     myBuilder = myStudy.NewBuilder()
89     name =[]
90     SO = None
91     for entry in entryList:
92         try:
93             SO = myStudy.FindObjectID(entry)
94         except:
95             print "invalid entry: ",entry
96             SO = None
97         if SO != None:
98             boo,nameso = myBuilder.FindAttribute(SO,"AttributeName")
99             if boo == 0:
100                 print "no Name attribute on study object: ", entry
101             else:
102                 name.append(nameso.Value())
103     return name
104
105 def entryToName(myStudy,entryList):
106     """
107     Cette méthode sert juste à assurer la compatibilité avec le
108     logiciel Eficas. Eficas (panelsSalome.py) fait appel à entryToList
109     en passant une entryList en argument.
110     """
111     return entryListToName(myStudy,entryList)
112
113
114     #--------------------------------------------------------------------------
115 def getMainShape(myStudy,entry):
116     """
117     Cette méthode retourne une référence ior de l'objet principal qui
118     contient l'entry passée en argument.
119     """
120     anObject=entryToIor(myStudy,entry)
121     subShape=anObject._narrow(GEOM.GEOM_Object)
122     iorMain = subShape.GetMainShape()
123     return iorMain
124
125
126 def getMainShapeName(myStudy,entry):
127     """
128     Retourne la sérialisation de l'ior du MainShape de l'entry passé
129     en argument.
130     """
131     iorMain = getMainShape(myStudy,entry)
132     if iorMain==None:
133         return None
134     iorStringMain=  orb.object_to_string(iorMain)
135     return iorStringMain
136
137     #--------------------------------------------------------------------------
138
139 def getSMESHSubShapeIndexes(myStudy, entryList, typenoeudorcell = 0):
140     # typenoeudorcell = 0 on traite des noeuds
141     # typenoeudorcell = 1 on traite des faces
142     refList = []
143     subShapeIndexes = []
144     
145     print "################  len(entryList)=", len(entryList)
146     if len(entryList) > 0:
147         iorStringMain = getMainShapeName(myStudy, entryList[0])
148
149     if iorStringMain == None:
150         raise RuntimeException("L'ior CORBA n'est pas défini")
151
152     print "################ iorStringMain=", iorStringMain
153     
154     myCL=smesh.GetOrCreateCL(str(iorStringMain))
155
156     if len(entryList) > 0:
157          for idShape in entryList:
158              print "idShape"
159              print idShape
160              refShape = singleEntryToName(myStudy,idShape)
161              if refShape != None:
162                   for Shape in refShape:
163                       refList.append(Shape)
164              IORShape = entryToIor(myStudy,idShape)
165              myCL.SetIdAsCL(orb.object_to_string(IORShape),typenoeudorcell)
166             
167     studyId = myStudy._get_StudyId()
168     return refList
169
170     #--------------------------------------------------------------------------
171
172 def getAsterGroupNo(myStudy,entryList):
173     typenoeudorcell = 0
174     subShapeIndexes = getSMESHSubShapeIndexes(myStudy, entryList,typenoeudorcell)
175     labelGroupNo = []
176     for val in subShapeIndexes:
177         labelGroupNo.append(val)
178     return labelGroupNo
179
180     #--------------------------------------------------------------------------
181
182 def getAsterGroupMa(myStudy,entryList):
183     typenoeudorcell = 1
184     subShapeIndexes = getSMESHSubShapeIndexes(myStudy, entryList,typenoeudorcell)
185     labelGroupMa = []
186     for val in subShapeIndexes:
187         #label="GMM%d"%(val)
188         print "################> val = ", val
189         labelGroupMa.append(val)
190     return labelGroupMa
191
192     #--------------------------------------------------------------------------
193