diff --git a/src/entity-py.cc b/src/entity-py.cc index e3e5522ccb7b65ec580040acfc63ac637ad3acce..976a2b8efc3a427050bbc544937fe4671a0d78dd 100644 --- a/src/entity-py.cc +++ b/src/entity-py.cc @@ -20,8 +20,9 @@ #include <dynamic-graph/factory.h> #include <../src/convert-dg-to-py.hh> -#include "dynamic-graph/command.h" -#include "dynamic-graph/value.h" +#include <dynamic-graph/command.h> +#include <dynamic-graph/value.h> +#include <dynamic-graph/pool.h> using dynamicgraph::Entity; using dynamicgraph::SignalBase; @@ -51,13 +52,23 @@ namespace dynamicgraph { return NULL; Entity* obj = NULL; - try { - obj = dynamicgraph::g_factory.newEntity(std::string(className), - std::string(instanceName)); - } catch (std::exception& exc) { - PyErr_SetString(error, exc.what()); - return NULL; - } + /* Try to find if the corresponding object already exists. */ + if( dynamicgraph::g_pool.existEntity( instanceName,obj ) ) + { + if( obj->getClassName()!=className ) + throw ExceptionPython( ExceptionPython::CLASS_INCONSISTENT, + "Found an object with the same name but of different class." ); + } + else /* If not, create a new object. */ + { + try { + obj = dynamicgraph::g_factory.newEntity(std::string(className), + std::string(instanceName)); + } catch (std::exception& exc) { + PyErr_SetString(error, exc.what()); + return NULL; + } + } // Return the pointer as a PyCObject return PyCObject_FromVoidPtr((void*)obj, NULL);