Commit: c03bb9db0d40bf53ac34b280e0857a84d1f648bf
Author: Jacques Lucke
Date: Tue Dec 17 11:13:00 2019 +0100
Branches: functions
https://developer.blender.org/rBc03bb9db0d40bf53ac34b280e0857a84d1f648bf
store name of node and sockets in dummy node
===================================================================
M source/blender/blenlib/BLI_monotonic_allocator.h
M source/blender/functions/FN_multi_function_network.h
M
source/blender/functions/intern/inlined_tree_multi_function_network/builder.cc
M
source/blender/functions/intern/inlined_tree_multi_function_network/builder.h
M source/blender/functions/intern/multi_function_network.cc
===================================================================
diff --git a/source/blender/blenlib/BLI_monotonic_allocator.h
b/source/blender/blenlib/BLI_monotonic_allocator.h
index 0ab468e419f..16e46c85007 100644
--- a/source/blender/blenlib/BLI_monotonic_allocator.h
+++ b/source/blender/blenlib/BLI_monotonic_allocator.h
@@ -88,6 +88,13 @@ class MonotonicAllocator : NonCopyable, NonMovable {
}
};
+ StringRefNull copy_string(StringRef str)
+ {
+ void *buffer = this->allocate(str.size() + 1, 1);
+ memcpy(buffer, str.data(), str.size() + 1);
+ return StringRefNull((const char *)buffer);
+ }
+
template<typename T, typename... Args> destruct_ptr<T> construct(Args &&...
args)
{
void *buffer = this->allocate(sizeof(T), alignof(T));
diff --git a/source/blender/functions/FN_multi_function_network.h
b/source/blender/functions/FN_multi_function_network.h
index 01ee6da8466..84e37df891c 100644
--- a/source/blender/functions/FN_multi_function_network.h
+++ b/source/blender/functions/FN_multi_function_network.h
@@ -70,6 +70,14 @@ class MFBuilderFunctionNode : public MFBuilderNode {
};
class MFBuilderDummyNode : public MFBuilderNode {
+ private:
+ StringRefNull m_name;
+ Vector<StringRefNull> m_input_names;
+ Vector<StringRefNull> m_output_names;
+
+ friend MFNetworkBuilder;
+ friend MFBuilderSocket;
+ friend MFBuilderNode;
};
class MFBuilderSocket : BLI::NonCopyable, BLI::NonMovable {
@@ -136,8 +144,11 @@ class MFNetworkBuilder : BLI::NonCopyable, BLI::NonMovable
{
void to_dot__clipboard();
MFBuilderFunctionNode &add_function(const MultiFunction &function);
- MFBuilderDummyNode &add_dummy(ArrayRef<MFDataType> input_types,
- ArrayRef<MFDataType> output_types);
+ MFBuilderDummyNode &add_dummy(StringRef name,
+ ArrayRef<MFDataType> input_types,
+ ArrayRef<MFDataType> output_types,
+ ArrayRef<StringRef> input_names,
+ ArrayRef<StringRef> output_names);
void add_link(MFBuilderOutputSocket &from, MFBuilderInputSocket &to);
ArrayRef<MFBuilderNode *> nodes_by_id() const
@@ -233,6 +244,12 @@ class MFFunctionNode final : public MFNode {
};
class MFDummyNode final : public MFNode {
+ private:
+ StringRefNull m_name;
+ Vector<StringRefNull> m_input_names;
+ Vector<StringRefNull> m_output_names;
+
+ friend MFNetwork;
};
class MFSocket : BLI::NonCopyable, BLI::NonMovable {
@@ -349,7 +366,7 @@ inline StringRefNull MFBuilderNode::name()
return this->as_function().function().name();
}
else {
- return "Dummy";
+ return this->as_dummy().m_name;
}
}
@@ -421,7 +438,13 @@ inline StringRefNull MFBuilderSocket::name()
}
}
else {
- return "Dummy";
+ MFBuilderDummyNode &node = m_node->as_dummy();
+ if (m_is_output) {
+ return node.m_output_names[m_index];
+ }
+ else {
+ return node.m_input_names[m_index];
+ }
}
}
diff --git
a/source/blender/functions/intern/inlined_tree_multi_function_network/builder.cc
b/source/blender/functions/intern/inlined_tree_multi_function_network/builder.cc
index febfd71c0fb..44e0d55cc9b 100644
---
a/source/blender/functions/intern/inlined_tree_multi_function_network/builder.cc
+++
b/source/blender/functions/intern/inlined_tree_multi_function_network/builder.cc
@@ -32,22 +32,27 @@ MFBuilderFunctionNode
&InlinedTreeMFNetworkBuilder::add_function(const MultiFunc
MFBuilderDummyNode &InlinedTreeMFNetworkBuilder::add_dummy(const XNode &xnode)
{
Vector<MFDataType> input_types;
+ Vector<StringRef> input_names;
for (const XInputSocket *xsocket : xnode.inputs()) {
Optional<MFDataType> data_type = this->try_get_data_type(*xsocket);
if (data_type.has_value()) {
input_types.append(data_type.value());
+ input_names.append(xsocket->name());
}
}
Vector<MFDataType> output_types;
+ Vector<StringRef> output_names;
for (const XOutputSocket *xsocket : xnode.outputs()) {
Optional<MFDataType> data_type = this->try_get_data_type(*xsocket);
if (data_type.has_value()) {
output_types.append(data_type.value());
+ output_names.append(xsocket->name());
}
}
- MFBuilderDummyNode &node = m_builder->add_dummy(input_types, output_types);
+ MFBuilderDummyNode &node = m_builder->add_dummy(
+ xnode.name(), input_types, output_types, input_names, output_names);
this->map_data_sockets(xnode, node);
return node;
}
@@ -194,7 +199,7 @@ const MultiFunction
&VNodeMFNetworkBuilder::get_vectorized_function(
std::unique_ptr<InlinedTreeMFNetwork> InlinedTreeMFNetworkBuilder::build()
{
- // m_builder->to_dot__clipboard();
+ m_builder->to_dot__clipboard();
auto network = BLI::make_unique<MFNetwork>(std::move(m_builder));
diff --git
a/source/blender/functions/intern/inlined_tree_multi_function_network/builder.h
b/source/blender/functions/intern/inlined_tree_multi_function_network/builder.h
index 8b4921727cd..da891af5614 100644
---
a/source/blender/functions/intern/inlined_tree_multi_function_network/builder.h
+++
b/source/blender/functions/intern/inlined_tree_multi_function_network/builder.h
@@ -103,10 +103,13 @@ class InlinedTreeMFNetworkBuilder : BLI::NonCopyable,
BLI::NonMovable {
MFBuilderDummyNode &add_dummy(const XNode &xnode);
- MFBuilderDummyNode &add_dummy(ArrayRef<MFDataType> input_types,
- ArrayRef<MFDataType> output_types)
+ MFBuilderDummyNode &add_dummy(StringRef name,
+ ArrayRef<MFDataType> input_types,
+ ArrayRef<MFDataType> output_types,
+ ArrayRef<StringRef> input_names,
+ ArrayRef<StringRef> output_names)
{
- return m_builder->add_dummy(input_types, output_types);
+ return m_builder->add_dummy(name, input_types, output_types, input_names,
output_names);
}
void add_link(MFBuilderOutputSocket &from, MFBuilderInputSocket &to)
diff --git a/source/blender/functions/intern/multi_function_network.cc
b/source/blender/functions/intern/multi_function_network.cc
index 747b06aa4a5..8e5ffc97f63 100644
--- a/source/blender/functions/intern/multi_function_network.cc
+++ b/source/blender/functions/intern/multi_function_network.cc
@@ -103,14 +103,18 @@ MFBuilderFunctionNode
&MFNetworkBuilder::add_function(const MultiFunction &funct
return node;
}
-MFBuilderDummyNode &MFNetworkBuilder::add_dummy(ArrayRef<MFDataType>
input_types,
- ArrayRef<MFDataType>
output_types)
+MFBuilderDummyNode &MFNetworkBuilder::add_dummy(StringRef name,
+ ArrayRef<MFDataType>
input_types,
+ ArrayRef<MFDataType>
output_types,
+ ArrayRef<StringRef>
input_names,
+ ArrayRef<StringRef>
output_names)
{
auto &node = *m_allocator.construct<MFBuilderDummyNode>().release();
node.m_network = this;
node.m_is_dummy = true;
node.m_id = m_node_by_id.size();
+ node.m_name = m_allocator.copy_string(name);
for (uint i : input_types.index_iterator()) {
auto &input_socket =
*m_allocator.construct<MFBuilderInputSocket>().release();
@@ -120,6 +124,7 @@ MFBuilderDummyNode
&MFNetworkBuilder::add_dummy(ArrayRef<MFDataType> input_types
input_socket.m_is_output = false;
input_socket.m_id = m_socket_by_id.size();
node.m_inputs.append(&input_socket);
+ node.m_input_names.append(m_allocator.copy_string(input_names[i]));
m_socket_by_id.append(&input_socket);
m_input_sockets.append(&input_socket);
}
@@ -131,6 +136,7 @@ MFBuilderDummyNode
&MFNetworkBuilder::add_dummy(ArrayRef<MFDataType> input_types
output_socket.m_is_output = true;
output_socket.m_id = m_socket_by_id.size();
node.m_outputs.append(&output_socket);
+ node.m_output_names.append(m_allocator.copy_string(output_names[i]));
m_socket_by_id.append(&output_socket);
m_output_sockets.append(&output_socket);
}
@@ -168,6 +174,10 @@ std::string MFNetworkBuilder::to_dot()
output_names.append(socket->name());
}
+ if (node->is_dummy()) {
+ dot_node.set_background_color("#AAAAFF");
+ }
+
dot_nodes.add_new(node,
NodeWithSocketsWrapper(dot_node, node->name(),
input_names, output_names));
}
@@ -262,6 +272,7 @@ MFNetwork::MFNetwork(std::unique_ptr<MFNetworkBuilder>
builder)
m_socket_by_id[socket.id()] = &socket;
m_input_sockets.append(&socket);
node.m_inputs.append(&socket);
+
node.m_input_names.append(m_allocator.copy_string(builder_socket->name()));
}
for (MFBuilderOutputSocket *builder_socket : builder_node->outputs()) {
MFOutputSocket &socket =
*m_allocator.construct<MFOutputSocket>().release();
@@ -274,6 +285,7 @@ MFNetwork::MFNetwork(std::unique_ptr<MFNetworkBuilder>
builder)
m_socket_by_id[socket.id()] = &socket;
m_output_sockets.append(&socket);
node.m_outputs.append(&socket);
+
node.m_output_names.append(m_allocator.copy_string(builder_socket->name()));
}
m_dummy_nodes.append(&node);
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs