// MED MedCorba_Swig : binding of MED CORBA objects woth Python // // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org // // // // File : libMedCorba_Swig.i // Module : MED %module libMedCorba_Swig %include "libMEDMEM_Swig.i" %{ #include "convert.hxx" #include "Family_i.hxx" #include "FieldDouble_i.hxx" #include "Field_i.hxx" #include "FieldInt_i.hxx" #include "FieldOf_i.hxx" #include "Group_i.hxx" #include "Med_i.hxx" #include "Mesh_i.hxx" #include "Support_i.hxx" #include "MEDMEM_SWIG_FieldDouble.hxx" #include "MEDMEM_SWIG_FieldInt.hxx" %} /* typemap in and out for Corba Objects (MESH, FIELDDOUBLE, FIELDINT and Support) between C++ and Python WARNING (NB) to the user of those typmaps (SWIG wrapping for C++ routines ------------------------------------------------------------------------- You have to be quite careful about the SWIG version your are currently using, because CORBA pointeur _ptr or _var could be wrapped by SWIG using their reference rather than the pointeur itself (differences detected using SWIG 1.1.x, SWIG 1.3.13 and SWIG 1.3.17) */ %typemap(python,out) SALOME_MED::MESH_ptr, SALOME_MED::FIELDDOUBLE_ptr, SALOME_MED::FIELDINT_ptr, SALOME_MED::SUPPORT_ptr, const SALOME_MED::MESH_ptr, const SALOME_MED::FIELDDOUBLE_ptr, const SALOME_MED::FIELDINT_ptr, const SALOME_MED::SUPPORT_ptr { MESSAGE("typemap out sur Objet Corba version ptr"); SCRUTE($1); // Get the orb corba python PyObject* pdict = PyDict_New(); PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins()); PyRun_String("import CORBA", Py_single_input, pdict, pdict); PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input, pdict, pdict); PyObject* orb = PyDict_GetItemString(pdict, "o"); // Get the orb Corba C++ int argc = 0; char *xargv = ""; char **argv = &xargv; CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv); string s = ORB->object_to_string($1); SCRUTE(s); PyObject * tmp = PyString_FromString(s.c_str()); SCRUTE(tmp); $result = PyObject_CallMethod(orb, "string_to_object", "O", tmp); SCRUTE($result); } %typemap(python,out) SALOME_MED::MESH_var, SALOME_MED::FIELDDOUBLE_var, SALOME_MED::FIELDINT_var, SALOME_MED::SUPPORT_var, const SALOME_MED::MESH_var, const SALOME_MED::FIELDDOUBLE_var, const SALOME_MED::FIELDINT_var, const SALOME_MED::SUPPORT_var { MESSAGE("typemap out sur Objet Corba version var"); // Get the orb corba python PyObject* pdict = PyDict_New(); PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins()); PyRun_String("import CORBA", Py_single_input, pdict, pdict); PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input, pdict, pdict); PyObject* orb = PyDict_GetItemString(pdict, "o"); // Get the orb Corba C++ int argc = 0; char *xargv = ""; char **argv = &xargv; CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv); string s = ORB->object_to_string(*$1); SCRUTE(s); PyObject * tmp = PyString_FromString(s.c_str()); SCRUTE(tmp); $result = PyObject_CallMethod(orb, "string_to_object", "O", tmp); SCRUTE($result); } %typemap(python,in) const SALOME_MED::MESH_ptr &, SALOME_MED::MESH_ptr & { MESSAGE("typemap in sur Objet Corba MESH avec reference"); PyObject* pdict = PyDict_New(); PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins()); PyRun_String("import CORBA", Py_single_input, pdict, pdict); PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input, pdict, pdict); PyObject* orb = PyDict_GetItemString(pdict, "o"); // Ask omniORBpy to transform MESH (python Corba) ptr to IOR string PyObject* iorMesh = PyObject_CallMethod(orb, "object_to_string", "O", $input); if (iorMesh == Py_None) return NULL; char * s = PyString_AsString(PyObject_Str(iorMesh)); // Ask omniORB to convert IOR string to MESH (C++ Corba) ptr int argc = 0; char *xargv = ""; char **argv = &xargv; CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv); CORBA::Object_var O = ORB->string_to_object(s); SCRUTE(O); SALOME_MED::MESH_ptr t = SALOME_MED::MESH::_narrow(O); $1 = &t; SCRUTE(*$1); } %typemap(python,in) const SALOME_MED::FIELDDOUBLE_ptr &, SALOME_MED::FIELDDOUBLE_ptr & { MESSAGE("typemap in sur Objet Corba FIELDDOUBLE avec reference"); PyObject* pdict = PyDict_New(); PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins()); PyRun_String("import CORBA", Py_single_input, pdict, pdict); PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input, pdict, pdict); PyObject* orb = PyDict_GetItemString(pdict, "o"); // Ask omniORBpy to transform FIELDDOUBLE (python Corba) ptr to IOR string PyObject* iorFieldDouble = PyObject_CallMethod(orb, "object_to_string", "O", $input); if (iorFieldDouble == Py_None) return NULL; char * s = PyString_AsString(PyObject_Str(iorFieldDouble)); // Ask omniORB to convert IOR string to FIELDDOUBLE (C++ Corba) ptr int argc = 0; char *xargv = ""; char **argv = &xargv; CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv); CORBA::Object_var O = ORB->string_to_object(s); SCRUTE(O); SALOME_MED::FIELDDOUBLE_ptr t = SALOME_MED::FIELDDOUBLE::_narrow(O); $1 = &t; SCRUTE(*$1); } %typemap(python,in) const SALOME_MED::FIELDINT_ptr &, SALOME_MED::FIELDINT_ptr & { MESSAGE("typemap in sur Objet Corba FIELDINT avec reference"); PyObject* pdict = PyDict_New(); PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins()); PyRun_String("import CORBA", Py_single_input, pdict, pdict); PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input, pdict, pdict); PyObject* orb = PyDict_GetItemString(pdict, "o"); // Ask omniORBpy to transform FIELDINT (python Corba) ptr to IOR string PyObject* iorFieldInt = PyObject_CallMethod(orb, "object_to_string", "O", $input); if (iorFieldInt == Py_None) return NULL; char * s = PyString_AsString(PyObject_Str(iorFieldInt)); // Ask omniORB to convert IOR string to FIELDINT (C++ Corba) ptr int argc = 0; char *xargv = ""; char **argv = &xargv; CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv); CORBA::Object_var O = ORB->string_to_object(s); SCRUTE(O); SALOME_MED::FIELDINT_ptr t = SALOME_MED::FIELDINT::_narrow(O); $1 = &t; SCRUTE(*$1); } %typemap(python,in) const SALOME_MED::SUPPORT_ptr &, SALOME_MED::SUPPORT_ptr & { MESSAGE("typemap in sur Objet Corba SUPPORT avec reference"); PyObject* pdict = PyDict_New(); PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins()); PyRun_String("import CORBA", Py_single_input, pdict, pdict); PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input, pdict, pdict); PyObject* orb = PyDict_GetItemString(pdict, "o"); // Ask omniORBpy to transform SUPPORT (python Corba) ptr to IOR string PyObject* iorSupport = PyObject_CallMethod(orb, "object_to_string", "O", $input); if (iorSupport == Py_None) return NULL; char * s = PyString_AsString(PyObject_Str(iorSupport)); // Ask omniORB to convert IOR string to SUPPORT (C++ Corba) ptr int argc = 0; char *xargv = ""; char **argv = &xargv; CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv); CORBA::Object_var O = ORB->string_to_object(s); SCRUTE(O); SALOME_MED::SUPPORT_ptr t = SALOME_MED::SUPPORT::_narrow(O); $1 = &t; SCRUTE(*$1); } %typemap(python,in) const SALOME_MED::SUPPORT_ptr, SALOME_MED::SUPPORT_ptr { MESSAGE("typemap in sur Objet Corba SUPPORT sans reference"); SCRUTE($input); PyObject* pdict = PyDict_New(); PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins()); PyRun_String("import CORBA", Py_single_input, pdict, pdict); PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input, pdict, pdict); PyObject* orb = PyDict_GetItemString(pdict, "o"); // Ask omniORBpy to transform SUPPORT (python Corba) ptr to IOR string PyObject* iorSupport = PyObject_CallMethod(orb, "object_to_string", "O", $input); if (iorSupport == Py_None) return NULL; char * s = PyString_AsString(PyObject_Str(iorSupport)); // Ask omniORB to convert IOR string to SUPPORT (C++ Corba) ptr int argc = 0; char *xargv = ""; char **argv = &xargv; CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv); CORBA::Object_var O = ORB->string_to_object(s); SCRUTE(O); SALOME_MED::SUPPORT_ptr t = SALOME_MED::SUPPORT::_narrow(O); $1 = t; SCRUTE($1); } %typemap(python,in) const SALOME_MED::MESH_ptr, SALOME_MED::MESH_ptr { MESSAGE("typemap in sur Objet Corba MESH sans reference"); SCRUTE($input); PyObject* pdict = PyDict_New(); PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins()); PyRun_String("import CORBA", Py_single_input, pdict, pdict); PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input, pdict, pdict); PyObject* orb = PyDict_GetItemString(pdict, "o"); // Ask omniORBpy to transform MESH (python Corba) ptr to IOR string PyObject* iorMesh = PyObject_CallMethod(orb, "object_to_string", "O", $input); if (iorMesh == Py_None) return NULL; char * s = PyString_AsString(PyObject_Str(iorMesh)); // Ask omniORB to convert IOR string to MESH (C++ Corba) ptr int argc = 0; char *xargv = ""; char **argv = &xargv; CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv); CORBA::Object_var O = ORB->string_to_object(s); SCRUTE(O); SALOME_MED::MESH_ptr t = SALOME_MED::MESH::_narrow(O); $1 = t; SCRUTE($1); } %typemap(python,in) const SALOME_MED::FIELDDOUBLE_ptr, SALOME_MED::FIELDDOUBLE_ptr & { MESSAGE("typemap in sur Objet Corba FIELDDOUBLE sans reference"); SCRUTE($input); PyObject* pdict = PyDict_New(); PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins()); PyRun_String("import CORBA", Py_single_input, pdict, pdict); PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input, pdict, pdict); PyObject* orb = PyDict_GetItemString(pdict, "o"); // Ask omniORBpy to transform FIELDDOUBLE (python Corba) ptr to IOR string PyObject* iorFieldDouble = PyObject_CallMethod(orb, "object_to_string", "O", $input); if (iorFieldDouble == Py_None) return NULL; char * s = PyString_AsString(PyObject_Str(iorFieldDouble)); // Ask omniORB to convert IOR string to FIELDDOUBLE (C++ Corba) ptr int argc = 0; char *xargv = ""; char **argv = &xargv; CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv); CORBA::Object_var O = ORB->string_to_object(s); SCRUTE(O); SALOME_MED::FIELDDOUBLE_ptr t = SALOME_MED::FIELDDOUBLE::_narrow(O); $1 = t; SCRUTE($1); } %typemap(python,in) const SALOME_MED::FIELDINT_ptr, SALOME_MED::FIELDINT_ptr { MESSAGE("typemap in sur Objet Corba FIELDINT sans reference"); SCRUTE($input); PyObject* pdict = PyDict_New(); PyDict_SetItemString(pdict, "__builtins__", PyEval_GetBuiltins()); PyRun_String("import CORBA", Py_single_input, pdict, pdict); PyRun_String("o = CORBA.ORB_init([''], CORBA.ORB_ID);", Py_single_input, pdict, pdict); PyObject* orb = PyDict_GetItemString(pdict, "o"); // Ask omniORBpy to transform FIELDINT (python Corba) ptr to IOR string PyObject* iorFieldInt = PyObject_CallMethod(orb, "object_to_string", "O", $input); if (iorFieldInt == Py_None) return NULL; char * s = PyString_AsString(PyObject_Str(iorFieldInt)); // Ask omniORB to convert IOR string to FIELDINT (C++ Corba) ptr int argc = 0; char *xargv = ""; char **argv = &xargv; CORBA::ORB_var ORB = CORBA::ORB_init(argc, argv); CORBA::Object_var O = ORB->string_to_object(s); SCRUTE(O); SALOME_MED::FIELDINT_ptr t = SALOME_MED::FIELDINT::_narrow(O); $1 = t; SCRUTE($1); } SALOME_MED::FIELDDOUBLE_ptr createCorbaFieldDouble(SALOME_MED::SUPPORT_ptr, FIELDDOUBLE *); SALOME_MED::FIELDINT_ptr createCorbaFieldInt(SALOME_MED::SUPPORT_ptr, FIELDINT *); SALOME_MED::SUPPORT_ptr createCorbaSupport(const SUPPORT *); FIELDDOUBLE * createLocalFieldDouble(const int, const int); FIELDINT * createLocalFieldInt(const int, const int); %{ SALOME_MED::FIELDDOUBLE_ptr createCorbaFieldDouble(SALOME_MED::SUPPORT_ptr mySupportIOR,FIELDDOUBLE * field) { BEGIN_OF("SALOME_MED::FIELDDOUBLE_ptr createCorbaFieldDouble from libMedCorba_Swig"); SCRUTE(mySupportIOR); SCRUTE(field); field->setName("Corba Double Field"); field->setDescription("Got From A Local One"); FIELDDOUBLE_i * fieldimpl = new FIELDDOUBLE_i(mySupportIOR,field); POA_SALOME_MED::FIELDDOUBLE_tie * fieldcorba1 = new POA_SALOME_MED::FIELDDOUBLE_tie(fieldimpl,true); SALOME_MED::FIELDDOUBLE_ptr fieldcorba2 = fieldcorba1->_this(); SALOME_MED::FIELDDOUBLE_ptr fieldcorba3 = SALOME_MED::FIELDDOUBLE::_duplicate(fieldcorba2); fieldcorba1->_remove_ref(); SCRUTE(fieldimpl); SCRUTE(fieldcorba1); SCRUTE(fieldcorba2); SCRUTE(fieldcorba3); END_OF("SALOME_MED::FIELDDOUBLE_ptr createCorbaFieldDouble from libMedCorba_Swig"); MESSAGE("Test de tirarge sur le pointeur Corba Field dans le cxx"); char * name = fieldcorba3->getName(); SCRUTE(name); return fieldcorba3; } SALOME_MED::FIELDINT_ptr createCorbaFieldInt(SALOME_MED::SUPPORT_ptr mySupportIOR,FIELDINT * field) { BEGIN_OF("SALOME_MED::FIELDINT_ptr createCorbaFieldInt from libMedCorba_Swig"); SCRUTE(mySupportIOR); SCRUTE(field); field->setName("Corba Integer Field"); field->setDescription("Got From A Local One"); FIELDINT_i * fieldimpl = new FIELDINT_i(mySupportIOR,field); POA_SALOME_MED::FIELDINT_tie * fieldcorba1 = new POA_SALOME_MED::FIELDINT_tie(fieldimpl,true); SALOME_MED::FIELDINT_ptr fieldcorba2 = fieldcorba1->_this(); SALOME_MED::FIELDINT_ptr fieldcorba3 = SALOME_MED::FIELDINT::_duplicate(fieldcorba2); fieldcorba1->_remove_ref(); SCRUTE(fieldimpl); SCRUTE(fieldcorba1); SCRUTE(fieldcorba2); SCRUTE(fieldcorba3); END_OF("SALOME_MED::FIELDINT_ptr createCorbaFieldInt from libMedCorba_Swig"); MESSAGE("Test de tirarge sur le pointeur Corba Field dans le cxx"); char * name = fieldcorba3->getName(); SCRUTE(name); return fieldcorba3; } SALOME_MED::SUPPORT_ptr createCorbaSupport(const SUPPORT * const support) { BEGIN_OF("SALOME_MED::SUPPORT_ptr createCorbaSupport from libMedCorba_Swig"); SCRUTE(support); SUPPORT_i * supportimpl = new SUPPORT_i(support); SALOME_MED::SUPPORT_ptr supportcorba = supportimpl->POA_SALOME_MED::SUPPORT::_this(); SCRUTE(supportimpl); SCRUTE(supportcorba); supportimpl->_remove_ref(); END_OF("SALOME_MED::SUPPORT_ptr createCorbaSupport from libMedCorba_Swig"); return supportcorba; } FIELDDOUBLE * createLocalFieldDouble(const int NumberOfComponents, const int LengthValue) { BEGIN_OF("FIELDDOUBLE createLocalFieldDouble from libMedCorba_Swig"); SCRUTE(NumberOfComponents); SCRUTE(LengthValue); //FIELD * fieldloc = new FIELD(); FIELDDOUBLE * fieldloc = new FIELDDOUBLE(); fieldloc -> allocValue(NumberOfComponents,LengthValue); END_OF("FIELDDOUBLE createLocalFieldDouble from libMedCorba_Swig"); return fieldloc; } FIELDINT * createLocalFieldInt(const int NumberOfComponents, const int LengthValue) { BEGIN_OF("FIELDINT createLocalFieldInt from libMedCorba_Swig"); SCRUTE(NumberOfComponents); SCRUTE(LengthValue); //FIELD * fieldloc = new FIELD(); FIELDINT * fieldloc = new FIELDINT(); fieldloc -> allocValue(NumberOfComponents,LengthValue); END_OF("FIELDDOUBLE createLocalFieldInt from libMedCorba_Swig"); return fieldloc; } %}