diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:17:24 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:21:24 +0300 |
commit | e12c08e8d170b7ca40f204a5b0423c23a9fbc2c1 (patch) | |
tree | 8cf3453d12edb177a218ef8009357518ec6cab6a /source/blender/editors/space_view3d/view3d_camera_control.c | |
parent | b3dabc200a4b0399ec6b81f2ff2730d07b44fcaa (diff) |
ClangFormat: apply to source, most of intern
Apply clang format as proposed in T53211.
For details on usage and instructions for migrating branches
without conflicts, see:
https://wiki.blender.org/wiki/Tools/ClangFormat
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_camera_control.c')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_camera_control.c | 428 |
1 files changed, 209 insertions, 219 deletions
diff --git a/source/blender/editors/space_view3d/view3d_camera_control.c b/source/blender/editors/space_view3d/view3d_camera_control.c index 3f7356de465..c8059c25e15 100644 --- a/source/blender/editors/space_view3d/view3d_camera_control.c +++ b/source/blender/editors/space_view3d/view3d_camera_control.c @@ -51,287 +51,277 @@ #include "ED_screen.h" -#include "view3d_intern.h" /* own include */ +#include "view3d_intern.h" /* own include */ #include "BLI_strict_flags.h" - typedef struct View3DCameraControl { - /* -------------------------------------------------------------------- */ - /* Context (assign these to vars before use) */ - Scene *ctx_scene; - View3D *ctx_v3d; - RegionView3D *ctx_rv3d; - - - /* -------------------------------------------------------------------- */ - /* internal vars */ + /* -------------------------------------------------------------------- */ + /* Context (assign these to vars before use) */ + Scene *ctx_scene; + View3D *ctx_v3d; + RegionView3D *ctx_rv3d; - /* for parenting calculation */ - float view_mat_prev[4][4]; + /* -------------------------------------------------------------------- */ + /* internal vars */ + /* for parenting calculation */ + float view_mat_prev[4][4]; - /* -------------------------------------------------------------------- */ - /* optional capabilities */ + /* -------------------------------------------------------------------- */ + /* optional capabilities */ - bool use_parent_root; + bool use_parent_root; + /* -------------------------------------------------------------------- */ + /* initial values */ - /* -------------------------------------------------------------------- */ - /* initial values */ + /* root most parent */ + Object *root_parent; - /* root most parent */ - Object *root_parent; + /* backup values */ + float dist_backup; + /* backup the views distance since we use a zero dist for fly mode */ + float ofs_backup[3]; + /* backup the views offset in case the user cancels flying in non camera mode */ - /* backup values */ - float dist_backup; - /* backup the views distance since we use a zero dist for fly mode */ - float ofs_backup[3]; - /* backup the views offset in case the user cancels flying in non camera mode */ + /* backup the views quat in case the user cancels flying in non camera mode. + * (quat for view, eul for camera) */ + float rot_backup[4]; + /* remember if were ortho or not, only used for restoring the view if it was a ortho view */ + char persp_backup; - /* backup the views quat in case the user cancels flying in non camera mode. - * (quat for view, eul for camera) */ - float rot_backup[4]; - /* remember if were ortho or not, only used for restoring the view if it was a ortho view */ - char persp_backup; + /* are we flying an ortho camera in perspective view, + * which was originally in ortho view? + * could probably figure it out but better be explicit */ + bool is_ortho_cam; - /* are we flying an ortho camera in perspective view, - * which was originally in ortho view? - * could probably figure it out but better be explicit */ - bool is_ortho_cam; - - /* backup the objects transform */ - void *obtfm; + /* backup the objects transform */ + void *obtfm; } View3DCameraControl; - BLI_INLINE Object *view3d_cameracontrol_object(View3DCameraControl *vctrl) { - return vctrl->root_parent ? vctrl->root_parent : vctrl->ctx_v3d->camera; + return vctrl->root_parent ? vctrl->root_parent : vctrl->ctx_v3d->camera; } - /** * Returns the object which is being manipulated or NULL. */ Object *ED_view3d_cameracontrol_object_get(View3DCameraControl *vctrl) { - RegionView3D *rv3d = vctrl->ctx_rv3d; - - if (rv3d->persp == RV3D_CAMOB) { - return view3d_cameracontrol_object(vctrl); - } - else { - return NULL; - } + RegionView3D *rv3d = vctrl->ctx_rv3d; + + if (rv3d->persp == RV3D_CAMOB) { + return view3d_cameracontrol_object(vctrl); + } + else { + return NULL; + } } - /** * Creates a #View3DCameraControl handle and sets up * the view for first-person style navigation. */ -struct View3DCameraControl *ED_view3d_cameracontrol_acquire( - Depsgraph *depsgraph, Scene *scene, View3D *v3d, RegionView3D *rv3d, - const bool use_parent_root) +struct View3DCameraControl *ED_view3d_cameracontrol_acquire(Depsgraph *depsgraph, + Scene *scene, + View3D *v3d, + RegionView3D *rv3d, + const bool use_parent_root) { - View3DCameraControl *vctrl; - - vctrl = MEM_callocN(sizeof(View3DCameraControl), __func__); - - /* Store context */ - vctrl->ctx_scene = scene; - vctrl->ctx_v3d = v3d; - vctrl->ctx_rv3d = rv3d; - - vctrl->use_parent_root = use_parent_root; - - vctrl->persp_backup = rv3d->persp; - vctrl->dist_backup = rv3d->dist; - - /* check for flying ortho camera - which we cant support well - * we _could_ also check for an ortho camera but this is easier */ - if ((rv3d->persp == RV3D_CAMOB) && - (rv3d->is_persp == false)) - { - ((Camera *)v3d->camera->data)->type = CAM_PERSP; - vctrl->is_ortho_cam = true; - } - - if (rv3d->persp == RV3D_CAMOB) { - Object *ob_back; - if (use_parent_root && (vctrl->root_parent = v3d->camera->parent)) { - while (vctrl->root_parent->parent) { - vctrl->root_parent = vctrl->root_parent->parent; - } - ob_back = vctrl->root_parent; - } - else { - ob_back = v3d->camera; - } - - /* store the original camera loc and rot */ - vctrl->obtfm = BKE_object_tfm_backup(ob_back); - - BKE_object_where_is_calc(depsgraph, scene, v3d->camera); - negate_v3_v3(rv3d->ofs, v3d->camera->obmat[3]); - - rv3d->dist = 0.0; - } - else { - /* perspective or ortho */ - if (rv3d->persp == RV3D_ORTHO) { - /* if ortho projection, make perspective */ - rv3d->persp = RV3D_PERSP; - } - - copy_qt_qt(vctrl->rot_backup, rv3d->viewquat); - copy_v3_v3(vctrl->ofs_backup, rv3d->ofs); - - /* the dist defines a vector that is infront of the offset - * to rotate the view about. - * this is no good for fly mode because we - * want to rotate about the viewers center. - * but to correct the dist removal we must - * alter offset so the view doesn't jump. */ - - ED_view3d_distance_set(rv3d, 0.0f); - /* Done with correcting for the dist */ - } - - ED_view3d_to_m4(vctrl->view_mat_prev, rv3d->ofs, rv3d->viewquat, rv3d->dist); - - return vctrl; + View3DCameraControl *vctrl; + + vctrl = MEM_callocN(sizeof(View3DCameraControl), __func__); + + /* Store context */ + vctrl->ctx_scene = scene; + vctrl->ctx_v3d = v3d; + vctrl->ctx_rv3d = rv3d; + + vctrl->use_parent_root = use_parent_root; + + vctrl->persp_backup = rv3d->persp; + vctrl->dist_backup = rv3d->dist; + + /* check for flying ortho camera - which we cant support well + * we _could_ also check for an ortho camera but this is easier */ + if ((rv3d->persp == RV3D_CAMOB) && (rv3d->is_persp == false)) { + ((Camera *)v3d->camera->data)->type = CAM_PERSP; + vctrl->is_ortho_cam = true; + } + + if (rv3d->persp == RV3D_CAMOB) { + Object *ob_back; + if (use_parent_root && (vctrl->root_parent = v3d->camera->parent)) { + while (vctrl->root_parent->parent) { + vctrl->root_parent = vctrl->root_parent->parent; + } + ob_back = vctrl->root_parent; + } + else { + ob_back = v3d->camera; + } + + /* store the original camera loc and rot */ + vctrl->obtfm = BKE_object_tfm_backup(ob_back); + + BKE_object_where_is_calc(depsgraph, scene, v3d->camera); + negate_v3_v3(rv3d->ofs, v3d->camera->obmat[3]); + + rv3d->dist = 0.0; + } + else { + /* perspective or ortho */ + if (rv3d->persp == RV3D_ORTHO) { + /* if ortho projection, make perspective */ + rv3d->persp = RV3D_PERSP; + } + + copy_qt_qt(vctrl->rot_backup, rv3d->viewquat); + copy_v3_v3(vctrl->ofs_backup, rv3d->ofs); + + /* the dist defines a vector that is infront of the offset + * to rotate the view about. + * this is no good for fly mode because we + * want to rotate about the viewers center. + * but to correct the dist removal we must + * alter offset so the view doesn't jump. */ + + ED_view3d_distance_set(rv3d, 0.0f); + /* Done with correcting for the dist */ + } + + ED_view3d_to_m4(vctrl->view_mat_prev, rv3d->ofs, rv3d->viewquat, rv3d->dist); + + return vctrl; } - /** * Updates cameras from the ``rv3d`` values, optionally auto-keyframing. */ -void ED_view3d_cameracontrol_update( - View3DCameraControl *vctrl, - /* args for keyframing */ - const bool use_autokey, - struct bContext *C, const bool do_rotate, const bool do_translate) +void ED_view3d_cameracontrol_update(View3DCameraControl *vctrl, + /* args for keyframing */ + const bool use_autokey, + struct bContext *C, + const bool do_rotate, + const bool do_translate) { - /* we are in camera view so apply the view ofs and quat to the view matrix and set the camera - * to the view */ + /* we are in camera view so apply the view ofs and quat to the view matrix and set the camera + * to the view */ - Scene *scene = vctrl->ctx_scene; - View3D *v3d = vctrl->ctx_v3d; - RegionView3D *rv3d = vctrl->ctx_rv3d; + Scene *scene = vctrl->ctx_scene; + View3D *v3d = vctrl->ctx_v3d; + RegionView3D *rv3d = vctrl->ctx_rv3d; - ID *id_key; + ID *id_key; - /* transform the parent or the camera? */ - if (vctrl->root_parent) { - Object *ob_update; + /* transform the parent or the camera? */ + if (vctrl->root_parent) { + Object *ob_update; - float view_mat[4][4]; - float prev_view_imat[4][4]; - float diff_mat[4][4]; - float parent_mat[4][4]; + float view_mat[4][4]; + float prev_view_imat[4][4]; + float diff_mat[4][4]; + float parent_mat[4][4]; - invert_m4_m4(prev_view_imat, vctrl->view_mat_prev); - ED_view3d_to_m4(view_mat, rv3d->ofs, rv3d->viewquat, rv3d->dist); - mul_m4_m4m4(diff_mat, view_mat, prev_view_imat); - mul_m4_m4m4(parent_mat, diff_mat, vctrl->root_parent->obmat); + invert_m4_m4(prev_view_imat, vctrl->view_mat_prev); + ED_view3d_to_m4(view_mat, rv3d->ofs, rv3d->viewquat, rv3d->dist); + mul_m4_m4m4(diff_mat, view_mat, prev_view_imat); + mul_m4_m4m4(parent_mat, diff_mat, vctrl->root_parent->obmat); - BKE_object_apply_mat4(vctrl->root_parent, parent_mat, true, false); + BKE_object_apply_mat4(vctrl->root_parent, parent_mat, true, false); - ob_update = v3d->camera->parent; - while (ob_update) { - DEG_id_tag_update(&ob_update->id, ID_RECALC_TRANSFORM); - ob_update = ob_update->parent; - } + ob_update = v3d->camera->parent; + while (ob_update) { + DEG_id_tag_update(&ob_update->id, ID_RECALC_TRANSFORM); + ob_update = ob_update->parent; + } - copy_m4_m4(vctrl->view_mat_prev, view_mat); + copy_m4_m4(vctrl->view_mat_prev, view_mat); - id_key = &vctrl->root_parent->id; - } - else { - float view_mat[4][4]; - float scale_mat[4][4]; - float scale_back[3]; + id_key = &vctrl->root_parent->id; + } + else { + float view_mat[4][4]; + float scale_mat[4][4]; + float scale_back[3]; - /* even though we handle the scale matrix, this still changes over time */ - copy_v3_v3(scale_back, v3d->camera->scale); + /* even though we handle the scale matrix, this still changes over time */ + copy_v3_v3(scale_back, v3d->camera->scale); - ED_view3d_to_m4(view_mat, rv3d->ofs, rv3d->viewquat, rv3d->dist); - size_to_mat4(scale_mat, v3d->camera->scale); - mul_m4_m4m4(view_mat, view_mat, scale_mat); + ED_view3d_to_m4(view_mat, rv3d->ofs, rv3d->viewquat, rv3d->dist); + size_to_mat4(scale_mat, v3d->camera->scale); + mul_m4_m4m4(view_mat, view_mat, scale_mat); - BKE_object_apply_mat4(v3d->camera, view_mat, true, true); + BKE_object_apply_mat4(v3d->camera, view_mat, true, true); - DEG_id_tag_update(&v3d->camera->id, ID_RECALC_TRANSFORM); + DEG_id_tag_update(&v3d->camera->id, ID_RECALC_TRANSFORM); - copy_v3_v3(v3d->camera->scale, scale_back); + copy_v3_v3(v3d->camera->scale, scale_back); - id_key = &v3d->camera->id; - } + id_key = &v3d->camera->id; + } - /* record the motion */ - if (use_autokey) { - ED_view3d_camera_autokey(scene, id_key, C, do_rotate, do_translate); - } + /* record the motion */ + if (use_autokey) { + ED_view3d_camera_autokey(scene, id_key, C, do_rotate, do_translate); + } } - /** * Release view control. * * \param restore: Sets the view state to the values that were set * before #ED_view3d_control_acquire was called. */ -void ED_view3d_cameracontrol_release( - View3DCameraControl *vctrl, - const bool restore) +void ED_view3d_cameracontrol_release(View3DCameraControl *vctrl, const bool restore) { - View3D *v3d = vctrl->ctx_v3d; - RegionView3D *rv3d = vctrl->ctx_rv3d; - - if (restore) { - /* Revert to original view? */ - if (vctrl->persp_backup == RV3D_CAMOB) { /* a camera view */ - Object *ob_back = view3d_cameracontrol_object(vctrl); - - /* store the original camera loc and rot */ - BKE_object_tfm_restore(ob_back, vctrl->obtfm); - - DEG_id_tag_update(&ob_back->id, ID_RECALC_TRANSFORM); - } - else { - /* Non Camera we need to reset the view back - * to the original location because the user canceled. */ - copy_qt_qt(rv3d->viewquat, vctrl->rot_backup); - rv3d->persp = vctrl->persp_backup; - } - /* always, is set to zero otherwise */ - copy_v3_v3(rv3d->ofs, vctrl->ofs_backup); - rv3d->dist = vctrl->dist_backup; - } - else if (vctrl->persp_backup == RV3D_CAMOB) { /* camera */ - DEG_id_tag_update((ID *)view3d_cameracontrol_object(vctrl), ID_RECALC_TRANSFORM); - - /* always, is set to zero otherwise */ - copy_v3_v3(rv3d->ofs, vctrl->ofs_backup); - rv3d->dist = vctrl->dist_backup; - } - else { /* not camera */ - /* Apply the fly mode view */ - /* restore the dist */ - ED_view3d_distance_set(rv3d, vctrl->dist_backup); - /* Done with correcting for the dist */ - } - - if (vctrl->is_ortho_cam) { - ((Camera *)v3d->camera->data)->type = CAM_ORTHO; - } - - if (vctrl->obtfm) { - MEM_freeN(vctrl->obtfm); - } - - MEM_freeN(vctrl); + View3D *v3d = vctrl->ctx_v3d; + RegionView3D *rv3d = vctrl->ctx_rv3d; + + if (restore) { + /* Revert to original view? */ + if (vctrl->persp_backup == RV3D_CAMOB) { /* a camera view */ + Object *ob_back = view3d_cameracontrol_object(vctrl); + + /* store the original camera loc and rot */ + BKE_object_tfm_restore(ob_back, vctrl->obtfm); + + DEG_id_tag_update(&ob_back->id, ID_RECALC_TRANSFORM); + } + else { + /* Non Camera we need to reset the view back + * to the original location because the user canceled. */ + copy_qt_qt(rv3d->viewquat, vctrl->rot_backup); + rv3d->persp = vctrl->persp_backup; + } + /* always, is set to zero otherwise */ + copy_v3_v3(rv3d->ofs, vctrl->ofs_backup); + rv3d->dist = vctrl->dist_backup; + } + else if (vctrl->persp_backup == RV3D_CAMOB) { /* camera */ + DEG_id_tag_update((ID *)view3d_cameracontrol_object(vctrl), ID_RECALC_TRANSFORM); + + /* always, is set to zero otherwise */ + copy_v3_v3(rv3d->ofs, vctrl->ofs_backup); + rv3d->dist = vctrl->dist_backup; + } + else { /* not camera */ + /* Apply the fly mode view */ + /* restore the dist */ + ED_view3d_distance_set(rv3d, vctrl->dist_backup); + /* Done with correcting for the dist */ + } + + if (vctrl->is_ortho_cam) { + ((Camera *)v3d->camera->data)->type = CAM_ORTHO; + } + + if (vctrl->obtfm) { + MEM_freeN(vctrl->obtfm); + } + + MEM_freeN(vctrl); } |