38 {0,
nullptr, 0,
nullptr,
nullptr},
60 float viewquat_inv[4];
61 float zaxis[3] = {0, 0, 1};
71 for (x = -1; x < 2; x++) {
72 for (y = -1; y < 2; y++) {
73 for (
z = -1;
z < 2;
z++) {
91 float quat_roll[4], quat_final[4], quat_best[4], quat_snap[4];
92 float viewquat_align[4];
93 float viewquat_align_inv[4];
113 for (j = 0; j < 8; j++) {
115 float xaxis1[3] = {1, 0, 0};
116 float xaxis2[3] = {1, 0, 0};
117 float quat_final_inv[4];
131 if (angle <= best_angle) {
171 float axis[3],
q1[4], dvec[3], newvec[3];
175 const int event_xy_offset[2] = {
188 angle *=
U.view_rotate_sensitivity_trackball;
205 float quat_local_x[4], quat_global_z[4];
208 const float zvec_global[3] = {0.0f, 0.0f, 1.0f};
212 const float sensitivity =
U.view_rotate_sensitivity_turntable /
UI_SCALE_FAC;
248 if (
dot_v3v3(xaxis, m_inv[0]) < 0) {
252 fac =
fabsf(fac - 0.5f) * 2;
303 bool use_autokey =
false;
306 switch (event_code) {
353 m_xy[0] = 2 *
event->xy[0] -
event->prev_xy[0];
354 m_xy[1] = 2 *
event->xy[1] -
event->prev_xy[1];
wmWindowManager * CTX_wm_manager(const bContext *C)
bool invert_m3_m3(float inverse[3][3], const float mat[3][3])
void rotation_between_vecs_to_quat(float q[4], const float v1[3], const float v2[3])
void invert_qt_normalized(float q[4])
void axis_angle_to_quat(float r[4], const float axis[3], float angle)
void quat_to_mat3(float m[3][3], const float q[4])
void axis_angle_to_quat_single(float q[4], char axis, float angle)
void vec_to_quat(float q[4], const float vec[3], short axis, short upflag)
float normalize_qt(float q[4])
void mul_qt_v3(const float q[4], float r[3])
void invert_qt_qt_normalized(float q1[4], const float q2[4])
void mul_qt_qtqt(float q[4], const float a[4], const float b[4])
void copy_qt_qt(float q[4], const float a[4])
float angle_wrap_rad(float angle)
float angle_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float len_squared_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void copy_v2_v2_int(int r[2], const int a[2])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], float t)
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void negate_v3(float r[3])
float angle_normalized_v3v3(const float v1[3], const float v2[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v3(float n[3])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
#define RV3D_VIEW_IS_AXIS(view)
bScreen * ED_screen_animation_playing(const wmWindowManager *wm)
void ED_region_tag_redraw(ARegion *region)
bool ED_view3d_camera_lock_sync(const Depsgraph *depsgraph, View3D *v3d, RegionView3D *rv3d)
bool ED_view3d_quat_to_axis_view_and_reset_quat(float quat[4], float epsilon, char *r_view, char *r_view_axis_roll)
bool ED_view3d_camera_lock_autokey(View3D *v3d, RegionView3D *rv3d, bContext *C, bool do_rotate, bool do_translate)
static double angle(const Eigen::Vector3d &v1, const Eigen::Vector3d &v2)
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
draw_view in_light_buf[] float
struct ViewOpsData::@543 init
char persp_with_auto_persp_applied
bool use_dyn_ofs_ortho_correction
struct ViewOpsData::@544 prev
struct ViewOpsData::@545 curr
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
int(* modal)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
void(* cancel)(bContext *C, wmOperator *op)
void view3d_navigate_cancel_fn(bContext *C, wmOperator *op)
void view3d_operator_properties_common(wmOperatorType *ot, const enum eV3D_OpPropFlag flag)
bool view3d_rotation_poll(bContext *C)
int view3d_navigate_modal_fn(bContext *C, wmOperator *op, const wmEvent *event)
void calctrackballvec(const rcti *rect, const int event_xy[2], float r_dir[3])
int view3d_navigate_invoke_impl(bContext *C, wmOperator *op, const wmEvent *event, const ViewOpsType *nav_type)
void viewrotate_apply_dyn_ofs(ViewOpsData *vod, const float viewquat_new[4])
@ VIEWOPS_FLAG_ORBIT_SELECT
@ VIEWOPS_FLAG_DEPTH_NAVIGATE
@ VIEWOPS_FLAG_PERSP_ENSURE
@ VIEWROT_MODAL_AXIS_SNAP_ENABLE
@ VIEWROT_MODAL_SWITCH_MOVE
@ VIEWROT_MODAL_SWITCH_ZOOM
@ VIEWROT_MODAL_AXIS_SNAP_DISABLE
@ V3D_OP_PROP_USE_MOUSE_INIT
#define V3D_OP_TRACKBALLSIZE
static void viewrotate_apply(ViewOpsData *vod, const int event_xy[2])
static int viewrotate_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void VIEW3D_OT_rotate(wmOperatorType *ot)
const ViewOpsType ViewOpsType_rotate
void viewrotate_modal_keymap(wmKeyConfig *keyconf)
static int viewrotate_invoke_impl(bContext *, ViewOpsData *vod, const wmEvent *event, PointerRNA *)
static void viewrotate_apply_snap(ViewOpsData *vod)
static int viewrotate_modal_impl(bContext *C, ViewOpsData *vod, const eV3D_OpEvent event_code, const int xy[2])
wmKeyMap * WM_modalkeymap_ensure(wmKeyConfig *keyconf, const char *idname, const EnumPropertyItem *items)
void WM_modalkeymap_assign(wmKeyMap *km, const char *opname)
wmKeyMap * WM_modalkeymap_find(wmKeyConfig *keyconf, const char *idname)