Merge branch 'blender-v4.5-release'
This commit is contained in:
@@ -1529,7 +1529,7 @@ static wmOperatorStatus view2d_ndof_invoke(bContext *C, wmOperator *op, const wm
|
||||
const bool has_translate = !is_zero_v2(ndof.tvec) && view_pan_poll(C);
|
||||
const bool has_zoom = (ndof.tvec[2] != 0.0f) && view_zoom_poll(C);
|
||||
|
||||
blender::float3 pan_vec = WM_event_ndof_translation_get(ndof);
|
||||
blender::float3 pan_vec = WM_event_ndof_translation_get_for_navigation(ndof);
|
||||
|
||||
if (has_translate) {
|
||||
mul_v2_fl(pan_vec, ndof.time_delta * pan_speed);
|
||||
@@ -1537,13 +1537,13 @@ static wmOperatorStatus view2d_ndof_invoke(bContext *C, wmOperator *op, const wm
|
||||
view_pan_init(C, op);
|
||||
|
||||
v2dViewPanData *vpd = static_cast<v2dViewPanData *>(op->customdata);
|
||||
view_pan_apply_ex(C, vpd, -pan_vec[0], -pan_vec[1]);
|
||||
view_pan_apply_ex(C, vpd, pan_vec[0], pan_vec[1]);
|
||||
|
||||
view_pan_exit(op);
|
||||
}
|
||||
|
||||
if (has_zoom) {
|
||||
float zoom_factor = zoom_sensitivity * ndof.time_delta * pan_vec[2];
|
||||
float zoom_factor = zoom_sensitivity * ndof.time_delta * -pan_vec[2];
|
||||
|
||||
bool do_zoom_xy[2];
|
||||
view_zoom_axis_lock_defaults(C, do_zoom_xy);
|
||||
|
||||
@@ -1653,7 +1653,7 @@ static wmOperatorStatus clip_view_ndof_invoke(bContext *C,
|
||||
const wmNDOFMotionData &ndof = *static_cast<wmNDOFMotionData *>(event->customdata);
|
||||
const float pan_speed = NDOF_PIXELS_PER_SECOND;
|
||||
|
||||
blender::float3 pan_vec = -ndof.time_delta * WM_event_ndof_translation_get(ndof);
|
||||
blender::float3 pan_vec = ndof.time_delta * WM_event_ndof_translation_get_for_navigation(ndof);
|
||||
mul_v2_fl(pan_vec, pan_speed / sc->zoom);
|
||||
|
||||
sclip_zoom_set_factor(C, max_ff(0.0f, 1.0f - pan_vec[2]), nullptr, false);
|
||||
|
||||
@@ -795,7 +795,7 @@ static wmOperatorStatus image_view_ndof_invoke(bContext *C,
|
||||
const wmNDOFMotionData &ndof = *static_cast<const wmNDOFMotionData *>(event->customdata);
|
||||
const float pan_speed = NDOF_PIXELS_PER_SECOND;
|
||||
|
||||
blender::float3 pan_vec = -ndof.time_delta * WM_event_ndof_translation_get(ndof);
|
||||
blender::float3 pan_vec = ndof.time_delta * WM_event_ndof_translation_get_for_navigation(ndof);
|
||||
|
||||
mul_v2_fl(pan_vec, pan_speed / sima->zoom);
|
||||
|
||||
|
||||
@@ -254,7 +254,8 @@ static void view3d_ndof_orbit(const wmNDOFMotionData &ndof,
|
||||
else {
|
||||
float quat[4];
|
||||
float axis[3];
|
||||
float angle = ndof.time_delta * WM_event_ndof_to_axis_angle(ndof, axis);
|
||||
float angle = ndof.time_delta *
|
||||
WM_event_ndof_rotation_get_axis_angle_for_navigation(ndof, axis);
|
||||
|
||||
/* transform rotation axis from view to world coordinates */
|
||||
mul_qt_v3(view_inv, axis);
|
||||
@@ -312,8 +313,7 @@ void view3d_ndof_fly(const wmNDOFMotionData &ndof,
|
||||
speed *= 0.2f;
|
||||
}
|
||||
|
||||
blender::float3 trans = WM_event_ndof_translation_get(ndof);
|
||||
mul_v3_fl(trans, speed * ndof.time_delta);
|
||||
blender::float3 trans = (speed * ndof.time_delta) * WM_event_ndof_translation_get(ndof);
|
||||
trans_orig_y = trans[1];
|
||||
|
||||
if (U.ndof_flag & NDOF_FLY_HELICOPTER) {
|
||||
@@ -355,7 +355,7 @@ void view3d_ndof_fly(const wmNDOFMotionData &ndof,
|
||||
if (has_rotate) {
|
||||
float rotation[4];
|
||||
float axis[3];
|
||||
float angle = ndof.time_delta * WM_event_ndof_to_axis_angle(ndof, axis);
|
||||
float angle = ndof.time_delta * WM_event_ndof_rotation_get_axis_angle(ndof, axis);
|
||||
|
||||
if (fabsf(angle) > 0.0001f) {
|
||||
has_rotate = true;
|
||||
|
||||
@@ -2013,11 +2013,12 @@ int WM_userdef_event_type_from_keymap_type(int kmitype);
|
||||
#ifdef WITH_INPUT_NDOF
|
||||
blender::float3 WM_event_ndof_translation_get_for_navigation(const wmNDOFMotionData &ndof);
|
||||
blender::float3 WM_event_ndof_rotation_get_for_navigation(const wmNDOFMotionData &ndof);
|
||||
float WM_event_ndof_rotation_get_axis_angle_for_navigation(const wmNDOFMotionData &ndof,
|
||||
float axis[3]);
|
||||
|
||||
blender::float3 WM_event_ndof_translation_get(const wmNDOFMotionData &ndof);
|
||||
blender::float3 WM_event_ndof_rotation_get(const wmNDOFMotionData &ndof);
|
||||
|
||||
float WM_event_ndof_to_axis_angle(const wmNDOFMotionData &ndof, float axis[3]);
|
||||
void WM_event_ndof_to_quat(const wmNDOFMotionData &ndof, float q[4]);
|
||||
float WM_event_ndof_rotation_get_axis_angle(const wmNDOFMotionData &ndof, float axis[3]);
|
||||
#endif /* WITH_INPUT_NDOF */
|
||||
|
||||
#ifdef WITH_XR_OPENXR
|
||||
|
||||
@@ -546,26 +546,19 @@ blender::float3 WM_event_ndof_rotation_get(const wmNDOFMotionData &ndof)
|
||||
};
|
||||
}
|
||||
|
||||
float WM_event_ndof_to_axis_angle(const wmNDOFMotionData &ndof, float axis[3])
|
||||
float WM_event_ndof_rotation_get_axis_angle_for_navigation(const wmNDOFMotionData &ndof,
|
||||
float axis[3])
|
||||
{
|
||||
float angle;
|
||||
angle = normalize_v3_v3(axis, ndof.rvec);
|
||||
|
||||
axis[0] = axis[0] * ((U.ndof_flag & NDOF_ROTX_INVERT_AXIS) ? -1.0f : 1.0f);
|
||||
axis[1] = axis[1] * ((U.ndof_flag & NDOF_ROTY_INVERT_AXIS) ? -1.0f : 1.0f);
|
||||
axis[2] = axis[2] * ((U.ndof_flag & NDOF_ROTZ_INVERT_AXIS) ? -1.0f : 1.0f);
|
||||
|
||||
return angle;
|
||||
const blender::float3 rvec = WM_event_ndof_rotation_get_for_navigation(ndof);
|
||||
return normalize_v3_v3(axis, rvec);
|
||||
}
|
||||
|
||||
void WM_event_ndof_to_quat(const wmNDOFMotionData &ndof, float q[4])
|
||||
float WM_event_ndof_rotation_get_axis_angle(const wmNDOFMotionData &ndof, float axis[3])
|
||||
{
|
||||
float axis[3];
|
||||
float angle;
|
||||
|
||||
angle = WM_event_ndof_to_axis_angle(ndof, axis);
|
||||
axis_angle_to_quat(q, axis, angle);
|
||||
const blender::float3 rvec = WM_event_ndof_rotation_get(ndof);
|
||||
return normalize_v3_v3(axis, rvec);
|
||||
}
|
||||
|
||||
#endif /* WITH_INPUT_NDOF */
|
||||
|
||||
/** \} */
|
||||
|
||||
Reference in New Issue
Block a user