[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