Skip to content
This repository was archived by the owner on Nov 28, 2025. It is now read-only.

Commit cc7662b

Browse files
jmirabelnim65s
authored andcommitted
Expose function to define new signals.
1 parent a58a73a commit cc7662b

File tree

3 files changed

+77
-47
lines changed

3 files changed

+77
-47
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ SET(${PROJECT_NAME}_HEADERS
4444
include/${CUSTOM_HEADER_DIR}/interpreter.hh
4545
include/${CUSTOM_HEADER_DIR}/module.hh
4646
include/${CUSTOM_HEADER_DIR}/python-compat.hh
47+
include/${CUSTOM_HEADER_DIR}/signal.hh
4748
include/${CUSTOM_HEADER_DIR}/signal-wrapper.hh
4849
)
4950

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
// Copyright 2020, Joseph Mirabel, LAAS-CNRS.
2+
3+
#include <sstream>
4+
5+
#include <boost/python.hpp>
6+
7+
#include <dynamic-graph/signal-base.h>
8+
#include <dynamic-graph/signal-ptr.h>
9+
#include <dynamic-graph/signal-time-dependent.h>
10+
#include <dynamic-graph/signal.h>
11+
12+
#include "dynamic-graph/python/signal-wrapper.hh"
13+
14+
namespace dynamicgraph {
15+
namespace python {
16+
17+
template <typename T, typename Time>
18+
auto exposeSignal(const std::string& name) {
19+
namespace bp = boost::python;
20+
21+
typedef Signal<T, Time> S_t;
22+
bp::class_<S_t, bp::bases<SignalBase<Time> >, boost::noncopyable> obj(
23+
name.c_str(), bp::init<std::string>());
24+
obj.add_property(
25+
"value",
26+
bp::make_function(&S_t::accessCopy,
27+
bp::return_value_policy<bp::copy_const_reference>()),
28+
&S_t::setConstant, // TODO check the setter
29+
"the signal value.\n"
30+
"warning: for Eigen objects, sig.value[0] = 1. may not work).");
31+
return obj;
32+
}
33+
34+
template <typename T, typename Time>
35+
auto exposeSignalWrapper(const std::string& name) {
36+
namespace bp = boost::python;
37+
38+
typedef SignalWrapper<T, Time> S_t;
39+
bp::class_<S_t, bp::bases<Signal<T, Time> >, boost::noncopyable> obj(
40+
name.c_str(), bp::no_init);
41+
return obj;
42+
}
43+
44+
template <typename T, typename Time>
45+
auto exposeSignalPtr(const std::string& name) {
46+
namespace bp = boost::python;
47+
48+
typedef SignalPtr<T, Time> S_t;
49+
bp::class_<S_t, bp::bases<Signal<T, Time> >, boost::noncopyable> obj(
50+
name.c_str(), bp::no_init);
51+
return obj;
52+
}
53+
54+
template <typename T, typename Time>
55+
auto exposeSignalTimeDependent(const std::string& name) {
56+
namespace bp = boost::python;
57+
58+
typedef SignalTimeDependent<T, Time> S_t;
59+
bp::class_<S_t, bp::bases<Signal<T, Time> >, boost::noncopyable> obj(
60+
name.c_str(), bp::no_init);
61+
return obj;
62+
}
63+
64+
template <typename T, typename Time>
65+
void exposeSignalsOfType(const std::string& name) {
66+
exposeSignal<T, Time>("Signal" + name);
67+
exposeSignalPtr<T, Time>("SignalPtr" + name);
68+
exposeSignalWrapper<T, Time>("SignalWrapper" + name);
69+
exposeSignalTimeDependent<T, Time>("SignalTimeDependent" + name);
70+
}
71+
72+
} // namespace python
73+
} // namespace dynamicgraph

src/dynamic_graph/signal-base-py.cc

Lines changed: 3 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,17 @@
55

66
#include <boost/python.hpp>
77

