89 const float angle_step,
90 const bool is_large_rotation,
94 const float *axis_final = axis;
96 float angle_final =
angle;
99 axis_final = axis_buffer;
101 angle_final = angle * td->
factor;
107 angle_final = angle * td->
factor;
122 for (
float angle_progress = angle_step;
fabsf(angle_progress) <
fabsf(angle_final);
123 angle_progress += angle_step)
130 else if (angle_final != angle) {
156 data->is_large_rotation,
168 float angle, start[3], end[3];
177 t->
con.
applyRot(t,
nullptr,
nullptr, axis,
nullptr);
189 angle =
atan2f(start[1], start[0]) -
atan2f(end[1], end[0]);
192 if (angle >
float(
M_PI)) {
195 else if (angle < -
float(
M_PI)) {
215 const float angle_max =
float(
M_PI * 2000.0);
216 if (
fabsf(angle) > angle_max) {
217 const float angle_sign = angle < 0.0f ? -1.0f : 1.0f;
218 angle = angle_sign * (
fmodf(
fabsf(angle),
float(
M_PI * 2.0)) + angle_max);
226 const bool is_large_rotation)
228 const float angle_sign = angle < 0.0f ? -1.0f : 1.0f;
231 const float angle_step = angle_sign *
float(0.9 *
M_PI);
233 if (is_large_rotation) {
245 for (
int i = 0; i < tc->data_len; i++, td++) {
258 data.angle_step = angle_step;
259 data.is_large_rotation = is_large_rotation;
265 settings.userdata_chunk = &tls_data;
266 settings.userdata_chunk_size =
sizeof(tls_data);
274 const float cos_angle =
cosf(angle);
275 const float sin_angle =
sinf(angle);
279 for (
int i = 0; i < tc->data_len; i++, td++) {
290 pr[0] = cos_angle * uv[0] + sin_angle * uv[1];
291 pr[1] = -sin_angle * uv[0] + cos_angle * uv[1];
294 if (pr[0] < 0.0f || 1.0f < pr[0]) {
297 if (pr[1] < 0.0f || 1.0f < pr[1]) {
307 float angle = vec[0];
309 vec_inside_bounds[0] =
angle;
312 float angle_inside_bounds = vec_inside_bounds[0];
316 const int max_i = 32;
317 for (
int i = 0; i <
max_i; i++) {
319 const float angle_mid = (angle_inside_bounds +
angle) / 2.0f;
320 if (
ELEM(angle_mid, angle_inside_bounds, angle)) {
324 angle_inside_bounds = angle_mid;
331 vec_inside_bounds[0] = angle_inside_bounds;
332 vec[0] = angle_inside_bounds;
342 t->
con.
applyRot(t,
nullptr,
nullptr, axis_final, &
final);
388 t->
con.
applyRot(t,
nullptr,
nullptr, axis_final,
nullptr);
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 BLI_task_parallel_range(int start, int stop, void *userdata, TaskParallelRangeFunc func, const TaskParallelSettings *settings)
BLI_INLINE void BLI_parallel_range_settings_defaults(TaskParallelSettings *settings)
void ED_area_status_text(ScrArea *area, const char *str)
static double angle(const Eigen::Vector3d &v1, const Eigen::Vector3d &v2)
draw_view in_light_buf[] float
void(* applyRot)(const TransInfo *t, const TransDataContainer *tc, const TransData *td, float r_axis[3], float *r_angle)
const TransDataContainer * tc
float values_modal_offset[4]
float values_inside_constraints[4]