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

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to