Salome HOME
Merge from V5_1_main 14/05/2010
[modules/kernel.git] / src / KERNEL_PY / salome.py
1 #  -*- coding: iso-8859-1 -*-
2 #  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
3 #
4 #  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
5 #  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 #
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.
11 #
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.
16 #
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
20 #
21 #  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 #
23
24 #  File   : salome.py
25 #  Author : Paul RASCLE, EDF
26 #  Module : SALOME
27 #  $Header$
28 #
29 """ 
30 Module salome gives access to Salome ressources.
31
32 variables:
33
34   - salome.orb             : CORBA
35   - salome.naming_service  : instance of naming Service class
36       - methods:
37           - Resolve(name)  : find a CORBA object (ior) by its pathname
38           - Register(name) : register a CORBA object under a pathname
39
40   - salome.lcc             : instance of lifeCycleCORBA class
41       - methods:
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
46
47   - salome.sg              : salome object to communicate with the graphical user interface (if any)
48       - methods:
49          - updateObjBrowser(bool):
50          - getActiveStudyId():
51          - getActiveStudyName():
52
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
59
60          - Display(*Entry):
61          - DisplayOnly(Entry):
62          - Erase(Entry):
63          - DisplayAll():
64          - EraseAll():
65
66          - IDToObject(Entry):    returns CORBA reference from entry
67
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
72
73 """
74 ## @package salome
75 # Module salome gives access to Salome ressources.
76 #
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)
84
85
86 from salome_kernel import *
87 from salome_study import *
88 from salome_iapp import *
89
90
91 #
92 # The next block is workaround for the problem of shared symbols loading for the extension modules (e.g. SWIG-generated)
93 # that causes RTTI unavailable in some cases. To solve this problem, sys.setdlopenflags() function is used.
94 # Depending on the Python version and platform, the dlopen flags can be defined in the dl, DLFUN or ctypes module.
95
96 import sys
97 flags = None
98 if not flags:
99     try:
100         # dl module can be unavailable
101         import dl
102         flags = dl.RTLD_NOW | dl.RTLD_GLOBAL
103     except:
104         pass
105     pass
106 if not flags:
107     try:
108         # DLFCN module can be unavailable
109         import DLFCN
110         flags = DLFCN.RTLD_NOW | DLFCN.RTLD_GLOBAL
111     except:
112         pass
113     pass
114 if not flags:
115     try:
116         # ctypes module can be unavailable
117         import ctypes
118         flags = ctypes.RTLD_GLOBAL
119     except:
120         pass
121     pass
122     
123 if flags:
124     sys.setdlopenflags(flags)
125     pass
126
127 orb, lcc, naming_service, cm,sg=None,None,None,None,None
128 myStudyManager, myStudyId, myStudy, myStudyName=None,None,None,None
129
130 salome_initial=1
131 def salome_init(theStudyId=0,embedded=0):
132     """
133     Performs only once SALOME general purpose intialisation for scripts.
134     optional argument : theStudyId
135       When in embedded interpreter inside IAPP, theStudyId is not used
136       When used without GUI (external interpreter)
137         0      : create a new study (default).
138         n (>0) : try connection to study with Id = n, or create a new one
139                  if study not found.
140                  If study creation, its Id may be different from theStudyId !
141     Provides:
142     orb             reference to CORBA
143     lcc             a LifeCycleCorba instance
144     naming_service  a naming service instance
145     cm              reference to the container manager
146     sg              access to SALOME GUI (when linked with IAPP GUI)
147     myStudyManager  the study manager
148     myStudyId       active study identifier
149     myStudy         active study itself (CORBA reference)
150     myStudyName     active study name
151     """
152     global salome_initial
153     global orb, lcc, naming_service, cm
154     global sg
155     global myStudyManager, myStudyId, myStudy, myStudyName
156
157     try:
158         if salome_initial:
159             salome_initial=0
160             sg = salome_iapp_init(embedded)
161             orb, lcc, naming_service, cm = salome_kernel_init()
162             myStudyManager, myStudyId, myStudy, myStudyName =salome_study_init(theStudyId)
163             pass
164         pass
165     except RuntimeError, inst:
166         # wait a little to avoid trace mix
167         import time
168         time.sleep(0.2)
169         x = inst
170         print "salome.salome_init():", x
171         print """
172         ============================================
173         May be there is no running SALOME session
174         salome.salome_init() is intented to be used
175         within an already running session
176         ============================================
177         """
178         raise
179
180 #to expose all objects to pydoc
181 __all__=dir()