Geometry Nodes: Add Color input node
Adds a color input node with picker. Differential Revision: https://developer.blender.org/D12793
This commit is contained in:
parent
e005ad5b54
commit
f7ef68514b
|
@ -640,6 +640,7 @@ geometry_node_categories = [
|
|||
NodeItem("ShaderNodeValue"),
|
||||
NodeItem("FunctionNodeInputString"),
|
||||
NodeItem("FunctionNodeInputVector"),
|
||||
NodeItem("FunctionNodeInputColor"),
|
||||
NodeItem("GeometryNodeInputMaterial"),
|
||||
NodeItem("GeometryNodeIsViewport"),
|
||||
NodeItem("GeometryNodeInputIndex"),
|
||||
|
|
|
@ -1550,6 +1550,7 @@ int ntreeTexExecTree(struct bNodeTree *ntree,
|
|||
#define FN_NODE_RANDOM_VALUE 1214
|
||||
#define FN_NODE_ROTATE_EULER 1215
|
||||
#define FN_NODE_ALIGN_EULER_TO_VECTOR 1216
|
||||
#define FN_NODE_INPUT_COLOR 1217
|
||||
|
||||
/** \} */
|
||||
|
||||
|
|
|
@ -5841,6 +5841,7 @@ static void registerFunctionNodes()
|
|||
register_node_type_fn_input_special_characters();
|
||||
register_node_type_fn_input_string();
|
||||
register_node_type_fn_input_vector();
|
||||
register_node_type_fn_input_color();
|
||||
register_node_type_fn_random_value();
|
||||
register_node_type_fn_rotate_euler();
|
||||
register_node_type_fn_string_length();
|
||||
|
|
|
@ -1295,6 +1295,10 @@ typedef struct NodeInputVector {
|
|||
float vector[3];
|
||||
} NodeInputVector;
|
||||
|
||||
typedef struct NodeInputColor {
|
||||
float color[4];
|
||||
} NodeInputColor;
|
||||
|
||||
typedef struct NodeInputString {
|
||||
char *string;
|
||||
} NodeInputString;
|
||||
|
|
|
@ -4988,6 +4988,19 @@ static void def_texture(StructRNA *srna)
|
|||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
}
|
||||
|
||||
static void def_fn_input_color(StructRNA *srna)
|
||||
{
|
||||
PropertyRNA *prop;
|
||||
|
||||
RNA_def_struct_sdna_from(srna, "NodeInputColor", "storage");
|
||||
|
||||
prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
|
||||
RNA_def_property_array(prop, 4);
|
||||
RNA_def_property_float_sdna(prop, NULL, "color");
|
||||
RNA_def_property_ui_text(prop, "Color", "");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
}
|
||||
|
||||
static void def_fn_input_vector(StructRNA *srna)
|
||||
{
|
||||
PropertyRNA *prop;
|
||||
|
|
|
@ -142,6 +142,7 @@ set(SRC
|
|||
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_input_color.cc
|
||||
function/nodes/node_fn_random_value.cc
|
||||
function/nodes/node_fn_rotate_euler.cc
|
||||
function/nodes/node_fn_string_length.cc
|
||||
|
|
|
@ -29,6 +29,7 @@ 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_input_color(void);
|
||||
void register_node_type_fn_random_value(void);
|
||||
void register_node_type_fn_rotate_euler(void);
|
||||
void register_node_type_fn_string_length(void);
|
||||
|
|
|
@ -269,6 +269,7 @@ DefNode(FunctionNode, FN_NODE_ALIGN_EULER_TO_VECTOR, def_fn_align_euler_to_vecto
|
|||
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, "Compare Floats", "")
|
||||
DefNode(FunctionNode, FN_NODE_FLOAT_TO_INT, def_float_to_int, "FLOAT_TO_INT", FloatToInt, "Float to Integer", "")
|
||||
DefNode(FunctionNode, FN_NODE_INPUT_COLOR, def_fn_input_color, "INPUT_COLOR", InputColor, "Color", "")
|
||||
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", "")
|
||||
|
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* 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"
|
||||
|
||||
namespace blender::nodes {
|
||||
|
||||
static void fn_node_input_color_declare(NodeDeclarationBuilder &b)
|
||||
{
|
||||
b.add_output<decl::Color>("Color");
|
||||
};
|
||||
|
||||
static void fn_node_input_color_layout(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
||||
{
|
||||
uiTemplateColorPicker(layout, ptr, "color", true, false, false, true);
|
||||
uiItemR(layout, ptr, "color", UI_ITEM_R_SPLIT_EMPTY_NAME, "", ICON_NONE);
|
||||
}
|
||||
|
||||
static void fn_node_color_input_build_multi_function(
|
||||
blender::nodes::NodeMultiFunctionBuilder &builder)
|
||||
{
|
||||
bNode &bnode = builder.node();
|
||||
NodeInputColor *node_storage = static_cast<NodeInputColor *>(bnode.storage);
|
||||
blender::ColorGeometry4f color = (ColorGeometry4f)node_storage->color;
|
||||
builder.construct_and_set_matching_fn<blender::fn::CustomMF_Constant<ColorGeometry4f>>(color);
|
||||
}
|
||||
|
||||
static void fn_node_input_color_init(bNodeTree *UNUSED(ntree), bNode *node)
|
||||
{
|
||||
NodeInputColor *data = (NodeInputColor *)MEM_callocN(sizeof(NodeInputColor), __func__);
|
||||
copy_v4_fl4(data->color, 0.5f, 0.5f, 0.5f, 1.0f);
|
||||
node->storage = data;
|
||||
}
|
||||
|
||||
} // namespace blender::nodes
|
||||
|
||||
void register_node_type_fn_input_color()
|
||||
{
|
||||
static bNodeType ntype;
|
||||
|
||||
fn_node_type_base(&ntype, FN_NODE_INPUT_COLOR, "Color", NODE_CLASS_INPUT, 0);
|
||||
ntype.declare = blender::nodes::fn_node_input_color_declare;
|
||||
node_type_init(&ntype, blender::nodes::fn_node_input_color_init);
|
||||
node_type_storage(
|
||||
&ntype, "NodeInputColor", node_free_standard_storage, node_copy_standard_storage);
|
||||
ntype.build_multi_function = blender::nodes::fn_node_color_input_build_multi_function;
|
||||
ntype.draw_buttons = blender::nodes::fn_node_input_color_layout;
|
||||
nodeRegisterType(&ntype);
|
||||
}
|
Loading…
Reference in New Issue