28 static const mf::Signature
signature = []() {
30 mf::SignatureBuilder builder{
"Separate Transform",
signature};
31 builder.single_input<
float4x4>(
"Transform");
32 builder.single_output<
float3>(
"Translation", mf::ParamFlag::SupportsUnusedOutput);
33 builder.single_output<
math::Quaternion>(
"Rotation", mf::ParamFlag::SupportsUnusedOutput);
34 builder.single_output<
float3>(
"Scale", mf::ParamFlag::SupportsUnusedOutput);
47 MutableSpan scale = params.uninitialized_single_output_if_required<
float3>(3,
"Scale");
49 if (!translation.is_empty()) {
51 [&](
const int64_t i) { translation[
i] = transforms[
i].location(); });
54 if (rotation.is_empty() && !scale.is_empty()) {
57 else if (!rotation.is_empty() && scale.is_empty()) {
63 else if (!rotation.is_empty() && !scale.is_empty()) {
82 const MatrixElem matrix_elem = params.
get_input_elem<MatrixElem>(
"Transform");
91 MatrixElem transform_elem;
92 transform_elem.translation = params.
get_output_elem<VectorElem>(
"Translation");
93 transform_elem.rotation = params.
get_output_elem<RotationElem>(
"Rotation");
110 ntype.
ui_name =
"Separate Transform";
#define NODE_CLASS_CONVERTER
#define FN_NODE_SEPARATE_TRANSFORM
#define NOD_REGISTER_NODE(REGISTER_FUNC)
const Signature & signature() const
void set_signature(const Signature *signature)
void set_matching_fn(const mf::MultiFunction *fn)
void set_input(const StringRef identifier, T value)
T get_output(const StringRef identifier) const
void set_output_elem(const StringRef identifier, T elem)
T get_input_elem(const StringRef identifier) const
T get_output_elem(const StringRef identifier) const
void set_input_elem(const StringRef identifier, T elem)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
void node_register_type(bNodeType &ntype)
QuaternionBase< float > Quaternion
QuaternionBase< T > normalized_to_quaternion_safe(const MatBase< T, 3, 3 > &mat)
MatBase< T, NumCol, NumRow > normalize_and_get_size(const MatBase< T, NumCol, NumRow > &a, VectorT &r_size)
MatBase< T, NumCol, NumRow > normalize(const MatBase< T, NumCol, NumRow > &a)
VecBase< T, 3 > to_scale(const MatBase< T, NumCol, NumRow > &mat)
MatT from_loc_rot_scale(const typename MatT::loc_type &location, const RotationT &rotation, const VecBase< typename MatT::base_type, ScaleDim > &scale)
MatBase< float, 4, 4 > float4x4
MatBase< float, 3, 3 > float3x3
VecBase< float, 3 > float3
void fn_node_type_base(blender::bke::bNodeType *ntype, std::string idname, const std::optional< int16_t > legacy_type)
NodeInverseElemEvalFunction eval_inverse_elem
NodeInverseEvalFunction eval_inverse
NodeElemEvalFunction eval_elem
NodeMultiFunctionBuildFunction build_multi_function
const char * enum_name_legacy
NodeDeclareFunction declare