diff --git a/src/dynamic-graph-py.cc b/src/dynamic-graph-py.cc index 3ba6c146cf3c44460219b91f1954ffd7689cae2d..bf70bbafcb170d6df7e3757b6ad62a10f53b3a82 100644 --- a/src/dynamic-graph-py.cc +++ b/src/dynamic-graph-py.cc @@ -38,6 +38,7 @@ namespace dynamicgraph { } namespace entity { extern PyObject* create(PyObject* self, PyObject* args); + extern PyObject* display(PyObject* self, PyObject* args); extern PyObject* getName(PyObject* self, PyObject* args); extern PyObject* getSignal(PyObject* self, PyObject* args); extern PyObject* listSignals(PyObject* self, PyObject* args); @@ -161,6 +162,8 @@ static PyMethodDef dynamicGraphMethods[] = { // Entity {"create_entity", dynamicgraph::python::entity::create, METH_VARARGS, "create an Entity C++ object"}, + {"display_entity", dynamicgraph::python::entity::display, METH_VARARGS, + "print an Entity C++ object"}, {"entity_get_name", dynamicgraph::python::entity::getName, METH_VARARGS, "get the name of an Entity"}, {"entity_get_signal", dynamicgraph::python::entity::getSignal, METH_VARARGS, diff --git a/src/dynamic_graph/entity.py b/src/dynamic_graph/entity.py index baebb3eec74930437fb04240b84423236a549eac..17ae642969094c03efe8f494935786a27098f1ac 100644 --- a/src/dynamic_graph/entity.py +++ b/src/dynamic_graph/entity.py @@ -72,6 +72,9 @@ class Entity (object) : def name(self) : return wrap.entity_get_name(self.obj) + def __str__(self) : + return wrap.display_entity(self.obj) + def signal (self, name) : """ Get a signal of the entity from signal name diff --git a/src/entity-py.cc b/src/entity-py.cc index af85ed130c202f2bab523da0e23e82843fbd96eb..a0895a3966ea952d86686aaf371902d0db069dac 100644 --- a/src/entity-py.cc +++ b/src/entity-py.cc @@ -505,6 +505,27 @@ namespace dynamicgraph { std::string docstring = command->getDocstring(); return Py_BuildValue("s", docstring.c_str()); } + + PyObject* display(PyObject* /*self*/, PyObject* args) + { + /* Retrieve the entity instance. */ + PyObject* object = NULL; + if (!PyArg_ParseTuple(args, "O", &object) + || (!PyCObject_Check(object)) ) + { + PyErr_SetString(error, "first argument is not an object"); + return NULL; + } + void* pointer = PyCObject_AsVoidPtr(object); + Entity* entity = (Entity*)pointer; + + /* Run the display function. */ + std::ostringstream oss; + entity->display(oss); + + /* Return the resulting string. */ + return Py_BuildValue("s", oss.str().c_str()); + } } } }