8+
#include "dynamic-graph/python/signal.hh"
9+
810
#include <dynamic-graph/signal-base.h>
911
#include <dynamic-graph/signal.h>
1012
#include <dynamic-graph/signal-ptr.h>
1113
#include <dynamic-graph/signal-time-dependent.h>
12-
#include <dynamic-graph/signal-caster.h>
1314
#include <dynamic-graph/linear-algebra.h>
14-
#include <dynamic-graph/pool.h>
15-
#include <dynamic-graph/factory.h>
15+
#include <dynamic-graph/value.h>
1616

1717
#include "dynamic-graph/python/dynamic-graph-py.hh"
18-
#include "dynamic-graph/python/convert-dg-to-py.hh"
1918
#include "dynamic-graph/python/signal-wrapper.hh"
20-
#include "dynamic-graph/python/module.hh"
2119

2220
using dynamicgraph::SignalBase;
2321

@@ -26,8 +24,6 @@ namespace bp = boost::python;
2624
namespace dynamicgraph {
2725
namespace python {
2826

29-
using namespace convert;
30-
3127
typedef int time_type;
3228

3329
typedef Eigen::AngleAxis<double> VectorUTheta;
@@ -82,17 +78,6 @@ void exposeSignalBase(const char* name) {
8278
"Print the signal dependencies in a string");
8379
}
8480

85-
template <typename T, typename Time>
86-
auto exposeSignal(const std::string& name) {
87-
typedef Signal<T, Time> S_t;
88-
bp::class_<S_t, bp::bases<SignalBase<Time> >, boost::noncopyable> obj(name.c_str(), bp::init<std::string>());
89-
obj.add_property("value", bp::make_function(&S_t::accessCopy, bp::return_value_policy<bp::copy_const_reference>()),
90-
&S_t::setConstant, // TODO check the setter
91-
"the signal value.\n"
92-
"warning: for Eigen objects, sig.value[0] = 1. may not work).");
93-
return obj;
94-
}
95-
9681
template <>
9782
auto exposeSignal<MatrixHomogeneous, time_type>(const std::string& name) {
9883
typedef Signal<MatrixHomogeneous, time_type> S_t;
@@ -107,35 +92,6 @@ auto exposeSignal<MatrixHomogeneous, time_type>(const std::string& name) {
10792
return obj;
10893
}
10994

110-
template <typename T, typename Time>
111-
auto exposeSignalWrapper(const std::string& name) {
112-
typedef SignalWrapper<T, Time> S_t;
113-
bp::class_<S_t, bp::bases<Signal<T, Time> >, boost::noncopyable> obj(name.c_str(), bp::no_init);
114-
return obj;
115-
}
116-
117-
template <typename T, typename Time>
118-
auto exposeSignalPtr(const std::string& name) {
119-
typedef SignalPtr<T, Time> S_t;
120-
bp::class_<S_t, bp::bases<Signal<T, Time> >, boost::noncopyable> obj(name.c_str(), bp::no_init);
121-
return obj;
122-
}
123-
124-
template <typename T, typename Time>
125-
auto exposeSignalTimeDependent(const std::string& name) {
126-
typedef SignalTimeDependent<T, Time> S_t;
127-
bp::class_<S_t, bp::bases<Signal<T, Time> >, boost::noncopyable> obj(name.c_str(), bp::no_init);
128-
return obj;
129-
}
130-
131-
template <typename T, typename Time>
132-
void exposeSignalsOfType(const std::string& name) {
133-
exposeSignal<T, Time>("Signal" + name);
134-
exposeSignalPtr<T, Time>("SignalPtr" + name);
135-
exposeSignalWrapper<T, Time>("SignalWrapper" + name);
136-
exposeSignalTimeDependent<T, Time>("SignalTimeDependent" + name);
137-
}
138-
13995
void exposeSignals() {
14096
exposeSignalBase<time_type>("SignalBase");
14197

0 commit comments

Comments
 (0)