1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE
4 # Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
5 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
7 # This library is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU Lesser General Public
9 # License as published by the Free Software Foundation; either
10 # version 2.1 of the License.
12 # This library is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 # Lesser General Public License for more details.
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with this library; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
24 # File : salome.py renamed as __init__.py for python packaging (gboulant)
25 # Author : Paul RASCLE, EDF
29 Module salome gives access to Salome ressources.
34 - salome.naming_service : instance of naming Service class
36 - Resolve(name) : find a CORBA object (ior) by its pathname
37 - Register(name) : register a CORBA object under a pathname
39 - salome.lcc : instance of lifeCycleCORBA class
41 - FindOrLoadComponent(server,name) :
42 obtain an Engine (CORBA object)
43 or launch the Engine if not found,
44 with a Server name and an Engine name
46 - salome.sg : salome object to communicate with the graphical user interface (if any)
48 - updateObjBrowser(bool):
50 - getActiveStudyName():
52 - SelectedCount(): returns number of selected objects
53 - getSelected(i): returns entry of selected object number i
54 - getAllSelected(): returns list of entry of selected objects
55 - AddIObject(Entry): select an existing Interactive object
56 - RemoveIObject(Entry): remove object from selection
57 - ClearIObjects(): clear selection
65 - IDToObject(Entry): returns CORBA reference from entry
67 - salome.myStudyName : active Study Name
68 - salome.myStudyId : active Study Id
69 - salome.myStudy : the active Study itself (CORBA ior)
70 - methods : defined in SALOMEDS.idl
74 # Module salome gives access to Salome ressources.
76 # \param salome.orb : CORBA orb object
77 # \param salome.naming_service : instance of naming Service class (SALOME_NamingServicePy::SALOME_NamingServicePy_i)
78 # \param salome.lcc : instance of lifeCycleCORBA class (SALOME_LifeCycleCORBA)
79 # \param salome.sg : Salome object to communicate with the graphical user interface, if running (see interface in salome_iapp::SalomeOutsideGUI)
80 # \param salome.myStudyName : active Study Name
81 # \param salome.myStudyId : active Study Id
82 # \param salome.myStudy : the active Study (interface SALOMEDS::Study)
85 # ==========================================================================
87 # The function extend_path is used here to aggregate in a single
88 # virtual python package all the python sub-packages embedded in each
89 # SALOME modules (python "namespace" pattern).
91 ROOT_PYTHONPACKAGE_NAME="salome"
93 # This root package name is expected to be found as a directory in
94 # some paths of the sys.path variable, especially the paths
95 # <MODULE_ROOT_DIR>/lib/pythonX.Y/site-packages/salome where are
96 # installed the python files. These paths are theorically appended by
97 # the SALOME main runner and should be in the sys.path at this point
98 # of the application. The extend_path is looking then for directories
101 # <MODULE_ROOT_DIR>/lib/pythonX.Y/site-packages/salome/<ROOT_PYTHONPACKAGE_NAME>
103 # And append them to the sys.path. These directories are supposed to
104 # be the pieces to be aggregated as a single virtual python package.
107 from salome_utils import verbose
109 MATCH_ENDING_PATTERN="site-packages" + os.path.sep + "salome"
111 def extend_path(pname):
113 if not isinstance(dir, basestring) or not os.path.isdir(dir) or not dir.endswith(MATCH_ENDING_PATTERN):
115 subdir = os.path.join(dir, pname)
116 # XXX This may still add duplicate entries to path on
117 # case-insensitive filesystems
118 if os.path.isdir(subdir) and subdir not in __path__:
119 if verbose(): print "INFO - The directory %s is appended to sys.path" % subdir
120 __path__.append(subdir)
122 extend_path(ROOT_PYTHONPACKAGE_NAME)
123 # ==========================================================================
126 from salome_kernel import *
127 from salome_study import *
128 from salome_iapp import *
132 # The next block is workaround for the problem of shared symbols loading for the extension modules (e.g. SWIG-generated)
133 # that causes RTTI unavailable in some cases. To solve this problem, sys.setdlopenflags() function is used.
134 # Depending on the Python version and platform, the dlopen flags can be defined in the dl, DLFUN or ctypes module.
140 # dl module can be unavailable
142 flags = dl.RTLD_NOW | dl.RTLD_GLOBAL
148 # DLFCN module can be unavailable
150 flags = DLFCN.RTLD_NOW | DLFCN.RTLD_GLOBAL
156 # ctypes module can be unavailable
158 flags = ctypes.RTLD_GLOBAL
163 # Disable -> bug with scipy, seems very dangerous to do that
165 # sys.setdlopenflags(flags)
168 orb, lcc, naming_service, cm,sg=None,None,None,None,None
169 myStudyManager, myStudyId, myStudy, myStudyName=None,None,None,None
171 def setCurrentStudy(theStudy):
173 Change current study : an existing one given by a study object.
175 :param theStudy: the study CORBA object to set as current study
177 global myStudyId, myStudy, myStudyName
178 myStudyId, myStudy, myStudyName =salome_study.setCurrentStudy(theStudy)
180 def setCurrentStudyId(theStudyId=0):
182 Change current study : an existing or new one given by Id.
184 :param theStudyId: the study Id (optional argument)
185 0 : create a new study (default).
186 n (>0) : try connection to study with Id = n, or create a new one
189 global myStudyId, myStudy, myStudyName
190 myStudyId, myStudy, myStudyName =salome_study.setCurrentStudyId(theStudyId)
193 def salome_init(theStudyId=0,embedded=0):
195 Performs only once SALOME general purpose intialisation for scripts.
196 optional argument : theStudyId
197 When in embedded interpreter inside IAPP, theStudyId is not used
198 When used without GUI (external interpreter)
199 0 : create a new study (default).
200 n (>0) : try connection to study with Id = n, or create a new one
202 If study creation, its Id may be different from theStudyId !
204 orb reference to CORBA
205 lcc a LifeCycleCorba instance
206 naming_service a naming service instance
207 cm reference to the container manager
208 sg access to SALOME GUI (when linked with IAPP GUI)
209 myStudyManager the study manager
210 myStudyId active study identifier
211 myStudy active study itself (CORBA reference)
212 myStudyName active study name
214 global salome_initial
215 global orb, lcc, naming_service, cm
217 global myStudyManager, myStudyId, myStudy, myStudyName
222 sg = salome_iapp_init(embedded)
223 orb, lcc, naming_service, cm = salome_kernel_init()
224 myStudyManager, myStudyId, myStudy, myStudyName =salome_study_init(theStudyId)
227 except RuntimeError, inst:
228 # wait a little to avoid trace mix
232 print "salome.salome_init():", x
234 ============================================
235 May be there is no running SALOME session
236 salome.salome_init() is intented to be used
237 within an already running session
238 ============================================
243 global salome_initial
246 salome_kernel_close()
251 #to expose all objects to pydoc