diff options
Diffstat (limited to 'source/blender/nodes/geometry/nodes/node_geo_object_info.cc')
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_object_info.cc | 41 |
1 files changed, 18 insertions, 23 deletions
diff --git a/source/blender/nodes/geometry/nodes/node_geo_object_info.cc b/source/blender/nodes/geometry/nodes/node_geo_object_info.cc index bb8e5f7e29b..38c3b9cbcd9 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_object_info.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_object_info.cc @@ -21,9 +21,11 @@ #include "node_geometry_util.hh" -namespace blender::nodes { +namespace blender::nodes::node_geo_object_info_cc { -static void geo_node_object_info_declare(NodeDeclarationBuilder &b) +NODE_STORAGE_FUNCS(NodeGeometryObjectInfo) + +static void node_declare(NodeDeclarationBuilder &b) { b.add_input<decl::Object>(N_("Object")).hide_label(); b.add_input<decl::Bool>(N_("As Instance")) @@ -35,31 +37,22 @@ static void geo_node_object_info_declare(NodeDeclarationBuilder &b) b.add_output<decl::Geometry>(N_("Geometry")); } -static void geo_node_object_info_layout(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) +static void node_layout(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr) { uiItemR(layout, ptr, "transform_space", UI_ITEM_R_EXPAND, nullptr, ICON_NONE); } -static void geo_node_object_info_exec(GeoNodeExecParams params) +static void node_geo_exec(GeoNodeExecParams params) { - const bNode &bnode = params.node(); - NodeGeometryObjectInfo *node_storage = (NodeGeometryObjectInfo *)bnode.storage; - const bool transform_space_relative = (node_storage->transform_space == + const NodeGeometryObjectInfo &storage = node_storage(params.node()); + const bool transform_space_relative = (storage.transform_space == GEO_NODE_TRANSFORM_SPACE_RELATIVE); - auto default_transform = [&]() { - params.set_output("Location", float3(0)); - params.set_output("Rotation", float3(0)); - params.set_output("Scale", float3(0)); - }; - auto default_geometry = [&]() { params.set_output("Geometry", GeometrySet()); }; - Object *object = params.get_input<Object *>("Object"); const Object *self_object = params.self_object(); if (object == nullptr) { - default_transform(); - default_geometry(); + params.set_default_remaining_outputs(); return; } @@ -81,7 +74,7 @@ static void geo_node_object_info_exec(GeoNodeExecParams params) if (object == self_object) { params.error_message_add(NodeWarningType::Error, TIP_("Geometry cannot be retrieved from the modifier object")); - default_geometry(); + params.set_default_remaining_outputs(); return; } @@ -107,7 +100,7 @@ static void geo_node_object_info_exec(GeoNodeExecParams params) } } -static void geo_node_object_info_node_init(bNodeTree *UNUSED(tree), bNode *node) +static void node_node_init(bNodeTree *UNUSED(tree), bNode *node) { NodeGeometryObjectInfo *data = (NodeGeometryObjectInfo *)MEM_callocN( sizeof(NodeGeometryObjectInfo), __func__); @@ -115,18 +108,20 @@ static void geo_node_object_info_node_init(bNodeTree *UNUSED(tree), bNode *node) node->storage = data; } -} // namespace blender::nodes +} // namespace blender::nodes::node_geo_object_info_cc void register_node_type_geo_object_info() { + namespace file_ns = blender::nodes::node_geo_object_info_cc; + static bNodeType ntype; geo_node_type_base(&ntype, GEO_NODE_OBJECT_INFO, "Object Info", NODE_CLASS_INPUT, 0); - node_type_init(&ntype, blender::nodes::geo_node_object_info_node_init); + node_type_init(&ntype, file_ns::node_node_init); node_type_storage( &ntype, "NodeGeometryObjectInfo", node_free_standard_storage, node_copy_standard_storage); - ntype.geometry_node_execute = blender::nodes::geo_node_object_info_exec; - ntype.draw_buttons = blender::nodes::geo_node_object_info_layout; - ntype.declare = blender::nodes::geo_node_object_info_declare; + ntype.geometry_node_execute = file_ns::node_geo_exec; + ntype.draw_buttons = file_ns::node_layout; + ntype.declare = file_ns::node_declare; nodeRegisterType(&ntype); } |