[vtkusers] Mixing Boost.Python and VTK/Python
    Bryn Lloyd 
    lloyd at itis.ethz.ch
       
    Thu May 26 10:07:29 EDT 2011
    
    
  
Although I am still interested in a better solution, I currently have found
following way to deal with this:
 
I wrote a function, which creates a boost::python::object from the
vtkUnstructuredGrid, which it obtains from my MyClass object:
 
#include <vtkPythonUtil.h>
using boost::python::object;
using boost::python::import;
 
boost::python::object GetGrid(MyClass *m)
{
                object vtk_module = import("vtk");
                vtkUnstructuredGrid *volume = m->GetVolume();
                if(volume==NULL) return
object(boost::python::handle<>(Py_None));
                boost::python::handle<>
pvolume(vtkPythonGetObjectFromPointer((vtkObjectBase *)volume));
                return object(pvolume);
}
 
 
 
 
 
 
From: vtkusers-bounces at vtk.org [mailto:vtkusers-bounces at vtk.org] On Behalf
Of Bryn Lloyd
Sent: Thursday, May 26, 2011 12:05 PM
To: vtkusers at vtk.org
Subject: [vtkusers] Mixing Boost.Python and VTK/Python
 
Hi
 
A similar question has been asked here before, but I have not managed to get
a working solution from it. 
I have a class which returns a vtkUnstructuredGrid. I wrap my class using
boost python.
 
class MyClass { 
public: 
vtkUnstructuredGrid* GetGrid () { return m_Grid; }
private:
vtkUnstructuredGrid * m_Grid;
};
 
 
But if I call the function GetGrid in Python:
 
from vtk import * 
from MyModule import *
obj = MyClass()
grid = obj.GetGrid()
 
 
I get following error:
TypeError: No Python class registered for C++ class class
vtkUnstructuredGrid
 
 
The class MyClass has been wrapped as follows:
 
template<class T>
struct vtkObject_to_python
{
       static PyObject *convert(const T &p)
       {
              std::ostringstream oss;
              oss << (void*) &p;
              std::string address_str = oss.str();
 
              object obj = import("vtk").attr("vtkObjectBase")(address_str);
              return incref(obj.ptr());
       }
};
 
BOOST_PYTHON_MODULE(MyModule)
{
       to_python_converter<vtkUnstructuredGrid,
              vtkObject_to_python<vtkUnstructuredGrid> >();
 
       class_<MyClass>("MyClass")
              .def("GetGrid",&MyClass::GetGrid,
return_value_policy<reference_existing_object>())
       ;
}
 
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110526/d4146007/attachment.htm>
    
    
More information about the vtkusers
mailing list