Geometry Nodes: Object and Collection Input #106997
|
@ -246,10 +246,12 @@ class NODE_MT_geometry_node_GEO_INPUT_CONSTANT(Menu):
|
|||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
node_add_menu.add_node_type(layout, "FunctionNodeInputBool")
|
||||
node_add_menu.add_node_type(layout, "GeometryNodeInputCollection")
|
||||
node_add_menu.add_node_type(layout, "FunctionNodeInputColor")
|
||||
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, "GeometryNodeInputObject")
|
||||
node_add_menu.add_node_type(layout, "FunctionNodeInputString")
|
||||
node_add_menu.add_node_type(layout, "ShaderNodeValue")
|
||||
node_add_menu.add_node_type(layout, "FunctionNodeInputVector")
|
||||
|
|
|
@ -1575,6 +1575,8 @@ void BKE_nodetree_remove_layer_n(struct bNodeTree *ntree, struct Scene *scene, i
|
|||
#define GEO_NODE_SDF_VOLUME_SPHERE 1196
|
||||
#define GEO_NODE_MEAN_FILTER_SDF_VOLUME 1197
|
||||
#define GEO_NODE_OFFSET_SDF_VOLUME 1198
|
||||
#define GEO_NODE_INPUT_COLLECTION 1199
|
||||
#define GEO_NODE_INPUT_OBJECT 1200
|
||||
|
||||
/** \} */
|
||||
|
||||
|
@ -1582,25 +1584,25 @@ void BKE_nodetree_remove_layer_n(struct bNodeTree *ntree, struct Scene *scene, i
|
|||
/** \name Function Nodes
|
||||
* \{ */
|
||||
|
||||
#define FN_NODE_BOOLEAN_MATH 1200
|
||||
#define FN_NODE_COMPARE 1202
|
||||
#define FN_NODE_LEGACY_RANDOM_FLOAT 1206
|
||||
#define FN_NODE_INPUT_VECTOR 1207
|
||||
#define FN_NODE_INPUT_STRING 1208
|
||||
#define FN_NODE_FLOAT_TO_INT 1209
|
||||
#define FN_NODE_VALUE_TO_STRING 1210
|
||||
#define FN_NODE_STRING_LENGTH 1211
|
||||
#define FN_NODE_SLICE_STRING 1212
|
||||
#define FN_NODE_INPUT_SPECIAL_CHARACTERS 1213
|
||||
#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
|
||||
#define FN_NODE_REPLACE_STRING 1218
|
||||
#define FN_NODE_INPUT_BOOL 1219
|
||||
#define FN_NODE_INPUT_INT 1220
|
||||
#define FN_NODE_SEPARATE_COLOR 1221
|
||||
#define FN_NODE_COMBINE_COLOR 1222
|
||||
#define FN_NODE_BOOLEAN_MATH 1300
|
||||
|
||||
#define FN_NODE_COMPARE 1302
|
||||
#define FN_NODE_LEGACY_RANDOM_FLOAT 1306
|
||||
#define FN_NODE_INPUT_VECTOR 1307
|
||||
#define FN_NODE_INPUT_STRING 1308
|
||||
#define FN_NODE_FLOAT_TO_INT 1309
|
||||
#define FN_NODE_VALUE_TO_STRING 1310
|
||||
#define FN_NODE_STRING_LENGTH 1311
|
||||
#define FN_NODE_SLICE_STRING 1312
|
||||
#define FN_NODE_INPUT_SPECIAL_CHARACTERS 1313
|
||||
#define FN_NODE_RANDOM_VALUE 1314
|
||||
#define FN_NODE_ROTATE_EULER 1315
|
||||
#define FN_NODE_ALIGN_EULER_TO_VECTOR 1316
|
||||
#define FN_NODE_INPUT_COLOR 1317
|
||||
#define FN_NODE_REPLACE_STRING 1318
|
||||
#define FN_NODE_INPUT_BOOL 1319
|
||||
#define FN_NODE_INPUT_INT 1320
|
||||
#define FN_NODE_SEPARATE_COLOR 1321
|
||||
#define FN_NODE_COMBINE_COLOR 1322
|
||||
|
||||
/** \} */
|
||||
|
||||
|
|
|
@ -10567,6 +10567,32 @@ static void def_geo_sample_uv_surface(StructRNA *srna)
|
|||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update");
|
||||
}
|
||||
|
||||
static void def_geo_input_collection(StructRNA *srna)
|
||||
{
|
||||
PropertyRNA *prop;
|
||||
|
||||
prop = RNA_def_property(srna, "collection", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_pointer_sdna(prop, NULL, "id");
|
||||
RNA_def_property_struct_type(prop, "Collection");
|
||||
RNA_def_property_flag(prop, PROP_EDITABLE);
|
||||
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
|
||||
RNA_def_property_ui_text(prop, "Collection", "");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
}
|
||||
|
||||
static void def_geo_input_object(StructRNA *srna)
|
||||
{
|
||||
PropertyRNA *prop;
|
||||
|
||||
prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_pointer_sdna(prop, NULL, "id");
|
||||
RNA_def_property_struct_type(prop, "Object");
|
||||
RNA_def_property_flag(prop, PROP_EDITABLE);
|
||||
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
|
||||
RNA_def_property_ui_text(prop, "Object", "");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
}
|
||||
|
||||
static void def_geo_input_material(StructRNA *srna)
|
||||
{
|
||||
PropertyRNA *prop;
|
||||
|
|
|
@ -325,6 +325,7 @@ DefNode(GeometryNode, GEO_NODE_GEOMETRY_TO_INSTANCE, 0, "GEOMETRY_TO_INSTANCE",
|
|||
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_IMAGE, def_geo_image, "IMAGE", InputImage, "Image", "Input image")
|
||||
DefNode(GeometryNode, GEO_NODE_INPUT_COLLECTION, def_geo_input_collection, "INPUT_COLLECTION", InputCollection, "Collection", "Output a single collection")
|
||||
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")
|
||||
DefNode(GeometryNode, GEO_NODE_INPUT_CURVE_TILT, 0, "INPUT_CURVE_TILT", InputCurveTilt, "Curve Tilt", "Retrieve the angle at each control point used to twist the curve's normal around its tangent")
|
||||
DefNode(GeometryNode, GEO_NODE_INPUT_ID, 0, "INPUT_ID", InputID, "ID", "Retrieve a stable random identifier value from the \"id\" attribute on the point domain, or the index if the attribute does not exist")
|
||||
|
@ -343,6 +344,7 @@ DefNode(GeometryNode, GEO_NODE_INPUT_MESH_ISLAND, 0, "MESH_ISLAND", InputMeshIsl
|
|||
DefNode(GeometryNode, GEO_NODE_INPUT_MESH_VERTEX_NEIGHBORS, 0, "MESH_VERTEX_NEIGHBORS", InputMeshVertexNeighbors, "Vertex Neighbors", "Retrieve topology information relating to each vertex of a mesh")
|
||||
DefNode(GeometryNode, GEO_NODE_INPUT_NAMED_ATTRIBUTE, def_geo_input_named_attribute, "INPUT_ATTRIBUTE", InputNamedAttribute, "Named Attribute", "Retrieve the data of a specified attribute")
|
||||
DefNode(GeometryNode, GEO_NODE_INPUT_NORMAL, 0, "INPUT_NORMAL", InputNormal, "Normal", "Retrieve a unit length vector indicating the direction pointing away from the geometry at each element")
|
||||
DefNode(GeometryNode, GEO_NODE_INPUT_OBJECT, def_geo_input_object, "INPUT_OBJECT", InputObject, "Object", "Output a single object")
|
||||
DefNode(GeometryNode, GEO_NODE_INPUT_POSITION, 0, "POSITION", InputPosition, "Position", "Retrieve a vector indicating the location of each element")
|
||||
DefNode(GeometryNode, GEO_NODE_INPUT_RADIUS, 0, "INPUT_RADIUS", InputRadius, "Radius", "Retrieve the radius at each point on curve or point cloud geometry")
|
||||
DefNode(GeometryNode, GEO_NODE_INPUT_SCENE_TIME, 0, "INPUT_SCENE_TIME", InputSceneTime, "Scene Time", "Retrieve the current time in the scene's animation in units of seconds or frames")
|
||||
|
|
|
@ -78,6 +78,7 @@ set(SRC
|
|||
nodes/node_geo_image.cc
|
||||
nodes/node_geo_image_info.cc
|
||||
nodes/node_geo_image_texture.cc
|
||||
nodes/node_geo_input_collection.cc
|
||||
nodes/node_geo_input_curve_handles.cc
|
||||
nodes/node_geo_input_curve_tilt.cc
|
||||
nodes/node_geo_input_id.cc
|
||||
|
@ -96,6 +97,7 @@ set(SRC
|
|||
nodes/node_geo_input_mesh_vertex_neighbors.cc
|
||||
nodes/node_geo_input_named_attribute.cc
|
||||
nodes/node_geo_input_normal.cc
|
||||
nodes/node_geo_input_object.cc
|
||||
nodes/node_geo_input_position.cc
|
||||
nodes/node_geo_input_radius.cc
|
||||
nodes/node_geo_input_scene_time.cc
|
||||
|
|
|
@ -62,6 +62,7 @@ void register_geometry_nodes()
|
|||
register_node_type_geo_image_info();
|
||||
register_node_type_geo_image_texture();
|
||||
register_node_type_geo_image();
|
||||
register_node_type_geo_input_collection();
|
||||
register_node_type_geo_input_curve_handles();
|
||||
register_node_type_geo_input_curve_tilt();
|
||||
register_node_type_geo_input_id();
|
||||
|
@ -80,6 +81,7 @@ void register_geometry_nodes()
|
|||
register_node_type_geo_input_mesh_vertex_neighbors();
|
||||
register_node_type_geo_input_named_attribute();
|
||||
register_node_type_geo_input_normal();
|
||||
register_node_type_geo_input_object();
|
||||
register_node_type_geo_input_position();
|
||||
register_node_type_geo_input_radius();
|
||||
register_node_type_geo_input_scene_time();
|
||||
|
|
|
@ -59,6 +59,7 @@ void register_node_type_geo_geometry_to_instance();
|
|||
void register_node_type_geo_image_info();
|
||||
void register_node_type_geo_image_texture();
|
||||
void register_node_type_geo_image();
|
||||
void register_node_type_geo_input_collection();
|
||||
void register_node_type_geo_input_curve_handles();
|
||||
void register_node_type_geo_input_curve_tilt();
|
||||
void register_node_type_geo_input_id();
|
||||
|
@ -77,6 +78,7 @@ void register_node_type_geo_input_mesh_island();
|
|||
void register_node_type_geo_input_mesh_vertex_neighbors();
|
||||
void register_node_type_geo_input_named_attribute();
|
||||
void register_node_type_geo_input_normal();
|
||||
void register_node_type_geo_input_object();
|
||||
void register_node_type_geo_input_position();
|
||||
void register_node_type_geo_input_radius();
|
||||
void register_node_type_geo_input_scene_time();
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#include "node_geometry_util.hh"
|
||||
|
||||
#include "UI_interface.h"
|
||||
#include "UI_resources.h"
|
||||
|
||||
namespace blender::nodes::node_geo_input_collection_cc {
|
||||
|
||||
static void node_declare(NodeDeclarationBuilder &b)
|
||||
{
|
||||
b.add_output<decl::Collection>(N_("Collection"));
|
||||
}
|
||||
|
||||
static void node_layout(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr)
|
||||
{
|
||||
uiItemR(layout, ptr, "collection", 0, "", ICON_NONE);
|
||||
}
|
||||
|
||||
static void node_geo_exec(GeoNodeExecParams params)
|
||||
{
|
||||
params.set_output("Collection", reinterpret_cast<Collection *>(params.node().id));
|
||||
}
|
||||
|
||||
} // namespace blender::nodes::node_geo_input_collection_cc
|
||||
|
||||
void register_node_type_geo_input_collection()
|
||||
{
|
||||
namespace file_ns = blender::nodes::node_geo_input_collection_cc;
|
||||
|
||||
static bNodeType ntype;
|
||||
|
||||
geo_node_type_base(&ntype, GEO_NODE_INPUT_COLLECTION, "Collection", 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;
|
||||
nodeRegisterType(&ntype);
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#include "node_geometry_util.hh"
|
||||
|
||||
#include "UI_interface.h"
|
||||
#include "UI_resources.h"
|
||||
|
||||
namespace blender::nodes::node_geo_input_object_cc {
|
||||
|
||||
static void node_declare(NodeDeclarationBuilder &b)
|
||||
{
|
||||
b.add_output<decl::Object>(N_("Object"));
|
||||
}
|
||||
|
||||
static void node_layout(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr)
|
||||
{
|
||||
uiItemR(layout, ptr, "object", 0, "", ICON_NONE);
|
||||
}
|
||||
|
||||
static void node_geo_exec(GeoNodeExecParams params)
|
||||
{
|
||||
params.set_output("Object", reinterpret_cast<Object *>(params.node().id));
|
||||
}
|
||||
|
||||
} // namespace blender::nodes::node_geo_input_object_cc
|
||||
|
||||
void register_node_type_geo_input_object()
|
||||
{
|
||||
namespace file_ns = blender::nodes::node_geo_input_object_cc;
|
||||
|
||||
static bNodeType ntype;
|
||||
|
||||
geo_node_type_base(&ntype, GEO_NODE_INPUT_OBJECT, "Object", 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;
|
||||
nodeRegisterType(&ntype);
|
||||
}
|
Loading…
Reference in New Issue
Stumble on index conflict, unsure what's the procedure.
PS: index code gen would be nice in this file