Blender V4.3
node_geo_tool_active_element.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#include "UI_interface.hh"
6
7#include "RNA_enum_types.hh"
8
9#include "BKE_mesh.hh"
10#include "BKE_node.hh"
11
12#include "DNA_meshdata_types.h"
13
14#include "NOD_rna_define.hh"
15
16#include "node_geometry_util.hh"
17
19
21{
22 b.add_output<decl::Int>("Index").description(
23 "Index of the active element in the specified domain");
24 b.add_output<decl::Bool>("Exists").description(
25 "True if an active element exists in the mesh, false otherwise");
26}
27
28static void node_init(bNodeTree * /*tree*/, bNode *node)
29{
30 node->custom1 = int16_t(AttrDomain::Point);
31}
32
33static void node_layout(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr)
34{
35 uiLayoutSetPropSep(layout, true);
36 uiLayoutSetPropDecorate(layout, false);
37 uiItemR(layout, ptr, "domain", UI_ITEM_NONE, "", ICON_NONE);
38}
39
41{
43 return;
44 }
45
46 if (params.user_data()->call_data->operator_data->mode != OB_MODE_EDIT) {
47 params.set_default_remaining_outputs();
48 return;
49 }
50
51 const GeoNodesOperatorData *operator_data = params.user_data()->call_data->operator_data;
52
53 switch (static_cast<AttrDomain>(params.node().custom1)) {
54 case AttrDomain::Point:
55 params.set_output("Exists", operator_data->active_point_index >= 0);
56 params.set_output("Index", std::max(0, operator_data->active_point_index));
57 break;
58 case AttrDomain::Edge:
59 params.set_output("Exists", operator_data->active_edge_index >= 0);
60 params.set_output("Index", std::max(0, operator_data->active_edge_index));
61 break;
62 case AttrDomain::Face:
63 params.set_output("Exists", operator_data->active_face_index >= 0);
64 params.set_output("Index", std::max(0, operator_data->active_face_index));
65 break;
66 default:
67 params.set_default_remaining_outputs();
69 break;
70 }
71}
72
73static void node_rna(StructRNA *srna)
74{
76 "domain",
77 "Domain",
78 "",
81 int(AttrDomain::Point));
82}
83
84static void node_register()
85{
86 static blender::bke::bNodeType ntype;
87 geo_node_type_base(&ntype, GEO_NODE_TOOL_ACTIVE_ELEMENT, "Active Element", NODE_CLASS_INPUT);
88 ntype.initfunc = node_init;
90 ntype.declare = node_declare;
94
95 node_rna(ntype.rna_ext.srna);
96}
98
99} // namespace blender::nodes::node_geo_tool_active_element_cc
#define NODE_CLASS_INPUT
Definition BKE_node.hh:404
#define BLI_assert_unreachable()
Definition BLI_assert.h:97
@ OB_MODE_EDIT
#define NOD_REGISTER_NODE(REGISTER_FUNC)
#define NOD_inline_enum_accessors(member)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
#define UI_ITEM_NONE
void uiLayoutSetPropDecorate(uiLayout *layout, bool is_sep)
void uiItemR(uiLayout *layout, PointerRNA *ptr, const char *propname, eUI_Item_Flag flag, const char *name, int icon)
local_group_size(16, 16) .push_constant(Type b
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
void node_register_type(bNodeType *ntype)
Definition node.cc:1708
static void node_layout(uiLayout *layout, bContext *, PointerRNA *ptr)
void search_link_ops_for_tool_node(GatherLinkSearchOpParams &params)
PropertyRNA * RNA_def_node_enum(StructRNA *srna, const char *identifier, const char *ui_name, const char *ui_description, const EnumPropertyItem *static_items, const EnumRNAAccessors accessors, std::optional< int > default_value, const EnumPropertyItemFunc item_func, const bool allow_animation)
bool check_tool_context_and_error(GeoNodeExecParams &params)
void geo_node_type_base(blender::bke::bNodeType *ntype, int type, const char *name, short nclass)
const EnumPropertyItem rna_enum_attribute_domain_only_mesh_no_corner_items[]
signed short int16_t
Definition stdint.h:76
StructRNA * srna
Definition RNA_types.hh:780
Defines a node type.
Definition BKE_node.hh:218
void(* initfunc)(bNodeTree *ntree, bNode *node)
Definition BKE_node.hh:267
NodeGeometryExecFunction geometry_node_execute
Definition BKE_node.hh:339
void(* draw_buttons)(uiLayout *, bContext *C, PointerRNA *ptr)
Definition BKE_node.hh:238
NodeGatherSocketLinkOperationsFunction gather_link_search_ops
Definition BKE_node.hh:363
NodeDeclareFunction declare
Definition BKE_node.hh:347
PointerRNA * ptr
Definition wm_files.cc:4126