Files
test2/source/blender/nodes/composite/nodes/node_composite_rotate.cc
Iliya Katueshenock 1b67be14c6 Cleanup: BKE: Nodes: Functions renaming
Use snake style naming for all the kernel nodes functions.
Omit kernel prefix in the names since of the using namespace.
Use full forms of the terms
('iter' -> 'iterator', 'ntree' -> 'node_tree', 'rem' -> 'remove', ...).

Pull Request: https://projects.blender.org/blender/blender/pulls/126416
2024-08-19 20:27:37 +02:00

106 lines
2.8 KiB
C++

/* SPDX-FileCopyrightText: 2006 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup cmpnodes
*/
#include "BLI_assert.h"
#include "BLI_math_angle_types.hh"
#include "BLI_math_matrix.hh"
#include "UI_interface.hh"
#include "UI_resources.hh"
#include "COM_algorithm_transform.hh"
#include "COM_node_operation.hh"
#include "node_composite_util.hh"
/* **************** Rotate ******************** */
namespace blender::nodes::node_composite_rotate_cc {
static void cmp_node_rotate_declare(NodeDeclarationBuilder &b)
{
b.add_input<decl::Color>("Image")
.default_value({1.0f, 1.0f, 1.0f, 1.0f})
.compositor_domain_priority(0);
b.add_input<decl::Float>("Degr")
.default_value(0.0f)
.min(-10000.0f)
.max(10000.0f)
.subtype(PROP_ANGLE)
.compositor_expects_single_value();
b.add_output<decl::Color>("Image");
}
static void node_composit_init_rotate(bNodeTree * /*ntree*/, bNode *node)
{
node->custom1 = 1; /* Bilinear Filter. */
}
static void node_composit_buts_rotate(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr)
{
uiItemR(layout, ptr, "filter_type", UI_ITEM_R_SPLIT_EMPTY_NAME, "", ICON_NONE);
}
using namespace blender::realtime_compositor;
class RotateOperation : public NodeOperation {
public:
using NodeOperation::NodeOperation;
void execute() override
{
Result &input = get_input("Image");
Result &output = get_result("Image");
const math::AngleRadian rotation = get_input("Degr").get_float_value_default(0.0f);
const float3x3 transformation = math::from_rotation<float3x3>(rotation);
RealizationOptions realization_options = input.get_realization_options();
realization_options.interpolation = get_interpolation();
transform(context(), input, output, transformation, realization_options);
}
Interpolation get_interpolation()
{
switch (bnode().custom1) {
case 0:
return Interpolation::Nearest;
case 1:
return Interpolation::Bilinear;
case 2:
return Interpolation::Bicubic;
}
BLI_assert_unreachable();
return Interpolation::Nearest;
}
};
static NodeOperation *get_compositor_operation(Context &context, DNode node)
{
return new RotateOperation(context, node);
}
} // namespace blender::nodes::node_composite_rotate_cc
void register_node_type_cmp_rotate()
{
namespace file_ns = blender::nodes::node_composite_rotate_cc;
static blender::bke::bNodeType ntype;
cmp_node_type_base(&ntype, CMP_NODE_ROTATE, "Rotate", NODE_CLASS_DISTORT);
ntype.declare = file_ns::cmp_node_rotate_declare;
ntype.draw_buttons = file_ns::node_composit_buts_rotate;
ntype.initfunc = file_ns::node_composit_init_rotate;
ntype.get_compositor_operation = file_ns::get_compositor_operation;
blender::bke::node_register_type(&ntype);
}