Skip to content

Commit

Permalink
Geometry Nodes: new Input Rotation node
Browse files Browse the repository at this point in the history
This adds a new node input node for a constant rotation.
Similar nodes exist for vector, integer, boolean, etc. already.

Pull Request: https://projects.blender.org/blender/blender/pulls/120345
  • Loading branch information
illua1 authored and JacquesLucke committed May 6, 2024
1 parent 2a0a6f1 commit 968b98b
Show file tree
Hide file tree
Showing 7 changed files with 77 additions and 0 deletions.
1 change: 1 addition & 0 deletions scripts/startup/bl_ui/node_add_menu_geometry.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,7 @@ def draw(self, _context):
node_add_menu.add_node_type(layout, "GeometryNodeInputImage")
node_add_menu.add_node_type(layout, "FunctionNodeInputInt")
node_add_menu.add_node_type(layout, "GeometryNodeInputMaterial")
node_add_menu.add_node_type(layout, "FunctionNodeInputRotation")
node_add_menu.add_node_type(layout, "FunctionNodeInputString")
node_add_menu.add_node_type(layout, "ShaderNodeValue")
node_add_menu.add_node_type(layout, "FunctionNodeInputVector")
Expand Down
1 change: 1 addition & 0 deletions source/blender/blenkernel/BKE_node.hh
Original file line number Diff line number Diff line change
Expand Up @@ -1342,6 +1342,7 @@ void BKE_nodetree_remove_layer_n(bNodeTree *ntree, Scene *scene, int layer_index
#define FN_NODE_ALIGN_ROTATION_TO_VECTOR 1240
#define FN_NODE_COMBINE_MATRIX 1241
#define FN_NODE_SEPARATE_MATRIX 1242
#define FN_NODE_INPUT_ROTATION 1243

/** \} */

Expand Down
4 changes: 4 additions & 0 deletions source/blender/makesdna/DNA_node_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -1559,6 +1559,10 @@ typedef struct NodeInputInt {
int integer;
} NodeInputInt;

typedef struct NodeInputRotation {
float rotation_euler[3];
} NodeInputRotation;

typedef struct NodeInputVector {
float vector[3];
} NodeInputVector;
Expand Down
12 changes: 12 additions & 0 deletions source/blender/makesrna/intern/rna_nodetree.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4490,6 +4490,18 @@ static void def_fn_input_int(StructRNA *srna)
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
}

static void def_fn_input_rotation(StructRNA *srna)
{
PropertyRNA *prop;

RNA_def_struct_sdna_from(srna, "NodeInputRotation", "storage");

prop = RNA_def_property(srna, "rotation_euler", PROP_FLOAT, PROP_EULER);
RNA_def_property_float_sdna(prop, nullptr, "rotation_euler");
RNA_def_property_ui_text(prop, "Rotation", "Input value used for unconnected socket");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
}

static void def_fn_input_vector(StructRNA *srna)
{
PropertyRNA *prop;
Expand Down
1 change: 1 addition & 0 deletions source/blender/nodes/NOD_static_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,7 @@ DefNode(FunctionNode, FN_NODE_FLOAT_TO_INT, def_float_to_int, "FLOAT_TO_INT", Fl
DefNode(FunctionNode, FN_NODE_INPUT_BOOL, def_fn_input_bool, "INPUT_BOOL", InputBool, "Boolean", "")
DefNode(FunctionNode, FN_NODE_INPUT_COLOR, def_fn_input_color, "INPUT_COLOR", InputColor, "Color", "")
DefNode(FunctionNode, FN_NODE_INPUT_INT, def_fn_input_int, "INPUT_INT", InputInt, "Integer", "")
DefNode(FunctionNode, FN_NODE_INPUT_ROTATION, def_fn_input_rotation, "INPUT_ROTATION", InputRotation, "Rotation", "")
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", "")
Expand Down
1 change: 1 addition & 0 deletions source/blender/nodes/function/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ set(SRC
nodes/node_fn_input_bool.cc
nodes/node_fn_input_color.cc
nodes/node_fn_input_int.cc
nodes/node_fn_input_rotation.cc
nodes/node_fn_input_special_characters.cc
nodes/node_fn_input_string.cc
nodes/node_fn_input_vector.cc
Expand Down
57 changes: 57 additions & 0 deletions source/blender/nodes/function/nodes/node_fn_input_rotation.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/* SPDX-FileCopyrightText: 2024 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */

#include "BLI_math_euler.hh"
#include "BLI_math_quaternion.hh"

#include "NOD_socket_search_link.hh"

#include "node_function_util.hh"

namespace blender::nodes::node_fn_input_rotation_cc {

static void node_declare(NodeDeclarationBuilder &b)
{
b.add_output<decl::Rotation>("Rotation");
}

static void node_layout(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr)
{
uiLayout *col = uiLayoutColumn(layout, true);
uiItemR(col, ptr, "rotation_euler", UI_ITEM_R_EXPAND, "", ICON_NONE);
}

static void node_build_multi_function(NodeMultiFunctionBuilder &builder)
{
const bNode &bnode = builder.node();
const NodeInputRotation &node_storage = *static_cast<const NodeInputRotation *>(bnode.storage);
const math::EulerXYZ euler_rotation(node_storage.rotation_euler[0],
node_storage.rotation_euler[1],
node_storage.rotation_euler[2]);
builder.construct_and_set_matching_fn<mf::CustomMF_Constant<math::Quaternion>>(
math::to_quaternion(euler_rotation));
}

static void node_init(bNodeTree * /*tree*/, bNode *node)
{
NodeInputRotation *data = MEM_cnew<NodeInputRotation>(__func__);
node->storage = data;
}

static void node_register()
{
static bNodeType ntype;

fn_node_type_base(&ntype, FN_NODE_INPUT_ROTATION, "Rotation", 0);
ntype.declare = node_declare;
ntype.initfunc = node_init;
node_type_storage(
&ntype, "NodeInputRotation", node_free_standard_storage, node_copy_standard_storage);
ntype.build_multi_function = node_build_multi_function;
ntype.draw_buttons = node_layout;
nodeRegisterType(&ntype);
}
NOD_REGISTER_NODE(node_register)

} // namespace blender::nodes::node_fn_input_rotation_cc

0 comments on commit 968b98b

Please sign in to comment.