[Bf-blender-cvs] [efb5108faaf] simulation-tree: more work on socket data types
Jacques Lucke
noreply at git.blender.org
Mon Feb 17 18:16:12 CET 2020
Commit: efb5108faaf67c77ef43790b8d5bcffe11c4f7ba
Author: Jacques Lucke
Date: Mon Feb 17 13:23:29 2020 +0100
Branches: simulation-tree
https://developer.blender.org/rBefb5108faaf67c77ef43790b8d5bcffe11c4f7ba
more work on socket data types
===================================================================
M source/blender/simulations/nodes/SIM_node_tree.h
M source/blender/simulations/nodes/my_test_node.cc
M source/blender/simulations/nodes/simulation_node_tree.cc
===================================================================
diff --git a/source/blender/simulations/nodes/SIM_node_tree.h b/source/blender/simulations/nodes/SIM_node_tree.h
index c89934c9345..f55c40aa256 100644
--- a/source/blender/simulations/nodes/SIM_node_tree.h
+++ b/source/blender/simulations/nodes/SIM_node_tree.h
@@ -9,6 +9,8 @@ extern struct bNodeTreeType *ntreeType_Simulation;
void register_node_tree_type_sim(void);
void register_node_type_my_test_node(void);
+void init_socket_data_types(void);
+void free_socket_data_types(void);
#ifdef __cplusplus
}
diff --git a/source/blender/simulations/nodes/my_test_node.cc b/source/blender/simulations/nodes/my_test_node.cc
index 00c561d55c9..5c3b4e17b39 100644
--- a/source/blender/simulations/nodes/my_test_node.cc
+++ b/source/blender/simulations/nodes/my_test_node.cc
@@ -7,6 +7,7 @@
#include "BLI_string_ref.h"
#include "BLI_set.h"
+using BLI::Set;
using BLI::StringRef;
using BLI::StringRefNull;
using BLI::Vector;
@@ -22,16 +23,23 @@ enum class SocketTypeCategory {
class SocketDataType {
public:
- using BuildFunc = std::function<bNodeSocket *(
- bNode *node, StringRef name, StringRef identifer, eNodeSocketInOut in_out)>;
-
std::string m_ui_name;
- BuildFunc m_build_fn;
+ bNodeSocketType *m_socket_type;
SocketTypeCategory m_category;
- SocketDataType(StringRef ui_name, BuildFunc build_fn, SocketTypeCategory category)
- : m_ui_name(ui_name), m_build_fn(std::move(build_fn)), m_category(category)
+ SocketDataType(StringRef ui_name, bNodeSocketType *socket_type, SocketTypeCategory category)
+ : m_ui_name(ui_name), m_socket_type(socket_type), m_category(category)
+ {
+ }
+
+ bNodeSocket *build(bNodeTree &ntree,
+ bNode &node,
+ eNodeSocketInOut in_out,
+ StringRef identifier,
+ StringRef ui_name) const
{
+ return nodeAddSocket(
+ &ntree, &node, in_out, m_socket_type->idname, identifier.data(), ui_name.data());
}
};
@@ -39,8 +47,8 @@ class BaseSocketDataType : public SocketDataType {
public:
ListSocketDataType *m_list_type;
- BaseSocketDataType(StringRef ui_name, BuildFunc build_fn)
- : SocketDataType(ui_name, std::move(build_fn), SocketTypeCategory::Base)
+ BaseSocketDataType(StringRef ui_name, bNodeSocketType *socket_type)
+ : SocketDataType(ui_name, socket_type, SocketTypeCategory::Base)
{
}
};
@@ -49,35 +57,71 @@ class ListSocketDataType : public SocketDataType {
public:
BaseSocketDataType *m_base_type;
- ListSocketDataType(StringRef ui_name, BuildFunc build_fn)
- : SocketDataType(ui_name, std::move(build_fn), SocketTypeCategory::List)
+ ListSocketDataType(StringRef ui_name, bNodeSocketType *socket_type)
+ : SocketDataType(ui_name, socket_type, SocketTypeCategory::List)
{
}
};
-class SocketDataTypes {
+class DataTypesInfo {
+ private:
+ Set<SocketDataType *> m_data_types;
+ Set<std::pair<SocketDataType *, SocketDataType *>> m_implicit_conversions;
+
public:
+ void add_data_type(SocketDataType *data_type)
+ {
+ m_data_types.add_new(data_type);
+ }
+
+ void add_implicit_conversion(SocketDataType *from, SocketDataType *to)
+ {
+ m_implicit_conversions.add_new({from, to});
+ }
};
+static DataTypesInfo *socket_data_types;
+
+static BaseSocketDataType *float_socket_type;
+static BaseSocketDataType *int_socket_type;
+
class SocketDecl {
+ protected:
+ bNodeTree &m_ntree;
+ bNode &m_node;
+
public:
- bNodeTree *m_ntree;
- bNode *m_node;
+ SocketDecl(bNodeTree &ntree, bNode &node) : m_ntree(ntree), m_node(node)
+ {
+ }
virtual void build() const = 0;
};
-class MockupSocketDecl : public SocketDecl {
- public:
+class FixedTypeSocketDecl : public SocketDecl {
eNodeSocketInOut m_in_out;
+ SocketDataType &m_type;
StringRefNull m_ui_name;
StringRefNull m_identifier;
- StringRefNull m_idname;
+
+ public:
+ FixedTypeSocketDecl(bNodeTree &ntree,
+ bNode &node,
+ eNodeSocketInOut in_out,
+ SocketDataType &type,
+ StringRefNull ui_name,
+ StringRefNull identifier)
+ : SocketDecl(ntree, node),
+ m_in_out(in_out),
+ m_type(type),
+ m_ui_name(ui_name),
+ m_identifier(identifier)
+ {
+ }
void build() const override
{
- nodeAddSocket(
- m_ntree, m_node, m_in_out, m_idname.data(), m_identifier.data(), m_ui_name.data());
+ m_type.build(m_ntree, m_node, m_in_out, m_identifier, m_ui_name);
}
};
@@ -89,14 +133,11 @@ class NodeDecl {
static void init_node(bNodeTree *ntree, bNode *node)
{
- MockupSocketDecl decl;
- decl.m_in_out = SOCK_IN;
- decl.m_ntree = ntree;
- decl.m_node = node;
- decl.m_ui_name = "Hello World";
- decl.m_identifier = "myid";
- decl.m_idname = "NodeSocketFloat";
- decl.build();
+ FixedTypeSocketDecl decl1{*ntree, *node, SOCK_IN, *float_socket_type, "Hello 1", "hey"};
+ FixedTypeSocketDecl decl2{*ntree, *node, SOCK_IN, *int_socket_type, "Hello 2", "qwe"};
+
+ decl1.build();
+ decl2.build();
}
void register_node_type_my_test_node()
@@ -119,3 +160,22 @@ void register_node_type_my_test_node()
nodeRegisterType(&ntype);
}
+
+void init_socket_data_types()
+{
+ float_socket_type = new BaseSocketDataType("Float", nodeSocketTypeFind("NodeSocketFloat"));
+ int_socket_type = new BaseSocketDataType("Integer", nodeSocketTypeFind("NodeSocketInt"));
+
+ socket_data_types = new DataTypesInfo();
+ socket_data_types->add_data_type(float_socket_type);
+ socket_data_types->add_data_type(int_socket_type);
+ socket_data_types->add_implicit_conversion(float_socket_type, int_socket_type);
+ socket_data_types->add_implicit_conversion(int_socket_type, float_socket_type);
+}
+
+void free_socket_data_types()
+{
+ delete socket_data_types;
+ delete float_socket_type;
+ delete int_socket_type;
+}
diff --git a/source/blender/simulations/nodes/simulation_node_tree.cc b/source/blender/simulations/nodes/simulation_node_tree.cc
index 574e9fc9616..919ccfa7b5c 100644
--- a/source/blender/simulations/nodes/simulation_node_tree.cc
+++ b/source/blender/simulations/nodes/simulation_node_tree.cc
@@ -21,5 +21,6 @@ void register_node_tree_type_sim()
ntreeTypeAdd(tt);
+ init_socket_data_types();
register_node_type_my_test_node();
}
More information about the Bf-blender-cvs
mailing list