1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2010 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
30 Module salome gives access to Salome ressources.
35 - salome.naming_service : instance of naming Service class
37 - Resolve(name) : find a CORBA object (ior) by its pathname
38 - Register(name) : register a CORBA object under a pathname
40 - salome.lcc : instance of lifeCycleCORBA class
42 - FindOrLoadComponent(server,name) :
43 obtain an Engine (CORBA object)
44 or launch the Engine if not found,
45 with a Server name and an Engine name
47 - salome.sg : salome object to communicate with the graphical user interface (if any)
49 - updateObjBrowser(bool):
51 - getActiveStudyName():
53 - SelectedCount(): returns number of selected objects
54 - getSelected(i): returns entry of selected object number i
55 - getAllSelected(): returns list of entry of selected objects
56 - AddIObject(Entry): select an existing Interactive object
57 - RemoveIObject(Entry): remove object from selection
58 - ClearIObjects(): clear selection
66 - IDToObject(Entry): returns CORBA reference from entry
68 - salome.myStudyName : active Study Name
69 - salome.myStudyId : active Study Id
70 - salome.myStudy : the active Study itself (CORBA ior)
71 - methods : defined in SALOMEDS.idl
75 # Module salome gives access to Salome ressources.
77 # \param salome.orb : CORBA orb object
78 # \param salome.naming_service : instance of naming Service class (SALOME_NamingServicePy::SALOME_NamingServicePy_i)
79 # \param salome.lcc : instance of lifeCycleCORBA class (SALOME_LifeCycleCORBA)
80 # \param salome.sg : Salome object to communicate with the graphical user interface, if running (see interface in salome_iapp::SalomeOutsideGUI)
81 # \param salome.myStudyName : active Study Name
82 # \param salome.myStudyId : active Study Id
83 # \param salome.myStudy : the active Study (interface SALOMEDS::Study)
86 # ==========================================================================
88 # The function extend_path is used here to aggregate in a single
89 # virtual python package all the python sub-packages embedded in each
90 # SALOME modules (python "namespace" pattern).
92 ROOT_PYTHONPACKAGE_NAME="salome"
94 # This root package name is expected to be found as a directory in
95 # some paths of the sys.path variable, especially the paths
96 # <MODULE_ROOT_DIR>/lib/pythonX.Y/site-packages/salome where are
97 # installed the python files. These paths are theorically appended by
98 # the SALOME main runner and should be in the sys.path at this point
99 # of the application. The extend_path is looking then for directories
102 # <MODULE_ROOT_DIR>/lib/pythonX.Y/site-packages/salome/<ROOT_PYTHONPACKAGE_NAME>
104 # And append them to the sys.path. These directories are supposed to
105 # be the pieces to be aggregated as a single virtual python package.
108 MATCH_ENDING_PATTERN="site-packages/salome"
109 def extend_path(pname):
111 if not isinstance(dir, basestring) or not os.path.isdir(dir) or not dir.endswith(MATCH_ENDING_PATTERN):
113 subdir = os.path.join(dir, pname)
114 # XXX This may still add duplicate entries to path on
115 # case-insensitive filesystems
116 if os.path.isdir(subdir) and subdir not in __path__:
117 print "INFO - The directory %s is appended to sys.path" % subdir
118 __path__.append(subdir)
120 extend_path(ROOT_PYTHONPACKAGE_NAME)
121 # ==========================================================================
124 from salome_kernel import *
125 from salome_study import *
126 from salome_iapp import *
129 # The next block is workaround for the problem of shared symbols loading for the extension modules (e.g. SWIG-generated)
130 # that causes RTTI unavailable in some cases. To solve this problem, sys.setdlopenflags() function is used.
131 # Depending on the Python version and platform, the dlopen flags can be defined in the dl, DLFUN or ctypes module.
137 # dl module can be unavailable
139 flags = dl.RTLD_NOW | dl.RTLD_GLOBAL
145 # DLFCN module can be unavailable
147 flags = DLFCN.RTLD_NOW | DLFCN.RTLD_GLOBAL
153 # ctypes module can be unavailable
155 flags = ctypes.RTLD_GLOBAL
161 sys.setdlopenflags(flags)
164 orb, lcc, naming_service, cm,sg=None,None,None,None,None
165 myStudyManager, myStudyId, myStudy, myStudyName=None,None,None,None
168 def salome_init(theStudyId=0,embedded=0):
170 Performs only once SALOME general purpose intialisation for scripts.
171 optional argument : theStudyId
172 When in embedded interpreter inside IAPP, theStudyId is not used
173 When used without GUI (external interpreter)
174 0 : create a new study (default).
175 n (>0) : try connection to study with Id = n, or create a new one
177 If study creation, its Id may be different from theStudyId !
179 orb reference to CORBA
180 lcc a LifeCycleCorba instance
181 naming_service a naming service instance
182 cm reference to the container manager
183 sg access to SALOME GUI (when linked with IAPP GUI)
184 myStudyManager the study manager
185 myStudyId active study identifier
186 myStudy active study itself (CORBA reference)
187 myStudyName active study name
189 global salome_initial
190 global orb, lcc, naming_service, cm
192 global myStudyManager, myStudyId, myStudy, myStudyName
197 sg = salome_iapp_init(embedded)
198 orb, lcc, naming_service, cm = salome_kernel_init()
199 myStudyManager, myStudyId, myStudy, myStudyName =salome_study_init(theStudyId)
202 except RuntimeError, inst:
203 # wait a little to avoid trace mix
207 print "salome.salome_init():", x
209 ============================================
210 May be there is no running SALOME session
211 salome.salome_init() is intented to be used
212 within an already running session
213 ============================================
217 #to expose all objects to pydoc