Geometry Nodes: Special string characters node
This patch adds a new node called "Special Characters" with two string outputs: "Line Break" and "Tab". This is necessary because the newline character cannot be easily typed with a keyboard, but is necessary for the string to curve node. Differential Revision: https://developer.blender.org/D12620
This commit is contained in:
parent
bdb8ee9717
commit
5c0017e85a
|
@ -606,6 +606,7 @@ geometry_node_categories = [
|
|||
NodeItem("FunctionNodeStringSubstring"),
|
||||
NodeItem("FunctionNodeValueToString"),
|
||||
NodeItem("GeometryNodeStringJoin"),
|
||||
NodeItem("FunctionNodeInputSpecialCharacters"),
|
||||
]),
|
||||
GeometryNodeCategory("GEO_UTILITIES", "Utilities", items=[
|
||||
NodeItem("ShaderNodeMapRange"),
|
||||
|
|
|
@ -1517,6 +1517,7 @@ int ntreeTexExecTree(struct bNodeTree *ntree,
|
|||
#define FN_NODE_VALUE_TO_STRING 1210
|
||||
#define FN_NODE_STRING_LENGTH 1211
|
||||
#define FN_NODE_STRING_SUBSTRING 1212
|
||||
#define FN_NODE_INPUT_SPECIAL_CHARACTERS 1213
|
||||
|
||||
/** \} */
|
||||
|
||||
|
|
|
@ -5812,6 +5812,7 @@ static void registerFunctionNodes()
|
|||
register_node_type_fn_boolean_math();
|
||||
register_node_type_fn_float_compare();
|
||||
register_node_type_fn_float_to_int();
|
||||
register_node_type_fn_input_special_characters();
|
||||
register_node_type_fn_input_string();
|
||||
register_node_type_fn_input_vector();
|
||||
register_node_type_fn_random_float();
|
||||
|
|
|
@ -136,6 +136,7 @@ set(SRC
|
|||
function/nodes/node_fn_boolean_math.cc
|
||||
function/nodes/node_fn_float_compare.cc
|
||||
function/nodes/node_fn_float_to_int.cc
|
||||
function/nodes/node_fn_input_special_characters.cc
|
||||
function/nodes/node_fn_input_string.cc
|
||||
function/nodes/node_fn_input_vector.cc
|
||||
function/nodes/node_fn_random_float.cc
|
||||
|
|
|
@ -23,6 +23,7 @@ extern "C" {
|
|||
void register_node_type_fn_boolean_math(void);
|
||||
void register_node_type_fn_float_compare(void);
|
||||
void register_node_type_fn_float_to_int(void);
|
||||
void register_node_type_fn_input_special_characters(void);
|
||||
void register_node_type_fn_input_string(void);
|
||||
void register_node_type_fn_input_vector(void);
|
||||
void register_node_type_fn_random_float(void);
|
||||
|
|
|
@ -265,6 +265,7 @@ DefNode(TextureNode, TEX_NODE_PROC+TEX_DISTNOISE, 0, "TEX_DI
|
|||
DefNode(FunctionNode, FN_NODE_BOOLEAN_MATH, def_boolean_math, "BOOLEAN_MATH", BooleanMath, "Boolean Math", "")
|
||||
DefNode(FunctionNode, FN_NODE_FLOAT_COMPARE, def_float_compare, "FLOAT_COMPARE", FloatCompare, "Float Compare", "")
|
||||
DefNode(FunctionNode, FN_NODE_FLOAT_TO_INT, def_float_to_int, "FLOAT_TO_INT", FloatToInt, "Float to Integer", "")
|
||||
DefNode(FunctionNode, FN_NODE_INPUT_SPECIAL_CHARACTERS, 0, "INPUT_SPECIAL_CHARACTERS", InputSpecialCharacters, "Special Characters", "")
|
||||
DefNode(FunctionNode, FN_NODE_INPUT_STRING, def_fn_input_string, "INPUT_STRING", InputString, "String", "")
|
||||
DefNode(FunctionNode, FN_NODE_INPUT_VECTOR, def_fn_input_vector, "INPUT_VECTOR", InputVector, "Vector", "")
|
||||
DefNode(FunctionNode, FN_NODE_RANDOM_FLOAT, 0, "RANDOM_FLOAT", RandomFloat, "Random Float", "")
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
* 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"
|
||||
|
||||
namespace blender::nodes {
|
||||
|
||||
static void fn_node_input_special_characters_declare(NodeDeclarationBuilder &b)
|
||||
{
|
||||
b.add_output<decl::String>("Line Break");
|
||||
b.add_output<decl::String>("Tab");
|
||||
};
|
||||
|
||||
class MF_SpecialCharacters : public fn::MultiFunction {
|
||||
public:
|
||||
MF_SpecialCharacters()
|
||||
{
|
||||
static fn::MFSignature signature = create_signature();
|
||||
this->set_signature(&signature);
|
||||
}
|
||||
|
||||
static fn::MFSignature create_signature()
|
||||
{
|
||||
fn::MFSignatureBuilder signature{"Special Characters"};
|
||||
signature.single_output<std::string>("Line Break");
|
||||
signature.single_output<std::string>("Tab");
|
||||
return signature.build();
|
||||
}
|
||||
|
||||
void call(IndexMask mask, fn::MFParams params, fn::MFContext UNUSED(context)) const override
|
||||
{
|
||||
MutableSpan<std::string> lb = params.uninitialized_single_output<std::string>(0, "Line Break");
|
||||
MutableSpan<std::string> tab = params.uninitialized_single_output<std::string>(1, "Tab");
|
||||
|
||||
for (const int i : mask) {
|
||||
new (&lb[i]) std::string("\n");
|
||||
new (&tab[i]) std::string("\t");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
static void fn_node_input_special_characters_build_multi_function(
|
||||
NodeMultiFunctionBuilder &builder)
|
||||
{
|
||||
static MF_SpecialCharacters special_characters_fn;
|
||||
builder.set_matching_fn(special_characters_fn);
|
||||
}
|
||||
|
||||
} // namespace blender::nodes
|
||||
|
||||
void register_node_type_fn_input_special_characters()
|
||||
{
|
||||
static bNodeType ntype;
|
||||
|
||||
fn_node_type_base(
|
||||
&ntype, FN_NODE_INPUT_SPECIAL_CHARACTERS, "Special Characters", NODE_CLASS_INPUT, 0);
|
||||
ntype.declare = blender::nodes::fn_node_input_special_characters_declare;
|
||||
ntype.build_multi_function =
|
||||
blender::nodes::fn_node_input_special_characters_build_multi_function;
|
||||
nodeRegisterType(&ntype);
|
||||
}
|
Loading…
Reference in New Issue