Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/nodes')
-rw-r--r--source/blender/nodes/CMakeLists.txt1
-rw-r--r--source/blender/nodes/NOD_function.h1
-rw-r--r--source/blender/nodes/NOD_static_types.h1
-rw-r--r--source/blender/nodes/function/nodes/node_fn_input_string.cc84
4 files changed, 87 insertions, 0 deletions
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index c9eb0c43bba..8c5081555fc 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -135,6 +135,7 @@ set(SRC
function/nodes/node_fn_combine_strings.cc
function/nodes/node_fn_float_compare.cc
function/nodes/node_fn_group_instance_id.cc
+ function/nodes/node_fn_input_string.cc
function/nodes/node_fn_input_vector.cc
function/nodes/node_fn_object_transforms.cc
function/nodes/node_fn_random_float.cc
diff --git a/source/blender/nodes/NOD_function.h b/source/blender/nodes/NOD_function.h
index b5279f7d914..6b184f04af7 100644
--- a/source/blender/nodes/NOD_function.h
+++ b/source/blender/nodes/NOD_function.h
@@ -24,6 +24,7 @@ void register_node_type_fn_boolean_math(void);
void register_node_type_fn_combine_strings(void);
void register_node_type_fn_float_compare(void);
void register_node_type_fn_group_instance_id(void);
+void register_node_type_fn_input_string(void);
void register_node_type_fn_input_vector(void);
void register_node_type_fn_object_transforms(void);
void register_node_type_fn_random_float(void);
diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h
index 962ad70eda4..35550bdec48 100644
--- a/source/blender/nodes/NOD_static_types.h
+++ b/source/blender/nodes/NOD_static_types.h
@@ -267,6 +267,7 @@ DefNode(FunctionNode, FN_NODE_COMBINE_STRINGS, 0, "COMBINE_STRINGS
DefNode(FunctionNode, FN_NODE_OBJECT_TRANSFORMS, 0, "OBJECT_TRANSFORMS", ObjectTransforms, "Object Transforms", "")
DefNode(FunctionNode, FN_NODE_RANDOM_FLOAT, 0, "RANDOM_FLOAT", RandomFloat, "Random Float", "")
DefNode(FunctionNode, FN_NODE_INPUT_VECTOR, def_fn_input_vector, "INPUT_VECTOR", InputVector, "Vector", "")
+DefNode(FunctionNode, FN_NODE_INPUT_STRING, def_fn_input_string, "INPUT_STRING", InputString, "String", "")
DefNode(GeometryNode, GEO_NODE_TRIANGULATE, def_geo_triangulate, "TRIANGULATE", Triangulate, "Triangulate", "")
DefNode(GeometryNode, GEO_NODE_EDGE_SPLIT, 0, "EDGE_SPLIT", EdgeSplit, "Edge Split", "")
diff --git a/source/blender/nodes/function/nodes/node_fn_input_string.cc b/source/blender/nodes/function/nodes/node_fn_input_string.cc
new file mode 100644
index 00000000000..f16bdef2f38
--- /dev/null
+++ b/source/blender/nodes/function/nodes/node_fn_input_string.cc
@@ -0,0 +1,84 @@
+/*
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "node_function_util.hh"
+
+#include "UI_interface.h"
+#include "UI_resources.h"
+
+static bNodeSocketTemplate fn_node_input_string_out[] = {
+ {SOCK_STRING, N_("String")},
+ {-1, ""},
+};
+
+static void fn_node_input_string_layout(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+ uiItemR(layout, ptr, "string", 0, "", ICON_NONE);
+}
+
+static void fn_node_input_string_expand_in_mf_network(
+ blender::nodes::NodeMFNetworkBuilder &builder)
+{
+ bNode &bnode = builder.bnode();
+ NodeInputString *node_storage = static_cast<NodeInputString *>(bnode.storage);
+ std::string string = std::string((node_storage->string) ? node_storage->string : "");
+
+ builder.construct_and_set_matching_fn<blender::fn::CustomMF_Constant<std::string>>(string);
+}
+
+static void fn_node_input_string_init(bNodeTree *UNUSED(ntree), bNode *node)
+{
+ node->storage = MEM_callocN(sizeof(NodeInputString), __func__);
+}
+
+static void fn_node_input_string_free(bNode *node)
+{
+ NodeInputString *storage = (NodeInputString *)node->storage;
+ if (storage == nullptr) {
+ return;
+ }
+ if (storage->string != nullptr) {
+ MEM_freeN(storage->string);
+ }
+ MEM_freeN(storage);
+}
+
+static void fn_node_string_copy(bNodeTree *UNUSED(dest_ntree),
+ bNode *dest_node,
+ const bNode *src_node)
+{
+ NodeInputString *source_storage = (NodeInputString *)src_node->storage;
+ NodeInputString *destination_storage = (NodeInputString *)MEM_dupallocN(source_storage);
+
+ if (source_storage->string) {
+ destination_storage->string = (char *)MEM_dupallocN(source_storage->string);
+ }
+
+ dest_node->storage = destination_storage;
+}
+
+void register_node_type_fn_input_string()
+{
+ static bNodeType ntype;
+
+ fn_node_type_base(&ntype, FN_NODE_INPUT_STRING, "String", NODE_CLASS_INPUT, 0);
+ node_type_socket_templates(&ntype, nullptr, fn_node_input_string_out);
+ node_type_init(&ntype, fn_node_input_string_init);
+ node_type_storage(&ntype, "NodeInputString", fn_node_input_string_free, fn_node_string_copy);
+ ntype.expand_in_mf_network = fn_node_input_string_expand_in_mf_network;
+ ntype.draw_buttons = fn_node_input_string_layout;
+ nodeRegisterType(&ntype);
+}