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];
376 ot->name =
"Rotate View";
377 ot->description =
"Rotate the view";
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.
char persp_with_auto_persp_applied
bool use_dyn_ofs_ortho_correction
blender::int2 event_xy_offset
struct ViewOpsData::@041211063176270354313167244105136234141004235041 curr
struct ViewOpsData::@244345216304223004112237167211144027240265370072 prev
struct ViewOpsData::@010113264246165170144271002355152266226235365232 init
void view3d_navigate_cancel_fn(bContext *C, wmOperator *op)
wmOperatorStatus view3d_navigate_invoke_impl(bContext *C, wmOperator *op, const wmEvent *event, const ViewOpsType *nav_type)
void view3d_operator_properties_common(wmOperatorType *ot, const enum eV3D_OpPropFlag flag)
wmOperatorStatus view3d_navigate_modal_fn(bContext *C, wmOperator *op, const wmEvent *event)
bool view3d_rotation_poll(bContext *C)
void calctrackballvec(const rcti *rect, const int event_xy[2], float r_dir[3])
void viewrotate_apply_dyn_ofs(ViewOpsData *vod, const float viewquat_new[4])
@ VIEWOPS_FLAG_ORBIT_SELECT
@ VIEWOPS_FLAG_DEPTH_NAVIGATE
@ VIEWOPS_FLAG_PERSP_ENSURE
const ViewOpsType ViewOpsType_rotate
@ V3D_OP_PROP_USE_MOUSE_INIT
@ VIEWROT_MODAL_AXIS_SNAP_ENABLE
@ VIEWROT_MODAL_SWITCH_MOVE
@ VIEWROT_MODAL_SWITCH_ZOOM
@ VIEWROT_MODAL_AXIS_SNAP_DISABLE
#define V3D_OP_TRACKBALLSIZE
static wmOperatorStatus viewrotate_invoke_impl(bContext *C, ViewOpsData *vod, const wmEvent *event, PointerRNA *)
static void viewrotate_apply(ViewOpsData *vod, const int event_xy[2])
static wmOperatorStatus viewrotate_modal_impl(bContext *C, ViewOpsData *vod, const eV3D_OpEvent event_code, const int xy[2])
void VIEW3D_OT_rotate(wmOperatorType *ot)
static wmOperatorStatus viewrotate_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void viewrotate_modal_keymap(wmKeyConfig *keyconf)
static void viewrotate_apply_snap(ViewOpsData *vod)
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)