2#include <Core/CoreMacros.hpp>
5#if defined RA_DATAFLOW_CORE_EXPORTS
6# define RA_DATAFLOW_CORE_API DLL_EXPORT
7#elif defined RA_DATAFLOW_STATIC
8# define RA_DATAFLOW_CORE_API
10# define RA_DATAFLOW_CORE_API DLL_IMPORT
13#if defined RA_DATAFLOW_GUI_EXPORTS
14# define RA_DATAFLOW_GUI_API DLL_EXPORT
15#elif defined RA_DATAFLOW_STATIC
16# define RA_DATAFLOW_GUI_API
18# define RA_DATAFLOW_GUI_API DLL_IMPORT
21#include <Core/Containers/VectorArray.hpp>
23#include <Core/Utils/Color.hpp>
24#include <Core/Utils/Log.hpp>
25#include <Core/Utils/TypesUtils.hpp>
27#include <nlohmann/json.hpp>
54#define NODE_TYPES( FACTORY, NAMESPACE ) \
55 DATAFLOW_MACRO( Scalar, Scalar, FACTORY, NAMESPACE ); \
56 DATAFLOW_MACRO( Int, int, FACTORY, NAMESPACE ); \
57 DATAFLOW_MACRO( Color, Utils::Color, FACTORY, NAMESPACE ); \
58 DATAFLOW_MACRO( Vector2, Vector2, FACTORY, NAMESPACE ); \
59 DATAFLOW_MACRO( Vector3, Vector3, FACTORY, NAMESPACE ); \
60 DATAFLOW_MACRO( Vector4, Vector4, FACTORY, NAMESPACE );
68template <
typename Scalar,
int Rows,
int Cols>
69struct adl_serializer<Eigen::Matrix<Scalar, Rows, Cols>> {
70 static void to_json( nlohmann::json& j,
const Eigen::Matrix<Scalar, Rows, Cols>& matrix ) {
71 for (
int row = 0; row < matrix.rows(); ++row ) {
72 nlohmann::json column = nlohmann::json::array();
73 for (
int col = 0; col < matrix.cols(); ++col ) {
74 column.push_back( matrix( row, col ) );
76 j.push_back( column );
80 static void from_json(
const nlohmann::json& j, Eigen::Matrix<Scalar, Rows, Cols>& matrix ) {
81 for (
std::size_t row = 0; row < j.size(); ++row ) {
82 const auto& jrow = j.at( row );
83 for (
std::size_t col = 0; col < jrow.size(); ++col ) {
84 const auto& value = jrow.at( col );
85 value.get_to( matrix( row, col ) );
92struct adl_serializer<
Ra::Core::Utils::ColorBase<T>> {
94 static void to_json( json& j,
const Color& value ) {
95 j.push_back( value( 0 ) );
96 j.push_back( value( 1 ) );
97 j.push_back( value( 2 ) );
98 j.push_back( value( 3 ) );
100 static void from_json(
const json& j, Color& value ) {
101 j.at( 0 ).get_to( value( 0 ) );
102 j.at( 1 ).get_to( value( 1 ) );
103 j.at( 2 ).get_to( value( 2 ) );
104 j.at( 3 ).get_to( value( 3 ) );
120#define RA_NODE_PARAMETER( T, name, ... ) \
122 T& param_##name() noexcept { \
123 return m_param_##name->second; \
125 const T& param_##name() const noexcept { \
126 return m_param_##name->second; \
130 ParamHandle<T> m_param_##name { \
131 add_parameter<T>( std::string( #name ), __VA_ARGS__ ) \
134#define RA_NODE_PORT_IN_ACCESSOR( T, name ) \
136 PortInPtr<T> port_in_##name() { \
137 return m_port_in_##name; \
145#define RA_NODE_PORT_IN( T, name ) \
146 RA_NODE_PORT_IN_ACCESSOR( T, name ) \
149 PortInPtr<T> m_port_in_##name { \
150 add_input<T>( std::string( #name ) ) \
158#define RA_NODE_PORT_IN_WITH_DEFAULT( T, name, default_value ) \
159 RA_NODE_PORT_IN_ACCESSOR( T, name ) \
162 PortInPtr<T> m_port_in_##name { \
163 add_input<T>( std::string( #name ), default_value ) \
166#define RA_NODE_PORT_OUT_ACCESSOR( T, name ) \
168 PortOutPtr<T> port_out_##name() { \
169 return m_port_out_##name; \
177#define RA_NODE_PORT_OUT( T, name ) \
178 RA_NODE_PORT_OUT_ACCESSOR( T, name ) \
180 PortOutPtr<T> m_port_out_##name { \
181 add_output<T>( std::string( #name ) ) \
189#define RA_NODE_PORT_OUT_WITH_DATA( T, name ) \
190 RA_NODE_PORT_OUT_ACCESSOR( T, name ) \
193 PortOutPtr<T> m_port_out_##name { \
194 add_output<T>( &m_##name, std::string( #name ) ) \
hepler function to manage enum as underlying types in VariableSet