[vtkusers] Mixing Boost.Python and VTK/Python
    Bryn Lloyd 
    lloyd at itis.ethz.ch
       
    Thu May 26 06:05:06 EDT 2011
    
    
  
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/12aba3ad/attachment.htm>
    
    
More information about the vtkusers
mailing list