From 94a3a8748afe01217eabb8dc00c035ad92139bbf Mon Sep 17 00:00:00 2001 From: Florent Lamiraux <florent@laas.fr> Date: Thu, 20 Jan 2011 20:12:32 +0100 Subject: [PATCH] Bind SignalBase.display() and implement Entity.displaySignals() in python. --- src/dynamic-graph-py.cc | 11 +++++------ src/dynamic_graph/entity.py | 6 +++++- src/dynamic_graph/signal_base.py | 6 ++++++ src/entity-py.cc | 25 ------------------------- src/signal-base-py.cc | 22 ++++++++++++++++++++++ 5 files changed, 38 insertions(+), 32 deletions(-) diff --git a/src/dynamic-graph-py.cc b/src/dynamic-graph-py.cc index 88029a0..083f35f 100644 --- a/src/dynamic-graph-py.cc +++ b/src/dynamic-graph-py.cc @@ -30,6 +30,7 @@ namespace dynamicgraph { extern PyObject* create(PyObject* self, PyObject* args); extern PyObject* getTime(PyObject* self, PyObject* args); extern PyObject* getName(PyObject* self, PyObject* args); + extern PyObject* display(PyObject* self, PyObject* args); extern PyObject* getValue(PyObject* self, PyObject* args); extern PyObject* setValue(PyObject* self, PyObject* args); extern PyObject* recompute(PyObject* self, PyObject* args); @@ -38,7 +39,6 @@ namespace dynamicgraph { extern PyObject* create(PyObject* self, PyObject* args); extern PyObject* getName(PyObject* self, PyObject* args); extern PyObject* getSignal(PyObject* self, PyObject* args); - extern PyObject* displaySignals(PyObject* self, PyObject* args); extern PyObject* listSignals(PyObject* self, PyObject* args); extern PyObject* executeCommand(PyObject* self, PyObject* args); extern PyObject* listCommands(PyObject* self, PyObject* args); @@ -147,9 +147,11 @@ static PyMethodDef dynamicGraphMethods[] = { METH_VARARGS, "Get time of a SignalBase"}, {"signal_base_get_name", dynamicgraph::python::signalBase::getName, METH_VARARGS, "Get the name of a signal"}, + {"signal_base_display", dynamicgraph::python::signalBase::display, + METH_VARARGS, "Print the signal in a string"}, {"signal_base_get_value", dynamicgraph::python::signalBase::getValue, - METH_VARARGS, "Read the value of a signal"}, - {"signal_base_set_value", dynamicgraph::python::signalBase::setValue, + METH_VARARGS, "Read the value of a signal"}, + {"signal_base_set_value", dynamicgraph::python::signalBase::setValue, METH_VARARGS, "Set the value of a signal"}, {"signal_base_recompute", dynamicgraph::python::signalBase::recompute, METH_VARARGS, "Recompute the signal at given time"}, @@ -160,9 +162,6 @@ static PyMethodDef dynamicGraphMethods[] = { "get the name of an Entity"}, {"entity_get_signal", dynamicgraph::python::entity::getSignal, METH_VARARGS, "get signal by name from an Entity"}, - {"entity_display_signals", dynamicgraph::python::entity::displaySignals, - METH_VARARGS, - "Display the list of signals of an entity in standard output"}, {"entity_list_signals", dynamicgraph::python::entity::listSignals, METH_VARARGS, "Return the list of signals of an entity."}, diff --git a/src/dynamic_graph/entity.py b/src/dynamic_graph/entity.py index fa1634f..d43852b 100644 --- a/src/dynamic_graph/entity.py +++ b/src/dynamic_graph/entity.py @@ -79,7 +79,11 @@ class Entity (object) : """ Print the list of signals into standard output: temporary. """ - wrap.entity_display_signals(self.obj) + signals = self.signals() + print "--- <" + self.name + "> signal list: " + for s in signals[:-1]: + print " |-- <" + str(s) + print " `-- <" + str(signals[-1]) def signals(self) : """ diff --git a/src/dynamic_graph/signal_base.py b/src/dynamic_graph/signal_base.py index e51e788..c483610 100644 --- a/src/dynamic_graph/signal_base.py +++ b/src/dynamic_graph/signal_base.py @@ -211,3 +211,9 @@ class SignalBase (object) : Force signal to recompute the value at given time. """ return wrap.signal_base_recompute(self.obj, time) + + def __str__(self): + """ + Print signal in a string + """ + return wrap.signal_base_display(self.obj) diff --git a/src/entity-py.cc b/src/entity-py.cc index 325824f..f907867 100644 --- a/src/entity-py.cc +++ b/src/entity-py.cc @@ -132,31 +132,6 @@ namespace dynamicgraph { return PyCObject_FromVoidPtr((void*)signal, NULL); } - PyObject* displaySignals(PyObject* /*self*/, PyObject* args) - { - void* pointer = NULL; - PyObject* object = NULL; - - if (!PyArg_ParseTuple(args, "O", &object)) - return NULL; - - if (!PyCObject_Check(object)) { - PyErr_SetString(PyExc_TypeError, - "function takes a PyCObject as argument"); - return NULL; - } - - pointer = PyCObject_AsVoidPtr(object); - Entity* entity = (Entity*)pointer; - try { - entity->displaySignalList(std::cout); - } catch(ExceptionAbstract& exc) { - PyErr_SetString(error, exc.getStringMessage().c_str()); - return NULL; - } - return Py_BuildValue(""); - } - PyObject* listSignals(PyObject* /*self*/, PyObject* args) { void* pointer = NULL; diff --git a/src/signal-base-py.cc b/src/signal-base-py.cc index 52475bf..e0d6d8a 100644 --- a/src/signal-base-py.cc +++ b/src/signal-base-py.cc @@ -73,6 +73,28 @@ namespace dynamicgraph { return Py_BuildValue("i", time); } + PyObject* display(PyObject* /*self*/, PyObject* args) + { + void* pointer = NULL; + PyObject* object = NULL; + if (!PyArg_ParseTuple(args,"O", &object)) + return NULL; + if (!PyCObject_Check(object)) + return NULL; + + pointer = PyCObject_AsVoidPtr(object); + SignalBase<int>* obj = (SignalBase<int>*)pointer; + + std::ostringstream oss; + try { + obj->display(oss); + } catch (std::exception& exc) { + PyErr_SetString(error, exc.what()); + return NULL; + } + return Py_BuildValue("s", oss.str().c_str()); + } + PyObject* getValue(PyObject* /*self*/, PyObject* args) { void* pointer = NULL; -- GitLab