78 const float angle_step,
79 const bool is_large_rotation,
83 const float *axis_final = axis;
85 float angle_final =
angle;
88 axis_final = axis_buffer;
111 for (
float angle_progress = angle_step;
fabsf(angle_progress) <
fabsf(angle_final);
112 angle_progress += angle_step)
119 else if (angle_final !=
angle) {
136 float angle, start[3], end[3];
145 t->
con.
applyRot(t,
nullptr,
nullptr, axis,
nullptr);
183 const float angle_max = float(
M_PI * 2000.0);
185 const float angle_sign =
angle < 0.0f ? -1.0f : 1.0f;
194 const bool is_large_rotation)
196 const float angle_sign =
angle < 0.0f ? -1.0f : 1.0f;
199 const float angle_step = angle_sign * float(0.9 *
M_PI);
201 if (is_large_rotation) {
209 RotateMatrixCache rmc = {0};
211 for (
const int i : range) {
229 for (
int i = 0;
i < tc->data_len;
i++, td++) {
240 pr[0] = cos_angle * uv[0] + sin_angle * uv[1];
241 pr[1] = -sin_angle * uv[0] + cos_angle * uv[1];
244 if (pr[0] < 0.0f || 1.0f < pr[0]) {
247 if (pr[1] < 0.0f || 1.0f < pr[1]) {
257 float angle = vec[0];
259 vec_inside_bounds[0] =
angle;
262 float angle_inside_bounds = vec_inside_bounds[0];
266 const int max_i = 32;
269 const float angle_mid = (angle_inside_bounds +
angle) / 2.0f;
270 if (
ELEM(angle_mid, angle_inside_bounds,
angle)) {
274 angle_inside_bounds = angle_mid;
281 vec_inside_bounds[0] = angle_inside_bounds;
282 vec[0] = angle_inside_bounds;
292 t->
con.
applyRot(t,
nullptr,
nullptr, axis_final, &
final);
338 t->
con.
applyRot(t,
nullptr,
nullptr, axis_final,
nullptr);
363 status.
item(
TIP_(
"Transform is set to only affect location"), ICON_ERROR);
void BKE_report(ReportList *reports, eReportType type, const char *message)
void mul_m3_v3(const float M[3][3], float r[3])
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void copy_m3_m4(float m1[3][3], const float m2[4][4])
void copy_m4_m3(float m1[4][4], const float m2[3][3])
void transform_pivot_set_m4(float mat[4][4], const float pivot[3])
void axis_angle_normalized_to_mat3(float R[3][3], const float axis[3], float angle)
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void negate_v3_v3(float r[3], const float a[3])
MINLINE void add_v2_v2(float r[2], const float a[2])
float angle_signed_on_axis_v3v3_v3(const float v1[3], const float v2[3], const float axis[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void copy_v3_fl(float r[3], float f)
void ED_area_status_text(ScrArea *area, const char *str)
static double angle(const Eigen::Vector3d &v1, const Eigen::Vector3d &v2)
void item(std::string text, int icon1, int icon2=0)
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))