[Bf-blender-cvs] [bcb6fa6e510] functions: use better socket names in conversion to functions
Jacques Lucke
noreply at git.blender.org
Wed Apr 3 11:56:23 CEST 2019
Commit: bcb6fa6e510b7b8b2420eb1a7bc10d4a024b5581
Author: Jacques Lucke
Date: Wed Apr 3 11:13:52 2019 +0200
Branches: functions
https://developer.blender.org/rBbcb6fa6e510b7b8b2420eb1a7bc10d4a024b5581
use better socket names in conversion to functions
===================================================================
M source/blender/functions/frontends/data_flow_nodes/builder.cpp
M source/blender/functions/frontends/data_flow_nodes/builder.hpp
M source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
M source/blender/functions/frontends/data_flow_nodes/inserters.cpp
M source/blender/functions/frontends/data_flow_nodes/inserters.hpp
M source/blender/functions/frontends/data_flow_nodes/util_wrappers.hpp
===================================================================
diff --git a/source/blender/functions/frontends/data_flow_nodes/builder.cpp b/source/blender/functions/frontends/data_flow_nodes/builder.cpp
index 0b8412cf325..d32f93d18c6 100644
--- a/source/blender/functions/frontends/data_flow_nodes/builder.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/builder.cpp
@@ -16,6 +16,25 @@
}
#endif
+#ifdef WITH_PYTHON
+static PyObject *get_py_bnode(bNodeTree *btree, bNode *bnode)
+{
+ PointerRNA ptr;
+ RNA_pointer_create(
+ &btree->id, &RNA_Node,
+ bnode, &ptr);
+ return pyrna_struct_CreatePyObject(&ptr);
+}
+static PyObject *get_py_bsocket(bNodeTree *btree, bNodeSocket *bsocket)
+{
+ PointerRNA ptr;
+ RNA_pointer_create(
+ &btree->id, &RNA_NodeSocket,
+ bsocket, &ptr);
+ return pyrna_struct_CreatePyObject(&ptr);
+}
+#endif
+
namespace FN { namespace DataFlowNodes {
class NodeSource : public SourceInfo {
@@ -45,15 +64,9 @@ namespace FN { namespace DataFlowNodes {
PyObject *globals = PyModule_GetDict(module);
PyObject *function = PyDict_GetItemString(globals, "report_warning");
- PointerRNA ptr;
- RNA_pointer_create(
- &m_btree->id, &RNA_Node,
- m_bnode, &ptr);
-
- PyObject *py_bnode = pyrna_struct_CreatePyObject(&ptr);
-
- PyObject *args = Py_BuildValue("(Os)", py_bnode, msg.c_str());
- PyObject_CallObject(function, args);
+ PyObject *py_bnode = get_py_bnode(m_btree, m_bnode);
+ PyObject *ret = PyObject_CallFunction(function, "Os", py_bnode, msg.c_str());
+ Py_DECREF(ret);
PyGILState_Release(gilstate);
#endif
@@ -253,6 +266,26 @@ namespace FN { namespace DataFlowNodes {
return this->type_by_name(data_type.c_str());
}
+ std::string BuilderContext::name_of_socket(bNode *bnode, bNodeSocket *bsocket) const
+ {
+#ifdef WITH_PYTHON
+ PyGILState_STATE gilstate;
+ gilstate = PyGILState_Ensure();
+
+ PyObject *py_bnode = get_py_bnode(m_btree, bnode);
+ PyObject *py_bsocket = get_py_bsocket(m_btree, bsocket);
+ PyObject *ret = PyObject_CallMethod(py_bsocket, "get_name", "O", py_bnode);
+ BLI_assert(PyUnicode_Check(ret));
+ const char *name_ = PyUnicode_AsUTF8(ret);
+ std::string name(name_);
+ Py_DECREF(ret);
+
+ PyGILState_Release(gilstate);
+ return name;
+#endif
+ return bsocket->name;
+ }
+
void BuilderContext::get_rna(bNode *bnode, PointerRNA *ptr) const
{
RNA_pointer_create(
diff --git a/source/blender/functions/frontends/data_flow_nodes/builder.hpp b/source/blender/functions/frontends/data_flow_nodes/builder.hpp
index 255cb3268e5..2ee90ae80d4 100644
--- a/source/blender/functions/frontends/data_flow_nodes/builder.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/builder.hpp
@@ -63,6 +63,7 @@ namespace FN { namespace DataFlowNodes {
bool is_data_socket(bNodeSocket *bsocket) const;
SharedType &type_by_name(const char *data_type) const;
SharedType &type_of_socket(bNodeSocket *bsocket) const;
+ std::string name_of_socket(bNode *bnode, bNodeSocket *bsocket) const;
void get_rna(bNode *bnode, PointerRNA *ptr) const;
void get_rna(bNodeSocket *bsocket, PointerRNA *ptr) const;
diff --git a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
index 35e12a23117..3cae92cf08e 100644
--- a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
@@ -47,7 +47,7 @@ namespace FN { namespace DataFlowNodes {
for (bNodeSocket *bsocket : bSocketList(&bnode->outputs)) {
if (ctx.is_data_socket(bsocket)) {
SharedType &type = ctx.type_of_socket(bsocket);
- outputs.append(OutputParameter(bsocket->name, type));
+ outputs.append(OutputParameter(ctx.name_of_socket(bnode, bsocket), type));
}
}
@@ -63,7 +63,7 @@ namespace FN { namespace DataFlowNodes {
for (bNodeSocket *bsocket : bSocketList(&bnode->inputs)) {
if (ctx.is_data_socket(bsocket)) {
SharedType &type = ctx.type_of_socket(bsocket);
- inputs.append(InputParameter(bsocket->name, type));
+ inputs.append(InputParameter(ctx.name_of_socket(bnode, bsocket), type));
}
}
@@ -203,6 +203,7 @@ namespace FN { namespace DataFlowNodes {
}
BSockets unlinked_inputs;
+ BNodes unlinked_inputs_nodes;
SmallSocketVector node_inputs;
for (bNode *bnode : bNodeList(&btree->nodes)) {
for (bNodeSocket *bsocket : bSocketList(&bnode->inputs)) {
@@ -210,13 +211,15 @@ namespace FN { namespace DataFlowNodes {
Socket socket = socket_map.lookup(bsocket);
if (!socket.is_linked()) {
unlinked_inputs.append(bsocket);
+ unlinked_inputs_nodes.append(bnode);
node_inputs.append(socket);
}
}
}
}
- SmallSocketVector new_origins = inserters.insert_sockets(builder, ctx, unlinked_inputs);
+ SmallSocketVector new_origins = inserters.insert_sockets(
+ builder, ctx, unlinked_inputs, unlinked_inputs_nodes);
BLI_assert(unlinked_inputs.size() == new_origins.size());
for (uint i = 0; i < unlinked_inputs.size(); i++) {
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters.cpp b/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
index 93e719f34a9..655ed7e2fe1 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
@@ -130,11 +130,17 @@ namespace FN { namespace DataFlowNodes {
SmallSocketVector GraphInserters::insert_sockets(
Builder &builder,
const BuilderContext &ctx,
- BSockets &bsockets)
+ BSockets &bsockets,
+ BNodes &bnodes)
{
+ BLI_assert(bsockets.size() == bnodes.size());
+
SmallVector<SocketLoader> loaders;
OutputParameters outputs;
- for (auto *bsocket : bsockets) {
+ for (uint i = 0; i < bsockets.size(); i++) {
+ bNode *bnode = bnodes[i];
+ bNodeSocket *bsocket = bsockets[i];
+
PointerRNA ptr;
RNA_pointer_create(
ctx.btree_id(), &RNA_NodeSocket,
@@ -145,7 +151,9 @@ namespace FN { namespace DataFlowNodes {
SocketLoader loader = m_socket_loaders.lookup(data_type);
loaders.append(loader);
- outputs.append(OutputParameter(bsocket->name, ctx.type_of_socket(bsocket)));
+ outputs.append(OutputParameter(
+ ctx.name_of_socket(bnode, bsocket),
+ ctx.type_of_socket(bsocket)));
}
auto fn = SharedFunction::New("Input Sockets", Signature({}, outputs));
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters.hpp b/source/blender/functions/frontends/data_flow_nodes/inserters.hpp
index 7da9fdf79ee..a90c279ad64 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters.hpp
@@ -59,7 +59,8 @@ namespace FN { namespace DataFlowNodes {
SmallSocketVector insert_sockets(
Builder &builder,
const BuilderContext &ctx,
- BSockets &bsockets);
+ BSockets &bsockets,
+ BNodes &bnodes);
bool insert_link(
Builder &builder,
diff --git a/source/blender/functions/frontends/data_flow_nodes/util_wrappers.hpp b/source/blender/functions/frontends/data_flow_nodes/util_wrappers.hpp
index 2fb2e853ed9..8287102c753 100644
--- a/source/blender/functions/frontends/data_flow_nodes/util_wrappers.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/util_wrappers.hpp
@@ -13,5 +13,6 @@ namespace FN { namespace DataFlowNodes {
using bLinkList = ListBaseWrapper<struct bNodeLink, true>;
using bSocketList = ListBaseWrapper<struct bNodeSocket, true>;
using BSockets = SmallVector<struct bNodeSocket *>;
+ using BNodes = SmallVector<struct bNode *>;
} } /* namespace FN::DataFlowNodes */
\ No newline at end of file
More information about the Bf-blender-cvs
mailing list