Fix T99653: "Align Active Camera to Selected" fails with ortho camera

There were two bugs, a regression in [0] and the object-data wasn't
tagged for depsgraph updating.

[0]: 19df0e3cfd
This commit is contained in:
Campbell Barton 2022-07-13 16:18:14 +10:00
parent 8f543a73ab
commit 9422627155
Notes: blender-bot 2023-02-14 00:06:52 +01:00
Referenced by issue #99653, Orthographic Camera not aligned when using `Align Active Camera to Selected`
Referenced by issue #98661, 3.2: Potential candidates for corrective releases
2 changed files with 12 additions and 9 deletions

View File

@ -622,15 +622,13 @@ static void camera_frame_fit_data_init(const Scene *scene,
invert_m4(camera_rotmat_transposed_inversed);
/* Extract frustum planes from projection matrix. */
planes_from_projmat(
params->winmat,
/* left right top bottom near far */
data->plane_tx[2],
data->plane_tx[0],
data->plane_tx[3],
data->plane_tx[1],
NULL,
NULL);
planes_from_projmat(params->winmat,
data->plane_tx[2],
data->plane_tx[0],
data->plane_tx[1],
data->plane_tx[3],
NULL,
NULL);
/* Rotate planes and get normals from them */
for (uint i = 0; i < CAMERA_VIEWFRAME_NUM_PLANES; i++) {

View File

@ -1492,10 +1492,12 @@ static bool view3d_camera_to_view_selected_impl(struct Main *bmain,
depsgraph, scene, camera_ob_eval, co, &scale, r_clip_start, r_clip_end)) {
ObjectTfmProtectedChannels obtfm;
float obmat_new[4][4];
bool is_ortho_camera = false;
if ((camera_ob_eval->type == OB_CAMERA) &&
(((Camera *)camera_ob_eval->data)->type == CAM_ORTHO)) {
((Camera *)camera_ob->data)->ortho_scale = scale;
is_ortho_camera = true;
}
copy_m4_m4(obmat_new, camera_ob_eval->obmat);
@ -1508,6 +1510,9 @@ static bool view3d_camera_to_view_selected_impl(struct Main *bmain,
/* notifiers */
DEG_id_tag_update_ex(bmain, &camera_ob->id, ID_RECALC_TRANSFORM);
if (is_ortho_camera) {
DEG_id_tag_update_ex(bmain, camera_ob->data, ID_RECALC_PARAMETERS);
}
return true;
}