Merge branch 'blender-v4.5-release'

This commit is contained in:
Campbell Barton
2025-06-21 16:43:46 +10:00
6 changed files with 21 additions and 27 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;

View File

@@ -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

View File

@@ -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 */
/** \} */