18 translate_factor_x_ = 1.0f;
19 translate_factor_y_ = 1.0f;
20 convert_degree_to_rad_ =
false;
29 max_scale_canvas_size_ =
size;
41 const double rad = convert_degree_to_rad_ ?
DEG2RAD((
double)degree) : degree;
42 rotate_cosine_ =
cos(rad);
43 rotate_sine_ =
sin(rad);
49 const rcti &output_area,
53 case IMAGE_INPUT_INDEX: {
58 r_input_area = output_area;
67 image_canvas, scale_canvas_, scale_, scale_, r_input_area, r_input_area);
72 rotate_canvas_, scale_canvas_, scale_, scale_, output_area, r_input_area);
86 case DEGREE_INPUT_INDEX:
87 case SCALE_INPUT_INDEX: {
101 transform_inverted(it, input_img);
104 transform(it, input_img);
110 const bool image_determined =
112 if (image_determined) {
113 rcti image_canvas = r_area;
123 scale_canvas_ = image_canvas;
125 const Size2f max_scale_size = {
131 scale_canvas_, rotate_sine_, rotate_cosine_, rotate_canvas_);
133 translate_canvas_ = rotate_canvas_;
136 r_area = translate_canvas_;
140 translate_canvas_ = image_canvas;
144 translate_canvas_, rotate_sine_, rotate_cosine_, rotate_canvas_);
146 scale_canvas_ = rotate_canvas_;
149 const Size2f max_scale_size = {
154 r_area = scale_canvas_;
161 float rotate_center_x, rotate_center_y;
163 float rotate_offset_x, rotate_offset_y;
165 translate_canvas_, rotate_canvas_, rotate_offset_x, rotate_offset_y);
169 float scale_offset_x, scale_offset_y;
172 for (; !it.is_end(); ++it) {
176 x = rotate_offset_x +
x;
177 y = rotate_offset_y +
y;
179 x,
y, rotate_center_x, rotate_center_y, rotate_sine_, rotate_cosine_);
185 void TransformOperation::transform_inverted(BuffersIterator<float> &it,
186 const MemoryBuffer *input_img)
189 const float scale_center_x =
BLI_rcti_size_x(&image_canvas) / 2.0f - translate_x_;
190 const float scale_center_y =
BLI_rcti_size_y(&image_canvas) / 2.0f - translate_y_;
191 float scale_offset_x, scale_offset_y;
194 float rotate_center_x, rotate_center_y;
196 rotate_center_x -= translate_x_;
197 rotate_center_y -= translate_y_;
198 float rotate_offset_x, rotate_offset_y;
200 scale_canvas_, rotate_canvas_, rotate_offset_x, rotate_offset_y);
202 for (; !it.is_end(); ++it) {
203 float x = rotate_offset_x + (it.x - translate_x_);
204 float y = rotate_offset_y + (it.y - translate_y_);
206 x,
y, rotate_center_x, rotate_center_y, rotate_sine_, rotate_cosine_);
211 input_img->read_elem_sampled(
x,
y, sampler_, it.out);
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
void BLI_rcti_translate(struct rcti *rect, int x, int y)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
static constexpr float DEFAULT_MAX_SCALE_CANVAS_SIZE
a MemoryBuffer contains access to the data of a chunk
void read_elem_sampled(float x, float y, PixelSampler sampler, float *out) const
NodeOperation contains calculation logic.
void add_output_socket(DataType datatype)
float get_constant_value_default(float default_value)
const rcti & get_canvas() const
NodeOperation * get_input_operation(int index)
NodeOperationInput * get_input_socket(unsigned int index)
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
static void get_rotation_offset(const rcti &input_canvas, const rcti &rotate_canvas, float &r_offset_x, float &r_offset_y)
static void rotate_coords(float &x, float &y, float center_x, float center_y, float sine, float cosine)
static void get_rotation_area_of_interest(const rcti &input_canvas, const rcti &rotate_canvas, float sine, float cosine, const rcti &output_area, rcti &r_input_area)
static void get_rotation_canvas(const rcti &input_canvas, float sine, float cosine, rcti &r_canvas)
static void get_rotation_center(const rcti &area, float &r_x, float &r_y)
static void get_scale_offset(const rcti &input_canvas, const rcti &scale_canvas, float &r_scale_offset_x, float &r_scale_offset_y)
static void get_scale_area_of_interest(const rcti &input_canvas, const rcti &scale_canvas, float relative_scale_x, float relative_scale_y, const rcti &output_area, rcti &r_input_area)
static void scale_area(rcti &area, float relative_scale_x, float relative_scale_y)
static float scale_coord_inverted(const float coord, const float center, const float relative_scale)
static void clamp_area_size_max(rcti &area, Size2f max_size)
ccl_global KernelShaderEvalInput ccl_global float * output
INLINE Rall1d< T, V, S > cos(const Rall1d< T, V, S > &arg)
INLINE Rall1d< T, V, S > sin(const Rall1d< T, V, S > &arg)
static void area(int d1, int d2, int e1, int e2, float weights[2])
void expand_area_for_sampler(rcti &area, PixelSampler sampler)
typename BuffersIteratorBuilder< T >::Iterator BuffersIterator
constexpr rcti COM_CONSTANT_INPUT_AREA_OF_INTEREST
constexpr rcti COM_AREA_NONE
static bNodeSocketTemplate inputs[]