Geometry Nodes: Image Input Node

Add a simple node to choose an image data-block.

Ref T102854

Differential Revision: https://developer.blender.org/D16644
This commit is contained in:
Iliya Katueshenock 2022-12-09 15:50:00 -06:00 committed by Hans Goudey
parent 538d4cc998
commit a3251e66a7
Notes: blender-bot 2023-02-13 13:55:12 +01:00
Referenced by issue #102854, Input Image node
8 changed files with 68 additions and 0 deletions

View File

@ -140,6 +140,7 @@ class NODE_MT_geometry_node_GEO_INPUT(Menu):
node_add_menu.add_node_type(layout, "FunctionNodeInputBool")
node_add_menu.add_node_type(layout, "GeometryNodeCollectionInfo")
node_add_menu.add_node_type(layout, "FunctionNodeInputColor")
node_add_menu.add_node_type(layout, "GeometryNodeInputImage")
node_add_menu.add_node_type(layout, "GeometryNodeImageInfo")
node_add_menu.add_node_type(layout, "FunctionNodeInputInt")
node_add_menu.add_node_type(layout, "GeometryNodeIsViewport")

View File

@ -1542,6 +1542,7 @@ struct TexResult;
#define GEO_NODE_SET_CURVE_NORMAL 1188
#define GEO_NODE_IMAGE_INFO 1189
#define GEO_NODE_BLUR_ATTRIBUTE 1190
#define GEO_NODE_IMAGE 1191
/** \} */

View File

@ -10604,6 +10604,18 @@ static void def_geo_attribute_capture(StructRNA *srna)
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
}
static void def_geo_image(StructRNA *srna)
{
PropertyRNA *prop;
prop = RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "id");
RNA_def_property_struct_type(prop, "Image");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
RNA_def_property_ui_text(prop, "Image", "");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
}
static void def_geo_delete_geometry(StructRNA *srna)
{
PropertyRNA *prop;

View File

@ -320,6 +320,7 @@ DefNode(GeometryNode, GEO_NODE_FILL_CURVE, def_geo_curve_fill, "FILL_CURVE", Fil
DefNode(GeometryNode, GEO_NODE_FILLET_CURVE, def_geo_curve_fillet, "FILLET_CURVE", FilletCurve, "Fillet Curve", "Round corners by generating circular arcs on each control point")
DefNode(GeometryNode, GEO_NODE_FLIP_FACES, 0, "FLIP_FACES", FlipFaces, "Flip Faces", "Reverse the order of the vertices and edges of selected faces, flipping their normal direction")
DefNode(GeometryNode, GEO_NODE_GEOMETRY_TO_INSTANCE, 0, "GEOMETRY_TO_INSTANCE", GeometryToInstance, "Geometry to Instance", "Convert each input geometry into an instance, which can be much faster than the Join Geometry node when the inputs are large")
DefNode(GeometryNode, GEO_NODE_IMAGE, def_geo_image, "IMAGE", InputImage, "Image", "Input image")
DefNode(GeometryNode, GEO_NODE_IMAGE_INFO, 0, "IMAGE_INFO", ImageInfo, "Image Info", "Retrieve information about an image")
DefNode(GeometryNode, GEO_NODE_IMAGE_TEXTURE, def_geo_image_texture, "IMAGE_TEXTURE", ImageTexture, "Image Texture", "Sample values from an image texture")
DefNode(GeometryNode, GEO_NODE_INPUT_CURVE_HANDLES, 0, "INPUT_CURVE_HANDLES", InputCurveHandlePositions,"Curve Handle Positions", "Retrieve the position of each Bézier control point's handles")

View File

@ -73,6 +73,7 @@ set(SRC
nodes/node_geo_field_at_index.cc
nodes/node_geo_flip_faces.cc
nodes/node_geo_geometry_to_instance.cc
nodes/node_geo_image.cc
nodes/node_geo_image_info.cc
nodes/node_geo_image_texture.cc
nodes/node_geo_input_curve_handles.cc

View File

@ -57,6 +57,7 @@ void register_geometry_nodes()
register_node_type_geo_field_at_index();
register_node_type_geo_flip_faces();
register_node_type_geo_geometry_to_instance();
register_node_type_geo_image();
register_node_type_geo_image_info();
register_node_type_geo_image_texture();
register_node_type_geo_input_curve_handles();

View File

@ -54,6 +54,7 @@ void register_node_type_geo_extrude_mesh();
void register_node_type_geo_field_at_index();
void register_node_type_geo_flip_faces();
void register_node_type_geo_geometry_to_instance();
void register_node_type_geo_image();
void register_node_type_geo_image_info();
void register_node_type_geo_image_texture();
void register_node_type_geo_input_curve_handles();

View File

@ -0,0 +1,50 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include "DNA_image_types.h"
#include "node_geometry_util.hh"
#include "UI_interface.h"
#include "UI_resources.h"
namespace blender::nodes::node_geo_image_cc {
static void node_declare(NodeDeclarationBuilder &b)
{
b.add_output<decl::Image>(N_("Image"));
}
static void node_layout(uiLayout *layout, bContext *C, PointerRNA *ptr)
{
uiTemplateID(layout,
C,
ptr,
"image",
"IMAGE_OT_new",
"IMAGE_OT_open",
nullptr,
UI_TEMPLATE_ID_FILTER_ALL,
false,
nullptr);
}
static void node_geo_exec(GeoNodeExecParams params)
{
params.set_output("Image", reinterpret_cast<Image *>(params.node().id));
}
} // namespace blender::nodes::node_geo_image_cc
void register_node_type_geo_image()
{
namespace file_ns = blender::nodes::node_geo_image_cc;
static bNodeType ntype;
geo_node_type_base(&ntype, GEO_NODE_IMAGE, "Image", NODE_CLASS_INPUT);
ntype.geometry_node_execute = file_ns::node_geo_exec;
ntype.draw_buttons = file_ns::node_layout;
ntype.declare = file_ns::node_declare;
node_type_size_preset(&ntype, NODE_SIZE_LARGE);
nodeRegisterType(&ntype);
}