1 // MED MedCorba_Swig : binding of MED CORBA objects woth Python
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
24 // File : libMedCorba_Swig.i
27 %module libMedCorba_Swig
29 %include "libMEDMEM_Swig.i"
32 #include "convert.hxx"
33 #include "Family_i.hxx"
34 #include "FieldDouble_i.hxx"
35 #include "Field_i.hxx"
36 #include "FieldInt_i.hxx"
37 #include "FieldOf_i.hxx"
38 #include "Group_i.hxx"
41 #include "Support_i.hxx"
42 #include "MEDMEM_SWIG_FieldDouble.hxx"
43 #include "MEDMEM_SWIG_FieldInt.hxx"
47 typemap in and out for Corba Objects (MESH, FIELDDOUBLE, FIELDINT and
48 Support) between C++ and Python
50 WARNING (NB) to the user of those typmaps (SWIG wrapping for C++ routines
51 -------------------------------------------------------------------------
53 You have to be quite careful about the SWIG version your are currently
54 using, because CORBA pointeur _ptr or _var could be wrapped by SWIG using
55 their reference rather than the pointeur itself (differences detected using
56 SWIG 1.1.x, SWIG 1.3.13 and SWIG 1.3.17)
59 %typemap(python,out) SALOME_MED::MESH_ptr, SALOME_MED::FIELDDOUBLE_ptr,
60 SALOME_MED::FIELDINT_ptr, SALOME_MED::SUPPORT_ptr,
61 const SALOME_MED::MESH_ptr, const SALOME_MED::FIELDDOUBLE_ptr,
62 const SALOME_MED::FIELDINT_ptr, const SALOME_MED::SUPPORT_ptr
64 MESSAGE("typemap out sur Objet Corba version ptr");
68 // Get the orb corba python
70 PyObject* pdict = PyDict_New();
71 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
72 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
74 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
77 PyObject* orb = PyDict_GetItemString(pdict, "o");
79 // Get the orb Corba C++
84 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
86 string s = ORB->object_to_string($1);
88 PyObject * tmp = PyString_FromString(s.c_str());
90 $result = PyObject_CallMethod(orb, "string_to_object", "O", tmp);
94 %typemap(python,out) SALOME_MED::MESH_var, SALOME_MED::FIELDDOUBLE_var,
95 SALOME_MED::FIELDINT_var, SALOME_MED::SUPPORT_var,
96 const SALOME_MED::MESH_var, const SALOME_MED::FIELDDOUBLE_var,
97 const SALOME_MED::FIELDINT_var, const SALOME_MED::SUPPORT_var
99 MESSAGE("typemap out sur Objet Corba version var");
101 // Get the orb corba python
103 PyObject* pdict = PyDict_New();
104 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
105 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
107 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
110 PyObject* orb = PyDict_GetItemString(pdict, "o");
112 // Get the orb Corba C++
116 char **argv = &xargv;
117 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
119 string s = ORB->object_to_string(*$1);
121 PyObject * tmp = PyString_FromString(s.c_str());
123 $result = PyObject_CallMethod(orb, "string_to_object", "O", tmp);
127 %typemap(python,in) const SALOME_MED::MESH_ptr &, SALOME_MED::MESH_ptr &
130 MESSAGE("typemap in sur Objet Corba MESH avec reference");
132 PyObject* pdict = PyDict_New();
133 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
134 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
136 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
139 PyObject* orb = PyDict_GetItemString(pdict, "o");
141 // Ask omniORBpy to transform MESH (python Corba) ptr to IOR string
144 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
146 if (iorMesh == Py_None)
148 char * s = PyString_AsString(PyObject_Str(iorMesh));
150 // Ask omniORB to convert IOR string to MESH (C++ Corba) ptr
154 char **argv = &xargv;
155 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
156 CORBA::Object_var O = ORB->string_to_object(s);
158 SALOME_MED::MESH_ptr t = SALOME_MED::MESH::_narrow(O);
164 %typemap(python,in) const SALOME_MED::FIELDDOUBLE_ptr &,
165 SALOME_MED::FIELDDOUBLE_ptr &
168 MESSAGE("typemap in sur Objet Corba FIELDDOUBLE avec reference");
170 PyObject* pdict = PyDict_New();
171 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
172 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
174 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
177 PyObject* orb = PyDict_GetItemString(pdict, "o");
179 // Ask omniORBpy to transform FIELDDOUBLE (python Corba) ptr to IOR string
181 PyObject* iorFieldDouble
182 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
184 if (iorFieldDouble == Py_None)
186 char * s = PyString_AsString(PyObject_Str(iorFieldDouble));
188 // Ask omniORB to convert IOR string to FIELDDOUBLE (C++ Corba) ptr
192 char **argv = &xargv;
193 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
194 CORBA::Object_var O = ORB->string_to_object(s);
196 SALOME_MED::FIELDDOUBLE_ptr t = SALOME_MED::FIELDDOUBLE::_narrow(O);
202 %typemap(python,in) const SALOME_MED::FIELDINT_ptr &,
203 SALOME_MED::FIELDINT_ptr &
206 MESSAGE("typemap in sur Objet Corba FIELDINT avec reference");
208 PyObject* pdict = PyDict_New();
209 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
210 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
212 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
215 PyObject* orb = PyDict_GetItemString(pdict, "o");
217 // Ask omniORBpy to transform FIELDINT (python Corba) ptr to IOR string
219 PyObject* iorFieldInt
220 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
222 if (iorFieldInt == Py_None)
224 char * s = PyString_AsString(PyObject_Str(iorFieldInt));
226 // Ask omniORB to convert IOR string to FIELDINT (C++ Corba) ptr
230 char **argv = &xargv;
231 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
232 CORBA::Object_var O = ORB->string_to_object(s);
234 SALOME_MED::FIELDINT_ptr t = SALOME_MED::FIELDINT::_narrow(O);
240 %typemap(python,in) const SALOME_MED::SUPPORT_ptr &, SALOME_MED::SUPPORT_ptr &
243 MESSAGE("typemap in sur Objet Corba SUPPORT avec reference");
245 PyObject* pdict = PyDict_New();
246 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
247 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
249 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
252 PyObject* orb = PyDict_GetItemString(pdict, "o");
254 // Ask omniORBpy to transform SUPPORT (python Corba) ptr to IOR string
257 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
259 if (iorSupport == Py_None)
261 char * s = PyString_AsString(PyObject_Str(iorSupport));
263 // Ask omniORB to convert IOR string to SUPPORT (C++ Corba) ptr
267 char **argv = &xargv;
268 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
269 CORBA::Object_var O = ORB->string_to_object(s);
271 SALOME_MED::SUPPORT_ptr t = SALOME_MED::SUPPORT::_narrow(O);
277 %typemap(python,in) const SALOME_MED::SUPPORT_ptr, SALOME_MED::SUPPORT_ptr
280 MESSAGE("typemap in sur Objet Corba SUPPORT sans reference");
284 PyObject* pdict = PyDict_New();
285 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
286 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
288 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
291 PyObject* orb = PyDict_GetItemString(pdict, "o");
293 // Ask omniORBpy to transform SUPPORT (python Corba) ptr to IOR string
296 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
298 if (iorSupport == Py_None)
300 char * s = PyString_AsString(PyObject_Str(iorSupport));
302 // Ask omniORB to convert IOR string to SUPPORT (C++ Corba) ptr
306 char **argv = &xargv;
307 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
308 CORBA::Object_var O = ORB->string_to_object(s);
310 SALOME_MED::SUPPORT_ptr t = SALOME_MED::SUPPORT::_narrow(O);
316 %typemap(python,in) const SALOME_MED::MESH_ptr, SALOME_MED::MESH_ptr
319 MESSAGE("typemap in sur Objet Corba MESH sans reference");
323 PyObject* pdict = PyDict_New();
324 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
325 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
327 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
330 PyObject* orb = PyDict_GetItemString(pdict, "o");
332 // Ask omniORBpy to transform MESH (python Corba) ptr to IOR string
335 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
337 if (iorMesh == Py_None)
339 char * s = PyString_AsString(PyObject_Str(iorMesh));
341 // Ask omniORB to convert IOR string to MESH (C++ Corba) ptr
345 char **argv = &xargv;
346 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
347 CORBA::Object_var O = ORB->string_to_object(s);
349 SALOME_MED::MESH_ptr t = SALOME_MED::MESH::_narrow(O);
355 %typemap(python,in) const SALOME_MED::FIELDDOUBLE_ptr,
356 SALOME_MED::FIELDDOUBLE_ptr &
359 MESSAGE("typemap in sur Objet Corba FIELDDOUBLE sans reference");
363 PyObject* pdict = PyDict_New();
364 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
365 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
367 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
370 PyObject* orb = PyDict_GetItemString(pdict, "o");
372 // Ask omniORBpy to transform FIELDDOUBLE (python Corba) ptr to IOR string
374 PyObject* iorFieldDouble
375 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
377 if (iorFieldDouble == Py_None)
379 char * s = PyString_AsString(PyObject_Str(iorFieldDouble));
381 // Ask omniORB to convert IOR string to FIELDDOUBLE (C++ Corba) ptr
385 char **argv = &xargv;
386 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
387 CORBA::Object_var O = ORB->string_to_object(s);
389 SALOME_MED::FIELDDOUBLE_ptr t = SALOME_MED::FIELDDOUBLE::_narrow(O);
395 %typemap(python,in) const SALOME_MED::FIELDINT_ptr,
396 SALOME_MED::FIELDINT_ptr
399 MESSAGE("typemap in sur Objet Corba FIELDINT sans reference");
403 PyObject* pdict = PyDict_New();
404 PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins());
405 PyRun_String("import CORBA", Py_single_input, pdict, pdict);
407 PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input,
410 PyObject* orb = PyDict_GetItemString(pdict, "o");
412 // Ask omniORBpy to transform FIELDINT (python Corba) ptr to IOR string
414 PyObject* iorFieldInt
415 = PyObject_CallMethod(orb, "object_to_string", "O", $input);
417 if (iorFieldInt == Py_None)
419 char * s = PyString_AsString(PyObject_Str(iorFieldInt));
421 // Ask omniORB to convert IOR string to FIELDINT (C++ Corba) ptr
425 char **argv = &xargv;
426 CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv);
427 CORBA::Object_var O = ORB->string_to_object(s);
429 SALOME_MED::FIELDINT_ptr t = SALOME_MED::FIELDINT::_narrow(O);
435 SALOME_MED::FIELDDOUBLE_ptr createCorbaFieldDouble(SALOME_MED::SUPPORT_ptr,
438 SALOME_MED::FIELDINT_ptr createCorbaFieldInt(SALOME_MED::SUPPORT_ptr,
441 SALOME_MED::SUPPORT_ptr createCorbaSupport(const SUPPORT *);
443 FIELDDOUBLE * createLocalFieldDouble(const int, const int);
445 FIELDINT * createLocalFieldInt(const int, const int);
448 SALOME_MED::FIELDDOUBLE_ptr createCorbaFieldDouble(SALOME_MED::SUPPORT_ptr mySupportIOR,FIELDDOUBLE * field)
450 BEGIN_OF("SALOME_MED::FIELDDOUBLE_ptr createCorbaFieldDouble from libMedCorba_Swig");
452 SCRUTE(mySupportIOR);
456 field->setName("Corba Double Field");
458 field->setDescription("Got From A Local One");
460 FIELDDOUBLE_i * fieldimpl = new FIELDDOUBLE_i(mySupportIOR,field);
462 POA_SALOME_MED::FIELDDOUBLE_tie<FIELDDOUBLE_i> * fieldcorba1 =
463 new POA_SALOME_MED::FIELDDOUBLE_tie<FIELDDOUBLE_i>(fieldimpl,true);
465 SALOME_MED::FIELDDOUBLE_ptr fieldcorba2 = fieldcorba1->_this();
467 SALOME_MED::FIELDDOUBLE_ptr fieldcorba3 = SALOME_MED::FIELDDOUBLE::_duplicate(fieldcorba2);
469 fieldcorba1->_remove_ref();
479 END_OF("SALOME_MED::FIELDDOUBLE_ptr createCorbaFieldDouble from libMedCorba_Swig");
481 MESSAGE("Test de tirarge sur le pointeur Corba Field dans le cxx");
483 char * name = fieldcorba3->getName();
490 SALOME_MED::FIELDINT_ptr createCorbaFieldInt(SALOME_MED::SUPPORT_ptr mySupportIOR,FIELDINT * field)
492 BEGIN_OF("SALOME_MED::FIELDINT_ptr createCorbaFieldInt from libMedCorba_Swig");
494 SCRUTE(mySupportIOR);
498 field->setName("Corba Integer Field");
500 field->setDescription("Got From A Local One");
502 FIELDINT_i * fieldimpl = new FIELDINT_i(mySupportIOR,field);
504 POA_SALOME_MED::FIELDINT_tie<FIELDINT_i> * fieldcorba1 =
505 new POA_SALOME_MED::FIELDINT_tie<FIELDINT_i>(fieldimpl,true);
507 SALOME_MED::FIELDINT_ptr fieldcorba2 = fieldcorba1->_this();
509 SALOME_MED::FIELDINT_ptr fieldcorba3 = SALOME_MED::FIELDINT::_duplicate(fieldcorba2);
511 fieldcorba1->_remove_ref();
521 END_OF("SALOME_MED::FIELDINT_ptr createCorbaFieldInt from libMedCorba_Swig");
522 MESSAGE("Test de tirarge sur le pointeur Corba Field dans le cxx");
524 char * name = fieldcorba3->getName();
531 SALOME_MED::SUPPORT_ptr createCorbaSupport(const SUPPORT * const support)
533 BEGIN_OF("SALOME_MED::SUPPORT_ptr createCorbaSupport from libMedCorba_Swig");
537 SUPPORT_i * supportimpl = new SUPPORT_i(support);
539 SALOME_MED::SUPPORT_ptr supportcorba =
540 supportimpl->POA_SALOME_MED::SUPPORT::_this();
544 SCRUTE(supportcorba);
546 supportimpl->_remove_ref();
548 END_OF("SALOME_MED::SUPPORT_ptr createCorbaSupport from libMedCorba_Swig");
553 FIELDDOUBLE * createLocalFieldDouble(const int NumberOfComponents,
554 const int LengthValue)
556 BEGIN_OF("FIELDDOUBLE createLocalFieldDouble from libMedCorba_Swig");
558 SCRUTE(NumberOfComponents);
561 //FIELD<double> * fieldloc = new FIELD<double>();
562 FIELDDOUBLE * fieldloc = new FIELDDOUBLE();
563 fieldloc -> allocValue(NumberOfComponents,LengthValue);
565 END_OF("FIELDDOUBLE createLocalFieldDouble from libMedCorba_Swig");
570 FIELDINT * createLocalFieldInt(const int NumberOfComponents,
571 const int LengthValue)
573 BEGIN_OF("FIELDINT createLocalFieldInt from libMedCorba_Swig");
575 SCRUTE(NumberOfComponents);
578 //FIELD<int> * fieldloc = new FIELD<int>();
579 FIELDINT * fieldloc = new FIELDINT();
580 fieldloc -> allocValue(NumberOfComponents,LengthValue);
582 END_OF("FIELDDOUBLE createLocalFieldInt from libMedCorba_Swig");