Salome HOME
*** empty log message ***
[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.4 2005/02/01 10:55:41 salome Exp $
8 #=============================================================================
9
10 from omniORB import CORBA
11 import LifeCycleCORBA
12 import SALOMEDS
13 import GEOM
14 import SMESH
15 from eficasCL import *
16
17 # initialise the ORB
18 orb = CORBA.ORB_init([''], CORBA.ORB_ID)
19
20 # create an LifeCycleCORBA instance
21 lcc = LifeCycleCORBA.LifeCycleCORBA(orb)
22
23 geom = lcc.FindOrLoadComponent("FactoryServer", "GEOM")
24 smesh = lcc.FindOrLoadComponent("FactoryServer", "SMESH")
25
26     #--------------------------------------------------------------------------
27
28 def entryToIor(myStudy,entry):
29     """
30     Retourne une référence ior de l'entry passée en argument.
31     """
32     ior = None
33     iorString = entryToIorString(myStudy,entry)
34     if iorString != None:
35         ior = orb.string_to_object(iorString)
36     return ior
37
38 def entryToIorString(myStudy,entry):
39     """
40     Retourne la sérialisation de l'ior de l'entry passée en
41     argument. Il s'agit de l'attribut AttributeIOR associé à l'entry
42     dans l'arbre d'étude.
43     """
44     myBuilder = myStudy.NewBuilder()
45     iorString = None
46     SO = None
47     try:
48         SO = myStudy.FindObjectID(entry)
49     except:
50         print "invalid entry: ",entry
51         SO = None
52     if SO != None:
53         boo,iorso = myBuilder.FindAttribute(SO,"AttributeIOR")
54         if boo == 0:
55             print "no IOR attribute on study object: ", entry
56         else:
57             iorString = iorso.Value()
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(anObject):
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     try :
121        subShape=anObject._narrow(GEOM.GEOM_Object)
122        objMain = subShape.GetMainShape()
123        IORobjMain = orb.object_to_string(objMain)
124     except :
125        IORobjMain= None
126     return IORobjMain
127
128 def getShapeContenante(myStudy,entry):
129     try :
130        anObject=entryToIor(myStudy,entry)
131        Shape=anObject._narrow(GEOM.GEOM_Object)
132        ShapeIor=orb.object_to_string(Shape)
133     except :
134        print "pb avec l IOR: pas un objet"
135        return None
136
137     MainShapeIOR=ShapeIor
138     while anObject != None :
139        iorStringMain = getMainShape(anObject) 
140        if iorStringMain == None :
141           break
142        if ( MainShapeIOR != iorStringMain ):
143           anObject =  orb.string_to_object(iorStringMain)
144           if anObject :
145              MainShapeIOR=iorStringMain
146        else : 
147           anObject = None
148           
149     return MainShapeIOR 
150
151     #--------------------------------------------------------------------------
152
153 def getSMESHSubShapeIndexes(myStudy, entryList, typenoeudorcell = 0):
154     # typenoeudorcell = 0 on traite des noeuds
155     # typenoeudorcell = 1 on traite des faces
156
157     refList = []
158     iorStringMain = None
159     if len(entryList) > 0:
160         # PN : prévoir une boucle ???
161         # Pour etre sure que toutes les faces appartiennent à la meme strucute ??
162         iorStringMain = getShapeContenante(myStudy, entryList[0])
163
164     if iorStringMain == None:
165         # C'est le cas ou on a loade un fichier hdf et on est pas passe par geom
166         # par exemple ....
167         return refList
168     
169     myCLinit=CLinit()
170     myCL=myCLinit.GetOrCreateCL(iorStringMain)
171
172     if len(entryList) > 0:
173          for idShape in entryList:
174              refShape = singleEntryToName(myStudy,idShape)
175              if refShape != None:
176                   for Shape in refShape:
177                       refList.append(Shape)
178              IORShape = entryToIor(myStudy,idShape)
179              myCL.SetIdAsCL(orb.object_to_string(IORShape),typenoeudorcell)
180             
181     return refList
182
183     #--------------------------------------------------------------------------
184
185 def getAsterGroupNo(myStudy,entryList):
186     typenoeudorcell = 0
187     subShapeIndexes = getSMESHSubShapeIndexes(myStudy, entryList,typenoeudorcell)
188     labelGroupNo = []
189     for val in subShapeIndexes:
190         labelGroupNo.append(val)
191     return labelGroupNo
192
193     #--------------------------------------------------------------------------
194
195 def getAsterGroupMa(myStudy,entryList):
196     typenoeudorcell = 1
197     subShapeIndexes = getSMESHSubShapeIndexes(myStudy, entryList,typenoeudorcell)
198     labelGroupMa = []
199     for val in subShapeIndexes:
200         labelGroupMa.append(val)
201     return labelGroupMa
202
203     #--------------------------------------------------------------------------
204