79 const float angle_step,
80 const bool is_large_rotation,
84 const float *axis_final = axis;
86 float angle_final =
angle;
89 axis_final = axis_buffer;
112 for (
float angle_progress = angle_step;
fabsf(angle_progress) <
fabsf(angle_final);
113 angle_progress += angle_step)
120 else if (angle_final !=
angle) {
137 float angle, start[3], end[3];
184 const float angle_max =
float(
M_PI * 2000.0);
186 const float angle_sign =
angle < 0.0f ? -1.0f : 1.0f;
195 const bool is_large_rotation)
197 const float angle_sign =
angle < 0.0f ? -1.0f : 1.0f;
200 const float angle_step = angle_sign *
float(0.9 *
M_PI);
202 if (is_large_rotation) {
210 RotateMatrixCache rmc = {0};
212 for (
const int i : range) {
231 for (
int i = 0;
i < tc->data_len;
i++, td++) {
242 pr[0] = cos_angle *
uv[0] + sin_angle *
uv[1];
243 pr[1] = -sin_angle *
uv[0] + cos_angle *
uv[1];
246 if (pr[0] < 0.0f || 1.0f < pr[0]) {
249 if (pr[1] < 0.0f || 1.0f < pr[1]) {
259 float angle = vec[0];
261 vec_inside_bounds[0] =
angle;
264 float angle_inside_bounds = vec_inside_bounds[0];
268 const int max_i = 32;
271 const float angle_mid = (angle_inside_bounds +
angle) / 2.0f;
272 if (
ELEM(angle_mid, angle_inside_bounds,
angle)) {
276 angle_inside_bounds = angle_mid;
283 vec_inside_bounds[0] = angle_inside_bounds;
284 vec[0] = angle_inside_bounds;
361 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 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 parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
VecBase< float, 3 > float3