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:
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
|
@ -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++) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue